diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go
index 9a5f02151a769ded0328f7fe9cfc8da269c76261..26158982caca8548f07f2ec2b69d35856150a053 100644
--- a/packages/binary/messagelayer/tangle/tangle.go
+++ b/packages/binary/messagelayer/tangle/tangle.go
@@ -274,16 +274,25 @@ func (tangle *Tangle) MonitorMissingMessages(shutdownSignal <-chan struct{}) {
 		select {
 		case <-reCheckInterval.C:
 			var toDelete []message.Id
+			var toUnmark []message.Id
 			tangle.missingMessageStorage.ForEach(func(key []byte, cachedObject objectstorage.CachedObject) bool {
 				defer cachedObject.Release()
 				missingMessage := cachedObject.Get().(*MissingMessage)
 
+				if tangle.messageStorage.Contains(missingMessage.messageId.Bytes()) {
+					toUnmark = append(toUnmark, missingMessage.MessageId())
+					return true
+				}
+
 				// check whether message is missing since over our max time delta
 				if time.Since(missingMessage.MissingSince()) >= MaxMissingTimeBeforeCleanup {
 					toDelete = append(toDelete, missingMessage.MessageId())
 				}
 				return true
 			})
+			for _, msgID := range toUnmark {
+				tangle.missingMessageStorage.DeleteIfPresent(msgID.Bytes())
+			}
 			for _, msgID := range toDelete {
 				// delete the future cone of the missing message
 				tangle.Events.MessageUnsolidifiable.Trigger(msgID)
diff --git a/plugins/messagelayer/plugin.go b/plugins/messagelayer/plugin.go
index 5e7cd7d83db0699cfccdd144c5bd7f20d80939ba..8fa819b1510e98701a0755ca7fe7387f0f3ec899 100644
--- a/plugins/messagelayer/plugin.go
+++ b/plugins/messagelayer/plugin.go
@@ -73,6 +73,7 @@ func configure(*node.Plugin) {
 }
 
 func run(*node.Plugin) {
+
 	if err := daemon.BackgroundWorker("Tangle[MissingMessagesMonitor]", func(shutdownSignal <-chan struct{}) {
 		Tangle.MonitorMissingMessages(shutdownSignal)
 	}, shutdown.PriorityMissingMessagesMonitoring); err != nil {