diff --git a/js/parts/GIKPart.js b/js/parts/GIKPart.js
index a1291d00b3875be48a0bae13ede46cb63b9e95dd..25f394be1db24bbcf97d879b57b0ac881a0f6990 100644
--- a/js/parts/GIKPart.js
+++ b/js/parts/GIKPart.js
@@ -7,11 +7,13 @@ define(['underscore', 'three', 'part', 'bin!gikPartSTL', 'bin!gikEndPartSTL', 's
 
     var loader = new THREE.STLLoader();
     var unitGeo = preProcessGeo(loader.parse(gikPart));
-    var unitGeoEnd = preProcessGeo(loader.parse(gikEndPart));
+    var unitGeoEnd = preProcessGeo(loader.parse(gikEndPart), true);
 
-    function preProcessGeo(geo){
+    function preProcessGeo(geo, endPart){
         geo.computeBoundingBox();
-        geo.applyMatrix(new THREE.Matrix4().makeTranslation(-(geo.boundingBox.min.x+0.5),
+        if (endPart) geo.applyMatrix(new THREE.Matrix4().makeTranslation(-(geo.boundingBox.min.x+0.5),
+            -(geo.boundingBox.min.y+geo.boundingBox.max.y)/2, -(geo.boundingBox.min.z+geo.boundingBox.max.z)/2));
+        else geo.applyMatrix(new THREE.Matrix4().makeTranslation(-(geo.boundingBox.min.x+geo.boundingBox.max.x)/2,
             -(geo.boundingBox.min.y+geo.boundingBox.max.y)/2, -(geo.boundingBox.min.z+geo.boundingBox.max.z)/2));
         var unitScale = 1/(1.2699999809265137);
         geo.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI/2));
diff --git a/js/parts/GIKPartLowPoly.js b/js/parts/GIKPartLowPoly.js
index 0aa6ae06c9103aa15df06f6f4d8fe93847d236c7..6eed63b9ed06b51fcda0988a26816e948b23105a 100644
--- a/js/parts/GIKPartLowPoly.js
+++ b/js/parts/GIKPartLowPoly.js
@@ -8,11 +8,13 @@ define(['underscore', 'three', 'gikPart', 'bin!gikPartLowPolySTL', 'bin!gikEndPa
 
     var loader = new THREE.STLLoader();
     var unitGeo = preProcessGeo(loader.parse(gikPartLowPoly));
-    var unitGeoEnd = preProcessGeo(loader.parse(gikEndPartLowPoly));
+    var unitGeoEnd = preProcessGeo(loader.parse(gikEndPartLowPoly), true);
 
-    function preProcessGeo(geo){
+    function preProcessGeo(geo, endPart){
         geo.computeBoundingBox();
-        geo.applyMatrix(new THREE.Matrix4().makeTranslation(-(geo.boundingBox.min.x+0.5),
+        if (endPart) geo.applyMatrix(new THREE.Matrix4().makeTranslation(-(geo.boundingBox.min.x+0.5),
+            -(geo.boundingBox.min.y+geo.boundingBox.max.y)/2, -(geo.boundingBox.min.z+geo.boundingBox.max.z)/2));
+        else geo.applyMatrix(new THREE.Matrix4().makeTranslation(-(geo.boundingBox.min.x+geo.boundingBox.max.x)/2,
             -(geo.boundingBox.min.y+geo.boundingBox.max.y)/2, -(geo.boundingBox.min.z+geo.boundingBox.max.z)/2));
         var unitScale = 1/(1.2699999809265137);
         geo.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI/2));