diff --git a/src/emerge.cpp b/src/emerge.cpp
index b188a7f413986e2b4022fca838836f8c1a28d1cf..ccb4c1703554341f0b87a8475514761a0a9baabe 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -292,14 +292,18 @@ bool EmergeManager::enqueueBlockEmergeEx(
 	void *callback_param)
 {
 	EmergeThread *thread = NULL;
+	bool entry_already_exists = false;
 
 	{
 		MutexAutoLock queuelock(m_queue_mutex);
 
 		if (!pushBlockEmergeData(blockpos, peer_id, flags,
-				callback, callback_param))
+				callback, callback_param, &entry_already_exists))
 			return false;
 
+		if (entry_already_exists)
+			return true;
+
 		thread = getOptimalThread();
 		thread->pushBlock(blockpos);
 	}
@@ -382,7 +386,8 @@ bool EmergeManager::pushBlockEmergeData(
 	u16 peer_requested,
 	u16 flags,
 	EmergeCompletionCallback callback,
-	void *callback_param)
+	void *callback_param,
+	bool *entry_already_exists)
 {
 	u16 &count_peer = m_peer_queue_count[peer_requested];
 
@@ -402,12 +407,12 @@ bool EmergeManager::pushBlockEmergeData(
 	findres = m_blocks_enqueued.insert(std::make_pair(pos, BlockEmergeData()));
 
 	BlockEmergeData &bedata = findres.first->second;
-	bool update_existing    = !findres.second;
+	*entry_already_exists   = !findres.second;
 
 	if (callback)
 		bedata.callbacks.push_back(std::make_pair(callback, callback_param));
 
-	if (update_existing) {
+	if (*entry_already_exists) {
 		bedata.flags |= flags;
 	} else {
 		bedata.flags = flags;
diff --git a/src/emerge.h b/src/emerge.h
index a143b660ff3646a6127234cdab9da38f2dd74cf0..02bdf7e672de1bfc4ef58e41dd3f8df5f3bf3aad 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -159,8 +159,15 @@ class EmergeManager {
 
 	// Requires m_queue_mutex held
 	EmergeThread *getOptimalThread();
-	bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags,
-		EmergeCompletionCallback callback, void *callback_param);
+
+	bool pushBlockEmergeData(
+		v3s16 pos,
+		u16 peer_requested,
+		u16 flags,
+		EmergeCompletionCallback callback,
+		void *callback_param,
+		bool *entry_already_exists);
+
 	bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
 
 	friend class EmergeThread;