diff --git a/wax-prosemirror-core/src/FootnoteView.js b/wax-prosemirror-core/src/FootnoteView.js
deleted file mode 100644
index 807409849eb3d5d8ac8128577128dc655800b3a8..0000000000000000000000000000000000000000
--- a/wax-prosemirror-core/src/FootnoteView.js
+++ /dev/null
@@ -1,119 +0,0 @@
-import { StepMap } from "prosemirror-transform";
-import { keymap } from "prosemirror-keymap";
-import { undo, redo } from "prosemirror-history";
-import { EditorView } from "prosemirror-view";
-import { EditorState } from "prosemirror-state";
-import { Schema } from "prosemirror-model";
-import { DefaultSchema } from "wax-prosemirror-schema";
-
-class FootnoteView {
-  constructor(node, view, getPos) {
-    console.log(node);
-    // We'll need these later
-    this.node = node;
-
-    this.outerView = view;
-    this.getPos = getPos;
-
-    // The node's representation in the editor (empty, for now)
-    this.dom = document.createElement("footnote");
-    // These are used when the footnote is selected
-    this.innerView = null;
-  }
-  selectNode() {
-    this.dom.classList.add("ProseMirror-selectednode");
-
-    if (!this.innerView) this.open();
-  }
-
-  deselectNode() {
-    this.dom.classList.remove("ProseMirror-selectednode");
-    if (this.innerView) this.close();
-  }
-
-  open() {
-    // Append a tooltip to the outer node
-    let tooltip = this.dom.appendChild(document.createElement("div"));
-    tooltip.className = "footnote-tooltip";
-    // And put a sub-ProseMirror into that
-    this.innerView = new EditorView(tooltip, {
-      // You can use any node as an editor document
-      state: EditorState.create({
-        doc: this.node,
-        plugins: [
-          keymap({
-            "Mod-z": () => undo(this.outerView.state, this.outerView.dispatch),
-            "Mod-y": () => redo(this.outerView.state, this.outerView.dispatch)
-          })
-        ]
-      }),
-      // This is the magic part
-      dispatchTransaction: this.dispatchInner.bind(this),
-      handleDOMEvents: {
-        mousedown: () => {
-          // Kludge to prevent issues due to the fact that the whole
-          // footnote is node-selected (and thus DOM-selected) when
-          // the parent editor is focused.
-          if (this.outerView.hasFocus()) this.innerView.focus();
-        }
-      }
-    });
-  }
-
-  close() {
-    this.innerView.destroy();
-    this.innerView = null;
-    this.dom.textContent = "";
-  }
-  dispatchInner(tr) {
-    let { state, transactions } = this.innerView.state.applyTransaction(tr);
-    this.innerView.updateState(state);
-
-    if (!tr.getMeta("fromOutside")) {
-      let outerTr = this.outerView.state.tr,
-        offsetMap = StepMap.offset(this.getPos() + 1);
-      for (let i = 0; i < transactions.length; i++) {
-        let steps = transactions[i].steps;
-        for (let j = 0; j < steps.length; j++)
-          outerTr.step(steps[j].map(offsetMap));
-      }
-      if (outerTr.docChanged) this.outerView.dispatch(outerTr);
-    }
-  }
-  update(node) {
-    console.log("update");
-    if (!node.sameMarkup(this.node)) return false;
-    this.node = node;
-    if (this.innerView) {
-      let state = this.innerView.state;
-      let start = node.content.findDiffStart(state.doc.content);
-      if (start != null) {
-        let { a: endA, b: endB } = node.content.findDiffEnd(state.doc.content);
-        let overlap = start - Math.min(endA, endB);
-        if (overlap > 0) {
-          endA += overlap;
-          endB += overlap;
-        }
-        this.innerView.dispatch(
-          state.tr
-            .replace(start, endB, node.slice(start, endA))
-            .setMeta("fromOutside", true)
-        );
-      }
-    }
-    return true;
-  }
-  destroy() {
-    if (this.innerView) this.close();
-  }
-
-  stopEvent(event) {
-    return this.innerView && this.innerView.dom.contains(event.target);
-  }
-
-  ignoreMutation() {
-    return true;
-  }
-}
-
-export default FootnoteView;
diff --git a/wax-prosemirror-core/src/WaxView.js b/wax-prosemirror-core/src/WaxView.js
index e21b7a5bc229ccaafee8645f63782a7a309dc9da..a327326039c6c21724366e5c42028321f32972c6 100644
--- a/wax-prosemirror-core/src/WaxView.js
+++ b/wax-prosemirror-core/src/WaxView.js
@@ -13,7 +13,6 @@ import "prosemirror-view/style/prosemirror.css";
 
 import trackedTransaction from "./track-changes/trackedTransaction";
 import { WaxContext } from "./ioc-react";
-import FootnoteView from "./FootnoteView";
 
 export default props => {
   const { readonly, onBlur, options, debug, autoFocus } = props;
@@ -46,11 +45,6 @@ export default props => {
               }
             : null
         }
-        // nodeViews: {
-        //   footnote(node, view, getPos) {
-        //     return new FootnoteView(node, view, getPos);
-        //   }
-        // }
       }
     );
     context.updateView({ main: view });
diff --git a/wax-prosemirror-schema/src/nodes/headingNode.js b/wax-prosemirror-schema/src/nodes/headingNode.js
index 85993a2daa0512dddce4d84145ef218d14eae526..3337526d551bf1e51851db6f5214c3e53a322525 100644
--- a/wax-prosemirror-schema/src/nodes/headingNode.js
+++ b/wax-prosemirror-schema/src/nodes/headingNode.js
@@ -1,8 +1,6 @@
-import { parseTracks } from "./helpers";
 const heading = {
   attrs: {
-    level: { default: 1 },
-    track: { default: [] }
+    level: { default: 1 }
   },
   content: "inline*",
   group: "block",
@@ -10,40 +8,19 @@ const heading = {
   parseDOM: [
     {
       tag: "h1",
-      attrs: { level: 1 },
-      getAttrs(hook, next) {
-        Object.assign(hook, {
-          track: parseTracks(hook.dom.dataset.track)
-        });
-        next();
-      }
+      attrs: { level: 1 }
     },
     {
       tag: "h2",
-      attrs: { level: 2 },
-      getAttrs(hook, next) {
-        Object.assign(hook, {
-          track: parseTracks(hook.dom.dataset.track)
-        });
-        next();
-      }
+      attrs: { level: 2 }
     },
     {
       tag: "h3",
-      attrs: { level: 3 },
-      getAttrs(hook, next) {
-        Object.assign(hook, {
-          track: parseTracks(hook.dom.dataset.track)
-        });
-        next();
-      }
+      attrs: { level: 3 }
     }
   ],
   toDOM(hook, next) {
     const attrs = {};
-    if (hook.node.attrs.track.length) {
-      attrs["data-track"] = JSON.stringify(hook.node.attrs.track);
-    }
     hook.value = [`h${hook.node.attrs.level}`, attrs, 0];
     next();
   }
diff --git a/wax-prosemirror-schema/src/nodes/listItemNode.js b/wax-prosemirror-schema/src/nodes/listItemNode.js
index a91948c24d2da91d1a95727738f69eb8de106a3e..6faa44008cf4a12d082cca7d2410ac1174b7c496 100644
--- a/wax-prosemirror-schema/src/nodes/listItemNode.js
+++ b/wax-prosemirror-schema/src/nodes/listItemNode.js
@@ -1,3 +1,5 @@
+import { parseTracks } from "./helpers";
+
 const list_item = {
   content: "block+",
   attrs: {
diff --git a/wax-prosemirror-schema/src/nodes/orderedListNode.js b/wax-prosemirror-schema/src/nodes/orderedListNode.js
index 3759361246b57115e4ad1fe5b356956d9000bb01..b704499c664fba2201641665bc33be226ad900f2 100644
--- a/wax-prosemirror-schema/src/nodes/orderedListNode.js
+++ b/wax-prosemirror-schema/src/nodes/orderedListNode.js
@@ -1,9 +1,10 @@
+import { parseTracks } from "./helpers";
+
 const orderedlist = {
   group: "block",
   content: "list_item+",
   attrs: {
-    order: { default: 1 },
-    track: { default: [] }
+    order: { default: 1 }
   },
   parseDOM: [
     {
@@ -12,8 +13,7 @@ const orderedlist = {
         Object.assign(hook, {
           order: hook.dom.hasAttribute("start")
             ? +hook.dom.getAttribute("start")
-            : 1,
-          track: parseTracks(hook.dom.dataset.track)
+            : 1
         });
         next();
       }
@@ -24,9 +24,6 @@ const orderedlist = {
     if (hook.node.attrs.order !== 1) {
       attrs.start = hook.node.attrs.order;
     }
-    if (hook.node.attrs.track.length) {
-      attrs["data-track"] = JSON.stringify(hook.node.attrs.track);
-    }
     hook.value = ["ol", attrs, 0];
     next();
   }
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..82e9f6c95e78ba232c41f4d243aa363ca42fee76 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js
@@ -0,0 +1,48 @@
+import { parseTracks } from "../helpers";
+const heading = {
+  attrs: {
+    track: { default: [] }
+  },
+  content: "inline*",
+  group: "block",
+  defining: true,
+  parseDOM: [
+    {
+      tag: "h1",
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    },
+    {
+      tag: "h2",
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    },
+    {
+      tag: "h3",
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    }
+  ],
+  toDOM(hook, next) {
+    if (hook.node.attrs.track.length) {
+      Object.assign(hook.value[1], {
+        "data-track": JSON.stringify(hook.node.attrs.track)
+      });
+    }
+    next();
+  }
+};
+
+export default heading;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js
index 70d427d88cf5d72da104ee9199a46b7f4b7e8719..c3c9b1ed5dc7520a25f28f143bda1007426d4373 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js
@@ -22,10 +22,10 @@ export default {
   paragraphCont: paragraphContTrackNode,
   extractProse: extractProseTrackNode,
   extractPoetry: extractPoetryTrackNode,
-  sourceNote: sourceNoteTrackNode
-  // heading: headingTrackNode,
+  orderedlist: orderedListTrackNode,
+  sourceNote: sourceNoteTrackNode,
+  heading: headingTrackNode
   // bulletlist: bulletListTrackNode,
-  // orderedlist: orderedListTrackNode,
   // list_item: listItemTrackNode,
   // image: imageTrackNode
 };
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..605e051f689aafb1fb642f5c39886d54261fe0c0 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js
@@ -0,0 +1,29 @@
+import { parseTracks } from "../helpers";
+const orderedlist = {
+  group: "block",
+  content: "list_item+",
+  attrs: {
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "ol",
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    }
+  ],
+  toDOM(hook, next) {
+    if (hook.node.attrs.track.length) {
+      Object.assign(hook.value[1], {
+        "data-track": JSON.stringify(hook.node.attrs.track)
+      });
+    }
+    next();
+  }
+};
+
+export default orderedlist;