diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngle.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngle.prefab
index e96d0eac3e5cfb770fabccdfede4488672434d4d..dc6dc4782b2ce432a22a2ecba539c4fc65bcc7ae 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngle.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngle.prefab
@@ -88,7 +88,7 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
@@ -100,9 +100,9 @@ MonoBehaviour:
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
@@ -223,7 +223,7 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
@@ -235,9 +235,9 @@ MonoBehaviour:
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
@@ -358,7 +358,7 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
@@ -370,9 +370,9 @@ MonoBehaviour:
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
@@ -537,9 +537,22 @@ MonoBehaviour:
   m_GameObject: {fileID: 6643637775379894484}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 6643637774878492040}
+  - {fileID: 6643637774014364123}
+  - {fileID: 6643637775318367258}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  - '{3}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &3573135846559875297
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -566,6 +579,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngleCircleLine.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngleCircleLine.prefab
index 3e06c02ae8faf1212c581150b9caebbf3558140f..37a8d3f163ae6291df38b5449123449590d9e9c0 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngleCircleLine.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAngleCircleLine.prefab
@@ -266,9 +266,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 4902928549420802332}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 2655091029813954744}
+  - {fileID: 4452291738773295751}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &7217286308176857857
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -295,7 +306,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &7854085605173747270
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAreaCircle.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAreaCircle.prefab
index 786ac03bba81c7f65a3f30139aad8a565c552a28..b4a33da9552cf5aca6659433a336d3f3fe246438 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAreaCircle.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayAreaCircle.prefab
@@ -265,9 +265,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 7016901710118546043}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 2759995560716152988}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &4444078412922319222
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -294,6 +303,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCircle.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCircle.prefab
index 06f6962d8c0abc383f728d149f21748f65be67b3..80386fcd2c59fc5cd6b9b541a0f293413404cd09 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCircle.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCircle.prefab
@@ -265,9 +265,17 @@ MonoBehaviour:
   m_GameObject: {fileID: 6636443472981757786}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 363367878266426999}
+  StringLabelFormats: []
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-8545268462245846538
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -294,6 +302,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayConeVolume.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayConeVolume.prefab
index 6badc3374e4e2e736aa71e4f229977a7d8e9b3f7..7fa01487c3e7e9a6787384fa23b295fe3848c194 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayConeVolume.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayConeVolume.prefab
@@ -265,9 +265,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 2523593828849809055}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 4325610265215697195}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-1328819392998620038
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -294,6 +303,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCylinderVolume.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCylinderVolume.prefab
index 5c52bc9c186a825bd6cfddb8f5a3bf46bef37e80..c347cdd8cf7083bb37a7c301674f3f3cda5f151f 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCylinderVolume.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayCylinderVolume.prefab
@@ -265,9 +265,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 5287418535931939099}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 6630856054862537504}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &8056345640559627384
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -294,6 +303,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayDistance.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayDistance.prefab
index 770ef54480b67c25cf3dc76c2e8c7f25256eebeb..1ac052b14a46a4257011bf7d06af12f6bec43e97 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayDistance.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayDistance.prefab
@@ -131,9 +131,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 4221381813544557775}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 3246237648589042601}
+  - {fileID: 469060305737786517}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &6775995842619458444
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -160,7 +171,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &6379254425133528592
@@ -231,8 +241,8 @@ MonoBehaviour:
       m_Calls: []
   m_text: A
   m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: e102aafbe9ad5444aa6caf6c496a8c72, type: 2}
-  m_sharedMaterial: {fileID: -2291642635969528081, guid: e102aafbe9ad5444aa6caf6c496a8c72,
+  m_fontAsset: {fileID: 11400000, guid: 3bce71b32a876f54e96869a29b46e150, type: 2}
+  m_sharedMaterial: {fileID: 5290021301827705759, guid: 3bce71b32a876f54e96869a29b46e150,
     type: 2}
   m_fontSharedMaterials: []
   m_fontMaterial: {fileID: 0}
@@ -252,21 +262,21 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
     rgba: 4294967295
-  m_fontSize: 37.3
+  m_fontSize: 32.5
   m_fontSizeBase: 36
   m_fontWeight: 400
   m_enableAutoSizing: 1
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
@@ -367,8 +377,8 @@ MonoBehaviour:
       m_Calls: []
   m_text: A
   m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: e102aafbe9ad5444aa6caf6c496a8c72, type: 2}
-  m_sharedMaterial: {fileID: -2291642635969528081, guid: e102aafbe9ad5444aa6caf6c496a8c72,
+  m_fontAsset: {fileID: 11400000, guid: 3bce71b32a876f54e96869a29b46e150, type: 2}
+  m_sharedMaterial: {fileID: 5290021301827705759, guid: 3bce71b32a876f54e96869a29b46e150,
     type: 2}
   m_fontSharedMaterials: []
   m_fontMaterial: {fileID: 0}
@@ -388,21 +398,21 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
     rgba: 4294967295
-  m_fontSize: 37.3
+  m_fontSize: 32.5
   m_fontSizeBase: 36
   m_fontWeight: 400
   m_enableAutoSizing: 1
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayEqualCircles.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayEqualCircles.prefab
index ecd96e00de9ea7c96b0faa7532d516d79be6c1ba..7575377f150abdc16a7b2a7e57ef6bfde667bf30 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayEqualCircles.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayEqualCircles.prefab
@@ -401,9 +401,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 7523305359074541435}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 2948658129975585178}
+  - {fileID: 4670384714962435475}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-8548468547709009186
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -430,6 +441,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayLine.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayLine.prefab
index ccdbabf5fc0da3a3c3c261c8dbf5b0943a7eed85..c5a7b4fb8a838e53bd73780253a10dd9a2a43967 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayLine.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayLine.prefab
@@ -265,9 +265,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 7510387096843212865}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 5696377050731032053}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &7981125183230312854
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -294,6 +303,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnCircle.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnCircle.prefab
index f44981935bb3f9fd756ae9181a7994f1438e7918..7196255744ed26f63086abc51701ff280df5ce34 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnCircle.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnCircle.prefab
@@ -131,9 +131,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 2115817999818309900}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 7373443337760040373}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-5954085419867829670
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -160,7 +169,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &5265014618439724607
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnLine.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnLine.prefab
index d716e01f047f02bc70ecd3cb0101211e5adb255d..8f2cb679320731338f9336633ed71b803b7e8b5c 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnLine.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOnLine.prefab
@@ -88,7 +88,7 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
@@ -100,9 +100,9 @@ MonoBehaviour:
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
@@ -223,7 +223,7 @@ MonoBehaviour:
   m_spriteAsset: {fileID: 0}
   m_tintAllSprites: 0
   m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: 0
+  m_TextStyleHashCode: -1183493901
   m_overrideHtmlColors: 0
   m_faceColor:
     serializedVersion: 2
@@ -235,9 +235,9 @@ MonoBehaviour:
   m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 0
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 256
-  m_textAlignment: 514
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
   m_lineSpacing: 0
@@ -401,9 +401,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 6050914136827205310}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 8416932638320714506}
+  - {fileID: 3599574990072972372}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-4875952770271437981
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -430,6 +441,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOrthogonalCircleLine.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOrthogonalCircleLine.prefab
index 249206c5ed91b5ed81288e563037fa31391843fc..3aef116a5f37b520099930abaf82b751155264f1 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOrthogonalCircleLine.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayOrthogonalCircleLine.prefab
@@ -401,9 +401,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 8554350198830106250}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 5217577174673142595}
+  - {fileID: 8384968683200090543}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-4766878545130701298
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -430,6 +441,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayParallelLine.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayParallelLine.prefab
index d8f691b1f9cbb2d86721f3b70c062068f4a8a4a1..46c4b32252de636c5e078e613462ae3c1f044408 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayParallelLine.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayParallelLine.prefab
@@ -266,9 +266,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 7510387096843212865}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 5696377050731032053}
+  - {fileID: 2874878903173316411}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &41121149337675280
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -295,7 +306,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &7693994637337906468
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayPoint.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayPoint.prefab
index c96d9e2a61804ed88a145a20bf02aeffead1ede8..a0f3261f2831b8a4c6095645af345bf0935099d7 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayPoint.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayPoint.prefab
@@ -130,9 +130,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 858001163752551619}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 858001164857725563}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-6287292158833946431
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -159,7 +168,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &858001164857725565
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRadius.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRadius.prefab
index 8e4329173adb48938750e35ddd46b552146f85b8..b7073517816449ce40f72757abde8a2405ccf033 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRadius.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRadius.prefab
@@ -130,9 +130,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 2513701074329712390}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 811399006990138641}
+  StringLabelFormats:
+  - 'r: {1}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-497146227597533108
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -159,7 +168,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &8185219527703794732
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRectangleFact.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRectangleFact.prefab
index 99368671ea20c7fc5797d4a113efaf8e00228410..cea3cf5c66a25b20ef35bad78dfe3bd8ef87dc16 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRectangleFact.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRectangleFact.prefab
@@ -673,9 +673,24 @@ MonoBehaviour:
   m_GameObject: {fileID: 8156936215466465834}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 236017584527233354}
+  - {fileID: 1785697637619353122}
+  - {fileID: 7959791220384863301}
+  - {fileID: 6402563570144907913}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  - '{3}'
+  - '{4}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-1221418573146676442
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -702,6 +717,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRightAngle.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRightAngle.prefab
index ee4bf0104f3cb9f320e325d3bbd502ba1724d948..a88dc4564da5d1d9c16fb4225ae1e9f5deab71f6 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRightAngle.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayRightAngle.prefab
@@ -267,9 +267,22 @@ MonoBehaviour:
   m_GameObject: {fileID: 3080888058940174091}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 7526375183334386681}
+  - {fileID: 7111589452609809811}
+  - {fileID: 786183127531855823}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  - '{3}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &4176151758276728228
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -296,7 +309,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &7613847065484003782
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTestFact.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTestFact.prefab
index 996ad40446fd0d0dc143ce872f3924147882b374..884c0b8ca44f5f7134efc3dc00f7bb940e166755 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTestFact.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTestFact.prefab
@@ -129,9 +129,16 @@ MonoBehaviour:
   m_GameObject: {fileID: 2846439484187545958}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText: []
+  StringLabelFormats: []
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &7299521122061085080
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -158,6 +165,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTruncatedConeVolume.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTruncatedConeVolume.prefab
index 369fc8b4132d483f222f901184717133ebe12480..8d1ba7a89f64ff34c0a7c2505b367120fedfdd92 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTruncatedConeVolume.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayTruncatedConeVolume.prefab
@@ -130,9 +130,18 @@ MonoBehaviour:
   m_GameObject: {fileID: 4123133807278660472}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 789128519229516834}
+  StringLabelFormats:
+  - '{0}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &3888340986020047728
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -159,7 +168,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &6234169056530260467
diff --git a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayUnequalCircles.prefab b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayUnequalCircles.prefab
index 9ddddce91ae67b8c2e1a3876cfaff65b83868a4e..0689918f1b725e9a132c58ee6a2a0edccd8a395a 100644
--- a/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayUnequalCircles.prefab
+++ b/Assets/Resources/Prefabs/UI/Icons/FactIcons/DisplayUnequalCircles.prefab
@@ -266,9 +266,20 @@ MonoBehaviour:
   m_GameObject: {fileID: 5769925203401971992}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf, type: 3}
+  m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  FactText:
+  - {fileID: 6694126399850149665}
+  - {fileID: 5654613262439864818}
+  StringLabelFormats:
+  - '{1}'
+  - '{2}'
+  renderer: []
+  Default: {fileID: 0}
+  Selected: {fileID: 0}
+  Hint: {fileID: 0}
+  Solution: {fileID: 0}
 --- !u!114 &-6842305447839815895
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -295,7 +306,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 88f8f222eb0a4a246908bde097a8726e, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  isFavourite: 0
   favoriteDisplayPrefab: {fileID: 2810062559722195091, guid: 0b34469213856774980670de85a7d4a0,
     type: 3}
 --- !u!1 &5984757243279669606
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs
index e6fcadf1ac8741c73f05adcff4aaa471f9464c1f..63cdc1a85b104ffb4d948c96c9c8bd94ab685813 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs
@@ -3,26 +3,45 @@
 using System.Collections.Generic;
 using UnityEngine;
 using System.Collections;
+using TMPro;
 
 /// <summary>
 /// <see cref="Fact.Id"/>/ <c>MonoBehaviour</c> wrapper to be attached to <see cref="Fact.Representation"/>
 /// </summary>
+[DisallowMultipleComponent]
 public class FactObject : MonoBehaviour, ISerializationCallbackReceiver
 {
     /// <summary>
     /// <see cref="Fact.Id"/> to identify arbitrary <see cref="Fact"/> by its <see cref="Fact.Representation"/>
     /// </summary>
-    public string URI;
+    public string URI
+    {
+        get => _URI;
+        set
+        {
+            _Fact = null;
+            _URI = value;
+            ReLabel();
+        }
+    }
+    private string _URI;
 
     /// <summary>
     /// Shorthand and Cache for <see cref="FactOrganizer.AllFacts.TryGetValue(string, out Fact)"/>.
     /// </summary>
-    public Fact Fact { 
-        get {
+    public Fact Fact
+    {
+        get
+        {
             if (_Fact == null) FactOrganizer.AllFacts.TryGetValue(URI, out _Fact);
             return _Fact;
-        } 
-        set { _Fact = value; URI = value.Id; }
+        }
+        set
+        {
+            _Fact = value;
+            _URI = value.Id;
+            ReLabel();
+        }
     }
     private Fact _Fact;
 
@@ -34,32 +53,58 @@ public enum FactMaterials
         Solution = 3,
     }
 
+
+    [SerializeField] private List<TextMeshProUGUI> FactText;
+    [SerializeField] private List<string> StringLabelFormats;
+
+    [NonSerialized]
     public Material[] materials;
     public new Renderer[] renderer;
-    public List<FactObject> cascade;
+    [NonSerialized]
+    private List<FactObject> cascade;
 
     #region Unity Serialization
     public Material Default;
     public Material Selected;
     public Material Hint;
     public Material Solution;
+
     void ISerializationCallbackReceiver.OnBeforeSerialize()
     {
-        if (materials == null)  return;
+        if (FactText == null || FactText.Count() == 0)
+        {
+            FactText = transform
+                .GetComponentsInChildren<TextMeshProUGUI>(includeInactive: true)
+                .ToList();
+        }
+
+        {
+            StringLabelFormats ??= new();
 
-        Default = materials[(int)FactMaterials.Default];
-        Selected = materials[(int)FactMaterials.Selected];
-        Hint = materials[(int)FactMaterials.Hint];
-        Solution = materials[(int)FactMaterials.Solution];
+            int i = Math.Min(FactText.Count(), StringLabelFormats.Count());
+            int end = Math.Max(FactText.Count(), StringLabelFormats.Count());
+            for (; i < end; i++)
+                StringLabelFormats.Add("{" + (i + 1) + "}");
+        }
+
+        if (materials != null)
+        {
+            Default = materials[(int)FactMaterials.Default];
+            Selected = materials[(int)FactMaterials.Selected];
+            Hint = materials[(int)FactMaterials.Hint];
+            Solution = materials[(int)FactMaterials.Solution];
+        }
     }
 
     void ISerializationCallbackReceiver.OnAfterDeserialize()
     {
-        materials = new Material[4];
-        materials[(int)FactMaterials.Default] = Default;
-        materials[(int)FactMaterials.Selected] = Selected;
-        materials[(int)FactMaterials.Hint] = Hint;
-        materials[(int)FactMaterials.Solution] = Solution;
+        {
+            materials = new Material[4];
+            materials[(int)FactMaterials.Default] = Default;
+            materials[(int)FactMaterials.Selected] = Selected;
+            materials[(int)FactMaterials.Hint] = Hint;
+            materials[(int)FactMaterials.Solution] = Solution;
+        }
     }
     #endregion
 
@@ -69,6 +114,26 @@ private void Awake()
         cascade.AddRange(transform.GetComponentsInChildren<FactObject>(includeInactive: true));
     }
 
+    public void ReLabel()
+    {
+        string[] mother_child_labels =
+            new[] { URI }.ShallowCloneAppend(Fact.DependentFactIds)
+            .Select(fid => FactOrganizer.AllFacts[fid].Label)
+            .ToArray();
+
+        string indexoverflow = "{" + mother_child_labels.Length.ToString() + "}";
+
+        for (int i = 0; i < Math.Min(FactText.Count(), StringLabelFormats.Count()); i++)
+        {
+            if (StringLabelFormats[i].Contains(indexoverflow))
+            {
+                Debug.LogWarning("Format contains illegal Argument and will be ignored: " + indexoverflow);
+                continue;
+            }
+            FactText[i].text = string.Format(StringLabelFormats[i], mother_child_labels);
+        }
+    }
+
     public void CascadeForChildren(Action<FactObject> func)
     {
         foreach (FactObject fo in cascade)
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs
index 3cb55aaa06cef8670d61e54d7b44a1641410446d..33e53351c9cb9dfccec087f23340c4d2d53662f3 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs
@@ -62,10 +62,8 @@ protected AbstractAngleFact(string pid1, string pid2, string pid3, float angle,
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Pid1, Pid2, Pid3 };
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Pid1, Pid2, Pid3 };
 
     protected override void RecalculateTransform()
     {
@@ -196,17 +194,6 @@ protected override MMTDeclaration MakeMMTDeclaration()
     protected override string generateLabel()
         => (is_right_angle ? "⊾" : "∠") + Point1.Label + Point2.Label + Point3.Label;
 
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Point1.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Point2.Label;
-        obj.transform.GetChild(2).gameObject.GetComponent<TextMeshProUGUI>().text = Point3.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
-
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(AngleFact f1, AngleFact f2)
         => DependentFactsEquivalent(f1, f2);
@@ -299,18 +286,6 @@ is not OMS // rightAngle Arg0
     protected override string generateLabel()
         => Point1.Label + Point2.Label + Point3.Label + "⊥";
 
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Point1.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Point2.Label;
-        obj.transform.GetChild(2).gameObject.GetComponent<TextMeshProUGUI>().text = Point3.Label;
-
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
-
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(RightAngleFact f1, RightAngleFact f2)
         => DependentFactsEquivalent(f1, f2);
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs
index d2c107f5c9f7fb65ca49359fe39fdbd31ffa125c..271582a3133d51a4a0940e96f84ab9680da77bae 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs
@@ -88,10 +88,8 @@ protected override void RecalculateTransform()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Pid1, Pid2 };
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Pid1, Pid2 };
 }
 
 /// <summary>
@@ -173,16 +171,6 @@ protected override MMTDeclaration MakeMMTDeclaration()
     protected override string generateLabel()
         => "[" + Point1.Label + Point2.Label + "]";
 
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Point1.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Point2.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
-
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(LineFact f1, LineFact f2)
         => DependentFactsEquivalent(f1, f2);
@@ -215,21 +203,16 @@ public RayFact(string pid1, string pid2, FactOrganizer organizer) : base(pid1, p
 
     protected override MMTDeclaration MakeMMTDeclaration()
     {
-        SOMDoc tp = new OMS(MMT_OMS_URI.LineType);
-        SOMDoc df = new OMA(
-            new OMS(MMT_OMS_URI.LineOf),
-            new List<SOMDoc> {
-                new OMS(Pid1),
-                new OMS(Pid2)
+        SOMDoc type = new OMS(MMT_OMS_URI.LineType);
+        SOMDoc defines = 
+            new OMA(
+                new OMS(MMT_OMS_URI.LineOf),
+                new List<SOMDoc> {
+                    new OMS(Pid1),
+                    new OMS(Pid2)
             });
 
-        return new MMTSymbolDeclaration(this.Label, tp, df);
-    }
-
-    protected override void RecalculateTransform()
-    {
-        base.RecalculateTransform();
-        LocalScale = new Vector3(1, 1, 2048);
+        return new MMTSymbolDeclaration(this.Label, type, defines);
     }
 
     /// \copydoc Fact.parseFact(ScrollFact)
@@ -248,23 +231,20 @@ protected override void RecalculateTransform()
         return new RayFact(pointAUri, pointBUri, fact.@ref.uri, StageStatic.stage.factState);
     }
 
+    protected override void RecalculateTransform()
+    {
+        base.RecalculateTransform();
+        LocalScale = new Vector3(1, 1, 2048);
+    }
+
     /// \copydoc Fact.generateLabel
     protected override string generateLabel()
     {
         // TODO this string is too large to properly depict on scrolls. 
-        // return "]" + _Facts[Pid1].Label + _Facts[Pid2].Label + "[";
+        // return "]" + Point1.Label + Point2.Label + "[";
         return Point1.Label + Point2.Label;
     }
 
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = this.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
-
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(RayFact f1, RayFact f2)
     {
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs
index caf46bc78debbb8d1bdc90843bcb0b0e6c95f29b..1a4221f9a4f322e44ff344ae974f4f0827974d75 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs
@@ -4,43 +4,58 @@
 using UnityEngine.Networking;
 using TMPro;
 using Newtonsoft.Json;
-using static SOMDocManager;
-using static CommunicationEvents;
 using JsonSubTypes;
 using System.Linq;
-using MoreLinq;
+using static SOMDocManager;
 
-public class ParsingDictionary
+public static class ParsingDictionary
 {
     //TODO? get rid of this, use reflection? instead, if possible
     //TODO: docu
 
-    //public static Dictionary<string, Func<ScrollFact, Fact>> parseFactDictionary = new Dictionary<string, Func<ScrollFact, Fact>>() {
     public static Dictionary<string, Func<MMTDeclaration, Fact>> parseFactDictionary = new() {
-        {SOMDocManager.MMT_OMS_URI.Point, PointFact.parseFact},
-        {SOMDocManager.MMT_OMS_URI.Metric, LineFact.parseFact},
-        {SOMDocManager.MMT_OMS_URI.Angle, AngleFact.parseFact},
-        {SOMDocManager.MMT_OMS_URI.LineType, RayFact.parseFact},
-        {SOMDocManager.MMT_OMS_URI.LineOf, RayFact.parseFact},
-        {SOMDocManager.MMT_OMS_URI.OnLine, OnLineFact.parseFact},
-        //90Degree-Angle
-        {SOMDocManager.MMT_OMS_URI.Eq, AngleFact.parseFact},
-        //Parallel-LineFact
-        {SOMDocManager.MMT_OMS_URI.ParallelLine, ParallelLineFact.parseFact},
-        //CircleFact
-        {SOMDocManager.MMT_OMS_URI.CircleType3d, CircleFact.parseFact},
-        {SOMDocManager.MMT_OMS_URI.OnCircle, OnCircleFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.AnglePlaneLine, AngleCircleLineFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.RadiusCircleMetric, RadiusFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.AreaCircle, AreaCircleFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.OrthoCircleLine, OrthogonalCircleLineFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.VolumeCone, ConeVolumeFact.parseFact  },
-        {SOMDocManager.MMT_OMS_URI.TruncatedVolumeCone ,TruncatedConeVolumeFact.parseFact  },
-        {SOMDocManager.MMT_OMS_URI.RightAngle, RightAngleFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.CylinderVolume, CylinderVolumeFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.TestType, TestFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.EqualityCircles, EqualCirclesFact.parseFact },
-        {SOMDocManager.MMT_OMS_URI.UnEqualityCircles, UnEqualCirclesFact.parseFact }
+        { MMT_OMS_URI.Point,
+            PointFact.parseFact },
+        { MMT_OMS_URI.Metric,
+            LineFact.parseFact },
+        { MMT_OMS_URI.Angle,
+            AngleFact.parseFact },
+        { MMT_OMS_URI.Eq,
+            AngleFact.parseFact },
+        { MMT_OMS_URI.RightAngle,
+            RightAngleFact.parseFact },
+        { MMT_OMS_URI.LineType,
+            RayFact.parseFact },
+        { MMT_OMS_URI.LineOf,
+            RayFact.parseFact },
+        { MMT_OMS_URI.OnLine,
+            OnLineFact.parseFact },
+        { MMT_OMS_URI.ParallelLine,
+            ParallelLineFact.parseFact },
+        { MMT_OMS_URI.CircleType3d,
+            CircleFact.parseFact },
+        { MMT_OMS_URI.OnCircle,
+            OnCircleFact.parseFact },
+        { MMT_OMS_URI.AnglePlaneLine,
+            AngleCircleLineFact.parseFact },
+        { MMT_OMS_URI.RadiusCircleMetric,
+            RadiusFact.parseFact },
+        { MMT_OMS_URI.AreaCircle,
+            AreaCircleFact.parseFact },
+        { MMT_OMS_URI.OrthoCircleLine,
+            OrthogonalCircleLineFact.parseFact },
+        { MMT_OMS_URI.VolumeCone,
+            ConeVolumeFact.parseFact },
+        { MMT_OMS_URI.TruncatedVolumeCone,
+            TruncatedConeVolumeFact.parseFact },
+        { MMT_OMS_URI.CylinderVolume,
+            CylinderVolumeFact.parseFact },
+        { MMT_OMS_URI.TestType,
+            TestFact.parseFact },
+        { MMT_OMS_URI.EqualityCircles,
+            EqualCirclesFact.parseFact },
+        { MMT_OMS_URI.UnEqualityCircles,
+            UnEqualCirclesFact.parseFact }
     };
 
     // TODO: get rid of this
@@ -74,7 +89,7 @@ public static bool sendAdd(string path, string body, out string uri)
             return false;
         }
 
-        if (VerboseURI)
+        if (CommunicationEvents.VerboseURI)
             Debug.Log("Sending to Server:\n" + body);
 
         //Put constructor parses stringbody to byteArray internally  (goofy workaround)
@@ -99,7 +114,7 @@ public static bool sendAdd(string path, string body, out string uri)
             string answer = www.downloadHandler.text;
             AddFactResponse res = JsonUtility.FromJson<AddFactResponse>(answer);
 
-            if (VerboseURI)
+            if (CommunicationEvents.VerboseURI)
                 Debug.Log("Server added Fact:\n" + res.uri);
 
             uri = res.uri;
@@ -360,17 +375,6 @@ public bool rename(string newLabel)
         }
     }
 
-    /// <summary>
-    /// Initiates a <paramref name="prefab"/> at <paramref name="transform"/> e.g. by setting <see cref="Label"/>.
-    /// </summary>
-    /// <remarks>Does not set <see cref="Representation"/>.</remarks>
-    /// <param name="prefab"><c>GameObject</c> Prefab that will represent this Fact</param>
-    /// <param name="transform"><c>Transform</c> where to initiate <paramref name="prefab"/></param>
-    /// <returns></returns>
-
-    // TODO: set Representation here instead of ...
-    public abstract GameObject instantiateDisplay(GameObject prefab, Transform transform);
-
     protected abstract void RecalculateTransform();
 
     protected abstract MMTDeclaration MakeMMTDeclaration();
@@ -384,7 +388,7 @@ public bool rename(string newLabel)
 
         freeAutoLabel();
 
-        if (VerboseURI)
+        if (CommunicationEvents.VerboseURI)
             Debug.Log("Server removed Fact:\n" + this.Id);
     }
 
@@ -408,7 +412,7 @@ public bool rename(string newLabel)
     /// </summary>
     /// <returns>unique-ish Hash</returns>
     public new virtual int GetHashCode()
-        => GetGetDependentFactIds()
+        => DependentFactIds
             .Select(id => id.GetHashCode())
             .Aggregate((hash1, hash2) => hash1 ^ hash2);
 
@@ -541,14 +545,12 @@ protected override void RecalculateTransform()
     /// Bypasses initialization of new MMT %Fact by using existend URI, _which is not checked for existence_.
     /// <see cref="Normal"/> set to <c>Vector3.up</c>
     /// </summary>
-    /// <param name="a">sets <c>x</c> coordinate of <see cref="Point"/></param>
-    /// <param name="b">sets <c>y</c> coordinate of <see cref="Point"/></param>
-    /// <param name="c">sets <c>z</c> coordinate of <see cref="Point"/></param>
+    /// <param name="point">sets <see cref="Point"/></param>
     /// <param name="uri">MMT URI</param>
     /// <param name="organizer">sets <see cref="Fact._Facts"/></param>
-    public PointFact(float a, float b, float c, string uri, FactOrganizer organizer) : base(organizer)
+    public PointFact(Vector3 point, string uri, FactOrganizer organizer) : base(organizer)
     {
-        this.Point = new Vector3(a, b, c);
+        this.Point = point;
         this.Normal = Vector3.up;
         this._URI = uri;
         _ = this.Label;
@@ -559,32 +561,18 @@ public PointFact(float a, float b, float c, string uri, FactOrganizer organizer)
     {
         if (((MMTSymbolDeclaration)fact).defines is not OMA defines)
             return null;
-
         ParsingDictionary.parseTermsToId.TryAdd(defines.ToString(), fact.@ref.uri);
 
-        float a = ((OMF)defines.arguments[0]).@float;
-        float b = ((OMF)defines.arguments[1]).@float;
-        float c = ((OMF)defines.arguments[2]).@float;
-        return new PointFact(a, b, c, fact.@ref.uri, StageStatic.stage.factState);
+        Vector3 point = (defines.GetLambdaExpression().Compile() as Func<Vector3>)();
+        return new PointFact(point, fact.@ref.uri, StageStatic.stage.factState);
     }
 
     /// \copydoc Fact.hasDependentFacts
     public override bool HasDependentFacts => false;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = this.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { };
 
     /// \copydoc Fact.GetHashCode
     public override int GetHashCode()
@@ -710,20 +698,8 @@ protected override string generateLabel()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Pid, Rid };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Point.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Ray.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Pid, Rid };
 
     protected override bool EquivalentWrapped(OnLineFact f1, OnLineFact f2)
         => DependentFactsEquivalent(f1, f2);
@@ -850,20 +826,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Lid1, Lid2 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Ray1.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Ray2.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Lid1, Lid2 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(ParallelLineFact f1, ParallelLineFact f2)
@@ -1052,22 +1016,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Pid1, Pid2 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Point1.Label;
-
-        // obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = _Facts[this.Lid2].Label;
-
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Pid1, Pid2 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(CircleFact f1, CircleFact f2)
@@ -1161,20 +1111,8 @@ protected override string generateLabel()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Pid, Cid };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Point.Label + "∈" + Circle.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Pid, Cid };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(OnCircleFact c1, OnCircleFact c2)
@@ -1342,20 +1280,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Rid2 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Ray.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1, Rid2 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(AngleCircleLineFact f1, AngleCircleLineFact f2)
@@ -1461,19 +1387,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = "r: " + Circle.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(RadiusFact f1, RadiusFact f2)
@@ -1575,22 +1490,10 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1 };
 
     /// \copydoc Fact.GetHashCode
-    /// is this a problem?
     public override int GetHashCode()
         => base.GetHashCode() ^ A.GetHashCode();
 
@@ -1720,19 +1623,7 @@ protected override MMTDeclaration MakeMMTDeclaration()
 
     /// \copydoc Fact.getDependentFactIds
     protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Pid1 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle.Label + Point.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-
-        return obj;
-    }
+        => new string[] { Cid1, Pid1 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(ConeVolumeFact f1, ConeVolumeFact f2)
@@ -1865,26 +1756,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Lid1 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Ray.Label;
-
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
-
-    /// \copydoc Fact.GetHashCode
-    /// uhhh is this a problem?
-    public override int GetHashCode()
-        => this.Cid1.GetHashCode() ^ this.Lid1.GetHashCode();
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1, Lid1 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(OrthogonalCircleLineFact f1, OrthogonalCircleLineFact f2)
@@ -2018,20 +1891,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Cid2 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle1.Label + Circle2.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1, Cid2 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(TruncatedConeVolumeFact f1, TruncatedConeVolumeFact f2)
@@ -2165,20 +2026,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Cid2, equalCirclesProof };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle1.Label + Circle2.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1, Cid2, equalCirclesProof };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(CylinderVolumeFact f1, CylinderVolumeFact f2)
@@ -2294,20 +2143,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Cid2 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle1.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Circle2.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1, Cid2 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(EqualCirclesFact f1, EqualCirclesFact f2)
@@ -2419,20 +2256,8 @@ protected override MMTDeclaration MakeMMTDeclaration()
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { Cid1, Cid2 };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = Circle1.Label;
-        obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = Circle2.Label;
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { Cid1, Cid2 };
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(UnEqualCirclesFact f1, UnEqualCirclesFact f2)
@@ -2504,41 +2329,22 @@ public TestFact(string backendURI, FactOrganizer organizer) : base(organizer)
         string uri = fact.@ref.uri;
         Debug.Log("TestFact Uri:" + uri);
         return new TestFact(uri, StageStatic.stage.factState);
-
     }
 
     /// \copydoc Fact.generateLabel
-    protected override string generateLabel()
-    {
-
-        return "test";
-    }
+    protected override string generateLabel() 
+        => "test";
 
     /// \copydoc Fact.hasDependentFacts
     public override bool HasDependentFacts => false;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds()
-    {
-        return new string[] { };
-    }
-
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-
-        // obj.transform.GetChild(1).gameObject.GetComponent<TextMeshProUGUI>().text = _Facts[this.Lid2].Label;
-
-        obj.GetComponent<FactWrapper>().Fact = this;
-        return obj;
-    }
+    protected override string[] GetGetDependentFactIds() 
+        => new string[] { };
 
     /// \copydoc Fact.GetHashCode
-    public override int GetHashCode()
-    {
-        return base.GetHashCode();// this.Pid1.GetHashCode() ^ this.Pid2.GetHashCode();
-    }
+    public override int GetHashCode() 
+        => base.GetHashCode();// this.Pid1.GetHashCode() ^ this.Pid2.GetHashCode();
 
     /// \copydoc Fact.Equivalent(Fact, Fact)
     protected override bool EquivalentWrapped(TestFact f1, TestFact f2)
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs
index 30fd3d6b062f51864922a3b8399a9fef537167e0..99686910265f3f2a55bdc96ce3ffb2014cf1929e 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs
@@ -39,20 +39,12 @@ public object[] Call(float t)
         return Function_in.Function(Function_args.Function(new object[] { t }));
     }
 
-    public override bool HasDependentFacts 
+    public override bool HasDependentFacts
         => true;
 
     protected override string[] GetGetDependentFactIds()
         => new[] { func_id, arg_func_id };
 
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        //obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = this.Label;
-        //obj.GetComponent<FactWrapper>().fact = this;
-        return obj;
-    }
-
     protected override bool EquivalentWrapped(FunctionCallFact f1, FunctionCallFact f2)
         => f1.Domain.t_0.IsApproximatelyEqual(f2.Domain.t_0)
         && f1.Domain.t_n.IsApproximatelyEqual(f2.Domain.t_n)
@@ -150,17 +142,12 @@ protected override void RecalculateTransform() { }
     /// \copydoc Fact.parseFact(ScrollFact)
     public new static FunctionFact parseFact(MMTDeclaration fact)
     {// TODO Correctness
-        string uri = fact.@ref.uri;
-        OMA df = (OMA)((MMTSymbolDeclaration)fact).defines;
-
-        if (df == null)
+        if (((MMTSymbolDeclaration)fact).defines is not OMA defines)
             return null;
 
-        string parse_id = df.ToString();
-        if (!ParsingDictionary.parseTermsToId.ContainsKey(parse_id))
-            ParsingDictionary.parseTermsToId[parse_id] = uri;
+        ParsingDictionary.parseTermsToId.TryAdd(defines.ToString(), fact.@ref.uri);
 
-        return new FunctionFact(df, uri, StageStatic.stage.factState);
+        return new FunctionFact(defines, fact.@ref.uri, StageStatic.stage.factState);
     }
 
     /// \copydoc Fact.hasDependentFacts
@@ -175,15 +162,6 @@ protected override string[] GetGetDependentFactIds()
     public override int GetHashCode()
         => Function_expression.GetHashCode();
 
-    /// \copydoc Fact.instantiateDisplay(GameObject, Transform)
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        //obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = this.Label;
-        //obj.GetComponent<FactWrapper>().fact = this;
-        return obj;
-    }
-
     /// \copydoc Fact.EquivalentWrapped
     protected override bool EquivalentWrapped(FunctionFact f1, FunctionFact f2)
         => f1.Function_SOMDoc.Equivalent(f2.Function_SOMDoc);
@@ -236,17 +214,12 @@ protected AttachedPositionFunction(string fid, string[] funcids, string uri, Fac
 
     public new static AttachedPositionFunction parseFact(MMTDeclaration fact)
     {// TODO Correctness
-        string uri = fact.@ref.uri;
-        OMA df = (OMA)((MMTSymbolDeclaration)fact).defines;
-
-        if (df == null)
+        if (((MMTSymbolDeclaration)fact).defines is not OMA defines)
             return null;
 
-        string parse_id = df.ToString();
-        if (!ParsingDictionary.parseTermsToId.ContainsKey(parse_id))
-            ParsingDictionary.parseTermsToId[parse_id] = uri;
+        ParsingDictionary.parseTermsToId.TryAdd(defines.ToString(), fact.@ref.uri);
 
-        return new AttachedPositionFunction(default, default, uri, StageStatic.stage.factState);
+        return new AttachedPositionFunction(default, default, fact.@ref.uri, StageStatic.stage.factState);
     }
 
     public override bool HasDependentFacts
@@ -258,14 +231,6 @@ protected override string[] GetGetDependentFactIds()
     public override int GetHashCode()
         => Fact.GetHashCode() ^ FunctionFacts.GetHashCode();
 
-    public override GameObject instantiateDisplay(GameObject prefab, Transform transform)
-    {
-        var obj = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, transform);
-        //obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = this.Label;
-        //obj.GetComponent<FactWrapper>().fact = this;
-        return obj;
-    }
-
     protected override bool EquivalentWrapped(AttachedPositionFunction f1, AttachedPositionFunction f2)
         => DependentFactsEquivalent(f1, f2);
 
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs
index edc38dcd42155ed146b496158728d30768acc572..cf5b11dae9c9a6bb581b2771e6c6b839eb843def 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs
@@ -109,15 +109,13 @@ void CreateButton(int gid)
         {
             GameObject button = GameObject.Instantiate(GadgetButton, parent: ParentMe.transform);
             button.GetComponent<Image>().sprite = ButtonSprites[gadgets[gid].ButtonIndx];
-            var cache = gameObject.transform.parent.parent as RectTransform;
+            
             (buttons[gid] = button.GetComponent<Button>())
                 .onClick.AddListener(() => ActivateGadget(gid));
         }
 
         buttons = new Button[gadgets.Length];
 
-        //Debug.Log("GadjetsNr: " + gadgets.Length);
-
         for (int i = 0; i < gadgets.Length; i++)
         {
             gadgets[i].Awake();
diff --git a/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs
index 2682c8ccdb30d5035ef5ea9e7e7112a7a2ae48ad..9a4c748f6a8e0b8cfc572dd9579dc6c543b3a07e 100644
--- a/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs
+++ b/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs
@@ -13,11 +13,9 @@ public class LineTool : Gadget
     //Cache for drawing Line
     private readonly Vector3[] LineOrigin = new Vector3[1];
 
-  
  
     public override void _Hit(RaycastHit[] hit)
     {
-       
         if (hit[0].transform.gameObject.layer != LayerMask.NameToLayer("Point"))
             return;
 
diff --git a/Assets/Scripts/InteractionEngine/WorldFactInteraction.cs b/Assets/Scripts/InteractionEngine/WorldFactInteraction.cs
index c5bd69b78c00bc93bc6a2dab5325edd6602a099f..9835baad87bf47c166f172237aef230f3cc6a441 100644
--- a/Assets/Scripts/InteractionEngine/WorldFactInteraction.cs
+++ b/Assets/Scripts/InteractionEngine/WorldFactInteraction.cs
@@ -48,6 +48,8 @@ private void UpdateDisplay()
         }
 
         FactObject factObj = hit.transform.gameObject.GetComponentInChildren<FactObject>();
+        if (factObj == null)
+            hit.transform.gameObject.GetComponentInParent<FactObject>();
 
         if (factObj == null)
         {
@@ -75,7 +77,7 @@ private void InstantiateNewDisplay(FactObject factObj)
             Destroy(currentDisplay);
         Fact fact = FactOrganizer.AllFacts[factObj.URI];
         // TODO: this link to DisplayFacts is not ideal: maybe refactor to SciptableObject or such
-        currentDisplay = fact.instantiateDisplay(DisplayFacts.PrefabDictionary[fact.GetType()], HidingCanvas);
+        currentDisplay = DisplayFacts.InstantiateDisplay(fact, HidingCanvas);
     }
 
     #region Helper
diff --git a/Assets/Scripts/InventoryStuff/DisplayFacts.cs b/Assets/Scripts/InventoryStuff/DisplayFacts.cs
index d68c0d69b35c39362641fa0d7c2266d55c563819..260a1c2baa0238328d66ae9d2053cbb5e02b4807 100644
--- a/Assets/Scripts/InventoryStuff/DisplayFacts.cs
+++ b/Assets/Scripts/InventoryStuff/DisplayFacts.cs
@@ -1,15 +1,12 @@
 using System.Collections.Generic;
 using UnityEngine;
-using TMPro;
 using System;
-using static CommunicationEvents;
 using System.Linq;
 using UnityEngine.UI;
-using System.Collections;
 using MoreLinq;
 using System.ComponentModel;
 using UnityEditor;
-using System.Reflection;
+using static CommunicationEvents;
 
 public class DisplayFacts : MonoBehaviour, ISerializationCallbackReceiver
 {
@@ -94,7 +91,7 @@ public void AddFact(Fact fact)
         int siblingIdx = sortDescending ? 0 : factscreenContent.childCount;
         if (showGrouped)
         {
-            var facts = factscreenContent.GetComponentsInChildren<FactWrapper>().Select(f => f.Fact).ToList();
+            var facts = factscreenContent.GetComponentsInChildren<FactObject>().Select(f => f.Fact).ToList();
             if (!sortDescending)
                 siblingIdx = GetIndexInSortedList(fact, facts);
             else
@@ -117,13 +114,21 @@ public void AddFact(Fact fact)
     }
 
     private GameObject CreateDisplay(Transform transform, Fact fact)
+    {
+        var spot = Instantiate(factSpotPrefab, factscreenContent);
+        return InstantiateDisplay(fact, spot.transform);
+    }
+
+    public static GameObject InstantiateDisplay(Fact fact, Transform transform)
     {
         Type fact_type = fact.GetType();
-        if(fact_type.IsConstructedGenericType)
+        if (fact_type.IsConstructedGenericType)
             fact_type = fact_type.GetGenericTypeDefinition();
 
-        var spot = Instantiate(factSpotPrefab, factscreenContent);
-        return fact.instantiateDisplay(PrefabDictionary[fact_type], spot.transform);
+        var ret = Instantiate(PrefabDictionary[fact_type], transform);
+        ret.GetComponent<FactObject>().Fact = fact;
+
+        return ret;
     }
 
     public void RemoveFact(Fact fact)
@@ -155,8 +160,8 @@ public void GroupingChanged(Toggle t)
 
         var vals = factscreenContent.gameObject.GetDirectChildren();
         var ordered = showGrouped
-            ? vals.OrderBy(tr => tr.GetComponent<FactWrapper>().Fact, new FactTypeComparer()).ToList()
-            : vals.OrderBy(tr => displayedFacts.Keys.ToList().IndexOf(tr.GetComponent<FactWrapper>().Fact.Id)).ToList();
+            ? vals.OrderBy(tr => tr.GetComponent<FactObject>().Fact, new FactTypeComparer()).ToList()
+            : vals.OrderBy(tr => displayedFacts.Keys.ToList().IndexOf(tr.GetComponent<FactObject>().Fact.Id)).ToList();
 
         if (sortDescending)
             ordered.Reverse();
diff --git a/Assets/Scripts/InventoryStuff/DropHandling.cs b/Assets/Scripts/InventoryStuff/DropHandling.cs
index dfc443f06a17349ba2516bd06f9b9254f0e81232..0fea168fd3859328d609597f464aca85fb1c5df7 100644
--- a/Assets/Scripts/InventoryStuff/DropHandling.cs
+++ b/Assets/Scripts/InventoryStuff/DropHandling.cs
@@ -10,7 +10,7 @@ public void OnDrop(PointerEventData eventData)
     {
 
         var scrollFact = gameObject.GetComponent<RenderedScrollFact>();
-        Debug.Log(eventData.pointerDrag.GetComponent<FactWrapper>().Fact.Label + " was dropped on "
+        Debug.Log(eventData.pointerDrag.GetComponent<FactObject>().Fact.Label + " was dropped on "
             + gameObject.name + " " + scrollFact.ID + "/" +
             ScrollDetails.ParameterDisplays.Count + " label: " + scrollFact.Label);
 
@@ -28,8 +28,8 @@ public void OnDrop(PointerEventData eventData)
         rect.anchorMin = new Vector2(0.5f, 0.5f);
         rect.anchorMax = new Vector2(0.5f, 0.5f);
 
-        currentFact = eventData.pointerDrag.GetComponent<FactWrapper>().Fact;
-        current.GetComponent<FactWrapper>().Fact = currentFact;
+        currentFact = eventData.pointerDrag.GetComponent<FactObject>().Fact;
+        current.GetComponent<FactObject>().Fact = currentFact;
         Debug.Log("recieved Fact: " + currentFact.Id);
 
         CommunicationEvents.NewAssignmentEvent.Invoke();
diff --git a/Assets/Scripts/InventoryStuff/FactWrapper.cs b/Assets/Scripts/InventoryStuff/FactWrapper.cs
deleted file mode 100644
index 50d8a485b11db57ca3ba7169689567178130628b..0000000000000000000000000000000000000000
--- a/Assets/Scripts/InventoryStuff/FactWrapper.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using UnityEngine;
-
-public class FactWrapper : MonoBehaviour
-{
-    public Fact Fact
-    {
-        get => _Fact;
-        set
-        {
-            _Fact = value; 
-            ReLabel();
-        }
-    }
-    private Fact _Fact;
-
-    protected void ReLabel()
-    {
-
-    }
-}
-
-public class PointDisplay : FactWrapper
-{
-    //protected override void Relabel() { }
-}
diff --git a/Assets/Scripts/InventoryStuff/FactWrapper.cs.meta b/Assets/Scripts/InventoryStuff/FactWrapper.cs.meta
deleted file mode 100644
index 3cf5d6e7c4bdedb0308bdfcaf3f3edc3025f0d19..0000000000000000000000000000000000000000
--- a/Assets/Scripts/InventoryStuff/FactWrapper.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: ed0bcd3d8d9996d4f86c0a2b8b71c6bf
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/UI/FactExplorer/FactExplorer.cs b/Assets/Scripts/UI/FactExplorer/FactExplorer.cs
index 52776d5a51c7ca00c4d696c076753f162a9a55cd..789f07de1c31e29362d1bb662db848a7f8ce44c2 100644
--- a/Assets/Scripts/UI/FactExplorer/FactExplorer.cs
+++ b/Assets/Scripts/UI/FactExplorer/FactExplorer.cs
@@ -110,12 +110,12 @@ private void SpawnUIFacts(Transform uiParent, List<Fact> toSpawn)
         if (toSpawn.Count == 0)
             uiParent.gameObject.SetActive(false);
 
-        foreach (Fact f in toSpawn)
+        foreach (Fact fact in toSpawn)
         {
             var spot = Instantiate(factSpotPrefab, uiParent);
 
             // TODO: this link to DisplayFacts is not ideal: maybe refactor to SciptableObject or such
-            var display = f.instantiateDisplay(DisplayFacts.PrefabDictionary[f.GetType()], spot.transform);
+            var display = DisplayFacts.InstantiateDisplay(fact, spot.transform);
             display.transform.localPosition = Vector3.zero;
         }
     }
diff --git a/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs b/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs
index ed49702a87451930bb560266a036e9eb6e2f9977..d756607a88189ef841b87a0ab2c365c384ace73d 100644
--- a/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs
+++ b/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs
@@ -4,7 +4,7 @@
 using UnityEngine.Events;
 using UnityEngine.EventSystems;
 
-[RequireComponent(typeof(FactWrapper), typeof(RectTransform))]
+[RequireComponent(typeof(FactObject), typeof(RectTransform))]
 public class FactFavorisation : MonoBehaviour, IPointerClickHandler
 {
     #region InspectorVariables
@@ -50,7 +50,7 @@ private void Update()
 
     private void Start()
     {
-        fact = transform.GetComponent<FactWrapper>().Fact;
+        fact = transform.GetComponent<FactObject>().Fact;
         ChangeFavoriteEvent.AddListener(OnFavoriteChange);
 
         // if there already was a favoriteDisplayPrefab child (e.g. due to cloning) remove it
diff --git a/Assets/Scripts/UI/FactExplorer/OpenFactExplorer.cs b/Assets/Scripts/UI/FactExplorer/OpenFactExplorer.cs
index 169473c6172af9fdb375dc91e4e277658b930f82..e80f7734e564f4a2b060545531b28f5051a3eabc 100644
--- a/Assets/Scripts/UI/FactExplorer/OpenFactExplorer.cs
+++ b/Assets/Scripts/UI/FactExplorer/OpenFactExplorer.cs
@@ -4,7 +4,7 @@
 using UnityEngine;
 using UnityEngine.EventSystems;
 
-[RequireComponent(typeof(FactWrapper), typeof(RectTransform), typeof(DragHandling))]
+[RequireComponent(typeof(FactObject), typeof(RectTransform), typeof(DragHandling))]
 public class OpenFactExplorer : MonoBehaviour, IPointerClickHandler
 {
     #region Variables
@@ -70,7 +70,7 @@ private void DoOpenFactExplorer()
         Destroy(factExplorer != null ? factExplorer.gameObject : null);
 
         var parent = transform.GetComponentInParent<Canvas>().transform;
-        var fact = transform.GetComponent<FactWrapper>().Fact;
+        var fact = transform.GetComponent<FactObject>().Fact;
 
         factExplorer = Instantiate(factExplorerPrefab.transform, Input.mousePosition, Quaternion.identity, parent);
         factExplorer.GetComponent<FactExplorer>().Initialize(fact, transform.position);