diff --git a/packages/ledgerstate/ledgerstate.go b/packages/ledgerstate/ledgerstate.go
index 2969a41eb218fccb5cc8d67d8ca8dfc1ee4b1a27..2270c86f1a03b9d641d1643ec0a9bdd2cfdbef45 100644
--- a/packages/ledgerstate/ledgerstate.go
+++ b/packages/ledgerstate/ledgerstate.go
@@ -204,6 +204,10 @@ func (ledgerState *LedgerState) GenerateRealityVisualization(pngFilename string)
 				realityNode.Attr("fillcolor", "#DAE8FC")
 			}
 
+			if reality.GetLiked() {
+				realityNode.Attr("penwidth", "3.0")
+			}
+
 			realityNodes[reality.id] = realityNode
 		}
 
diff --git a/packages/ledgerstate/outputs1.png b/packages/ledgerstate/outputs1.png
index b0e8fa0a96f6efa92bb38dc0ae81c0fc6f55832c..fbb292ef06d60e9e6ddf1bf269990516a389fcb7 100644
Binary files a/packages/ledgerstate/outputs1.png and b/packages/ledgerstate/outputs1.png differ
diff --git a/packages/ledgerstate/outputs2.png b/packages/ledgerstate/outputs2.png
index cf0f4eae66fd41ae148f2647d4b21a1f6a7214bd..e179b2b414762ab36539dfaf7cc665670586d5bb 100644
Binary files a/packages/ledgerstate/outputs2.png and b/packages/ledgerstate/outputs2.png differ
diff --git a/packages/ledgerstate/realities1.png b/packages/ledgerstate/realities1.png
index 1bbd7dbd470da4c71f5b47b4a21b743f79bc3f6a..07550192e27c9ec302e2e8dd01d90c3883fd6141 100644
Binary files a/packages/ledgerstate/realities1.png and b/packages/ledgerstate/realities1.png differ
diff --git a/packages/ledgerstate/realities2.png b/packages/ledgerstate/realities2.png
index 7989fa7230e1225473ef0716392f98a766db93b4..f9c9fbd75bff8bbe0a2106a225f2f529ae0c7d0f 100644
Binary files a/packages/ledgerstate/realities2.png and b/packages/ledgerstate/realities2.png differ
diff --git a/packages/ledgerstate/reality.go b/packages/ledgerstate/reality.go
index fc6b085d3909aa03053b30107375b35455e78263..a1ff45dfcc2302f91cf8f85cbad5de8f03eff5e9 100644
--- a/packages/ledgerstate/reality.go
+++ b/packages/ledgerstate/reality.go
@@ -21,6 +21,8 @@ type Reality struct {
 	conflictIds           ConflictIdSet
 	conflictIdsMutex      sync.RWMutex
 	transferOutputCount   uint32
+	liked                 bool
+	likedMutex            sync.RWMutex
 
 	storageKey  []byte
 	ledgerState *LedgerState
@@ -43,6 +45,35 @@ func newReality(id RealityId, parentRealities ...RealityId) *Reality {
 	return result
 }
 
+func (reality *Reality) GetLiked() (liked bool) {
+	reality.likedMutex.RLock()
+	liked = reality.liked
+	reality.likedMutex.RUnlock()
+
+	return
+}
+
+func (reality *Reality) SetLiked(liked ...bool) (likedStatusChanged bool) {
+	newLikedStatus := len(liked) == 0 || liked[0]
+
+	reality.likedMutex.RLock()
+	if reality.liked != newLikedStatus {
+		reality.likedMutex.RUnlock()
+
+		reality.likedMutex.Lock()
+		if reality.liked != newLikedStatus {
+			reality.liked = newLikedStatus
+
+			reality.SetModified()
+		}
+		reality.likedMutex.Unlock()
+	} else {
+		reality.likedMutex.RUnlock()
+	}
+
+	return
+}
+
 // Returns the id of this Reality. Since the id never changes, we do not need a mutex to protect this property.
 func (reality *Reality) GetId() RealityId {
 	return reality.id
@@ -448,6 +479,7 @@ func (reality *Reality) createRealityForPreviouslyUnconflictingConsumers(consume
 		if cachedElevatedReality, realityErr := reality.ledgerState.realities.ComputeIfAbsent(elevatedRealityId[:], func(key []byte) (object objectstorage.StorableObject, e error) {
 			newReality := newReality(elevatedRealityId, reality.id)
 			newReality.ledgerState = reality.ledgerState
+			newReality.SetLiked()
 
 			reality.RegisterSubReality(elevatedRealityId)
 
@@ -527,6 +559,14 @@ func (reality *Reality) elevateTransferOutputOfCurrentReality(transferOutput *Tr
 
 // endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 
+func (reality *Reality) GetSubRealityIdCount() (subRealityIdCount int) {
+	reality.subRealityIdsMutex.RLock()
+	subRealityIdCount = len(reality.subRealityIds)
+	reality.subRealityIdsMutex.RUnlock()
+
+	return
+}
+
 func (reality *Reality) UnregisterSubReality(realityId RealityId) {
 	reality.subRealityIdsMutex.RLock()
 	if _, subRealityIdExists := reality.subRealityIds[realityId]; subRealityIdExists {
@@ -601,10 +641,10 @@ func (reality *Reality) bookTransferOutput(transferOutput *TransferOutput) (err
 				transferOutputReality := object.(*Reality)
 
 				// decrease transferOutputCount and remove reality if it is empty
-				if transferOutputReality.DecreaseTransferOutputCount() == 0 && len(transferOutputReality.subRealityIds) == 0 {
-					for parentRealityId := range transferOutputReality.parentRealityIds {
-						reality.ledgerState.GetReality(parentRealityId).Consume(func(obj objectstorage.StorableObject) {
-							obj.(*Reality).UnregisterSubReality(transferOutputRealityId)
+				if transferOutputReality.DecreaseTransferOutputCount() == 0 && transferOutputReality.GetSubRealityIdCount() == 0 {
+					for _, cachedParentReality := range transferOutputReality.GetParentRealities() {
+						cachedParentReality.Consume(func(parentReality objectstorage.StorableObject) {
+							parentReality.(*Reality).UnregisterSubReality(transferOutputRealityId)
 						})
 					}
 					transferOutputReality.Delete()
diff --git a/packages/ledgerstate/reality.objectstorage.go b/packages/ledgerstate/reality.objectstorage.go
index 6ab58486ed81ccb5d690372a8cfbf9ca2e437ad3..a43ae432b8edf747726eaf19567b0233022d8888 100644
--- a/packages/ledgerstate/reality.objectstorage.go
+++ b/packages/ledgerstate/reality.objectstorage.go
@@ -26,7 +26,7 @@ func (reality *Reality) MarshalBinary() ([]byte, error) {
 	parentRealityCount := len(reality.parentRealityIds)
 	subRealityCount := len(reality.subRealityIds)
 
-	marshaledReality := make([]byte, 4+4+4+parentRealityCount*realityIdLength+subRealityCount*realityIdLength)
+	marshaledReality := make([]byte, 4+4+4+1+parentRealityCount*realityIdLength+subRealityCount*realityIdLength)
 
 	offset := 0
 
@@ -49,6 +49,13 @@ func (reality *Reality) MarshalBinary() ([]byte, error) {
 		offset += realityIdLength
 	}
 
+	if reality.liked {
+		marshaledReality[offset] = 1
+	} else {
+		marshaledReality[offset] = 0
+	}
+	//offset += 1
+
 	reality.parentRealityIdsMutex.RUnlock()
 
 	return marshaledReality, nil
@@ -93,5 +100,8 @@ func (reality *Reality) UnmarshalBinary(serializedObject []byte) error {
 		reality.subRealityIds[restoredRealityId] = void
 	}
 
+	reality.liked = serializedObject[offset] == 1
+	//offset += 1
+
 	return nil
 }