diff --git a/wax-prosemirror-core/src/config/defaultConfig.js b/wax-prosemirror-core/src/config/defaultConfig.js
index df0e8e662a90f1704090c2fab1d3263608831f6b..9a02cf18e80952213ee5dba6ebffb09e8b96852d 100644
--- a/wax-prosemirror-core/src/config/defaultConfig.js
+++ b/wax-prosemirror-core/src/config/defaultConfig.js
@@ -34,7 +34,9 @@ export default {
     new MenuService(),
     new AnnotationToolGroupService(),
     new ListToolGroupService(),
-    new TextStyleService(),
+    new DisplayBlockLevelService(),
+    new DisplayToolGroupService(),
+    // new TextStyleService(),
     new PlaceholderService(),
     new ImageService(),
     new InlineAnnotationsService(),
@@ -45,9 +47,7 @@ export default {
     new TablesService(),
     new BaseService(),
     new BaseToolGroupService(),
-    new ImageToolGroupService(),
-    new DisplayBlockLevelService(),
-    new DisplayToolGroupService()
+    new ImageToolGroupService()
     // new TextBlockLevelService(),
     // new TextToolGroupService()
   ]
diff --git a/wax-prosemirror-schema/index.js b/wax-prosemirror-schema/index.js
index 8bc81bfc46307e29097f1245fec91c5382ab0761..b1df853899fdefbffec00b39af78e7a695bfa22f 100644
--- a/wax-prosemirror-schema/index.js
+++ b/wax-prosemirror-schema/index.js
@@ -31,3 +31,4 @@ export { default as titleNode } from "./src/nodes/titleNode";
 export { default as orderedListNode } from "./src/nodes/orderedListNode";
 export { default as bulletListNode } from "./src/nodes/bulletListNode";
 export { default as listItemNode } from "./src/nodes/listItemNode";
+export { default as subTitleNode } from "./src/nodes/subTitleNode";
diff --git a/wax-prosemirror-schema/src/editoria/nodes.js b/wax-prosemirror-schema/src/editoria/nodes.js
index 76e43ae9d9a4c937b006a6e9d691ec967a74aeed..aa700426b39fc9efd6d04e12566fa77190ed1d42 100644
--- a/wax-prosemirror-schema/src/editoria/nodes.js
+++ b/wax-prosemirror-schema/src/editoria/nodes.js
@@ -55,206 +55,6 @@ const nodes = {
       return ["img", { src, alt, title }];
     }
   },
-  epigraphProse: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "epigraph-prose" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.epigraph-prose",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  epigraphPoetry: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "epigraph-poetry" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.epigraph-poetry",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  sourceNote: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "source-note" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.source-note",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  paragraphCont: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "paragraph-cont" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.paragraph-cont",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  extractProse: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "extract-prose" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.extract-prose",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  extractPoetry: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "extract-poetry" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.extract-poetry",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  title: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "title" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.title",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
-  subtitle: {
-    content: "inline*",
-    group: "block",
-    priority: 0,
-    defining: true,
-    attrs: {
-      class: { default: "cst" },
-      track: { default: [] }
-    },
-    parseDOM: [
-      {
-        tag: "p.cst",
-        getAttrs(dom) {
-          return {
-            class: dom.getAttribute("class"),
-            track: parseTracks(dom.dataset.track)
-          };
-        }
-      }
-    ],
-    toDOM(node) {
-      const attrs = blockLevelToDOM(node);
-      return ["p", attrs, 0];
-    }
-  },
   heading: {
     attrs: {
       level: { default: 1 },
diff --git a/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js b/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0f38a7c1ee807dd6bd9f2977c8fe841e923c1c54 100644
--- a/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js
+++ b/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js
@@ -0,0 +1,27 @@
+const epigraphPoetry = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "epigraph-poetry" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.epigraph-poetry",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default epigraphPoetry;
diff --git a/wax-prosemirror-schema/src/nodes/epigraphProseNode.js b/wax-prosemirror-schema/src/nodes/epigraphProseNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..debc90d6e5fa609a0e890bcaf1cd4e96f638c1cc 100644
--- a/wax-prosemirror-schema/src/nodes/epigraphProseNode.js
+++ b/wax-prosemirror-schema/src/nodes/epigraphProseNode.js
@@ -0,0 +1,27 @@
+const epigraphProse = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "epigraph-prose" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.epigraph-prose",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default epigraphProse;
diff --git a/wax-prosemirror-schema/src/nodes/extractPoetryNode.js b/wax-prosemirror-schema/src/nodes/extractPoetryNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c5befa860c8be91331d523c32131cadc08afa0f5 100644
--- a/wax-prosemirror-schema/src/nodes/extractPoetryNode.js
+++ b/wax-prosemirror-schema/src/nodes/extractPoetryNode.js
@@ -0,0 +1,27 @@
+const extractPoetry = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "extract-poetry" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.extract-poetry",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default extractPoetry;
diff --git a/wax-prosemirror-schema/src/nodes/extractProseNode.js b/wax-prosemirror-schema/src/nodes/extractProseNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0ec0c8db60d58499142c63ea5dd9ec50f9efda8f 100644
--- a/wax-prosemirror-schema/src/nodes/extractProseNode.js
+++ b/wax-prosemirror-schema/src/nodes/extractProseNode.js
@@ -0,0 +1,27 @@
+const extractProse = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "extract-prose" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.extract-prose",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default extractProse;
diff --git a/wax-prosemirror-schema/src/nodes/paragraphContNode.js b/wax-prosemirror-schema/src/nodes/paragraphContNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..21664072eaec8a12935da07c5151b6d5b003ca6b 100644
--- a/wax-prosemirror-schema/src/nodes/paragraphContNode.js
+++ b/wax-prosemirror-schema/src/nodes/paragraphContNode.js
@@ -0,0 +1,27 @@
+const paragraphCont = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "paragraph-cont" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.paragraph-cont",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default paragraphCont;
diff --git a/wax-prosemirror-schema/src/nodes/sourceNoteNode.js b/wax-prosemirror-schema/src/nodes/sourceNoteNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9b97a9d6c3897a361bd6b0e8543b7bc6cc5c3d2a 100644
--- a/wax-prosemirror-schema/src/nodes/sourceNoteNode.js
+++ b/wax-prosemirror-schema/src/nodes/sourceNoteNode.js
@@ -0,0 +1,27 @@
+const sourceNote = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "source-note" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.source-note",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default sourceNote;
diff --git a/wax-prosemirror-schema/src/nodes/subTitleNode.js b/wax-prosemirror-schema/src/nodes/subTitleNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..25608f57dabef5365186663127ac9685c9608f27
--- /dev/null
+++ b/wax-prosemirror-schema/src/nodes/subTitleNode.js
@@ -0,0 +1,27 @@
+const subtitle = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "cst" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.cst",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default subtitle;
diff --git a/wax-prosemirror-schema/src/nodes/titleNode.js b/wax-prosemirror-schema/src/nodes/titleNode.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0a6f528b17f6fd839e30c27c3cd65d08a9cd782c 100644
--- a/wax-prosemirror-schema/src/nodes/titleNode.js
+++ b/wax-prosemirror-schema/src/nodes/titleNode.js
@@ -0,0 +1,27 @@
+const title = {
+  content: "inline*",
+  group: "block",
+  priority: 0,
+  defining: true,
+  attrs: {
+    class: { default: "title" },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "p.title",
+      getAttrs(dom) {
+        return {
+          class: dom.getAttribute("class"),
+          track: parseTracks(dom.dataset.track)
+        };
+      }
+    }
+  ],
+  toDOM(node) {
+    const attrs = blockLevelToDOM(node);
+    return ["p", attrs, 0];
+  }
+};
+
+export default title;