diff --git a/wax-prosemirror-plugins/index.js b/wax-prosemirror-plugins/index.js
index 5377fcb7230b178788d69bf79f966224c53bd20c..72d283b67322f401b18d557fa3cd3d42652009e0 100644
--- a/wax-prosemirror-plugins/index.js
+++ b/wax-prosemirror-plugins/index.js
@@ -1,6 +1,5 @@
-export {
-  default as TrackChangePlugin
-} from "./src/trackChanges/TrackChangePlugin";
+export { default as TrackChangePlugin } from './src/trackChanges/TrackChangePlugin';
 
-export { default as CommentPlugin } from "./src/comments/CommentPlugin";
-export { default as WaxSelectionPlugin } from "./src/WaxSelectionPlugin";
+export { default as CommentPlugin } from './src/comments/CommentPlugin';
+export { default as WaxSelectionPlugin } from './src/WaxSelectionPlugin';
+export { default as highlightPlugin } from './src/highlightPlugin';
diff --git a/wax-prosemirror-plugins/package.json b/wax-prosemirror-plugins/package.json
index eb7b8de5008c51a6bdb6e44c81fa52c487da4a36..28d548f453cd92b8c0155b97d2539b43eb46b679 100644
--- a/wax-prosemirror-plugins/package.json
+++ b/wax-prosemirror-plugins/package.json
@@ -16,6 +16,8 @@
     "wax-prosemirror-components": "^0.0.13",
     "wax-prosemirror-core": "^0.0.13",
     "wax-prosemirror-layouts": "^0.0.13",
-    "wax-prosemirror-utilities": "^0.0.13"
+    "wax-prosemirror-utilities": "^0.0.13",
+    "highlight.js": "^10.1.1",
+    "prosemirror-highlightjs": "^0.2.0"
   }
 }
diff --git a/wax-prosemirror-plugins/src/highlightPlugin.js b/wax-prosemirror-plugins/src/highlightPlugin.js
new file mode 100644
index 0000000000000000000000000000000000000000..40ee57e2958a57efb19fea37563766ed0832d276
--- /dev/null
+++ b/wax-prosemirror-plugins/src/highlightPlugin.js
@@ -0,0 +1,56 @@
+import hljs from 'highlight.js/lib/core';
+import { getHighlightDecorations } from 'prosemirror-highlightjs';
+import { DecorationSet } from 'prosemirror-view';
+import { Plugin } from 'prosemirror-state';
+
+const highlightPlugin = (nodeTypes = ['code_block']) => {
+  return new Plugin({
+    state: {
+      init(_, instance) {
+        const content = getHighlightDecorations(
+          instance.doc,
+          hljs,
+          nodeTypes,
+          () => undefined,
+        );
+        return DecorationSet.create(instance.doc, content);
+      },
+      apply(tr, set, state) {
+        if (!tr.docChanged) {
+          return set.map(tr.mapping, tr.doc);
+        }
+
+        const {
+          selection: { $from, $to },
+          doc,
+        } = state;
+        let codeBlock = false;
+
+        doc.nodesBetween($from.pos, $to.pos, (node, from) => {
+          if (node.type.name === 'code_block') {
+            codeBlock = true;
+          }
+        });
+
+        if (codeBlock) {
+          const content = getHighlightDecorations(
+            tr.doc,
+            hljs,
+            nodeTypes,
+            () => undefined,
+          );
+
+          return DecorationSet.create(tr.doc, content);
+        }
+        return set.map(tr.mapping, tr.doc);
+      },
+    },
+    props: {
+      decorations(state) {
+        return this.getState(state);
+      },
+    },
+  });
+};
+
+export default highlightPlugin;
diff --git a/wax-prosemirror-services/package.json b/wax-prosemirror-services/package.json
index 26696389843e70183b11f5806883893c18b6f460..22559ee1200bcddd202490144434b03238b37115 100644
--- a/wax-prosemirror-services/package.json
+++ b/wax-prosemirror-services/package.json
@@ -10,12 +10,10 @@
     "build": "BABEL_ENV=production rollup -c"
   },
   "dependencies": {
-    "highlight.js": "^10.1.1",
     "inversify": "^5.0.1",
     "inversify-inject-decorators": "^3.1.0",
     "lodash": "^4.17.4",
     "prosemirror-commands": "^1.1.3",
-    "prosemirror-highlightjs": "^0.2.0",
     "prosemirror-history": "^1.1.3",
     "prosemirror-keymap": "^1.1.3",
     "prosemirror-schema-list": "^1.1.2",
@@ -27,7 +25,8 @@
     "wax-prosemirror-core": "^0.0.13",
     "wax-prosemirror-layouts": "^0.0.13",
     "wax-prosemirror-schema": "^0.0.13",
-    "wax-prosemirror-utilities": "^0.0.13"
+    "wax-prosemirror-utilities": "^0.0.13",
+    "wax-prosemirror-plugins": "^0.0.13"
   },
   "peerDependencies": {
     "react": "^16.13.1",
diff --git a/wax-prosemirror-services/src/CodeBlockService/CodeBlockService.js b/wax-prosemirror-services/src/CodeBlockService/CodeBlockService.js
index b1fef70169b1f3cb4b5556c49e1e46d8c9fe51b2..2e851d32204b2fe950ced53c598ede9d09b850bb 100644
--- a/wax-prosemirror-services/src/CodeBlockService/CodeBlockService.js
+++ b/wax-prosemirror-services/src/CodeBlockService/CodeBlockService.js
@@ -1,5 +1,4 @@
-import hljs from 'highlight.js/lib/core';
-import { highlightPlugin } from 'prosemirror-highlightjs';
+import { highlightPlugin } from 'wax-prosemirror-plugins';
 import 'highlight.js/styles/github.css';
 
 import { codeBlockNode } from 'wax-prosemirror-schema';
@@ -8,7 +7,7 @@ import CodeBlockTool from './CodeBlockTool';
 
 export default class CodeBlockService extends Service {
   boot() {
-    this.app.PmPlugins.add('highlightPlugin', highlightPlugin(hljs));
+    this.app.PmPlugins.add('highlightPlugin', highlightPlugin());
   }
 
   register() {