diff --git a/wax-prosemirror-plugins/src/images/captionPlugin.js b/wax-prosemirror-plugins/src/images/captionPlugin.js
index 8f8a5181bf73bfc0ba87940bcbb114aaa95a5130..ea7acd9fffe6cd7aa57e5a9fa2c53de99fa6ddb0 100644
--- a/wax-prosemirror-plugins/src/images/captionPlugin.js
+++ b/wax-prosemirror-plugins/src/images/captionPlugin.js
@@ -1,5 +1,5 @@
 import { DecorationSet } from 'prosemirror-view';
-import { Plugin, PluginKey } from 'prosemirror-state';
+import { Plugin, PluginKey, NodeSelection } from 'prosemirror-state';
 
 const captionPlugin = key =>
   new Plugin({
@@ -29,23 +29,23 @@ const captionPlugin = key =>
             e.target.nodeName === 'IMG' &&
             e.target.parentNode.lastElementChild.nodeName !== 'FIGCAPTION'
           ) {
+            let pos = view.posAtDOM(e.target);
             const id = {};
             const { tr } = view.state;
-            const pos = view.posAtDOM(e.target);
-            const pos1 = pos + 1;
+            pos += 1;
             //  insert figure caption node
             view.dispatch(
               tr
                 .replaceWith(
-                  pos1,
-                  pos1,
+                  pos,
+                  pos,
                   view.state.schema.nodes.figcaption.create({
                     class: 'decoration',
                     dataContent: 'Caption : ',
                   }),
                 )
                 .setMeta(captionPlugins, {
-                  add: { id, pos: pos + 1 },
+                  add: { id, pos },
                 }),
             );
           } else if (e.target.nodeName !== 'FIGCAPTION') {
@@ -68,6 +68,19 @@ const captionPlugin = key =>
             }
           }
 
+          if (e.target.nodeName === 'IMG') {
+            let pos = view.posAtDOM(e.target);
+            const { $from } = view.state.selection;
+            const same = $from.sharedDepth(pos);
+            if (same === 0) return false;
+            pos = $from.before(same);
+            view.dispatch(
+              view.state.tr.setSelection(
+                NodeSelection.create(view.state.doc, pos),
+              ),
+            );
+          }
+
           return true;
         },
         keyup(view, e) {
diff --git a/wax-prosemirror-schema/src/nodes/imageNode.js b/wax-prosemirror-schema/src/nodes/imageNode.js
index 612e2938b67dc34558b62f053e9bf5d7af8b89e9..34e825c63b235142d72dbbc7415174caca9dda80 100644
--- a/wax-prosemirror-schema/src/nodes/imageNode.js
+++ b/wax-prosemirror-schema/src/nodes/imageNode.js
@@ -8,7 +8,7 @@ const image = {
     track: { default: [] },
   },
   group: 'figure',
-  draggable: true,
+  draggable: false,
   parseDOM: [
     {
       tag: 'img[src]',
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
index f29ab84670b3e5413ec6a3ba648ab8da80b76bcb..d48724224265e0f2b58fdc2e6d0f6fb0a326d83f 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
@@ -27,7 +27,12 @@ class Heading2 extends Tools {
       if (activeViewId !== 'main') return false;
       const { from, to } = state.selection;
       state.doc.nodesBetween(from, to, (node, pos) => {
-        if (node.type.name === 'list_item' || node.type.name === 'image') {
+        if (
+          node.type.name === 'list_item' ||
+          node.type.name === 'image' ||
+          node.type.name === 'figure' ||
+          node.type.name === 'figcaption'
+        ) {
           isActive = false;
         }
       });
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
index e2dd3d94ecd790c725fd28c363938c0fe2dcd00a..e79ea62f3f7e83468e372ff42be80904c1250a51 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
@@ -27,7 +27,12 @@ class Heading3 extends Tools {
       if (activeViewId !== 'main') return false;
       const { from, to } = state.selection;
       state.doc.nodesBetween(from, to, (node, pos) => {
-        if (node.type.name === 'list_item' || node.type.name === 'image') {
+        if (
+          node.type.name === 'list_item' ||
+          node.type.name === 'image' ||
+          node.type.name === 'figure' ||
+          node.type.name === 'figcaption'
+        ) {
           isActive = false;
         }
       });
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js
index 3991590cf620ef5a844e0d16726dd36262ce5912..31df0dcb9296c62d307cb57542511d0e18de5103 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js
@@ -27,7 +27,12 @@ class Heading4 extends Tools {
       if (activeViewId !== 'main') return false;
       const { from, to } = state.selection;
       state.doc.nodesBetween(from, to, (node, pos) => {
-        if (node.type.name === 'list_item' || node.type.name === 'image') {
+        if (
+          node.type.name === 'list_item' ||
+          node.type.name === 'image' ||
+          node.type.name === 'figure' ||
+          node.type.name === 'figcaption'
+        ) {
           isActive = false;
         }
       });