diff --git a/Assets/Resources/Prefabs/Facts/Ring.prefab b/Assets/Resources/Prefabs/Facts/Ring.prefab
index 071a3d5dd9fb01439c83426985e3e4460cc00071..da4ef280fe05d78ddab91efc533e8a97c85c8af9 100644
--- a/Assets/Resources/Prefabs/Facts/Ring.prefab
+++ b/Assets/Resources/Prefabs/Facts/Ring.prefab
@@ -12,7 +12,7 @@ GameObject:
   - component: {fileID: 154494299464322201}
   - component: {fileID: 1254072669719294581}
   - component: {fileID: 5033072517473897711}
-  m_Layer: 5
+  m_Layer: 14
   m_Name: Text
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -198,7 +198,7 @@ GameObject:
   - component: {fileID: 8736718377918556088}
   - component: {fileID: 3274869260965504490}
   - component: {fileID: 4622529340520030698}
-  m_Layer: 16
+  m_Layer: 14
   m_Name: Mesh
   m_TagString: SnapZone
   m_Icon: {fileID: 0}
@@ -328,13 +328,14 @@ GameObject:
   - component: {fileID: 2239887596765845809}
   - component: {fileID: 2358573561192576705}
   - component: {fileID: 7622934778317457235}
-  m_Layer: 16
+  - component: {fileID: 7100019936063167720}
+  m_Layer: 14
   m_Name: LineHighlight
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &4775945639457863304
 Transform:
   m_ObjectHideFlags: 0
@@ -344,7 +345,7 @@ Transform:
   m_GameObject: {fileID: 7320042660989930446}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0.96, y: 0.51, z: 0.51}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 3821173845951859578}
   m_RootOrder: 1
@@ -356,7 +357,7 @@ MeshFilter:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 7320042660989930446}
-  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+  m_Mesh: {fileID: 0}
 --- !u!23 &2358573561192576705
 MeshRenderer:
   m_ObjectHideFlags: 0
@@ -410,6 +411,23 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: a6b9fc46f5bfe6b4eb4adf01e6b65bac, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!114 &7100019936063167720
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7320042660989930446}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 35327f6b479454149a20587eb03337f8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  torusRadius: 1
+  ringRadius: 0.026
+  ringSegmentCount: 50
+  segmentSideCount: 30
+  torusMesh: {fileID: 2239887596765845809}
 --- !u!1 &7644263571880024739
 GameObject:
   m_ObjectHideFlags: 0
@@ -420,7 +438,7 @@ GameObject:
   m_Component:
   - component: {fileID: 2014127074789226423}
   - component: {fileID: 2449733549921447938}
-  m_Layer: 16
+  m_Layer: 14
   m_Name: Ring
   m_TagString: Selectable
   m_Icon: {fileID: 0}
@@ -471,13 +489,14 @@ GameObject:
   - component: {fileID: 5121703917865025706}
   - component: {fileID: 213008266423099231}
   - component: {fileID: 2162055944849665559}
-  m_Layer: 16
+  - component: {fileID: 8620085494464208677}
+  m_Layer: 14
   m_Name: LineInner
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &5121703917865025706
 Transform:
   m_ObjectHideFlags: 0
@@ -487,7 +506,7 @@ Transform:
   m_GameObject: {fileID: 8117705180640636930}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0.95, y: 0.5, z: 0.5}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 3821173845951859578}
   m_RootOrder: 0
@@ -499,7 +518,7 @@ MeshFilter:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 8117705180640636930}
-  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+  m_Mesh: {fileID: 0}
 --- !u!23 &2162055944849665559
 MeshRenderer:
   m_ObjectHideFlags: 0
@@ -541,3 +560,20 @@ MeshRenderer:
   m_SortingLayer: 0
   m_SortingOrder: 0
   m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &8620085494464208677
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8117705180640636930}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 35327f6b479454149a20587eb03337f8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  torusRadius: 1
+  ringRadius: 0.025
+  ringSegmentCount: 50
+  segmentSideCount: 30
+  torusMesh: {fileID: 213008266423099231}
diff --git a/Assets/Resources/Prefabs/MainPlayer.prefab b/Assets/Resources/Prefabs/MainPlayer.prefab
index da71fdeb793a6cb6601a3ebc5a6b7cce3c4f46ab..b880e2da30bfd2903db972f244383fb4812d161c 100644
--- a/Assets/Resources/Prefabs/MainPlayer.prefab
+++ b/Assets/Resources/Prefabs/MainPlayer.prefab
@@ -6104,7 +6104,7 @@ MonoBehaviour:
   Sprite: {fileID: 21300000, guid: 61c389e99e8388e4e93070d2f5e6275f, type: 3}
   ignoreLayerMask:
     serializedVersion: 2
-    m_Bits: 24064
+    m_Bits: 7680
   Cursor: {fileID: 7593098362214606413}
 --- !u!1 &6514918780467523717
 GameObject:
@@ -6156,7 +6156,7 @@ MonoBehaviour:
   Sprite: {fileID: 21300000, guid: d456617ba2282854d9570dcebcc2b279, type: 3}
   ignoreLayerMask:
     serializedVersion: 2
-    m_Bits: 115217
+    m_Bits: 529
   Cursor: {fileID: 7593098362214606413}
 --- !u!1 &6538023868683449154
 GameObject:
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
index 357e4800b5d1557eded044aa4f4a21751896b42d..c238d9852489d5015d95d3a6858c4a14e00629d7 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs
@@ -219,7 +219,7 @@ public Fact SpawnRing(Fact fact)
         ring.transform.position = middlePoint;
 
         //Rotate Ring according to normal
-        ring.transform.rotation = Quaternion.FromToRotation(Vector3.forward, normal);
+        ring.transform.up = normal;
 
         //Set radii
         torus.torusRadius = radius;
@@ -236,6 +236,10 @@ public Fact SpawnRing(Fact fact)
         FactObj.URI = circleFact.Id;
         circleFact.Representation = ring;
 
+        //update MeshCollider to fit torus
+        MeshCollider meshCol = ring.GetComponentInChildren<MeshCollider>();
+        meshCol.sharedMesh = meshCol.gameObject.GetComponent<MeshFilter>().mesh;
+
         return circleFact;
     }
 
diff --git a/Assets/Scripts/InteractionEngine/WorldCursor.cs b/Assets/Scripts/InteractionEngine/WorldCursor.cs
index bacedf21bc2ab6185f1e2ca7e98f1a4d52ef04bb..dd1feec0431c1816abd5719a867709848dcbdcbb 100644
--- a/Assets/Scripts/InteractionEngine/WorldCursor.cs
+++ b/Assets/Scripts/InteractionEngine/WorldCursor.cs
@@ -5,6 +5,7 @@
 using UnityEngine;
 using UnityEngine.Events;
 using UnityEngine.EventSystems;
+using System.Linq;
 using static GadgetManager;
 
 public class WorldCursor : MonoBehaviour
@@ -144,7 +145,7 @@ void Update()
             multipleHits[i] = buffer;
 
         }
-
+            
 
         for (int i = 0; i < multipleHits.Length; i++)
         {
@@ -162,6 +163,32 @@ void Update()
 
                 multipleHits[i].point = Math3d.ProjectPointOnLine(p1.Point, lineFact.Dir, multipleHits[i].point);
             }
+            else if (multipleHits[i].collider.gameObject.layer == LayerMask.NameToLayer("Ring"))
+            {
+                #region Ring
+                var id = multipleHits[i].transform.GetComponent<FactObject>().URI;
+                CircleFact circleFact = StageStatic.stage.factState[id] as CircleFact;
+                PointFact middlePoint = StageStatic.stage.factState[circleFact.Pid1] as PointFact;
+                var normal = circleFact.normal;
+
+                // generate circle
+                int pointCount = multipleHits[i].transform.GetComponentInParent<TorusGenerator>().ringSegmentCount;
+                Vector3[] circle = new Vector3[pointCount];
+                float slice = (2f * Mathf.PI) / pointCount;
+                for (int j = 0; j < pointCount; j++)
+                {
+                    // generate possible snappoints one the "corners" of the torus mesh
+                    float angle = j * slice;
+                    circle[j] = new Vector3(circleFact.radius * Mathf.Sin(angle), 0, circleFact.radius * Mathf.Cos(angle)) + middlePoint.Point;
+
+                    // rotate snappoint according to circle normal
+                    circle[j] = Quaternion.LookRotation(new Vector3(-normal.z, 0, normal.x), normal) * circle[j];
+                }
+
+                // get closest cornerPoint
+                multipleHits[i].point = circle.OrderBy(p => Vector3.Distance(p, multipleHits[i].point)).First();
+                #endregion Ring
+            }
             else
             {
                 multipleHits[i].point = multipleHits[i].collider.transform.position;
diff --git a/Assets/Scripts/MeshGenerator/TorusGenerator.cs b/Assets/Scripts/MeshGenerator/TorusGenerator.cs
index 607f783b525d2d3d42e94321ca07337e45aa7594..996574c010e12f6eeb44b4f816ba4d7325904845 100644
--- a/Assets/Scripts/MeshGenerator/TorusGenerator.cs
+++ b/Assets/Scripts/MeshGenerator/TorusGenerator.cs
@@ -25,6 +25,14 @@ protected override void GenerateShape()
         if (torusMesh.sharedMesh != null)
             torusMesh.sharedMesh.Clear();
         torusMesh.mesh = CreateMesh(CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount));
+
+        //TODO for testing -- remove
+        try
+        {
+            MeshCollider meshCol = GetComponentInChildren<MeshCollider>();
+            meshCol.sharedMesh = torusMesh.mesh;
+        }
+        catch (Exception e) { }
     }
 
     private static (Vector3[] vertices, int[] triangles) CreateTorus(float torusRadius, float ringRadius, int ringSegmentCount, int segmentSideCount)
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index 962b7a8889bbb7c77fc117e3121a190fae59bdce..d95bd60240e920d6d7cf565a05bd30e906e9da45 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -24,13 +24,13 @@ TagManager:
   - Line
   - Angle
   - Ray
-  - TalkingZone
-  - Tree
-  - SnapZone
-  - 
+  - Ring
   - 
   - 
   - 
+  - TalkingZone
+  - Tree
+  - SnapZone
   - 
   - 
   -