diff --git a/Assets/Resources/Prefabs/Facts/Triangle.prefab b/Assets/Resources/Prefabs/Facts/Triangle.prefab
index d5b565602e21cabdbc32bddde705601fcd16bceb..4b7d809f3a8362bfe5c143ef7eff697ccab8d48d 100644
--- a/Assets/Resources/Prefabs/Facts/Triangle.prefab
+++ b/Assets/Resources/Prefabs/Facts/Triangle.prefab
@@ -13,7 +13,7 @@ GameObject:
   - component: {fileID: 5284903402926663935}
   - component: {fileID: 2574848627300415222}
   - component: {fileID: 7280041197286401157}
-  m_Layer: 15
+  m_Layer: 21
   m_Name: Mesh Down
   m_TagString: SnapZone
   m_Icon: {fileID: 0}
@@ -27,15 +27,15 @@ Transform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3319392661904935552}
-  m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068}
-  m_LocalPosition: {x: 0, y: -0.01, z: 0}
-  m_LocalScale: {x: 1, y: 0.01, z: 1}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.01}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 6787775389045427190}
   m_Father: {fileID: 3390467403729316765}
   m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!33 &1312883106029576503
 MeshFilter:
   m_ObjectHideFlags: 0
@@ -133,7 +133,7 @@ GameObject:
   - component: {fileID: 6787775389045427190}
   - component: {fileID: 6626359674163989219}
   - component: {fileID: 4818731436791451552}
-  m_Layer: 15
+  m_Layer: 21
   m_Name: CircleHighlight
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -216,7 +216,7 @@ GameObject:
   - component: {fileID: 8554957501859850914}
   - component: {fileID: 3164742056485930267}
   - component: {fileID: 1460740696286669547}
-  m_Layer: 15
+  m_Layer: 21
   m_Name: CircleHighlight
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -301,7 +301,7 @@ GameObject:
   - component: {fileID: 1078883255209641429}
   - component: {fileID: 8526453253978894086}
   - component: {fileID: -7239156242830623982}
-  m_Layer: 15
+  m_Layer: 21
   m_Name: Mesh Up
   m_TagString: SnapZone
   m_Icon: {fileID: 0}
@@ -315,15 +315,15 @@ Transform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 6262947649539239553}
-  m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068}
-  m_LocalPosition: {x: 0, y: 0.01, z: 0}
-  m_LocalScale: {x: 1, y: 0.01, z: 1}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0.01}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 8554957501859850914}
   m_Father: {fileID: 3390467403729316765}
   m_RootOrder: 0
-  m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!33 &7167210412035754299
 MeshFilter:
   m_ObjectHideFlags: 0
@@ -419,9 +419,9 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 3390467403729316765}
-  - component: {fileID: 1812690906255965161}
   - component: {fileID: 6950663371922587874}
-  m_Layer: 15
+  - component: {fileID: 1531054738416625324}
+  m_Layer: 21
   m_Name: Triangle
   m_TagString: Selectable
   m_Icon: {fileID: 0}
@@ -436,7 +436,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 6839596689016440457}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: -0.019, y: 0, z: 0}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
@@ -445,27 +445,6 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1812690906255965161
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6839596689016440457}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 405087c38b8537e43bcc99727c5325ec, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  Meshs:
-  - {fileID: 7167210412035754299}
-  - {fileID: 3164742056485930267}
-  - {fileID: 1312883106029576503}
-  - {fileID: 6626359674163989219}
-  NormalOffset: []
-  AlternateNormals: 0
-  radius: 1
-  sideCount: 3
 --- !u!114 &6950663371922587874
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -487,3 +466,25 @@ MonoBehaviour:
   Solution: {fileID: 2100000, guid: 2a003f0807acc1142965bb21bdc824f6, type: 2}
   renderer:
   - {fileID: 1078883255209641429}
+--- !u!114 &1531054738416625324
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6839596689016440457}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 649f3f75f7c1fff4584f185c14c7ea79, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Meshs:
+  - {fileID: 7167210412035754299}
+  - {fileID: 3164742056485930267}
+  - {fileID: 1312883106029576503}
+  - {fileID: 6626359674163989219}
+  NormalOffset: []
+  AlternateNormals: 0
+  ab: 1
+  height: 1
+  c: 0.5
diff --git a/Assets/Scenes/Worlds/RiverWorld.unity b/Assets/Scenes/Worlds/RiverWorld.unity
index 91a0141a6fb402d967669569af516ac32e876a8a..410964600e43c4309a9fa9ad766d610a45b65936 100644
--- a/Assets/Scenes/Worlds/RiverWorld.unity
+++ b/Assets/Scenes/Worlds/RiverWorld.unity
@@ -62903,6 +62903,12 @@ PrefabInstance:
         type: 3}
       propertyPath: PrefabDataConfig.Array.data[34]
       value: 
+      objectReference: {fileID: 2846439484187545958, guid: 5dc76e187eae4214697491bfb42773e8,
+        type: 3}
+    - target: {fileID: 6898471569945669422, guid: b07552db700124a4680401e6fb94c186,
+        type: 3}
+      propertyPath: PrefabDataConfig.Array.data[35]
+      value: 
       objectReference: {fileID: 3080888058940174091, guid: 2ae89b30b18ea4b4ab86a9b7ddf21e09,
         type: 3}
     - target: {fileID: 6899268459312977207, guid: b07552db700124a4680401e6fb94c186,
@@ -63351,6 +63357,12 @@ PrefabInstance:
         type: 3}
       propertyPath: PrefabDataConfig.Array.data[34]
       value: 
+      objectReference: {fileID: 2846439484187545958, guid: 5dc76e187eae4214697491bfb42773e8,
+        type: 3}
+    - target: {fileID: 7743735189960969443, guid: b07552db700124a4680401e6fb94c186,
+        type: 3}
+      propertyPath: PrefabDataConfig.Array.data[35]
+      value: 
       objectReference: {fileID: 3080888058940174091, guid: 2ae89b30b18ea4b4ab86a9b7ddf21e09,
         type: 3}
     - target: {fileID: 7748114935345543003, guid: b07552db700124a4680401e6fb94c186,
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
index 4395f67f4aa07ad62ddcf70f71bc9fa9b924833e..6d0e8ab766a6b83f99d64fc169f2cc6fe18fc435 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
@@ -1,9 +1,11 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using TMPro;
 using Unity.Mathematics;
 using UnityEngine;
+using UnityEngine.ProBuilder.Shapes;
 using static CommunicationEvents;
 
 public class FactSpawner : MonoBehaviour
@@ -82,11 +84,18 @@ public void SpawnTriangle(TriangleFact2 fact)
     {
 
         GameObject triangle = GameObject.Instantiate(Triangle);
+        fact.WorldRepresentation = triangle.GetComponent<FactObject3D>();
+        fact.WorldRepresentation.Fact = fact;
 
         triangle.transform.SetPositionAndRotation(fact.Position, fact.Rotation);
-        triangle.transform.localScale = Vector3.Scale(triangle.transform.localScale, fact.LocalScale);
-        triangle.GetComponentInChildren<TextMeshPro>().text = fact.GetLabel(StageStatic.stage.factState) + " = " + System.Math.Round(fact.Area, 2) + "m²";
+        // triangle.transform.localScale = Vector3.Scale(triangle.transform.localScale, fact.LocalScale);
+        // triangle.GetComponentInChildren<TextMeshPro>().text = fact.GetLabel(StageStatic.stage.factState) + " = " + System.Math.Round(fact.Area, 2) + "m²";
 
+        TriangleGenerator[] triangelGenerators = triangle.GetComponentsInChildren<TriangleGenerator>();
+        foreach (var gen in triangelGenerators)
+        {
+            gen.c = fact.cPosition;
+        }
     }
 
     public void SpawnPoint(PointFact fact)
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs
index 6bfaf708d7e5618aa6bfd044148af2a3568176c7..a38c2747336ca6e25bcf5d88deac09366b5878fb 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs
@@ -18,6 +18,8 @@ public class TriangleFact2 : FactWrappedCRTP<TriangleFact2>
 
     public Vector3 A, B, C, a, b, c;
 
+    public float cPosition;
+
     public float Area = 0.0F;
 
 
@@ -34,12 +36,15 @@ protected void calculate_vectors(){
         b = C + Vector3.Project(B - C, A - C);
         c = A + Vector3.Project(C - A, B - A);
 
+        cPosition = Vector3.Distance(A, c) / Vector3.Distance(A, B);
+
         Area = 0.5f * (Vector3.Distance(A, B) * Vector3.Distance(c, C));
 
         Vector3 scale = new Vector3(Vector3.Distance(A, B), Vector3.Distance(c, C), 1.0F);
         
         LocalScale = scale;
 
+        /*
         Vector3 lineVec3 = B - A;
         Vector3 crossVec1And2 = Vector3.Cross(a - A, b - B);
         Vector3 crossVec3And2 = Vector3.Cross(lineVec3, b - B);
@@ -54,6 +59,9 @@ protected void calculate_vectors(){
             intersection = Vector3.zero;
         }
         Position =  intersection;
+        */
+
+        Position = A;
 
         Rotation = Quaternion.LookRotation(Vector3.Cross((B - A), (C - A)), Vector3.up);
         //Rotation = Quaternion.LookRotation(forward, new Vector3(1.0F, 0.0F, 0.0F));
diff --git a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs
index 8e2d3095aca14a31dfc83c7149be30c34a5de925..03ed3fa29acfd300fc813e1a7ea59a142c09fc23 100644
--- a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs
+++ b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs
@@ -99,6 +99,20 @@ protected static Vector3[] GetCirclePoints(float circleRadius, int pointCount, V
         return circle;
     }
 
+    protected static Vector3[] GetTrianglePoints(float ab, float height, float c)
+        => GetTrianglePoints(ab, height, c, Vector3.zero);
+
+    protected static Vector3[] GetTrianglePoints(float ab, float height, float c, Vector3 offset)
+    {
+        Vector3[] triangle = new Vector3[3];
+
+        triangle[0] = Vector3.zero + offset;
+        triangle[1] = new Vector3(ab, 0f, 0f) + offset;
+        triangle[2] = new Vector3(c * ab, height, 0f) + offset;
+
+        return triangle;
+    }
+
     /// <summary>
     /// Creates triangles for a set of vertecies of a flat, convex shape
     /// </summary>
diff --git a/Assets/Scripts/MeshGenerator/TriangleGenerator.cs b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3666065447dbe68942d0513e8240b04075dfc178
--- /dev/null
+++ b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Linq;
+using UnityEngine;
+
+public class TriangleGenerator : ShapeGenerator
+{
+    #region InspectorVariables
+    [Header("Triangle values")]
+    [Range(0, 100)] public float ab = 1f;
+    [Range(0, 100)] public float height = 1f;
+    [Range(0, 1)] public float c = 0.5f;
+    #endregion InspectorVariables
+
+    #region Implementation
+    protected override (Vector3[] vertices, int[] triangles) GenerateTopology()
+        => CreateTriangle(ab, height, c);
+
+    /// <summary>
+    /// Creates circle vertecies and triangles around the midPoint at (0,0,0)
+    /// </summary>
+    /// <param name="points"></param>
+    /// <param name="invert"></param>
+    /// <returns></returns>
+    public static (Vector3[], int[]) CreateTriangle(float ab, float height, float c, Vector3 offset, bool invert = false)
+    {
+        Vector3[] edge = GetTrianglePoints(ab, height, c);
+        Vector3[] vertices =
+            new Vector3[] { offset }
+            .AppendRange(edge)
+            .Append(edge[0])
+            .ToArray();
+
+        return CreatePlane(vertices, invert);
+    }
+
+    public static (Vector3[], int[]) CreateTriangle(float ab, float height, float c, bool invert = false)
+        => CreateTriangle(ab, height, c, Vector3.zero, invert);
+    #endregion Implementation
+}
diff --git a/Assets/Scripts/MeshGenerator/TriangleGenerator.cs.meta b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..073157412d7988a2ec6706b5b67b15dccff95363
--- /dev/null
+++ b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 649f3f75f7c1fff4584f185c14c7ea79
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index 200e61f66ac65754e32d641bcca9475ac1f220d3..f87645289604f36f758df27607805e5899bbdd62 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -33,7 +33,7 @@ TagManager:
   - TalkingZone
   - Tree
   - SnapZone
-  - 
+  - Triangle
   - 
   - 
   -