diff --git a/wax-prosemirror-components/src/components/Button.js b/wax-prosemirror-components/src/components/Button.js
index 4db7e1c60d08668fa233afbd771b3830425e8469..ed968a69aa5dcd5c0f61011fd9ddeb0cc4a5a4b6 100644
--- a/wax-prosemirror-components/src/components/Button.js
+++ b/wax-prosemirror-components/src/components/Button.js
@@ -19,7 +19,7 @@ const Button = ({ view = {}, item }) => {
     run(state, dispatch);
   };
 
-  const isActive = active && active(state);
+  const isActive = active && active(state, activeViewId);
 
   const isDisabled =
     enable && !enable(state) && !(select && select(state, activeViewId));
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js
index 4fed67b7abdf136c76269e1b5963d4a869dce4a5..f1d954587439c1d25b0f59cdb21ec84a34444ad1 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js
@@ -19,8 +19,17 @@ class Heading1 extends Tools {
   }
 
   get active() {
-    return state => {
-      return Commands.blockActive(state.config.schema.nodes.heading, {
+    return (state, activeViewId) => {
+      let isActive = true;
+      if (activeViewId !== 'main') return false;
+      const { from, to } = state.selection;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'list_item') {
+          isActive = false;
+        }
+      });
+      if (!isActive) return false;
+      return !Commands.setBlockType(state.config.schema.nodes.heading, {
         level: 1,
       })(state);
     };
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
index d4979cb93a9b0626288256b39e6e4d3d73895da2..cb07816bf7c506dd466ec057a1b91f4e98d0ca20 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
@@ -19,8 +19,17 @@ class Heading2 extends Tools {
   }
 
   get active() {
-    return state => {
-      return Commands.blockActive(state.config.schema.nodes.heading, {
+    return (state, activeViewId) => {
+      let isActive = true;
+      if (activeViewId !== 'main') return false;
+      const { from, to } = state.selection;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'list_item') {
+          isActive = false;
+        }
+      });
+      if (!isActive) return false;
+      return !Commands.setBlockType(state.config.schema.nodes.heading, {
         level: 2,
       })(state);
     };
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
index 0e198226c19e310df8546bd925b1c92e773650eb..a4d4448106d984ace70c1d885ab65273bf79d76c 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
@@ -19,8 +19,17 @@ class Heading3 extends Tools {
   }
 
   get active() {
-    return state => {
-      return Commands.blockActive(state.config.schema.nodes.heading, {
+    return (state, activeViewId) => {
+      let isActive = true;
+      if (activeViewId !== 'main') return false;
+      const { from, to } = state.selection;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'list_item') {
+          isActive = false;
+        }
+      });
+      if (!isActive) return false;
+      return !Commands.setBlockType(state.config.schema.nodes.heading, {
         level: 3,
       })(state);
     };