diff --git a/packages/model/transactionmetadata/transactionmetadata.go b/packages/model/transactionmetadata/transactionmetadata.go
index 39874a5addf16bd54ed3b9588b98b41d93df3c9f..8ba50c3c26626f204224c9907bcc167ad515235d 100644
--- a/packages/model/transactionmetadata/transactionmetadata.go
+++ b/packages/model/transactionmetadata/transactionmetadata.go
@@ -13,18 +13,20 @@ import (
 // region type definition and constructor //////////////////////////////////////////////////////////////////////////////
 
 type TransactionMetadata struct {
-	hash              ternary.Trytes
-	hashMutex         sync.RWMutex
-	receivedTime      time.Time
-	receivedTimeMutex sync.RWMutex
-	solid             bool
-	solidMutex        sync.RWMutex
-	liked             bool
-	likedMutex        sync.RWMutex
-	finalized         bool
-	finalizedMutex    sync.RWMutex
-	modified          bool
-	modifiedMutex     sync.RWMutex
+	hash                ternary.Trytes
+	hashMutex           sync.RWMutex
+	bundleTailHash      ternary.Trytes
+	bundleTailHashMutex sync.RWMutex
+	receivedTime        time.Time
+	receivedTimeMutex   sync.RWMutex
+	solid               bool
+	solidMutex          sync.RWMutex
+	liked               bool
+	likedMutex          sync.RWMutex
+	finalized           bool
+	finalizedMutex      sync.RWMutex
+	modified            bool
+	modifiedMutex       sync.RWMutex
 }
 
 func New(hash ternary.Trytes) *TransactionMetadata {
@@ -65,6 +67,29 @@ func (metadata *TransactionMetadata) SetHash(hash ternary.Trytes) {
 	}
 }
 
+func (metadata *TransactionMetadata) GetBundleTailHash() ternary.Trytes {
+	metadata.bundleTailHashMutex.RLock()
+	defer metadata.bundleTailHashMutex.RUnlock()
+
+	return metadata.bundleTailHash
+}
+
+func (metadata *TransactionMetadata) SetBundleTailHash(bundleTailHash ternary.Trytes) {
+	metadata.bundleTailHashMutex.RLock()
+	if metadata.bundleTailHash != bundleTailHash {
+		metadata.bundleTailHashMutex.RUnlock()
+		metadata.bundleTailHashMutex.Lock()
+		defer metadata.bundleTailHashMutex.Unlock()
+		if metadata.bundleTailHash != bundleTailHash {
+			metadata.bundleTailHash = bundleTailHash
+
+			metadata.SetModified(true)
+		}
+	} else {
+		metadata.bundleTailHashMutex.RUnlock()
+	}
+}
+
 func (metadata *TransactionMetadata) GetReceivedTime() time.Time {
 	metadata.receivedTimeMutex.RLock()
 	defer metadata.receivedTimeMutex.RUnlock()