diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp
index 76c5cb623..ee1095837 100644
--- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp
+++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp
@@ -1020,12 +1020,25 @@ void Instance::Private::sendRequest(
 	const auto signedDcId = toMainDc ? -realShiftedDcId : realShiftedDcId;
 	registerRequest(requestId, signedDcId);
 
-	if (afterRequestId) {
-		request->after = getRequest(afterRequestId);
-	}
 	request->lastSentTime = crl::now();
 	request->needsLayer = needsLayer;
 
+	if (afterRequestId) {
+		request->after = getRequest(afterRequestId);
+
+		if (request->after) {
+			// Check if this after request is waiting in _dependentRequests.
+			// This happens if it was after some other request and failed
+			// to wait for it, but that other request is still processed.
+			QMutexLocker locker(&_dependentRequestsLock);
+			const auto i = _dependentRequests.find(afterRequestId);
+			if (i != end(_dependentRequests)) {
+				_dependentRequests.emplace(requestId, afterRequestId);
+				return;
+			}
+		}
+	}
+
 	session->sendPrepared(request, msCanWait);
 }