diff --git a/src/edit/src/editor.cpp b/src/edit/src/editor.cpp
index f078a199fef1a92e7e3c3e9c1a354835c06c8762..a1853a00f3e9cb8b1dfa4a90cb69567d602fb285 100644
--- a/src/edit/src/editor.cpp
+++ b/src/edit/src/editor.cpp
@@ -2483,9 +2483,17 @@ void Editor::teleportModulesByConnectors(const connector_ptr source_connector, c
     auto first_con_parent_diff = first_con_node->getPositionWorld() - first_parent->getPositionWorld();
     first_parent->setPosVec(second_world_pos - first_con_parent_diff);
 
-    // auto destination_facing = -destination_connector->getNode()->getRotationAxisZWorld();
-    // auto source_facing = -first_con_node->getRotationAxisZWorld();
+    auto destination_facing = -destination_connector->getNode()->getRotationAxisZWorld();
+    auto destination_north = destination_connector->getNode()->getRotationAxisXWorld();
+    auto source_facing = -first_con_node->getRotationAxisZWorld();
+    auto source_north = source_connector->getNode()->getRotationAxisXWorld();
+
+    // rotate to face each other
+    // first_parent->rotateRotationQuat(glm::angleAxis)
     
+    // rotate to selected cardinality
+    // auto north_delta = glm::orientedAngle(source_north, destination_north, )
+    // first_parent->rotateRotationQuat(glm::angleAxis())
 }
 
 void Editor::rotateModule(module_ptr selected_module, glm::vec3 &rotation_angles)
diff --git a/src/rofi/include/rofi/connector.hpp b/src/rofi/include/rofi/connector.hpp
index 13cc8315a323d3022f0a6fdae475a41b1bdee601..fa8bbf7e267aea1cc22d4d7da5ccad7952e9e6c2 100644
--- a/src/rofi/include/rofi/connector.hpp
+++ b/src/rofi/include/rofi/connector.hpp
@@ -203,6 +203,8 @@ public:
 
 enum class side vec_to_enum(glm::vec3 local_direction);
 glm::vec3 enum_to_vec(enum class side s);
+cardinal degree_to_cardinal(float degree_angle);
+float cardinal_to_degree(cardinal orientation);
 
 }
 
diff --git a/src/rofi/src/connector.cpp b/src/rofi/src/connector.cpp
index bf78a040a6f8970611b7d3766201708a15df8bc0..f90561cf232616841bc0c807fa42b16ff1895bc6 100644
--- a/src/rofi/src/connector.cpp
+++ b/src/rofi/src/connector.cpp
@@ -2,8 +2,6 @@
 
 #include <rofi/voxel.hpp>
 
-#include <iostream>
-
 namespace rofi
 {
 
@@ -79,25 +77,15 @@ bool Connector::shares_module_link(connector_ptr fst_connector, connector_ptr sn
 
 cardinal Connector::get_mutual_orientation(connector_ptr fst_connector, connector_ptr snd_connector)
 {
+    ASSUMPTION(Connector::shares_module_link(fst_connector, snd_connector));
+
     auto fst_north = fst_connector->getNode()->getRotationAxisXWorld();
     auto snd_north = snd_connector->getNode()->getRotationAxisXWorld();
     auto oriented_angle = glm::degrees(glm::orientedAngle(fst_north, 
                                                           snd_north, 
                                                           fst_connector->getNode()->getRotationAxisZWorld()));
 
-    std::cout << "oriented angle: " << oriented_angle << std::endl;
-
-    float epsilon = 0.001f;
-    if (glm::epsilonEqual(oriented_angle, 0.0f, epsilon))
-        return North;
-    if (glm::epsilonEqual(oriented_angle, -90.0f, epsilon))
-        return East;
-    if (glm::epsilonEqual(oriented_angle, 180.0f, epsilon))
-        return South;
-    if (glm::epsilonEqual(oriented_angle, 90.0f, epsilon))
-        return West;
-
-    ASSUMPTION(false);    
+    return degree_to_cardinal(oriented_angle);
 }
 
 bool Connector::hasModuleLink() const
@@ -394,4 +382,37 @@ glm::vec3 enum_to_vec(side s)
     }
 }
 
+cardinal degree_to_cardinal(float degree_angle)
+{
+    float epsilon = 0.001f;
+    if (glm::epsilonEqual(degree_angle, 0.0f, epsilon))
+        return North;
+    if (glm::epsilonEqual(degree_angle, -90.0f, epsilon))
+        return East;
+    if (glm::epsilonEqual(degree_angle, 180.0f, epsilon))
+        return South;
+    if (glm::epsilonEqual(degree_angle, 90.0f, epsilon))
+        return West;
+
+    ASSUMPTION(false);    
+}
+float cardinal_to_degree(cardinal orientation)
+{
+    switch(orientation)
+    {
+        using enum cardinal;
+        case North:
+            return 0.0f;
+        case East:
+            return -90.0f;
+        case South:
+            return 180.0f;
+        case West:
+            return 90.0f;
+        default:
+            ASSUMPTION(false);
+            return 0.0f;
+    }
+}
+
 }
\ No newline at end of file