diff --git a/LICENSE b/LICENSE
index c6d1521ff758de916ce04fef32c747676c818c9c..25d4f9fb2bc79f181e40c5aa7026d0e80195c935 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2019, Adam Hyde
+Copyright (c) 2019
 
 MIT License (https://opensource.org/licenses/MIT)
 
diff --git a/package.json b/package.json
index eac8c34ecbc0be7250f9dd7b5a0f11d5f28624d0..6472eb3c00db022238346b18a6c1f6171a9d9fd1 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
   "name": "wax-prosemirror-monorepo",
-  "version": "0.0.1",
+  "version": "0.0.13",
   "main": "index.js",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "description": "Monorepo for wax-prosemirror, its components and its integrations",
   "repository": {
     "type": "git",
diff --git a/wax-prosemirror-components/package.json b/wax-prosemirror-components/package.json
index cfb0da02f1e61f36036e4f0c9fb0bbe588d4b3bf..aad9053e8b3d7f61707bf2aef86b52c0ed44860c 100644
--- a/wax-prosemirror-components/package.json
+++ b/wax-prosemirror-components/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-components",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror UI components",
   "license": "MIT",
diff --git a/wax-prosemirror-components/src/components/Button.js b/wax-prosemirror-components/src/components/Button.js
index cb1049ccad5968155f4a940998db55b03d70a1c9..85cf9df094a3b0ca9905ef4ee68277b3a5332bd3 100644
--- a/wax-prosemirror-components/src/components/Button.js
+++ b/wax-prosemirror-components/src/components/Button.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import React, { useContext } from 'react';
 import styled from 'styled-components';
 import { ButtonStyles } from 'wax-prosemirror-themes';
diff --git a/wax-prosemirror-components/src/components/HeadingsDropDown.js b/wax-prosemirror-components/src/components/HeadingsDropDown.js
index d4fdcaea747f914ccf1329ba587303778e7d4258..18d1a5712be65f19f96ec19f5b60fbc4f3df1f6e 100644
--- a/wax-prosemirror-components/src/components/HeadingsDropDown.js
+++ b/wax-prosemirror-components/src/components/HeadingsDropDown.js
@@ -1,20 +1,21 @@
-import React from "react";
-import styled from "styled-components";
-import { Commands } from "wax-prosemirror-utilities";
-import Dropdown from "react-dropdown";
-import "react-dropdown/style.css";
+/* eslint react/prop-types: 0 */
+import React from 'react';
+import styled from 'styled-components';
+import { Commands } from 'wax-prosemirror-utilities';
+import Dropdown from 'react-dropdown';
+import 'react-dropdown/style.css';
 
 const DropdownStyled = styled(Dropdown)`
-  display: ${props => (props.select ? "inline-flex" : "none")};
+  display: ${props => (props.select ? 'inline-flex' : 'none')};
   .Dropdown-control {
     border: none;
   }
 `;
 
 const dropDownOptions = [
-  { label: "Heading 1", value: "1" },
-  { label: "Heading  2", value: "2" },
-  { label: "Heading 3", value: "3" }
+  { label: 'Heading 1', value: '1' },
+  { label: 'Heading  2', value: '2' },
+  { label: 'Heading 3', value: '3' },
 ];
 
 const HeadingsDropDown = ({ dispatch, state, item }) => (
@@ -22,7 +23,7 @@ const HeadingsDropDown = ({ dispatch, state, item }) => (
     options={dropDownOptions}
     onChange={option => {
       Commands.setBlockType(state.config.schema.nodes.heading, {
-        level: option.value
+        level: option.value,
       })(state, dispatch);
     }}
     placeholder="Choose heading"
diff --git a/wax-prosemirror-components/src/components/ImageUpload.js b/wax-prosemirror-components/src/components/ImageUpload.js
index a82798f3235855db220bd20e96db1b4ec1260e8c..965f46be22f609676998bb98e9f8bf81a6acc9d1 100644
--- a/wax-prosemirror-components/src/components/ImageUpload.js
+++ b/wax-prosemirror-components/src/components/ImageUpload.js
@@ -1,7 +1,11 @@
-import React from "react";
-import styled from "styled-components";
+/* eslint react/prop-types: 0 */
+import React, { useContext } from 'react';
+import { WaxContext } from 'wax-prosemirror-core';
+import styled from 'styled-components';
 
 const UploadImage = styled.div`
+  opacity: ${props => (props.select ? 1 : 0.4)};
+  pointer-events: ${props => (props.select ? 'default' : 'none')};
   color: #777;
   display: inline-flex;
   padding: 0px 10px;
@@ -14,20 +18,23 @@ const UploadImage = styled.div`
     display: none;
   }
 `;
-const ImageUpload = ({ item, fileUpload }) => (
-  <UploadImage>
-    <label
-      className="custom-file-upload"
-      title="upload image"
-      htmlFor="file-upload"
-    >
-      {item.content}
-      <input
-        id="file-upload"
-        onChange={e => fileUpload(e.target.files[0])}
-        type="file"
-      />
-    </label>
-  </UploadImage>
-);
+const ImageUpload = ({ item, fileUpload, view }) => {
+  const { activeViewId } = useContext(WaxContext);
+  return (
+    <UploadImage select={item.select && item.select(view.state, activeViewId)}>
+      <label
+        className="custom-file-upload"
+        title="upload image"
+        htmlFor="file-upload"
+      >
+        {item.content}
+        <input
+          id="file-upload"
+          onChange={e => fileUpload(e.target.files[0])}
+          type="file"
+        />
+      </label>
+    </UploadImage>
+  );
+};
 export default ImageUpload;
diff --git a/wax-prosemirror-components/src/components/TableDropDown.js b/wax-prosemirror-components/src/components/TableDropDown.js
index 950c1a53eac116eadc25865e9b744510d41f204f..72c1f5d69c7b1edc3219ca0cd85b91ce00bbceea 100644
--- a/wax-prosemirror-components/src/components/TableDropDown.js
+++ b/wax-prosemirror-components/src/components/TableDropDown.js
@@ -1,14 +1,15 @@
-import React from "react";
-import styled from "styled-components";
-import * as tablesFn from "prosemirror-tables";
-import Dropdown from "react-dropdown";
-import "react-dropdown/style.css";
+/* eslint react/prop-types: 0 */
+import React from 'react';
+import styled from 'styled-components';
+import * as tablesFn from 'prosemirror-tables';
+import Dropdown from 'react-dropdown';
+import 'react-dropdown/style.css';
 
 const DropdownStyled = styled(Dropdown)`
   display: inline-flex;
   cursor: not-allowed;
   opacity: ${props => (props.select ? 1 : 0.4)};
-  pointer-events: ${props => (props.select ? "default" : "none")};
+  pointer-events: ${props => (props.select ? 'default' : 'none')};
   .Dropdown-control {
     border: none;
   }
@@ -28,28 +29,29 @@ const DropdownStyled = styled(Dropdown)`
 `;
 
 const dropDownOptions = [
-  { label: "add column before", value: "addColumnBefore" },
-  { label: "add column after", value: "addColumnAfter" },
-  { label: "Delete column", value: "deleteColumn" },
-  { label: "Insert row before", value: "addRowBefore" },
-  { label: "Insert row after", value: "addRowAfter" },
-  { label: "Delete row", value: "deleteRow" },
-  { label: "Delete table", value: "deleteTable" },
-  { label: "Merge cells", value: "mergeCells" },
-  { label: "Split cell", value: "splitCell" },
-  { label: "Toggle header column", value: "toggleHeaderColumn" },
-  { label: "Toggle header row", value: "toggleHeaderRow" },
-  { label: "Toggle header cells", value: "toggleHeaderCell" }
+  { label: 'add column before', value: 'addColumnBefore' },
+  { label: 'add column after', value: 'addColumnAfter' },
+  { label: 'Delete column', value: 'deleteColumn' },
+  { label: 'Insert row before', value: 'addRowBefore' },
+  { label: 'Insert row after', value: 'addRowAfter' },
+  { label: 'Delete row', value: 'deleteRow' },
+  { label: 'Delete table', value: 'deleteTable' },
+  { label: 'Merge cells', value: 'mergeCells' },
+  { label: 'Split cell', value: 'splitCell' },
+  { label: 'Toggle header column', value: 'toggleHeaderColumn' },
+  { label: 'Toggle header row', value: 'toggleHeaderRow' },
+  { label: 'Toggle header cells', value: 'toggleHeaderCell' },
 ];
 
 const TableDropDown = ({ view: { dispatch, state }, item }) => (
   <DropdownStyled
     options={dropDownOptions}
     onChange={option => {
-      tablesFn[option.value](state, dispatch);
+      item.run(state, dispatch, tablesFn[option.value]);
     }}
     placeholder="Table Options"
     select={item.select && item.select(state)}
   />
 );
+
 export default TableDropDown;
diff --git a/wax-prosemirror-components/src/components/comments/Comment.js b/wax-prosemirror-components/src/components/comments/Comment.js
index 6845cc58adf9f372f9d7b21f6b71912bbc87ea2d..c215af8c8a0e474692012968405d2a74041f6531 100644
--- a/wax-prosemirror-components/src/components/comments/Comment.js
+++ b/wax-prosemirror-components/src/components/comments/Comment.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import React, { useState, useRef, useEffect } from 'react';
 import { v4 as uuidv4 } from 'uuid';
 import { last } from 'lodash';
@@ -43,7 +44,7 @@ export default ({ comment, activeView, user, active }) => {
     const {
       current: { value },
     } = commentInput;
-    const { tr, doc } = state;
+    const { tr } = state;
 
     const obj = {
       content: value,
diff --git a/wax-prosemirror-components/src/components/comments/CommentBox.js b/wax-prosemirror-components/src/components/comments/CommentBox.js
index d77ee80323133a2ae2d613960d8666dd9d61d81d..05b730cb2f9a79898ca8bf90ef89ef69a8e5c657 100644
--- a/wax-prosemirror-components/src/components/comments/CommentBox.js
+++ b/wax-prosemirror-components/src/components/comments/CommentBox.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import React, { useState, useEffect, useContext, memo } from 'react';
 import { TextSelection } from 'prosemirror-state';
 import { last, maxBy } from 'lodash';
@@ -27,12 +28,12 @@ const CommentBoxStyled = styled.div`
         return 0.6;
       case 'entered':
         return 1;
+      default:
     }
   }};
 `;
 
 export default ({ comment, top, dataBox }) => {
-  console.log('rerender');
   const [animate, setAnimate] = useState(false);
   const {
     attrs: { id },
diff --git a/wax-prosemirror-components/src/components/comments/CommentBubbleComponent.js b/wax-prosemirror-components/src/components/comments/CommentBubbleComponent.js
index 1c8b2fcd02d6a0a10f071265b1451a5f96d17c73..79b2a117e4a22157962d8638ea3769a1ea2e3f97 100644
--- a/wax-prosemirror-components/src/components/comments/CommentBubbleComponent.js
+++ b/wax-prosemirror-components/src/components/comments/CommentBubbleComponent.js
@@ -1,5 +1,5 @@
-import React, { useLayoutEffect, useState, useContext } from 'react';
-import styled from 'styled-components';
+/* eslint react/prop-types: 0 */
+import React, { useLayoutEffect, useContext } from 'react';
 import { Commands, DocumentHelpers } from 'wax-prosemirror-utilities';
 import { WaxContext } from 'wax-prosemirror-core';
 
@@ -32,12 +32,8 @@ const CommentBubbleComponent = ({
   const isSelectionComment = () => {
     const commentMark = activeView.state.schema.marks.comment;
     const mark = DocumentHelpers.findMark(state, commentMark, true);
-    const {
-      selection: { $from, $to },
-      doc,
-    } = state;
 
-    //TODO Overlapping comments . for now don't allow
+    // TODO Overlapping comments . for now don't allow
     if (mark.length >= 1) return true;
     return false;
   };
diff --git a/wax-prosemirror-components/src/components/link/LinkComponent.js b/wax-prosemirror-components/src/components/link/LinkComponent.js
index 7fc43a202c8c296700f9298f65e1a0f19462e21c..8c4b32a8d8699758e7ccd677c9af3cd225dd43df 100644
--- a/wax-prosemirror-components/src/components/link/LinkComponent.js
+++ b/wax-prosemirror-components/src/components/link/LinkComponent.js
@@ -1,7 +1,8 @@
-import React, { useRef, useEffect, useState, useContext } from "react";
-import styled from "styled-components";
-import { WaxContext } from "wax-prosemirror-core";
-import { DocumentHelpers } from "wax-prosemirror-utilities";
+/* eslint react/prop-types: 0 */
+import React, { useRef, useEffect, useState, useContext } from 'react';
+import styled from 'styled-components';
+import { WaxContext } from 'wax-prosemirror-core';
+import { DocumentHelpers } from 'wax-prosemirror-utilities';
 
 const LinkWrapper = styled.div`
   padding: 20px;
@@ -19,25 +20,23 @@ const Button = styled.button`
 `;
 
 const LinkComponent = ({ mark, setPosition, position }) => {
-  const href = mark ? mark.attrs.href : null,
-    linkMark = mark ? mark : null,
-    { view: { main }, activeView } = useContext(WaxContext),
-    { state, dispatch } = activeView,
-    ref = useRef(null),
-    linkInput = useRef(null),
-    [addButtonText, setButtonText] = useState("Create"),
-    [lastLinkMark, setLLastLinkMark] = useState(linkMark),
-    [linkHref, setLinkHref] = useState(href);
+  const href = mark ? mark.attrs.href : null;
+  const linkMark = mark ? mark : null;
+  const {
+    view: { main },
+    activeView,
+  } = useContext(WaxContext);
+  const { state, dispatch } = activeView;
+  const ref = useRef(null);
+  const linkInput = useRef(null);
+  const [addButtonText, setButtonText] = useState('Create');
+  const [lastLinkMark, setLLastLinkMark] = useState(linkMark);
+  const [linkHref, setLinkHref] = useState(href);
 
-  useEffect(
-    () => {
-      const width = ref.current ? ref.current.offsetWidth : 0;
-      const left = Math.abs(position.left - width / 2);
-      setLinkText();
-      removeMarkIfEmptyHref();
-    },
-    [ref.current, href]
-  );
+  useEffect(() => {
+    setLinkText();
+    removeMarkIfEmptyHref();
+  }, [ref.current, href]);
 
   const addLinkHref = () => {
     const href = linkHref;
@@ -50,9 +49,9 @@ const LinkComponent = ({ mark, setPosition, position }) => {
         mark.to,
         linkMark.create({
           ...((mark && mark.attrs) || {}),
-          href
-        })
-      )
+          href,
+        }),
+      ),
     );
     activeView.focus();
   };
@@ -63,45 +62,49 @@ const LinkComponent = ({ mark, setPosition, position }) => {
   };
 
   const handleKeyDown = event => {
-    if (event.key === "Enter" || event.which === 13) {
+    if (event.key === 'Enter' || event.which === 13) {
       addLinkHref();
     }
   };
 
   const updateLinkHref = () => {
-    const { current: { value } } = linkInput;
+    const {
+      current: { value },
+    } = linkInput;
     setLinkHref(value);
   };
 
   const setLinkText = () => {
-    if (mark && mark.attrs.href !== "") {
-      setButtonText("Update");
+    if (mark && mark.attrs.href !== '') {
+      setButtonText('Update');
       setLinkHref(mark.attrs.href);
     } else {
-      setButtonText("Create");
-      setLinkHref("");
+      setButtonText('Create');
+      setLinkHref('');
       if (linkInput.current) linkInput.current.focus();
     }
   };
 
   const removeMarkIfEmptyHref = () => {
-    const { selection: { $from, $to } } = state;
-    const PMLinkMark = state.schema.marks["link"];
+    const {
+      selection: { $from, $to },
+    } = state;
+    const PMLinkMark = state.schema.marks['link'];
     const actualMark = DocumentHelpers.getSelectionMark(state, PMLinkMark);
     setLLastLinkMark(actualMark);
 
     if (
-      lastLinkMark.attrs.href === "" &&
+      lastLinkMark.attrs.href === '' &&
       ($from.pos < lastLinkMark.from || $to.pos > lastLinkMark.to)
     ) {
       dispatch(
         state.tr
-          .setMeta("addToHistory", false)
+          .setMeta('addToHistory', false)
           .removeMark(
             lastLinkMark.from,
             lastLinkMark.to,
-            state.schema.marks.link
-          )
+            state.schema.marks.link,
+          ),
       );
     }
   };
diff --git a/wax-prosemirror-components/src/components/notes/NoteEditorContainer.js b/wax-prosemirror-components/src/components/notes/NoteEditorContainer.js
index 9aee856a0018f196896ff03d37c48417e977270d..3d06af2633608efd024b5c63801b421c18877e9c 100644
--- a/wax-prosemirror-components/src/components/notes/NoteEditorContainer.js
+++ b/wax-prosemirror-components/src/components/notes/NoteEditorContainer.js
@@ -1,7 +1,7 @@
-import React from "react";
-import styled from "styled-components";
+import React from 'react';
+import styled from 'styled-components';
 
-import NoteNumber from "./NoteNumber";
+import NoteNumber from './NoteNumber';
 
 const NoteEditorContainerStyled = styled.div`
   display: flex;
@@ -23,6 +23,11 @@ const NoteStyled = styled.div`
   &:focus {
     outline: none;
   }
+
+  p {
+    margin: 0;
+  }
+
   span.comment {
     border-bottom: 2px solid #ffab20;
     border-radius: 3px 3px 0 0;
diff --git a/wax-prosemirror-components/src/components/notes/NoteNumber.js b/wax-prosemirror-components/src/components/notes/NoteNumber.js
index aa79ea8c7644ff3cd5bc67b3e89dcf44fc35bfdd..3341978eda376a797e347092c672e92854df9f2f 100644
--- a/wax-prosemirror-components/src/components/notes/NoteNumber.js
+++ b/wax-prosemirror-components/src/components/notes/NoteNumber.js
@@ -1,5 +1,6 @@
-import React from "react";
-import styled from "styled-components";
+/* eslint react/prop-types: 0 */
+import React from 'react';
+import styled from 'styled-components';
 
 const NoteNumberStyled = styled.div`
   display: flex;
diff --git a/wax-prosemirror-components/src/components/rightArea/BoxList.js b/wax-prosemirror-components/src/components/rightArea/BoxList.js
index 10d1d454d041b6bacfc5d33a01716707abc60f61..23e2ab47a3a6fca236f11b694ededc4d75700398 100644
--- a/wax-prosemirror-components/src/components/rightArea/BoxList.js
+++ b/wax-prosemirror-components/src/components/rightArea/BoxList.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import { Mark } from 'prosemirror-model';
 import React from 'react';
 import CommentBox from '../comments/CommentBox';
diff --git a/wax-prosemirror-components/src/components/rightArea/RightArea.js b/wax-prosemirror-components/src/components/rightArea/RightArea.js
index a11ecbbb708743a0a9514d2dad8b82b6523b1f71..b66fa208e103b1ef45964ac047cf50a9df15613f 100644
--- a/wax-prosemirror-components/src/components/rightArea/RightArea.js
+++ b/wax-prosemirror-components/src/components/rightArea/RightArea.js
@@ -1,11 +1,6 @@
+/* eslint react/prop-types: 0 */
 import { Mark } from 'prosemirror-model';
-import React, {
-  useContext,
-  useState,
-  useEffect,
-  useMemo,
-  useCallback,
-} from 'react';
+import React, { useContext, useState, useMemo, useCallback } from 'react';
 import useDeepCompareEffect from 'use-deep-compare-effect';
 import { each, uniqBy, sortBy } from 'lodash';
 import { WaxContext } from 'wax-prosemirror-core';
diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js
index d2ec7235f617014fde5d83da1c61a40437f3c674..b81aa5ec4122eaf91de33a7d7593bd0073429c8f 100644
--- a/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js
+++ b/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js
@@ -1,8 +1,9 @@
-import { Mark } from "prosemirror-model";
-import React, { Fragment, useState, useEffect, useContext } from "react";
-import { Transition } from "react-transition-group";
-import styled from "styled-components";
-import { WaxContext } from "wax-prosemirror-core";
+/* eslint react/prop-types: 0 */
+import { Mark } from 'prosemirror-model';
+import React, { useState, useEffect, useContext } from 'react';
+import { Transition } from 'react-transition-group';
+import styled from 'styled-components';
+import { WaxContext } from 'wax-prosemirror-core';
 
 const TrackChangeBoxStyled = styled.div`
   display: flex;
@@ -10,30 +11,37 @@ const TrackChangeBoxStyled = styled.div`
   margin-top: 10px;
   border: 1px solid blue;
   position: absolute;
-  transition: ${({ state }) => "top 1s, opacity 1.5s, left 1s"};
+  transition: ${({ state }) => 'top 1s, opacity 1.5s, left 1s'};
   top: ${props => (props.top ? `${props.top}px` : 0)};
   left: ${props => (props.active ? `${63}%` : `${65}%`)};
   opacity: ${({ state }) => {
     switch (state) {
-      case "exited":
+      case 'exited':
         return 0.2;
-      case "exiting":
+      case 'exiting':
         return 0.4;
-      case "entering":
+      case 'entering':
         return 0.6;
-      case "entered":
+      case 'entered':
         return 1;
+      default:
     }
   }};
 `;
 
 export default ({ trackChange, view, top, dataBox }) => {
   const [animate, setAnimate] = useState(false);
-  const { view: { main }, app, activeView } = useContext(WaxContext);
+  const {
+    view: { main },
+    app,
+    activeView,
+  } = useContext(WaxContext);
   let action;
   if (trackChange instanceof Mark) {
-    if ((trackChange.type.name = "format_change")) {
-      const { attrs: { username, before, after } } = trackChange;
+    if ((trackChange.type.name = 'format_change')) {
+      const {
+        attrs: { username, before, after },
+      } = trackChange;
       action = `User ${username} added ${after[0]}`;
     }
   } else {
@@ -46,7 +54,7 @@ export default ({ trackChange, view, top, dataBox }) => {
   }, []);
 
   return (
-    <Fragment>
+    <>
       <Transition in={animate} timeout={1000}>
         {state => (
           <TrackChangeBoxStyled
@@ -63,6 +71,6 @@ export default ({ trackChange, view, top, dataBox }) => {
           </TrackChangeBoxStyled>
         )}
       </Transition>
-    </Fragment>
+    </>
   );
 };
diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangeEnable.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangeEnable.js
index 4966c984113a2807d546e6d8a0956a47814c34b6..742f9a9b0765e19d6844c3cf3682e5937d8c1390 100644
--- a/wax-prosemirror-components/src/components/trackChanges/TrackChangeEnable.js
+++ b/wax-prosemirror-components/src/components/trackChanges/TrackChangeEnable.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import React, { useContext, useState } from 'react';
 import styled from 'styled-components';
 import { ButtonStyles } from 'wax-prosemirror-themes';
diff --git a/wax-prosemirror-core/package.json b/wax-prosemirror-core/package.json
index e4767e473ad2678bcd33824fe0b6b36b9e00534d..a344cd488f65ee8e745ab0e136eb9c6e388ff20d 100644
--- a/wax-prosemirror-core/package.json
+++ b/wax-prosemirror-core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-core",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror core",
   "license": "MIT",
diff --git a/wax-prosemirror-core/src/Wax.js b/wax-prosemirror-core/src/Wax.js
index 9c98429022b57a79686833c3490591f292590eba..a562140c2732086d8d02394a7e1e94906f8057e8 100644
--- a/wax-prosemirror-core/src/Wax.js
+++ b/wax-prosemirror-core/src/Wax.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import React, { useEffect, useState } from 'react';
 import debounce from 'lodash/debounce';
 import styled from 'styled-components';
@@ -77,7 +78,7 @@ const Wax = props => {
 
   const WaxOnchange = onChange ? onChange : value => true;
 
-  const editorContent = value ? value : '';
+  const editorContent = value || '';
 
   finalPlugins = defaultPlugins.concat([
     createPlaceholder(placeholder),
diff --git a/wax-prosemirror-layouts/package.json b/wax-prosemirror-layouts/package.json
index b808116174e1fe0d3eaebc7dc915b08c59bd8625..07aa8505d5d0520fa03983d718720a2c410ea1e8 100644
--- a/wax-prosemirror-layouts/package.json
+++ b/wax-prosemirror-layouts/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-layouts",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror layouts",
   "license": "MIT",
diff --git a/wax-prosemirror-layouts/src/layouts/EditorElements.js b/wax-prosemirror-layouts/src/layouts/EditorElements.js
index bff58dbea4d1a510afe180e2b942e5c2764b0a78..32cce8b5db0e6772ebd91f56ef73b1e1859bf930 100644
--- a/wax-prosemirror-layouts/src/layouts/EditorElements.js
+++ b/wax-prosemirror-layouts/src/layouts/EditorElements.js
@@ -170,6 +170,9 @@ export default css`
   span.deletion {
     text-decoration: line-through;
     color: red;
+    footnote {
+      background: red;
+    }
   }
 
   span.insertion {
diff --git a/wax-prosemirror-plugins/package.json b/wax-prosemirror-plugins/package.json
index 28d548f453cd92b8c0155b97d2539b43eb46b679..3340795d9862f8e1e8218bdd03bbaf6f4a4dfac1 100644
--- a/wax-prosemirror-plugins/package.json
+++ b/wax-prosemirror-plugins/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-plugins",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror plugins",
   "license": "MIT",
diff --git a/wax-prosemirror-schema/package.json b/wax-prosemirror-schema/package.json
index 0a1a0bd5bdc56d1550d1813da44798008c40864e..41892f0ec9ea72d6921b5b1a66ef200c0f4b3d9e 100644
--- a/wax-prosemirror-schema/package.json
+++ b/wax-prosemirror-schema/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-schema",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror schema",
   "license": "MIT",
@@ -11,6 +11,7 @@
   },
   "dependencies": {
     "prosemirror-schema-list": "^1.1.2",
-    "prosemirror-tables": "^1.1.0"
+    "prosemirror-tables": "^1.1.0",
+    "wax-prosemirror-utilities": "0.0.13"
   }
 }
diff --git a/wax-prosemirror-schema/src/nodes/codeBlockNode.js b/wax-prosemirror-schema/src/nodes/codeBlockNode.js
index 213c59b47a819e85bbb0a7d209345c4579c1275e..888b9645b42fae5c11bb73ac36351326cb168dd1 100644
--- a/wax-prosemirror-schema/src/nodes/codeBlockNode.js
+++ b/wax-prosemirror-schema/src/nodes/codeBlockNode.js
@@ -3,7 +3,7 @@ const codeBlock = {
   group: 'block',
   code: true,
   defining: true,
-  marks: 'comment',
+  marks: 'comment insertion deletion',
   attrs: { params: { default: '' } },
   parseDOM: [
     {
diff --git a/wax-prosemirror-schema/src/nodes/footNoteNode.js b/wax-prosemirror-schema/src/nodes/footNoteNode.js
index 4b98de07b2325ad0e6678876f35b4075255fb475..f1a97afd24d119771461e380e62d25c238eef635 100644
--- a/wax-prosemirror-schema/src/nodes/footNoteNode.js
+++ b/wax-prosemirror-schema/src/nodes/footNoteNode.js
@@ -1,7 +1,7 @@
 // TODO Write the node in WaxSchema
 const footnote = {
   group: 'inline',
-  content: 'inline*',
+  content: 'block*',
   inline: true,
   atom: true,
   attrs: {
diff --git a/wax-prosemirror-schema/src/nodes/imageNode.js b/wax-prosemirror-schema/src/nodes/imageNode.js
index 9ac1badd366fb0a74a50e0801b6015b0b635565c..9f5d51daae462dcbe1beb74fc35ef4bfe433411b 100644
--- a/wax-prosemirror-schema/src/nodes/imageNode.js
+++ b/wax-prosemirror-schema/src/nodes/imageNode.js
@@ -4,34 +4,34 @@ const image = {
     src: {},
     alt: { default: null },
     title: { default: null },
-    track: { default: [] }
+    track: { default: [] },
   },
-  group: "inline",
+  group: 'inline',
   draggable: true,
   parseDOM: [
     {
-      tag: "img[src]",
+      tag: 'img[src]',
       getAttrs(hook, next) {
         Object.assign(hook, {
-          src: hook.dom.getAttribute("src"),
-          title: hook.dom.getAttribute("title"),
+          src: hook.dom.getAttribute('src'),
+          title: hook.dom.getAttribute('title'),
           // track: parseTracks(hook.dom.dataset.track),
-          alt: hook.dom.getAttribute("alt")
+          alt: hook.dom.getAttribute('alt'),
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     const attrs = {};
-    let temp = "";
+    let temp = '';
     // if (hook.node.attrs.track.length) {
     //   // attrs["data-track"] = JSON.stringify(hook.node.attrs.track);
     // }
-    let { src, alt, title } = hook.node.attrs;
-    hook.value = ["img", { src, alt, title }];
+    const { src, alt, title } = hook.node.attrs;
+    hook.value = ['img', { src, alt, title }];
     next();
-  }
+  },
 };
 
 export default image;
diff --git a/wax-prosemirror-schema/src/nodes/listItemNode.js b/wax-prosemirror-schema/src/nodes/listItemNode.js
index c71fdb2c7f81467b487cf903144b24c9026c9845..ffc88e827530007c3fbd6ac5965026dc2815f012 100644
--- a/wax-prosemirror-schema/src/nodes/listItemNode.js
+++ b/wax-prosemirror-schema/src/nodes/listItemNode.js
@@ -1,30 +1,31 @@
-import { SchemaHelpers } from "wax-prosemirror-utilities";
+/* eslint-disable camelcase */
+import { SchemaHelpers } from 'wax-prosemirror-utilities';
 
 const list_item = {
-  content: "paragraph block*",
+  content: 'paragraph block*',
   attrs: {
-    track: { default: [] }
+    track: { default: [] },
   },
   parseDOM: [
     {
-      tag: "li",
+      tag: 'li',
       getAttrs(hook, next) {
         Object.assign(hook, {
-          track: SchemaHelpers.parseTracks(hook.dom.dataset.track)
+          track: SchemaHelpers.parseTracks(hook.dom.dataset.track),
         });
         next();
-      }
-    }
+      },
+    },
   ],
   toDOM(hook, next) {
     const attrs = {};
     if (hook.node.attrs.track.length) {
-      attrs["data-track"] = JSON.stringify(hook.node.attrs.track);
+      attrs['data-track'] = JSON.stringify(hook.node.attrs.track);
     }
-    hook.value = ["li", attrs, 0];
+    hook.value = ['li', attrs, 0];
     next();
   },
-  defining: true
+  defining: true,
 };
 
 export default list_item;
diff --git a/wax-prosemirror-services/package.json b/wax-prosemirror-services/package.json
index 22673079458da5934fafea02e8dd14c8a6ed710f..b2326e6dc8478b3dfe6f5c3d5e697081c6e63e1a 100644
--- a/wax-prosemirror-services/package.json
+++ b/wax-prosemirror-services/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-services",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror services",
   "license": "MIT",
diff --git a/wax-prosemirror-services/src/CodeBlockService/CodeBlockTool.js b/wax-prosemirror-services/src/CodeBlockService/CodeBlockTool.js
index 6b2b9fca1fcd5bd68db6221ba8312a032084754d..b533ca58d0d42ce09caa904241a45b79d1401789 100644
--- a/wax-prosemirror-services/src/CodeBlockService/CodeBlockTool.js
+++ b/wax-prosemirror-services/src/CodeBlockService/CodeBlockTool.js
@@ -14,6 +14,11 @@ class CodeBlockTool extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return setBlockType(state.config.schema.nodes.code_block)(state);
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js
index 6d68ff01db12d5efedef6a3b489b485eb0b36eb4..a3ee0f83e7593b9738f3fe690814b3e8ae182cd0 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js
@@ -15,6 +15,11 @@ class Author extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.author)(state);
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js
index 819a449b1ec67d9c4b4f6cc39386068922b241a9..b0637041a9e2dbd9312e494bed0600736a2344ef 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js
@@ -15,6 +15,11 @@ class EpigraphPoetry extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.epigraphPoetry)(
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js
index d4a504b3554d4f20dbb0b58d31880e4d3fa1bc44..7ec1f1494876e32a27d6517b48550182bbdb1ab4 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js
@@ -16,6 +16,11 @@ class EpigraphProse extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.epigraphProse)(
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js
index d1724fc9d888d2f21146d52be5c530ae8ca2800c..ce22bd8b3883fbd00c86878c3c1eb729cde7e8f7 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js
@@ -17,6 +17,11 @@ class Heading1 extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.heading, {
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
index 792d810b09767ca9fdab1a7a1e43717698af2a42..da42959866840a0d4a823b2c634cd9250cf61850 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
@@ -17,6 +17,11 @@ class Heading2 extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.heading, {
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
index e1e133d52c26e6f93811586530aeb236a1c32d47..1706b0c14c1329d717e37ddddd8a1a7d1d5464a5 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
@@ -17,6 +17,11 @@ class Heading3 extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.heading, {
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js
index 332d816d9aee15c4e1d616d2382d500875954cb1..d8957703e8782056a3ebced585220b614e534a7e 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js
@@ -1,20 +1,25 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 export default class SubTitle extends Tools {
-  title = "Change to Subtitle";
-  content = "Subtitle";
+  title = 'Change to Subtitle';
+  content = 'Subtitle';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.subtitle, {
-        class: "cst"
+        class: 'cst',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.subtitle)(state);
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js b/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js
index 469096c151095cef8c20dee2ffd9ebeac9acc39c..7548b7b705127f95cbac7ecad04f9c20a15573e0 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js
@@ -1,20 +1,25 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 export default class Title extends Tools {
-  title = "Change to Title";
-  content = "Title";
+  title = 'Change to Title';
+  content = 'Title';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.title, {
-        class: "title"
+        class: 'title',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.title)(state);
diff --git a/wax-prosemirror-services/src/ImageService/Image.js b/wax-prosemirror-services/src/ImageService/Image.js
index 7f0e6fea2b83d42969ee7b49c866a8e7d25adc38..726284945fc44ffcc7c6fdb70f81e6c66b78e673 100644
--- a/wax-prosemirror-services/src/ImageService/Image.js
+++ b/wax-prosemirror-services/src/ImageService/Image.js
@@ -17,6 +17,11 @@ class Image extends Tools {
     return () => true;
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.canInsert(state.config.schema.nodes.image)(state);
@@ -31,7 +36,12 @@ class Image extends Tools {
       this.pmplugins.get('imagePlaceHolder'),
     );
     return this._isDisplayed ? (
-      <ImageUpload key={uuidv4()} item={this.toJSON()} fileUpload={upload} />
+      <ImageUpload
+        key={uuidv4()}
+        item={this.toJSON()}
+        fileUpload={upload}
+        view={view}
+      />
     ) : null;
   }
 }
diff --git a/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js b/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js
index 80ab99f14769e795af2350193d5e37a3970f5a93..eab23cb2aeed0cb9a17d45a288e2a9c0056f32c6 100644
--- a/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js
+++ b/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js
@@ -1,12 +1,12 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { icons } from "wax-prosemirror-components";
-import { wrapInList } from "prosemirror-schema-list";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { icons } from 'wax-prosemirror-components';
+import { wrapInList } from 'prosemirror-schema-list';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 export default class BulletList extends Tools {
-  title = "Wrap in bullet list";
+  title = 'Wrap in bullet list';
   content = icons.bullet_list;
 
   get run() {
@@ -21,6 +21,11 @@ export default class BulletList extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get active() {
     return state => {
       return Commands.blockActive(state.config.schema.nodes.bulletlist)(state);
diff --git a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
index 9f01a6b82605b9517a4686950d2f0cd7a431d3d2..e421df0959c0bf438c0cbaa1e521ef14bee452b9 100644
--- a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
+++ b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
@@ -1,12 +1,12 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { icons } from "wax-prosemirror-components";
-import { wrapInList } from "prosemirror-schema-list";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { icons } from 'wax-prosemirror-components';
+import { wrapInList } from 'prosemirror-schema-list';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 export default class OrderedList extends Tools {
-  title = "Wrap in ordered list";
+  title = 'Wrap in ordered list';
   content = icons.ordered_list;
 
   get run() {
@@ -21,6 +21,11 @@ export default class OrderedList extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get active() {
     return state => {
       return Commands.blockActive(state.config.schema.nodes.orderedlist)(state);
diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js
index acd9b3974b2a59c649752ab8fc9e85c415ff21c2..035acd1b6fd43d212f6075d0f18b1c128db0c952 100644
--- a/wax-prosemirror-services/src/NoteService/Editor.js
+++ b/wax-prosemirror-services/src/NoteService/Editor.js
@@ -1,3 +1,4 @@
+/* eslint react/prop-types: 0 */
 import React, { useEffect, useRef, useContext } from 'react';
 import { filter } from 'lodash';
 import { EditorView } from 'prosemirror-view';
@@ -10,6 +11,7 @@ import { WaxContext } from 'wax-prosemirror-core';
 import { NoteEditorContainer } from 'wax-prosemirror-components';
 import { DocumentHelpers } from 'wax-prosemirror-utilities';
 import transformPasted from './helpers/TransformPasted';
+import trackedTransaction from '../TrackChangeService/track-changes/trackedTransaction';
 
 export default ({ node, view }) => {
   const editorRef = useRef();
@@ -54,7 +56,16 @@ export default ({ node, view }) => {
     }
   }, []);
 
-  const dispatchTransaction = tr => {
+  const dispatchTransaction = transaction => {
+    const { user } = view.props;
+    const TrackChange = context.app.config.get(
+      'config.EnableTrackChangeService',
+    );
+
+    const tr = TrackChange.enabled
+      ? trackedTransaction(transaction, noteView.state, user)
+      : transaction;
+
     const { state, transactions } = noteView.state.applyTransaction(tr);
     noteView.updateState(state);
 
@@ -74,8 +85,8 @@ export default ({ node, view }) => {
     }, 20);
 
     if (!tr.getMeta('fromOutside')) {
-      let outerTr = view.state.tr,
-        offsetMap = StepMap.offset(noteFound[0].pos + 1);
+      const outerTr = view.state.tr;
+      const offsetMap = StepMap.offset(noteFound[0].pos + 1);
       for (let i = 0; i < transactions.length; i++) {
         let steps = transactions[i].steps;
         for (let j = 0; j < steps.length; j++)
diff --git a/wax-prosemirror-services/src/NoteService/Note.js b/wax-prosemirror-services/src/NoteService/Note.js
index a676d1cf054f6ac66fafdccbd7791a4d14174b57..75f04f45bf6f20e74c2be08b321cac8c502ef211 100644
--- a/wax-prosemirror-services/src/NoteService/Note.js
+++ b/wax-prosemirror-services/src/NoteService/Note.js
@@ -1,12 +1,12 @@
-import Tools from "../lib/Tools";
-import { injectable } from "inversify";
-import { icons } from "wax-prosemirror-components";
-import { Fragment } from "prosemirror-model";
-import { v4 as uuidv4 } from "uuid";
+import Tools from '../lib/Tools';
+import { injectable } from 'inversify';
+import { icons } from 'wax-prosemirror-components';
+import { Fragment } from 'prosemirror-model';
+import { v4 as uuidv4 } from 'uuid';
 
 @injectable()
 export default class Note extends Tools {
-  title = "Insert Note";
+  title = 'Insert Note';
   content = icons.footnote;
 
   get run() {
@@ -16,18 +16,22 @@ export default class Note extends Tools {
       if (!empty && $from.sameParent($to) && $from.parent.inlineContent)
         content = $from.parent.content.cut(
           $from.parentOffset,
-          $to.parentOffset
+          $to.parentOffset,
         );
       const footnote = state.config.schema.nodes.footnote.create(
         { id: uuidv4() },
-        content
+        content,
       );
       dispatch(state.tr.replaceSelectionWith(footnote));
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
-    //   // TODO disable on notes editor
     return state => {
       return true;
     };
diff --git a/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js b/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js
index c08f229bb9caad1e51d23ce04f2774f9de1ec743..d487015827e81304ab6657b82022bce028de1569 100644
--- a/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js
+++ b/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js
@@ -1,20 +1,20 @@
-import React from "react";
-import { v4 as uuidv4 } from "uuid";
-import { injectable } from "inversify";
-import { isEmpty } from "lodash";
-import { TableDropDown } from "wax-prosemirror-components";
-import { addColumnBefore } from "prosemirror-tables";
-import { Commands } from "wax-prosemirror-utilities";
-import Tools from "../../lib/Tools";
+import React from 'react';
+import { v4 as uuidv4 } from 'uuid';
+import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { TableDropDown } from 'wax-prosemirror-components';
+import { addColumnBefore } from 'prosemirror-tables';
+import { Commands } from 'wax-prosemirror-utilities';
+import Tools from '../../lib/Tools';
 
 @injectable()
 export default class TableDropDownOptions extends Tools {
-  title = "Select Options";
-  content = "table";
+  title = 'Select Options';
+  content = 'table';
 
   get run() {
-    return () => {
-      return true;
+    return (state, dispatch, tableFn) => {
+      tableFn(state, dispatch);
     };
   }
 
diff --git a/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js b/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js
index cae1293ff31721cdfcf1022dc4bfd4c26c7faf13..5e0f685052a5810b6257f12d6277c687ce829826 100644
--- a/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js
+++ b/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js
@@ -1,11 +1,12 @@
-import Tools from "../../lib/Tools";
-import { Commands } from "wax-prosemirror-utilities";
-import { injectable } from "inversify";
-import { icons } from "wax-prosemirror-components";
+import { Commands } from 'wax-prosemirror-utilities';
+import { injectable } from 'inversify';
+import { icons } from 'wax-prosemirror-components';
+import Tools from '../../lib/Tools';
 
+export default
 @injectable()
-export default class Table extends Tools {
-  title = "Insert table";
+class Table extends Tools {
+  title = 'Insert table';
   content = icons.table;
 
   get run() {
@@ -14,6 +15,11 @@ export default class Table extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.canInsert(state.config.schema.nodes.table)(state);
diff --git a/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js b/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js
index 77ac0af54e863f2ce42ec57ce4f0b1fc8944f5c0..2c2e9ceb26b7c9f3f63c167e86e6f1fc4f28f3cd 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js
@@ -1,11 +1,11 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { wrapIn } from "prosemirror-commands";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { wrapIn } from 'prosemirror-commands';
 
 @injectable()
 class BlockQuote extends Tools {
-  title = "Change to Block Quote";
-  content = "Block Quote";
+  title = 'Change to Block Quote';
+  content = 'Block Quote';
 
   get run() {
     return (state, dispatch) => {
@@ -13,6 +13,11 @@ class BlockQuote extends Tools {
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return wrapIn(state.config.schema.nodes.blockquote)(state);
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js b/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js
index d4c87d7f53c796d5f07077a0a40fd555a083e409..8ec0b529daece7882dab92478265c3188039ee21 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js
@@ -1,24 +1,29 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 class ExtractPoetry extends Tools {
-  title = "Change to Extract Poetry";
-  content = "Extract Poetry";
+  title = 'Change to Extract Poetry';
+  content = 'Extract Poetry';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.extractPoetry, {
-        class: "extract-poetry"
+        class: 'extract-poetry',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.extractPoetry)(
-        state
+        state,
       );
     };
   }
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js b/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js
index e887b90542a3012cbf8e269f719a1c119c0a4ed0..c3acd93e47c225ffde0d9132a92965edecd2f7fc 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js
@@ -1,24 +1,29 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 class ExtractProse extends Tools {
-  title = "Change to Extract Prose";
-  content = "Extract Prose";
+  title = 'Change to Extract Prose';
+  content = 'Extract Prose';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.extractProse, {
-        class: "extract-prose"
+        class: 'extract-prose',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.extractProse)(
-        state
+        state,
       );
     };
   }
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js b/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js
index 0821ef32b4390949cb99a1452a6c43b97d775f1d..c3d9b03ed90bdbb62b3c6849c326b818deacc7ba 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js
@@ -1,24 +1,29 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 class ParagraphContinued extends Tools {
-  title = "Change to Paragraph Continued";
-  content = "Paragraph Continued";
+  title = 'Change to Paragraph Continued';
+  content = 'Paragraph Continued';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.paragraphCont, {
-        class: "paragraph-cont"
+        class: 'paragraph-cont',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.paragraphCont)(
-        state
+        state,
       );
     };
   }
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js b/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js
index e3018a4e2bcf78c83f10d8c8480cdec20345178f..918ae7607b1538c5b28e0c0f966d523429d0a60f 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js
@@ -1,20 +1,25 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 export default class Paragraph extends Tools {
-  title = "Change to Paragraph";
-  content = "Paragraph";
+  title = 'Change to Paragraph';
+  content = 'Paragraph';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.paragraph, {
-        class: "paragraph"
+        class: 'paragraph',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.paragraph)(state);
diff --git a/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js b/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js
index 3e333e8dd142d1c4906db3e38f43db467a7bfb62..b40a17d1d27fd6fde502925b614d984fe621a4d6 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js
@@ -1,20 +1,25 @@
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { Commands } from "wax-prosemirror-utilities";
+import Tools from '../../lib/Tools';
+import { injectable } from 'inversify';
+import { Commands } from 'wax-prosemirror-utilities';
 
 @injectable()
 class SourceNote extends Tools {
-  title = "Change to Source Note";
-  content = "Source Note";
+  title = 'Change to Source Note';
+  content = 'Source Note';
 
   get run() {
     return (state, dispatch) => {
       Commands.setBlockType(state.config.schema.nodes.sourceNote, {
-        class: "source-note"
+        class: 'source-note',
       })(state, dispatch);
     };
   }
 
+  select = (state, activeViewId) => {
+    if (activeViewId !== 'main') return false;
+    return true;
+  };
+
   get enable() {
     return state => {
       return Commands.setBlockType(state.config.schema.nodes.sourceNote)(state);
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/README.md b/wax-prosemirror-services/src/TrackChangeService/track-changes/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..93647423f45206782dcabb533338aad3ee024912
--- /dev/null
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/README.md
@@ -0,0 +1,3 @@
+This belongs to https://github.com/fiduswriter/fiduswriter
+This is a modified version of: https://github.com/fiduswriter/fiduswriter/blob/develop/fiduswriter/document/static/js/modules/editor/track/amend_transaction.js
+License included.
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 e573ef705d9925d810650f101168b89f8e68a3c0..79fe7d527088f7f36029a4d39e2a1679c2e877d0 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/addMarkStep.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/addMarkStep.js
@@ -15,7 +15,7 @@ const addMarkStep = (state, tr, step, newTr, map, doc, user, date, group) => {
     );
 
     if (
-      !['comment'].includes(step.mark.type.name) &&
+      !['comment', 'deletion'].includes(step.mark.type.name) &&
       !node.marks.find(mark => mark.type === step.mark.type)
     ) {
       const formatChangeMark = node.marks.find(
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
index 0742b8a908d192fd0a541eac401f5c87e83ee31e..bd697c1396fe2a50db04bd2ba5a32b3633e0c77f 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
@@ -1,9 +1,3 @@
-/*
-This belongs to https://github.com/fiduswriter/fiduswriter
-check: https://github.com/fiduswriter/fiduswriter/blob/develop/fiduswriter/document/static/js/modules/editor/track/amend_transaction.js
-License included in folder.
-*/
-
 import { TextSelection } from 'prosemirror-state';
 import {
   ReplaceStep,
@@ -20,6 +14,17 @@ import addMarkStep from './helpers/addMarkStep';
 import removeMarkStep from './helpers/removeMarkStep';
 
 const trackedTransaction = (tr, state, user) => {
+  // Don't track table operations
+  if (!tr.selectionSet) {
+    const $pos = state.selection.$anchor;
+    for (let { depth } = $pos; depth > 0; depth -= 1) {
+      const node = $pos.node(depth);
+      if (node.type.spec.tableRole === 'table') {
+        return tr;
+      }
+    }
+  }
+
   if (
     !tr.steps.length ||
     (tr.meta &&
@@ -62,12 +67,9 @@ const trackedTransaction = (tr, state, user) => {
     }
   });
 
-  if (tr.getMeta('inputType')) {
-    newTr.setMeta(tr.getMeta('inputType'));
-  }
-  if (tr.getMeta('uiEvent')) {
-    newTr.setMeta(tr.getMeta('uiEvent'));
-  }
+  if (tr.getMeta('inputType')) newTr.setMeta(tr.getMeta('inputType'));
+
+  if (tr.getMeta('uiEvent')) newTr.setMeta(tr.getMeta('uiEvent'));
 
   if (tr.selectionSet) {
     const deletionMarkSchema = state.schema.marks.deletion;
@@ -90,27 +92,24 @@ const trackedTransaction = (tr, state, user) => {
     } else {
       newTr.setSelection(tr.selection.map(newTr.doc, map));
     }
-  }
-
-  if (
+  } else if (
     state.selection.from - tr.selection.from > 1 &&
     tr.selection.$head.depth > 1
   ) {
     const caretPos = map.map(tr.selection.from - 2, -1);
     newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
   } else {
-    const caretPos = map.map(tr.selection.from, -1);
-    newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
-    // const slice = map.slice(newTr.selection.from, newTr.selection.to);
-    // map.appendMap(slice);
+    if (state.selection.from === state.selection.to) {
+      const caretPos = map.map(tr.selection.from, -1);
+      newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
+    }
+    const slice = map.slice(newTr.selection.from, newTr.selection.to);
+    map.appendMap(slice);
   }
 
-  if (tr.storedMarksSet) {
-    newTr.setStoredMarks(tr.storedMarks);
-  }
-  if (tr.scrolledIntoView) {
-    newTr.scrollIntoView();
-  }
+  if (tr.storedMarksSet) newTr.setStoredMarks(tr.storedMarks);
+
+  if (tr.scrolledIntoView) newTr.scrollIntoView();
 
   return newTr;
 };
diff --git a/wax-prosemirror-themes/package.json b/wax-prosemirror-themes/package.json
index cb35a2db4b95ed62d326d19ce708cca1d5025940..d63550ca5b630d9c39c928c48d7100089cc02874 100644
--- a/wax-prosemirror-themes/package.json
+++ b/wax-prosemirror-themes/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-themes",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror themes",
   "license": "MIT",
diff --git a/wax-prosemirror-utilities/package.json b/wax-prosemirror-utilities/package.json
index 5161ee3a4545b5c7d5f1c0c2214b8ba9b814497d..28ea30ba3b99c93dfd1caf72c4d82210e17808e3 100644
--- a/wax-prosemirror-utilities/package.json
+++ b/wax-prosemirror-utilities/package.json
@@ -1,6 +1,6 @@
 {
   "name": "wax-prosemirror-utilities",
-  "author": "Collaborative Knowledge Foundation",
+  "author": "Christos Kokosias",
   "version": "0.0.13",
   "description": "Wax prosemirror utilities",
   "license": "MIT",