diff --git a/test/unit/PosdbTest.cpp b/test/unit/PosdbTest.cpp
index 09e9f874..6af8207c 100644
--- a/test/unit/PosdbTest.cpp
+++ b/test/unit/PosdbTest.cpp
@@ -24,6 +24,11 @@ static void dumpPosdb() {
 	g_posdb.getRdb()->getBase(0)->generateGlobalIndex();
 }
 
+static void mergePosdb() {
+	g_posdb.getRdb()->getBase(0)->attemptMerge(0, true);
+	g_posdb.getRdb()->getBase(0)->attemptMerge(0, true);
+}
+
 class PosdbNoMergeTest : public ::testing::Test {
 protected:
 	void SetUp() {
@@ -485,3 +490,53 @@ TEST_F(PosdbNoMergeTest, SingleDocSpiderDumpDeleteDumpSpider) {
 
 	EXPECT_TRUE(list.isExhausted());
 }
+
+TEST_F(PosdbNoMergeTest, SingleDocSpiderDumpDeleteDumpSpiderMerging) {
+	static const int64_t docId = 1;
+
+	// first round
+	// doc contains 3 words (a, b, c)
+	GbTest::addPosdbKey(m_rdb, 'a', docId, 0);
+	GbTest::addPosdbKey(m_rdb, 'b', docId, 0);
+	GbTest::addPosdbKey(m_rdb, 'c', docId, 0);
+	GbTest::addPosdbKey(m_rdb, 'z', docId, 0, false, true);
+	dumpPosdb();
+
+	// second round
+	// doc deleted
+	GbTest::addPosdbKey(m_rdb, 'a', docId, 0, true);
+	GbTest::addPosdbKey(m_rdb, 'b', docId, 0, true);
+	GbTest::addPosdbKey(m_rdb, 'c', docId, 0, true);
+	GbTest::addPosdbKey(m_rdb, 'z', docId, 0, true, true);
+	GbTest::addPosdbKey(m_rdb, POSDB_DELETEDOC_TERMID, docId, 0, true);
+	dumpPosdb();
+
+	// third round
+	// doc contains 3 words (d, e, f)
+	GbTest::addPosdbKey(m_rdb, 'd', docId, 0);
+	GbTest::addPosdbKey(m_rdb, 'e', docId, 0);
+	GbTest::addPosdbKey(m_rdb, 'f', docId, 0);
+	GbTest::addPosdbKey(m_rdb, 'y', docId, 0, false, true);
+	GbTest::addPosdbKey(m_rdb, POSDB_DELETEDOC_TERMID, docId, 0, false);
+
+	saveAndReloadPosdbBucket();
+
+	mergePosdb();
+
+	// use extremes
+	const char *startKey = KEYMIN();
+	const char *endKey = KEYMAX();
+
+	Msg5 msg5;
+	RdbList list;
+	ASSERT_TRUE(msg5.getList(RDB_POSDB, 0, &list, startKey, endKey, -1, true, 0, -1, NULL, NULL, 0, false, 0, false));
+	list.resetListPtr();
+
+	// verify that data returned is the same as data inserted above
+	expectRecord(&list, 'd', docId);
+	expectRecord(&list, 'e', docId);
+	expectRecord(&list, 'f', docId);
+	expectRecord(&list, 'y', docId, false, true);
+
+	EXPECT_TRUE(list.isExhausted());
+}
\ No newline at end of file