diff --git a/editors/editoria/src/demo.js b/editors/editoria/src/demo.js
index 5e735e3ea3aa044588e61b1d3639d3f7d1764a3b..c451a1f079f629c98d0f183bf59966caea2deed2 100644
--- a/editors/editoria/src/demo.js
+++ b/editors/editoria/src/demo.js
@@ -1,4 +1,4 @@
-export const demo = `<p class="paragraph">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eros turpis, imperdiet viverra purus eget, fermentum porttitor dui. Etiam quis venenatis risus, sit amet bibendum turpis. <span class="insertion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group="">this is an addition </span>Vestibulum non nibh at dolor sodales euismod. Maecenas mattis nulla in eros pretium, eu commodo sem sagittis. Nam eu varius justo. Nullam volutpat diam sit amet nunc aliquam convallis. Aliquam non eleifend dolor. Cras in urna lacinia, tempor tellus non, faucibus leo. Etiam mi elit, euismod sit amet tellus sed, molestie gravida tortor.</p><ol><li><p class="paragraph">list item 1</p></li><li><p class="paragraph">list <span class="comment" data-id="f109db7c-61df-456b-b933-8cc9d43e65a3" data-conversation="[{&quot;content&quot;:&quot;demo comment&quot;,&quot;displayName&quot;:&quot;demo&quot;,&quot;timestamp&quot;:1601559766164}]" data-viewid="main" data-group="main">item</span> 2</p><p class="paragraph">list item 2 second paragraph</p></li><li><p class="paragraph">list item 3</p><ol><li><p class="paragraph">nested 1</p></li><li><p class="paragraph">nested 2</p></li><li><p class="paragraph">nested 3</p></li></ol></li><li><p class="paragraph">list item 4</p></li></ol><p class="paragraph">Quisque posuere <span class="deletion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group="">velit ut venenatis tempor. Donec mollis dictum magna, ac ullamcorper nibh dignissim at. Aliquam malesuada id dolor non ornare. Morbi condimentum a justo id </span>fermentum. In eget metus ac ante fermentum suscipit. Donec eleifend cursus suscipit. <strong><span class="format-change" data-id="37f76a5f-f8fa-474d-a37d-e9d8fdeea0f5" data-user="1234" data-username="demo" data-date="1609243477509" data-before="[]" data-after="[&quot;strong&quot;]" data-group="main">Donec</span></strong> velit lectus, ultricies a pulvinar eu, eleifend non metus. <footnote id="de87b2a3-6186-440e-9249-fb07ce9ff344">note 2 with <span class="deletion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group="">some</span> more content </footnote>Duis ut volutpat nunc.<footnote id="b8cc2013-ba52-48cb-b42c-dbe407de0c69">note 1 <span class="comment" data-id="48abf2f8-f58f-4157-b966-42276abee599" data-conversation="[{&quot;content&quot;:&quot;comment&quot;,&quot;displayName&quot;:&quot;demo&quot;,&quot;timestamp&quot;:1601559909838}]" data-viewid="b8cc2013-ba52-48cb-b42c-dbe407de0c69" data-group="notes">content</span><span class="insertion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group=""> and tracked text</span></footnote> Nunc elementum id nulla nec tempor. Sed fringilla lacinia diam non tempus.</p><p class="paragraph">Proin sed odio sit amet erat volutpat tempus non et metus. Cras vitae ullamcorper diam. Proin blandit scelerisque vulputate. In elementum rutrum urna ac posuere. Nam at ex ipsum. Morbi ornare lacus vel orci congue, sed hendrerit mauris convallis. Etiam in aliquam ex.</p><pre data-params=""><code>#include &lt;iostream&gt;
+export const demo = `<p class="paragraph">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eros turpis, imperdiet viverra purus eget, fermentum porttitor dui. Etiam quis venenatis risus, sit amet bibendum turpis. <span class="insertion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group="">this is an addition </span>Vestibulum non nibh at dolor sodales euismod. Maecenas mattis nulla in eros pretium, eu commodo sem sagittis. Nam eu varius justo. Nullam volutpat diam sit amet nunc aliquam convallis. Aliquam non eleifend dolor. Cras in urna lacinia, tempor tellus non, faucibus leo. Etiam mi elit, euismod sit amet tellus sed, molestie gravida tortor.</p><ol><li><p class="paragraph">list item 1</p></li><li><p class="paragraph">list <span class="comment" data-id="f109db7c-61df-456b-b933-8cc9d43e65a3" data-conversation="[{&quot;content&quot;:&quot;demo comment&quot;,&quot;displayName&quot;:&quot;demo&quot;,&quot;timestamp&quot;:1601559766164}]" data-viewid="main" data-group="main">item</span> 2</p><p class="paragraph">list item 2 second paragraph</p></li><li><p class="paragraph">list item 3</p><ol><li><p class="paragraph">nested 1</p></li><li><p class="paragraph">nested 2</p></li><li><p class="paragraph">nested 3</p></li></ol></li><li><p class="paragraph">list item 4</p></li></ol><p class="paragraph">Quisque posuere <span class="deletion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group="">velit ut venenatis tempor. Donec mollis dictum magna, ac ullamcorper nibh dignissim at. Aliquam malesuada id dolor non ornare. Morbi condimentum a justo id </span>fermentum. In eget metus ac ante fermentum suscipit. Donec eleifend cursus suscipit. <strong><span class="format-change" data-id="37f76a5f-f8fa-474d-a37d-e9d8fdeea0f5" data-user="1234" data-username="demo" data-date="1609243477509" data-before="[]" data-after="[&quot;strong&quot;]" data-group="main"data-viewid=""main">Donec</span></strong> velit lectus, ultricies a pulvinar eu, eleifend non metus. <footnote id="de87b2a3-6186-440e-9249-fb07ce9ff344">note 2 with <span class="deletion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group="">some</span> more content </footnote>Duis ut volutpat nunc.<footnote id="b8cc2013-ba52-48cb-b42c-dbe407de0c69">note 1 <span class="comment" data-id="48abf2f8-f58f-4157-b966-42276abee599" data-conversation="[{&quot;content&quot;:&quot;comment&quot;,&quot;displayName&quot;:&quot;demo&quot;,&quot;timestamp&quot;:1601559909838}]" data-viewid="b8cc2013-ba52-48cb-b42c-dbe407de0c69" data-group="notes">content</span><span class="insertion" data-id="" data-user="1234" data-username="demo" data-date="0" data-group=""> and tracked text</span></footnote> Nunc elementum id nulla nec tempor. Sed fringilla lacinia diam non tempus.</p><p class="paragraph">Proin sed odio sit amet erat volutpat tempus non et metus. Cras vitae ullamcorper diam. Proin blandit scelerisque vulputate. In elementum rutrum urna ac posuere. Nam at ex ipsum. Morbi ornare lacus vel orci congue, sed hendrerit mauris convallis. Etiam in aliquam ex.</p><pre data-params=""><code>#include &lt;iostream&gt;
 
 int main(int argc, char *argv[]) {
 
diff --git a/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js b/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js
index c5c7c215f11480d7ba06607678bb8b4ed5dfa5ff..d67f2a5da1dca4dbb11ab0ee7f2031cbf376c8ea 100644
--- a/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js
+++ b/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js
@@ -20,7 +20,7 @@ export default ({ trackChangeId, top, recalculateTops, trackChange }) => {
 
   const [isActive, setIsActive] = useState(false);
   // const { state, dispatch } = activeView;
-  const viewId = 'main';
+  const viewId = trackChange.attrs.viewid;
   const styles = {
     top: `${top}px`,
   };
diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangesBox.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangesBox.js
index 594086807f1359c0a3e87ee0c4a6186968e5cbdf..83e011679b6125d7cf6f95267087a572a9a46227 100644
--- a/wax-prosemirror-components/src/components/trackChanges/TrackChangesBox.js
+++ b/wax-prosemirror-components/src/components/trackChanges/TrackChangesBox.js
@@ -99,7 +99,6 @@ const TrackChangesBox = props => {
   } = props;
 
   const onClickTrackBox = () => {
-    console.log(onClickBox);
     onClickBox(trackData);
   };
 
diff --git a/wax-prosemirror-schema/src/marks/trackChangesMarks/deletionMark.js b/wax-prosemirror-schema/src/marks/trackChangesMarks/deletionMark.js
index d96ad4811ed6943c9074ef51436467ef8c7d46df..2281f22cbf1d3f11d164bfe82e4eaaa775088024 100644
--- a/wax-prosemirror-schema/src/marks/trackChangesMarks/deletionMark.js
+++ b/wax-prosemirror-schema/src/marks/trackChangesMarks/deletionMark.js
@@ -1,43 +1,46 @@
 const deletion = {
   attrs: {
-    class: { default: "deletion" },
-    id: { default: "" },
+    class: { default: 'deletion' },
+    id: { default: '' },
     user: { default: 0 },
-    username: { default: "" },
+    username: { default: '' },
     date: { default: 0 },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   inclusive: false,
-  group: "track",
+  group: 'track',
   parseDOM: [
     {
-      tag: "span.deletion",
+      tag: 'span.deletion',
       getAttrs(hook, next) {
         Object.assign(hook, {
-          class: hook.dom.getAttribute("class"),
+          class: hook.dom.getAttribute('class'),
           id: hook.dom.dataset.id,
           user: parseInt(hook.dom.dataset.user),
           username: hook.dom.dataset.username,
           date: parseInt(hook.dom.dataset.date),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     hook.value = [
-      "span",
+      'span',
       {
         class: hook.node.attrs.class,
-        "data-id": hook.node.attrs.id,
-        "data-user": hook.node.attrs.user,
-        "data-username": hook.node.attrs.username,
-        "data-date": hook.node.attrs.date,
-        "data-group": hook.node.attrs.group
-      }
+        'data-id': hook.node.attrs.id,
+        'data-user': hook.node.attrs.user,
+        'data-username': hook.node.attrs.username,
+        'data-date': hook.node.attrs.date,
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
+      },
     ];
     next();
-  }
+  },
 };
 export default deletion;
diff --git a/wax-prosemirror-schema/src/marks/trackChangesMarks/formatChangeMark.js b/wax-prosemirror-schema/src/marks/trackChangesMarks/formatChangeMark.js
index 633578c39156605c6f7cdae3f18e38749f3c0a06..53346bbaba8b1352ca0843f2c0271947b894f615 100644
--- a/wax-prosemirror-schema/src/marks/trackChangesMarks/formatChangeMark.js
+++ b/wax-prosemirror-schema/src/marks/trackChangesMarks/formatChangeMark.js
@@ -1,52 +1,55 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const format_change = {
   attrs: {
-    class: { default: "format-change" },
-    id: { default: "" },
+    class: { default: 'format-change' },
+    id: { default: '' },
     user: { default: 0 },
-    username: { default: "" },
+    username: { default: '' },
     date: { default: 0 },
     before: { default: [] },
     after: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   inclusive: false,
-  group: "track",
+  group: 'track',
   parseDOM: [
     {
-      tag: "span.format-change",
+      tag: 'span.format-change',
       getAttrs(hook, next) {
         Object.assign(hook, {
-          class: hook.dom.getAttribute("class"),
+          class: hook.dom.getAttribute('class'),
           id: hook.dom.dataset.id,
           user: parseInt(hook.dom.dataset.user),
           username: hook.dom.dataset.username,
           date: parseInt(hook.dom.dataset.date),
           before: SchemaHelpers.parseFormatList(hook.dom.dataset.before),
           after: SchemaHelpers.parseFormatList(hook.dom.dataset.after),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     hook.value = [
-      "span",
+      'span',
       {
         class: hook.node.attrs.class,
-        "data-id": hook.node.attrs.id,
-        "data-user": hook.node.attrs.user,
-        "data-username": hook.node.attrs.username,
-        "data-date": hook.node.attrs.date,
-        "data-before": JSON.stringify(hook.node.attrs.before),
-        "data-after": JSON.stringify(hook.node.attrs.after),
-        "data-group": hook.node.attrs.group
-      }
+        'data-id': hook.node.attrs.id,
+        'data-user': hook.node.attrs.user,
+        'data-username': hook.node.attrs.username,
+        'data-date': hook.node.attrs.date,
+        'data-before': JSON.stringify(hook.node.attrs.before),
+        'data-after': JSON.stringify(hook.node.attrs.after),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
+      },
     ];
     next();
-  }
+  },
 };
 
 export default format_change;
diff --git a/wax-prosemirror-schema/src/marks/trackChangesMarks/insertionMark.js b/wax-prosemirror-schema/src/marks/trackChangesMarks/insertionMark.js
index 22330a58a636855687c57335c35bb7d93360ae10..60e6a48739cd0fb6e6e0adf4f5b692e6cd5b1f2d 100644
--- a/wax-prosemirror-schema/src/marks/trackChangesMarks/insertionMark.js
+++ b/wax-prosemirror-schema/src/marks/trackChangesMarks/insertionMark.js
@@ -1,44 +1,47 @@
 const insertion = {
   attrs: {
-    class: { default: "insertion" },
-    id: { default: "" },
+    class: { default: 'insertion' },
+    id: { default: '' },
     user: { default: 0 },
-    username: { default: "" },
+    username: { default: '' },
     date: { default: 0 },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   inclusive: false,
-  group: "track",
+  group: 'track',
   parseDOM: [
     {
-      tag: "span.insertion",
+      tag: 'span.insertion',
       getAttrs(hook, next) {
         Object.assign(hook, {
-          class: hook.dom.getAttribute("class"),
+          class: hook.dom.getAttribute('class'),
           id: hook.dom.dataset.id,
           user: parseInt(hook.dom.dataset.user),
           username: hook.dom.dataset.username,
           date: parseInt(hook.dom.dataset.date),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     hook.value = [
-      "span",
+      'span',
       {
         class: hook.node.attrs.class,
-        "data-id": hook.node.attrs.id,
-        "data-user": hook.node.attrs.user,
-        "data-username": hook.node.attrs.username,
-        "data-date": hook.node.attrs.date,
-        "data-group": hook.node.attrs.group
-      }
+        'data-id': hook.node.attrs.id,
+        'data-user': hook.node.attrs.user,
+        'data-username': hook.node.attrs.username,
+        'data-date': hook.node.attrs.date,
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
+      },
     ];
     next();
-  }
+  },
 };
 
 export default insertion;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/authorTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/authorTrackNode.js
index 4ee38f0b2f9704e57b3f87b737a20ebebe37e09a..cf812debc0162903a2a0703a0629172136a49c20 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/authorTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/authorTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const author = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.author",
+      tag: 'p.author',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default author;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphPoetryTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphPoetryTrackNode.js
index e888ed541803edf6cc7865a2b207895560f7b213..c55f7a32d8bc044c6e494b344505766837cbe872 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphPoetryTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphPoetryTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const epigraphPoetry = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.epigraph-poetry",
+      tag: 'p.epigraph-poetry',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default epigraphPoetry;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphProseTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphProseTrackNode.js
index e4135cf066f6a8bfafd80c67bdfff739efd81d35..d77610beb56e4d0b74f2a4a08c45392e9730bf49 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphProseTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/epigraphProseTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const epigraphProse = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.epigraph-prose",
+      tag: 'p.epigraph-prose',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default epigraphProse;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractPoetryTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractPoetryTrackNode.js
index 937af7bd409a759bf6d7f6964bce034fc4a5652a..9cff2b413f4a878b8b271abba90725c815b82f6b 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractPoetryTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractPoetryTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const extractPoetry = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.extract-poetry",
+      tag: 'p.extract-poetry',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default extractPoetry;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractProseTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractProseTrackNode.js
index 83d9bda493c84dd53f96423beb3e4c3aae914462..c6e9363fdcf6a0e231adf1a532cecee51a194b2c 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractProseTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/extractProseTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const extractProse = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.extract-prose",
+      tag: 'p.extract-prose',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default extractProse;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js
index 55be2a66ac193dfde9ceb1173573cf41108c1b9e..c94abe30856a65d5ef41b29869deae6e516879ec 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/headingTrackNode.js
@@ -1,59 +1,64 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const heading = {
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   defining: true,
   parseDOM: [
     {
-      tag: "h1",
+      tag: 'h1',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
+      },
     },
     {
-      tag: "h2",
+      tag: 'h2',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
+      },
     },
     {
-      tag: "h3",
+      tag: 'h3',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default heading;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js
index a4214da44d0fc2b9fb84141c968cee15b2bab89d..c3727ca774044bd88e8b711489a2499b78cfe958 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/orderedListTrackNode.js
@@ -1,36 +1,39 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const orderedlist = {
-  group: "block",
-  content: "list_item+",
+  group: 'block',
+  content: 'list_item+',
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "ol",
+      tag: 'ol',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default orderedlist;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/paragraphContTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/paragraphContTrackNode.js
index 3bc477abf0276a19fe589ea4720ea7f21875e4ad..35a760346dea8732116a45af09ddcc27853f6e81 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/paragraphContTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/paragraphContTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const paragraphCont = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.paragraph-cont",
+      tag: 'p.paragraph-cont',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default paragraphCont;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/sourceNoteTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/sourceNoteTrackNode.js
index cf9437b3c0dee938b6d47a1eb15f30fa19b3571f..89c7debeac6d7e9002f3f6288b18904f44ab8654 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/sourceNoteTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/sourceNoteTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const sourceNote = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.source-note",
+      tag: 'p.source-note',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default sourceNote;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/subTitleTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/subTitleTrackNode.js
index c2d21e6124556dfc41efd55eed8c91927f878295..16f5665673128a97b9a3586b7dfd1b00b882ff13 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/subTitleTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/subTitleTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const subtitle = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.cst",
+      tag: 'p.cst',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default subtitle;
diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/titleTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/titleTrackNode.js
index 81de595b527ab4a1761d3abaab3cd353480f2343..8276e0cf8ed73ccf135a3d933b7ae1c393d3c9ae 100644
--- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/titleTrackNode.js
+++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/titleTrackNode.js
@@ -1,38 +1,41 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const title = {
-  content: "inline*",
-  group: "block",
+  content: 'inline*',
+  group: 'block',
   priority: 0,
   defining: true,
   attrs: {
-    id: { default: "" },
+    id: { default: '' },
     track: { default: [] },
-    group: { default: "" }
+    group: { default: '' },
+    viewid: { default: '' },
   },
   parseDOM: [
     {
-      tag: "p.title",
+      tag: 'p.title',
       getAttrs(hook, next) {
         Object.assign(hook, {
           id: hook.dom.dataset.id,
           track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
-          group: hook.dom.dataset.group
+          group: hook.dom.dataset.group,
+          viewid: hook.dom.dataset.viewid,
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     if (hook.node.attrs.track.length) {
       Object.assign(hook.value[1], {
-        "data-id": hook.node.attrs.id,
-        "data-track": JSON.stringify(hook.node.attrs.track),
-        "data-group": hook.node.attrs.group
+        'data-id': hook.node.attrs.id,
+        'data-track': JSON.stringify(hook.node.attrs.track),
+        'data-group': hook.node.attrs.group,
+        'data-viewid': hook.node.attrs.viewid,
       });
     }
     next();
-  }
+  },
 };
 
 export default title;
diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js
index b8bcb437df04ef465e2cce279185fb02413dcf88..8051a106f8caf0d3be08fc9143bd47d7a2621ebd 100644
--- a/wax-prosemirror-services/src/NoteService/Editor.js
+++ b/wax-prosemirror-services/src/NoteService/Editor.js
@@ -69,7 +69,7 @@ export default ({ node, view }) => {
     );
 
     const tr = TrackChange.enabled
-      ? trackedTransaction(transaction, noteView.state, user, 'notes')
+      ? trackedTransaction(transaction, noteView.state, user, 'notes', noteId)
       : transaction;
 
     const { state, transactions } = noteView.state.applyTransaction(tr);
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/addMarkStep.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/addMarkStep.js
index 79fe7d527088f7f36029a4d39e2a1679c2e877d0..c3ce98fac0665b5ec0e3daf4a27f38abee670a3d 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/addMarkStep.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/addMarkStep.js
@@ -1,6 +1,17 @@
 import { v4 as uuidv4 } from 'uuid';
 
-const addMarkStep = (state, tr, step, newTr, map, doc, user, date, group) => {
+const addMarkStep = (
+  state,
+  tr,
+  step,
+  newTr,
+  map,
+  doc,
+  user,
+  date,
+  group,
+  viewId,
+) => {
   doc.nodesBetween(step.from, step.to, (node, pos) => {
     if (!node.isInline) {
       return true;
@@ -43,13 +54,14 @@ const addMarkStep = (state, tr, step, newTr, map, doc, user, date, group) => {
           step.from,
           step.to,
           state.schema.marks.format_change.create({
+            id: uuidv4(),
             user: user.userId,
             username: user.username,
             date,
             before,
             after,
             group,
-            id: uuidv4(),
+            viewid: viewId,
           }),
         );
       } else if (formatChangeMark) {
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js
index b577ad96901d871530d251d114aa92db034274cb..25cb33220f48adc4fa7a0087467f2f5352fd510d 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js
@@ -2,7 +2,7 @@ import { Selection, TextSelection } from 'prosemirror-state';
 import { Slice } from 'prosemirror-model';
 import { ReplaceStep, Mapping } from 'prosemirror-transform';
 
-const markDeletion = (tr, from, to, user, date, group) => {
+const markDeletion = (tr, from, to, user, date, group, viewId) => {
   const deletionMark = tr.doc.type.schema.marks.deletion.create({
     user: user.userId,
     username: user.username,
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markInsertion.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markInsertion.js
index d9c6d841428a7e2cbb028dd083daf2cc0a15e7b1..c91420e2d5b0859a768474c07a5569faede09caa 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markInsertion.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markInsertion.js
@@ -1,12 +1,12 @@
-import { v4 as uuidv4 } from "uuid";
+import { v4 as uuidv4 } from 'uuid';
 
-const markInsertion = (tr, from, to, user, date, group) => {
+const markInsertion = (tr, from, to, user, date, group, viewId) => {
   tr.removeMark(from, to, tr.doc.type.schema.marks.deletion);
   tr.removeMark(from, to, tr.doc.type.schema.marks.insertion);
 
   const insertionMark = tr.doc.type.schema.marks.insertion.create({
     user: user.userId,
-    username: user.username
+    username: user.username,
     // date
   });
 
@@ -15,12 +15,12 @@ const markInsertion = (tr, from, to, user, date, group) => {
   tr.doc.nodesBetween(from, to, (node, pos) => {
     if (
       pos < from ||
-      ["bullet_list", "ordered_list"].includes(node.type.name)
+      ['bullet_list', 'ordered_list'].includes(node.type.name)
     ) {
       return true;
     } else if (
       node.isInline ||
-      ["table_row", "table_cell"].includes(node.type.name)
+      ['table_row', 'table_cell'].includes(node.type.name)
     ) {
       return false;
     }
@@ -28,21 +28,22 @@ const markInsertion = (tr, from, to, user, date, group) => {
       const track = [];
 
       track.push({
-        type: "insertion",
+        type: 'insertion',
         user: user.userId,
         username: user.username,
         date,
-        group
+        group,
+        viewid: viewId,
       });
 
       tr.setNodeMarkup(
         pos,
         null,
         Object.assign({}, node.attrs, { track, group, id: uuidv4() }),
-        node.marks
+        node.marks,
       );
     }
-    if (node.type.name === "table") {
+    if (node.type.name === 'table') {
       // A table was inserted. We don't add track marks to elements inside of it.
       return false;
     }
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markWrapping.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markWrapping.js
index 4ceec4eb5b75c8568927045f8640bf2726552547..c1bbe472295935305626418d3201834dea3cced5 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markWrapping.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markWrapping.js
@@ -1,6 +1,7 @@
 import { v4 as uuidv4 } from 'uuid';
 
-const markWrapping = (tr, pos, oldNode, newNode, user, date, group) => {
+const markWrapping = (tr, pos, oldNode, newNode, user, date, group, viewId) => {
+  console.log(viewId, 'hooo');
   let track = oldNode.attrs.track.slice();
   let blockTrack = track.find(track => track.type === 'block_change');
 
@@ -38,7 +39,12 @@ const markWrapping = (tr, pos, oldNode, newNode, user, date, group) => {
   tr.setNodeMarkup(
     pos,
     null,
-    Object.assign({}, newNode.attrs, { track, group, id: uuidv4() }),
+    Object.assign({}, newNode.attrs, {
+      track,
+      group,
+      id: uuidv4(),
+      viewid: viewId,
+    }),
   );
 };
 
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceAroundStep.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceAroundStep.js
index 373ec42c13646e51f2094ec641b45519be3000ed..b5b505cbe2978ea541f53b5c77219fd5d8e7f332 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceAroundStep.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceAroundStep.js
@@ -13,6 +13,7 @@ const replaceAroundStep = (
   user,
   date,
   group,
+  viewId,
 ) => {
   if (step.from === step.gapFrom && step.to === step.gapTo) {
     // wrapped in something
@@ -43,6 +44,7 @@ const replaceAroundStep = (
         user,
         date,
         group,
+        viewId,
       );
     }
   } else {
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js
index 3fef5b5e4a85049485067e36e3875bf9caeb7f12..2a78141df9d61c16ba101cefa1eb1195e472c761 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js
@@ -4,7 +4,18 @@ import { DocumentHelpers } from 'wax-prosemirror-utilities';
 import markDeletion from './markDeletion';
 import markInsertion from './markInsertion';
 
-const replaceStep = (state, tr, step, newTr, map, doc, user, date, group) => {
+const replaceStep = (
+  state,
+  tr,
+  step,
+  newTr,
+  map,
+  doc,
+  user,
+  date,
+  group,
+  viewId,
+) => {
   const deletionMarkSchema = state.schema.marks.deletion;
   const deletionMark = DocumentHelpers.findMark(
     state,
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
index 1d8e18fa05e5cba38db11ef0c07b83879c8032ee..b5ff325174c0e67cf6e94bc1eb8646e3782de16c 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
@@ -13,7 +13,13 @@ import replaceAroundStep from './helpers/replaceAroundStep';
 import addMarkStep from './helpers/addMarkStep';
 import removeMarkStep from './helpers/removeMarkStep';
 
-const trackedTransaction = (tr, state, user, group = 'main') => {
+const trackedTransaction = (
+  tr,
+  state,
+  user,
+  group = 'main',
+  viewId = 'main',
+) => {
   // Don't track table operations
   if (!tr.selectionSet) {
     const $pos = state.selection.$anchor;
@@ -61,16 +67,60 @@ const trackedTransaction = (tr, state, user, group = 'main') => {
 
     switch (step.constructor) {
       case ReplaceStep:
-        replaceStep(state, tr, step, newTr, map, doc, user, date, group);
+        replaceStep(
+          state,
+          tr,
+          step,
+          newTr,
+          map,
+          doc,
+          user,
+          date,
+          group,
+          viewId,
+        );
         break;
       case ReplaceAroundStep:
-        replaceAroundStep(state, tr, step, newTr, map, doc, user, date, group);
+        replaceAroundStep(
+          state,
+          tr,
+          step,
+          newTr,
+          map,
+          doc,
+          user,
+          date,
+          group,
+          viewId,
+        );
         break;
       case AddMarkStep:
-        addMarkStep(state, tr, step, newTr, map, doc, user, date, group);
+        addMarkStep(
+          state,
+          tr,
+          step,
+          newTr,
+          map,
+          doc,
+          user,
+          date,
+          group,
+          viewId,
+        );
         break;
       case RemoveMarkStep:
-        removeMarkStep(state, tr, step, newTr, map, doc, user, date, group);
+        removeMarkStep(
+          state,
+          tr,
+          step,
+          newTr,
+          map,
+          doc,
+          user,
+          date,
+          group,
+          viewId,
+        );
         break;
       default:
     }
diff --git a/wax-prosemirror-utilities/src/schema/DefaultSchema.js b/wax-prosemirror-utilities/src/schema/DefaultSchema.js
index 26295da1435fc629db431c5f0e750133663e1c70..73703ab0eceb9c5c9fe4379588aa99e803625322 100644
--- a/wax-prosemirror-utilities/src/schema/DefaultSchema.js
+++ b/wax-prosemirror-utilities/src/schema/DefaultSchema.js
@@ -25,6 +25,7 @@ export default {
         class: { default: 'paragraph' },
         track: { default: [] },
         group: { default: '' },
+        viewid: { default: '' },
       },
       parseDOM: [
         {
@@ -35,6 +36,7 @@ export default {
               class: dom.getAttribute('class'),
               track: SchemaHelpers.parseTracks(dom.dataset.track),
               group: dom.dataset.group,
+              viewid: dom.dataset.viewid,
             };
           },
         },
diff --git a/wax-prosemirror-utilities/src/schema/SchemaHelpers.js b/wax-prosemirror-utilities/src/schema/SchemaHelpers.js
index 79134bb58f82bf84d73c68cfa1cb3ee2c375e39f..9875e86694369284c4b1912b450a3fdb6e2f7fd5 100644
--- a/wax-prosemirror-utilities/src/schema/SchemaHelpers.js
+++ b/wax-prosemirror-utilities/src/schema/SchemaHelpers.js
@@ -11,7 +11,7 @@ const parseFormatList = str => {
   if (!Array.isArray(formatList)) {
     return [];
   }
-  return formatList.filter(format => typeof format === "string");
+  return formatList.filter(format => typeof format === 'string');
 };
 
 const parseTracks = str => {
@@ -29,11 +29,11 @@ const parseTracks = str => {
   }
   return tracks.filter(
     (
-      track // ensure required fields are present
+      track, // ensure required fields are present
     ) =>
-      track.hasOwnProperty("user") &&
-      track.hasOwnProperty("username") &&
-      track.hasOwnProperty("date")
+      track.hasOwnProperty('user') &&
+      track.hasOwnProperty('username') &&
+      track.hasOwnProperty('date'),
   );
 };
 
@@ -41,10 +41,11 @@ const blockLevelToDOM = node => {
   const attrs =
     node.attrs.track && node.attrs.track.length
       ? {
-          "data-id": node.attrs.id,
+          'data-id': node.attrs.id,
           class: node.attrs.class,
-          "data-track": JSON.stringify(node.attrs.track),
-          "data-group": node.attrs.group
+          'data-track': JSON.stringify(node.attrs.track),
+          'data-group': node.attrs.group,
+          'data-viewid': node.attrs.viewid,
         }
       : { class: node.attrs.class };
   return attrs;