diff --git a/app/javascript/template_builder/fields.vue b/app/javascript/template_builder/fields.vue
index 434c8f79..63665f8e 100644
--- a/app/javascript/template_builder/fields.vue
+++ b/app/javascript/template_builder/fields.vue
@@ -13,9 +13,10 @@
     />
   
   
      f.uuid === targetFieldUuid)
-
-        const currentIndex = this.fields.indexOf(this.dragField)
-        const targetIndex = this.fields.indexOf(field)
+      if (dragField && targetField && targetField !== dragField) {
+        const fields = Array.from(this.$refs.fields.children)
+        const currentIndex = fields.indexOf(dragField)
+        const targetIndex = fields.indexOf(targetField)
 
         if (currentIndex < targetIndex) {
-          this.fields.splice(targetIndex + 1, 0, this.dragField)
-          this.fields.splice(currentIndex, 1)
+          targetField.after(dragField)
         } else {
-          this.fields.splice(targetIndex, 0, this.dragField)
-          this.fields.splice(currentIndex + 1, 1)
+          targetField.before(dragField)
         }
       }
     },
+    reorderFields () {
+      Array.from(this.$refs.fields.children).forEach((el, index) => {
+        if (el.dataset.uuid !== this.fields[index].uuid) {
+          const field = this.fields.find((f) => f.uuid === el.dataset.uuid)
+
+          this.fields.splice(this.fields.indexOf(field), 1)
+          this.fields.splice(index, 0, field)
+        }
+      })
+
+      this.save()
+    },
     removeSubmitter (submitter) {
       [...this.fields].forEach((field) => {
         if (field.submitter_uuid === submitter.uuid) {