diff --git a/src/components/SpaceBase.vue b/src/components/SpaceBase.vue
index cf9e098c5bdf2058b47ccab121a8be7826251a10..230495264a0a7dd218d181b932a3183d4a4a5ce3 100644
--- a/src/components/SpaceBase.vue
+++ b/src/components/SpaceBase.vue
@@ -1,24 +1,18 @@
 <template>
-  <div v-for="(nodes, index) in myArray" :key="index">
-    <svg
-      xmlns="http://www.w3.org/2000/svg"
-      viewBox="0 0 1000 10000"
-      onload="makeDraggable(evt)"
-    >
-      <g class="draggable-group">
-        <rect width="150" height="200" style="fill: rgb(255, 0, 100)" />
-        <foreignObject id="x" x="10" width="131" height="100">
-          <textarea rows="3" cols="30" v-model="nodes.node_text"></textarea>
-        </foreignObject>
-      </g>
-    </svg>
-  </div>
+  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 10000" ref="myref">
+    <g class="draggable-group" v-for="(nodes, index) in myArray" :key="index">
+      <rect width="150" height="200" style="fill: rgb(255, 0, 100)" />
+      <foreignObject id="x" x="10" width="131" height="100">
+        <textarea rows="3" cols="30" v-model="nodes.node_text"></textarea>
+      </foreignObject>
+    </g>
+  </svg>
 </template>
 
 <script>
 // @ is an alias to /src
 import { mapState } from 'vuex'
-import drag from '@/mixins/drag'
+// import drag from '@/mixins/drag'
 
 export default {
   name: 'SpaceBase',
@@ -61,13 +55,14 @@ export default {
     },
   },
 
-  mixins: [
-    drag('something', function () {
-      // drag
-    }),
-  ],
+  // mixins: [
+  //   drag(this.$refs.svg, function () {
+  //     // drag
+  //   }),
+  // ],
 
   mounted() {
+    makeDraggable(this.$refs.myref)
     setTimeout(this.loadData, 500)
     if (localStorage.nogg_name && localStorage.nogg_microcosm) {
       var devicename = localStorage.nogg_name
@@ -81,6 +76,69 @@ export default {
     }
   },
 }
+
+// PLAIN JS should be a mixin
+
+function makeDraggable(svg) {
+  // var svg = evt.target
+  svg.addEventListener('mousedown', startDrag)
+  svg.addEventListener('mousemove', drag)
+  svg.addEventListener('mouseup', endDrag)
+  svg.addEventListener('mouseleave', endDrag)
+  svg.addEventListener('touchstart', startDrag)
+  svg.addEventListener('touchmove', drag)
+  svg.addEventListener('touchend', endDrag)
+  svg.addEventListener('touchleave', endDrag)
+  svg.addEventListener('touchcancel', endDrag)
+  function getMousePosition(evt) {
+    var CTM = svg.getScreenCTM()
+    if (evt.touches) {
+      evt = evt.touches[0]
+    }
+    return {
+      x: (evt.clientX - CTM.e) / CTM.a,
+      y: (evt.clientY - CTM.f) / CTM.d,
+    }
+  }
+  var selectedElement, offset, transform
+  function initialiseDragging(evt) {
+    offset = getMousePosition(evt)
+    // Make sure the first transform on the element is a translate transform
+    var transforms = selectedElement.transform.baseVal
+    if (
+      transforms.length === 0 ||
+      transforms.getItem(0).type !== SVGTransform.SVG_TRANSFORM_TRANSLATE
+    ) {
+      // Create an transform that translates by (0, 0)
+      var translate = svg.createSVGTransform()
+      translate.setTranslate(0, 0)
+      selectedElement.transform.baseVal.insertItemBefore(translate, 0)
+    }
+    // Get initial translation
+    transform = transforms.getItem(0)
+    offset.x -= transform.matrix.e
+    offset.y -= transform.matrix.f
+  }
+  function startDrag(evt) {
+    if (evt.target.classList.contains('draggable')) {
+      selectedElement = evt.target
+      initialiseDragging(evt)
+    } else if (evt.target.parentNode.classList.contains('draggable-group')) {
+      selectedElement = evt.target.parentNode
+      initialiseDragging(evt)
+    }
+  }
+  function drag(evt) {
+    if (selectedElement) {
+      evt.preventDefault()
+      var coord = getMousePosition(evt)
+      transform.setTranslate(coord.x - offset.x, coord.y - offset.y)
+    }
+  }
+  function endDrag() {
+    selectedElement = false
+  }
+}
 </script>
 
 <style scoped>