diff --git a/wax-prosemirror-plugins/index.js b/wax-prosemirror-plugins/index.js
index ec6147c23f2ab8ed646e954abfa0356228f650ae..1a20ab5ca4d911d8a5fe26bf4288701836234999 100644
--- a/wax-prosemirror-plugins/index.js
+++ b/wax-prosemirror-plugins/index.js
@@ -1,17 +1,31 @@
-export { default as TrackChangePlugin } from "./src/trackChanges/TrackChangePlugin";
+export {
+  default as TrackChangePlugin
+} from "./src/trackChanges/TrackChangePlugin";
 export { default as FindAndReplacePlugin } from "./src/FindAndReplacePlugin";
 export { default as OverlayPlugin } from "./src/overlay/OverlayPlugin";
 export { default as LinkService } from "./src/LinkService/LinkService";
 export { default as MenuService } from "./src/MenuService/MenuService";
-export { default as RedoUndoService } from "./src/RedoUndoService/RedoUndoService";
-export { default as AnnotationService } from "./src/AnnotationService/AnnotationService";
-export { default as TextStyleService } from "./src/TextStyleService/TextStyleService";
-export { default as PlaceholderService } from "./src/PlaceholderService/PlaceholderService";
+export {
+  default as RedoUndoService
+} from "./src/RedoUndoService/RedoUndoService";
+export {
+  default as AnnotationService
+} from "./src/AnnotationService/AnnotationService";
+export {
+  default as TextStyleService
+} from "./src/TextStyleService/TextStyleService";
+export {
+  default as PlaceholderService
+} from "./src/PlaceholderService/PlaceholderService";
 export { default as ImageService } from "./src/ImageService/ImageService";
 export { default as RulesService } from "./src/RulesService/RulesService";
 export { default as SchemaService } from "./src/SchemaService/SchemaService";
 
-export { default as ShortCutsService } from "./src/ShortCutsService/ShortCutsService";
+export {
+  default as ShortCutsService
+} from "./src/ShortCutsService/ShortCutsService";
 export { default as Tool } from "./src/lib/Tools";
-export { default as InlineAnnotationsService } from "./src/InlineAnnotations/InlineAnnotationsService";
-export { default as OverlayService } from "./src/OverlayService/OverlayService";
+export {
+  default as InlineAnnotationsService
+} from "./src/InlineAnnotations/InlineAnnotationsService";
+// export { default as OverlayService } from "./src/OverlayService/OverlayService";
diff --git a/wax-prosemirror-plugins/src/AnnotationService/Annotation.js b/wax-prosemirror-plugins/src/AnnotationService/Annotation.js
index a1e2f359fdc85a1596d66a3cc78ce03c8e3980f5..90f17c46bcec60a060c41511ab6e41bddb0ccd56 100644
--- a/wax-prosemirror-plugins/src/AnnotationService/Annotation.js
+++ b/wax-prosemirror-plugins/src/AnnotationService/Annotation.js
@@ -6,7 +6,7 @@ export default class Annotation extends ToolGroup {
   tools = [];
   constructor(
     @inject("Code") code,
-    @inject("Em") em,
+    @inject("Emphasis") emphasis,
     @inject("Link") link,
     @inject("SmallCaps") smallcaps,
     @inject("StrikeThrough") strikethrough,
@@ -22,7 +22,7 @@ export default class Annotation extends ToolGroup {
     super();
     this.tools = [
       code,
-      em,
+      emphasis,
       link,
       smallcaps,
       strikethrough,
diff --git a/wax-prosemirror-plugins/src/AnnotationService/tools/Code.js b/wax-prosemirror-plugins/src/AnnotationService/tools/Code.js
deleted file mode 100644
index 61887249a4c332293482402b79f9609392391ce7..0000000000000000000000000000000000000000
--- a/wax-prosemirror-plugins/src/AnnotationService/tools/Code.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
-import Tools from "../../lib/Tools";
-import { injectable } from "inversify";
-import { icons } from "wax-prosemirror-components";
-
-@injectable()
-export default class Code extends Tools {
-  title = "Toggle code";
-  content = icons.code;
-
-  get run() {
-    return (state, dispatch) => {
-      toggleMark(state.config.schema.marks.code)(state, dispatch);
-    };
-  }
-
-  get active() {
-    return state => {
-      return markActive(state.config.schema.marks.code)(state);
-    };
-  }
-}
diff --git a/wax-prosemirror-plugins/src/AnnotationService/tools/index.js b/wax-prosemirror-plugins/src/AnnotationService/tools/index.js
index 9d57c1c80bd447e46cd1b78928c913bd61b19b56..643a61eb5ed0471e7a9d09cac947dd4c4bb30c55 100644
--- a/wax-prosemirror-plugins/src/AnnotationService/tools/index.js
+++ b/wax-prosemirror-plugins/src/AnnotationService/tools/index.js
@@ -1,8 +1,6 @@
 export { default as Blockquote } from "./Blockquote";
-export { default as Em } from "./Em";
 export { default as SmallCaps } from "./SmallCaps";
 export { default as StrikeThrough } from "./StrikeThrough";
-export { default as Strong } from "./Strong";
 export { default as Subscript } from "./Subscript";
 export { default as Superscript } from "./Superscript";
 export { default as Underline } from "./Underline";
diff --git a/wax-prosemirror-plugins/src/InlineAnnotations/CodeService/CodeService.js b/wax-prosemirror-plugins/src/InlineAnnotations/CodeService/CodeService.js
index 0eb718ab22c766bfccc548a227a2a22e4bd7a179..d714f11dc93c9cf44a96954ee5f2245fafaa78f6 100644
--- a/wax-prosemirror-plugins/src/InlineAnnotations/CodeService/CodeService.js
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/CodeService/CodeService.js
@@ -1,5 +1,6 @@
 import Service from "wax-prosemirror-core/src/services/Service";
 import Code from "./Code";
+
 class CodeService extends Service {
   boot() {}
 
diff --git a/wax-prosemirror-plugins/src/AnnotationService/tools/Em.js b/wax-prosemirror-plugins/src/InlineAnnotations/EmphasisService/Emphasis.js
similarity index 92%
rename from wax-prosemirror-plugins/src/AnnotationService/tools/Em.js
rename to wax-prosemirror-plugins/src/InlineAnnotations/EmphasisService/Emphasis.js
index 8590d70048dd8708ffc1b9e7edf43e0418b5bdd0..21f977f7afa47e192c485d870769704b00fd18b9 100644
--- a/wax-prosemirror-plugins/src/AnnotationService/tools/Em.js
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/EmphasisService/Emphasis.js
@@ -5,7 +5,7 @@ import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
 
 @injectable()
-export default class Em extends Tools {
+export default class Emphasis extends Tools {
   title = "Toggle emphasis";
   content = icons.em;
 
diff --git a/wax-prosemirror-plugins/src/InlineAnnotations/EmphasisService/EmphasisService.js b/wax-prosemirror-plugins/src/InlineAnnotations/EmphasisService/EmphasisService.js
new file mode 100644
index 0000000000000000000000000000000000000000..f86f6130512f8db0a371ac7742171007832622b8
--- /dev/null
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/EmphasisService/EmphasisService.js
@@ -0,0 +1,17 @@
+import Service from "wax-prosemirror-core/src/services/Service";
+import { emphasisMark } from "wax-prosemirror-schema";
+import Emphasis from "./Emphasis";
+
+class EmphasisService extends Service {
+  boot() {
+    const createMark = this.container.get("CreateMark");
+
+    createMark({ em: emphasisMark });
+  }
+
+  register() {
+    this.container.bind("Emphasis").to(Emphasis);
+  }
+}
+
+export default EmphasisService;
diff --git a/wax-prosemirror-plugins/src/InlineAnnotations/LinkService/Link.js b/wax-prosemirror-plugins/src/InlineAnnotations/LinkService/Link.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8cc20bb02172673aa1306cba9ce2de0b1cc19af
--- /dev/null
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/LinkService/Link.js
@@ -0,0 +1,35 @@
+import { toggleMark } from "prosemirror-commands";
+import { markActive, promptForURL } from "../../lib/Utils";
+import Tools from "../../lib/Tools";
+import { injectable } from "inversify";
+import { icons } from "wax-prosemirror-components";
+
+@injectable()
+export default class Link extends Tools {
+  title = "Add or remove link";
+  content = icons.link;
+
+  get run() {
+    return (state, dispatch) => {
+      if (markActive(state.config.schema.marks.link)(state)) {
+        toggleMark(state.config.schema.marks.link)(state, dispatch);
+        return true;
+      }
+
+      const href = promptForURL();
+      if (!href) return false;
+
+      toggleMark(state.config.schema.marks.link, { href })(state, dispatch);
+    };
+  }
+
+  get enable() {
+    return state => !state.selection.empty;
+  }
+
+  get active() {
+    return state => {
+      return markActive(state.config.schema.marks.link)(state);
+    };
+  }
+}
diff --git a/wax-prosemirror-plugins/src/InlineAnnotations/LinkService/LinkService.js b/wax-prosemirror-plugins/src/InlineAnnotations/LinkService/LinkService.js
new file mode 100644
index 0000000000000000000000000000000000000000..10720c6719efa08ecc56544fbf044b9ce418dad7
--- /dev/null
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/LinkService/LinkService.js
@@ -0,0 +1,17 @@
+import Service from "wax-prosemirror-core/src/services/Service";
+import { linkMark } from "wax-prosemirror-schema";
+import Link from "./Link";
+
+class LinkService extends Service {
+  boot() {
+    const createMark = this.container.get("CreateMark");
+
+    createMark({ link: linkMark });
+  }
+
+  register() {
+    this.container.bind("Link").to(Link);
+  }
+}
+
+export default LinkService;
diff --git a/wax-prosemirror-plugins/src/AnnotationService/tools/Strong.js b/wax-prosemirror-plugins/src/InlineAnnotations/StrongService/Strong.js
similarity index 100%
rename from wax-prosemirror-plugins/src/AnnotationService/tools/Strong.js
rename to wax-prosemirror-plugins/src/InlineAnnotations/StrongService/Strong.js
diff --git a/wax-prosemirror-plugins/src/InlineAnnotations/StrongService/StrongService.js b/wax-prosemirror-plugins/src/InlineAnnotations/StrongService/StrongService.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe29b891118d8a7535c32628a96900920bf11d94
--- /dev/null
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/StrongService/StrongService.js
@@ -0,0 +1,17 @@
+import Service from "wax-prosemirror-core/src/services/Service";
+import { strongMark } from "wax-prosemirror-schema";
+import Strong from "./Strong";
+
+class StrongService extends Service {
+  boot() {
+    const createMark = this.container.get("CreateMark");
+
+    createMark({ strong: strongMark });
+  }
+
+  register() {
+    this.container.bind("Strong").to(Strong);
+  }
+}
+
+export default StrongService;
diff --git a/wax-prosemirror-plugins/src/InlineAnnotations/index.js b/wax-prosemirror-plugins/src/InlineAnnotations/index.js
index 87f98ab4f678d90d4eace4ca8f3a23d7f143d6b6..4f9703b740872f317ead7389a65bbb4db58c1b54 100644
--- a/wax-prosemirror-plugins/src/InlineAnnotations/index.js
+++ b/wax-prosemirror-plugins/src/InlineAnnotations/index.js
@@ -1,2 +1,10 @@
 import CodeService from "./CodeService/CodeService";
-export default [new CodeService()];
+import StrongService from "./StrongService/StrongService";
+import LinkService from "./LinkService/LinkService";
+import EmphasisService from "./EmphasisService/EmphasisService";
+export default [
+  new CodeService(),
+  new StrongService(),
+  new LinkService(),
+  new EmphasisService()
+];
diff --git a/wax-prosemirror-plugins/src/LinkService/LinkComponent.js b/wax-prosemirror-plugins/src/LinkService/LinkComponent.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4f58d0117f2f972ab633e768f78dc702b4b32e0
--- /dev/null
+++ b/wax-prosemirror-plugins/src/LinkService/LinkComponent.js
@@ -0,0 +1,9 @@
+import React from "react";
+export default props => {
+  console.log(props);
+  return (
+    <div>
+      <input type="text" />
+    </div>
+  );
+};
diff --git a/wax-prosemirror-plugins/src/LinkService/LinkTool.js b/wax-prosemirror-plugins/src/LinkService/LinkTool.js
new file mode 100644
index 0000000000000000000000000000000000000000..5602dd4ff33c396f0b4b9638147142043a2c1923
--- /dev/null
+++ b/wax-prosemirror-plugins/src/LinkService/LinkTool.js
@@ -0,0 +1,35 @@
+import { toggleMark } from "prosemirror-commands";
+import { markActive, promptForURL } from "../lib/Utils";
+import Tools from "../lib/Tools";
+import { injectable } from "inversify";
+import { icons } from "wax-prosemirror-components";
+
+@injectable()
+export default class LinkTool extends Tools {
+  title = "Add or remove link";
+  content = icons.link;
+
+  get run() {
+    return (state, dispatch) => {
+      if (markActive(state.config.schema.marks.link)(state)) {
+        toggleMark(state.config.schema.marks.link)(state, dispatch);
+        return true;
+      }
+
+      const href = promptForURL();
+      if (!href) return false;
+
+      toggleMark(state.config.schema.marks.link, { href })(state, dispatch);
+    };
+  }
+
+  get enable() {
+    return state => !state.selection.empty;
+  }
+
+  get active() {
+    return state => {
+      return markActive(state.config.schema.marks.link)(state);
+    };
+  }
+}
diff --git a/wax-prosemirror-schema/index.js b/wax-prosemirror-schema/index.js
index 20910b0342aa3109c60fdce111e319b923069aac..7520b51b6a7c578ac9bb7fa2334a5fb64cf6aa3e 100644
--- a/wax-prosemirror-schema/index.js
+++ b/wax-prosemirror-schema/index.js
@@ -2,3 +2,6 @@ export { default as DefaultSchema } from "./src/DefaultSchema";
 export { default as EditoriaSchema } from "./src/editoria/EditoriaSchema";
 export { default as XpubSchema } from "./src/XpubSchema";
 export { default as codeMark } from "./src/marks/codeMark";
+export { default as strongMark } from "./src/marks/strongMark";
+export { default as linkMark } from "./src/marks/linkMark";
+export { default as emphasisMark } from "./src/marks/emphasisMark";
diff --git a/wax-prosemirror-schema/src/editoria/marks.js b/wax-prosemirror-schema/src/editoria/marks.js
index aa3a786d6cea090c2d96ee67e3775c56aaf40f04..64f02b362920ecfa3048758b3137ff9f8d60dd1c 100644
--- a/wax-prosemirror-schema/src/editoria/marks.js
+++ b/wax-prosemirror-schema/src/editoria/marks.js
@@ -3,60 +3,6 @@ const emDOM = ["em", 0],
   codeDOM = ["code", 0];
 
 const marks = {
-  // link: {
-  //   attrs: {
-  //     href: { default: null },
-  //     rel: { default: "" },
-  //     target: { default: "blank" },
-  //     title: { default: null }
-  //   },
-  //   inclusive: false,
-  //   parseDOM: [
-  //     {
-  //       tag: "a[href]",
-  //       getAttrs: dom => {
-  //         const href = dom.getAttribute("href");
-  //         const target = href && href.indexOf("#") === 0 ? "" : "blank";
-  //         return {
-  //           href: dom.getAttribute("href"),
-  //           title: dom.getAttribute("title"),
-  //           target
-  //         };
-  //       }
-  //     }
-  //   ],
-  //   toDOM(node) {
-  //     return ["a", node.attrs, 0];
-  //   }
-  // },
-  em: {
-    parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style=italic" }],
-    toDOM() {
-      return emDOM;
-    }
-  },
-  strong: {
-    parseDOM: [
-      { tag: "strong" },
-      {
-        tag: "b",
-        getAttrs: node => node.style.fontWeight != "normal" && null
-      },
-      {
-        style: "font-weight",
-        getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null
-      }
-    ],
-    toDOM() {
-      return strongDOM;
-    }
-  },
-  // code: {
-  //   parseDOM: [{ tag: "code" }],
-  //   toDOM() {
-  //     return codeDOM;
-  //   }
-  // },
   subscript: {
     excludes: "superscript",
     parseDOM: [{ tag: "sub" }, { style: "vertical-align=sub" }],
diff --git a/wax-prosemirror-schema/src/marks/codeMark.js b/wax-prosemirror-schema/src/marks/codeMark.js
index ee9d55f2aa7ba463e87d92ff7d038546cb9ec6c1..a9e6ab1ef818a09622c2a272826ba30ba38c3e65 100644
--- a/wax-prosemirror-schema/src/marks/codeMark.js
+++ b/wax-prosemirror-schema/src/marks/codeMark.js
@@ -1,7 +1,8 @@
 const code = {
-  parseDOM: [{ tag: "code" }],
-  toDOM() {
-    return ["code", 0];
+  parseDOM: { tag: "code" },
+  toDOM(hook, next) {
+    hook.value = ["code", 0];
+    next();
   }
 };
 
diff --git a/wax-prosemirror-schema/src/marks/emphasisMark.js b/wax-prosemirror-schema/src/marks/emphasisMark.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e570668cbb7e8478ed00a3d4c1ac19b7e371fda
--- /dev/null
+++ b/wax-prosemirror-schema/src/marks/emphasisMark.js
@@ -0,0 +1,9 @@
+const em = {
+  parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style=italic" }],
+  toDOM(hook, next) {
+    hook.value = ["em", 0];
+    next();
+  }
+};
+
+export default em;
diff --git a/wax-prosemirror-schema/src/marks/linkMark.js b/wax-prosemirror-schema/src/marks/linkMark.js
new file mode 100644
index 0000000000000000000000000000000000000000..1549d1537c93867c3e21af718a08f746ad806268
--- /dev/null
+++ b/wax-prosemirror-schema/src/marks/linkMark.js
@@ -0,0 +1,29 @@
+const link = {
+  attrs: {
+    href: { default: null },
+    rel: { default: "" },
+    target: { default: "blank" },
+    title: { default: null }
+  },
+  inclusive: false,
+  parseDOM: [
+    {
+      tag: "a[href]",
+      getAttrs: dom => {
+        const href = dom.getAttribute("href");
+        const target = href && href.indexOf("#") === 0 ? "" : "blank";
+        return {
+          href: dom.getAttribute("href"),
+          title: dom.getAttribute("title"),
+          target
+        };
+      }
+    }
+  ],
+  toDOM(hook, next, node) {
+    hook.value = ["a", node.attrs, 0];
+    next();
+  }
+};
+
+export default link;
diff --git a/wax-prosemirror-schema/src/marks/strongMark.js b/wax-prosemirror-schema/src/marks/strongMark.js
new file mode 100644
index 0000000000000000000000000000000000000000..32b9482a176d9ee2af6e4fcfe5b10b43c2ad06ad
--- /dev/null
+++ b/wax-prosemirror-schema/src/marks/strongMark.js
@@ -0,0 +1,19 @@
+const strong = {
+  parseDOM: [
+    { tag: "strong" },
+    {
+      tag: "b",
+      getAttrs: node => node.style.fontWeight != "normal" && null
+    },
+    {
+      style: "font-weight",
+      getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null
+    }
+  ],
+  toDOM(hook, next) {
+    hook.value = ["strong", 0];
+    next();
+  }
+};
+
+export default strong;