diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go
index d6d844c03eb2432f3dcb2349c68e14e0ae62e478..d750ecbd59f1fd63af673b32456681aaef36e2b9 100644
--- a/packages/binary/messagelayer/tangle/tangle.go
+++ b/packages/binary/messagelayer/tangle/tangle.go
@@ -5,24 +5,15 @@ import (
 	"runtime"
 	"time"
 
-	"github.com/iotaledger/hive.go/kvstore"
-	"github.com/iotaledger/hive.go/types"
-
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/packages/binary/storageprefix"
-
 	"github.com/iotaledger/hive.go/async"
+	"github.com/iotaledger/hive.go/kvstore"
 	"github.com/iotaledger/hive.go/objectstorage"
+	"github.com/iotaledger/hive.go/types"
 )
 
 const (
-	// MaxMissingTimeBeforeCleanup is  the max. amount of time a message can be marked as missing
-	// before it is ultimately un-marked as missing.
-	MaxMissingTimeBeforeCleanup = 30 * time.Second
-	// MissingCheckInterval is the interval on which it is checked whether a missing
-	// message is still missing.
-	MissingCheckInterval = 5 * time.Second
-
 	cacheTime = 20 * time.Second
 )
 
@@ -271,46 +262,6 @@ func (tangle *Tangle) checkMessageSolidityAndPropagate(cachedMessage *message.Ca
 	}
 }
 
-// MonitorMissingMessages continuously monitors for missing messages and eventually deletes them if they
-// don't become available in a certain time frame.
-func (tangle *Tangle) MonitorMissingMessages(shutdownSignal <-chan struct{}) {
-	reCheckInterval := time.NewTicker(MissingCheckInterval)
-	defer reCheckInterval.Stop()
-	for {
-		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)
-				// TODO: obvious race condition between receiving the message and it getting deleted here
-				tangle.deleteFutureCone(msgID)
-			}
-		case <-shutdownSignal:
-			return
-		}
-	}
-}
-
 // deletes the given approver association for the given approvee to its approver.
 func (tangle *Tangle) deleteApprover(approvedMessageId message.Id, approvingMessage message.Id) {
 	idToDelete := make([]byte, message.IdLength+message.IdLength)
diff --git a/plugins/messagelayer/plugin.go b/plugins/messagelayer/plugin.go
index 2286db7e2b0b0c4da55d953d8bc9fe719174f65a..504f1977c9c2dad2e03aae58d1cac2b386ff47db 100644
--- a/plugins/messagelayer/plugin.go
+++ b/plugins/messagelayer/plugin.go
@@ -129,13 +129,6 @@ 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 {
-		log.Panicf("Failed to start as daemon: %s", err)
-	}
-
 	if err := daemon.BackgroundWorker("Tangle", func(shutdownSignal <-chan struct{}) {
 		<-shutdownSignal
 		messageFactory.Shutdown()
@@ -144,5 +137,4 @@ func run(*node.Plugin) {
 	}, shutdown.PriorityTangle); err != nil {
 		log.Panicf("Failed to start as daemon: %s", err)
 	}
-
 }