diff --git a/wax-prosemirror-components/index.js b/wax-prosemirror-components/index.js
index f3a5082cd16efe2fd42d56ae3e7912e9f4e47e41..41b239ecfa76a233c7b87961013dbf3b2899c821 100644
--- a/wax-prosemirror-components/index.js
+++ b/wax-prosemirror-components/index.js
@@ -16,7 +16,8 @@ export { default as CreateTable } from './src/components/tables/CreateTable';
 export { default as Tabs } from './src/ui/tabs/Tabs';
 export { default as BlockLevelTools } from './src/ui/tabs/BlockLevelTools';
 export { default as FindAndReplaceTool } from './src/components/findAndReplace/FindAndReplaceTool';
-export { default as FullScreen } from './src/components/FullScreen';
+export { default as FullScreen } from './src/components/various/FullScreen';
+export { default as LeftSideButton } from './src/components/various/LeftSideButton';
 export { default as SpecialCharactersTool } from './src/components/specialCharacters/SpecialCharactersTool';
 export { default as TextHighlightingTool } from './src/components/textHighlight/TextHighlightingTool';
 export { default as EditorInfoTool } from './src/components/EditorInfo/CounterInfo/EditorInfoTool';
diff --git a/wax-prosemirror-components/src/components/customtag/CustomTagBlockComponent.js b/wax-prosemirror-components/src/components/customtag/CustomTagBlockComponent.js
index 688b99c48be71bc57713713641ab2b66fc680ea0..14d71e2314b5d2be99743afe0c9ec92ff19d74a3 100644
--- a/wax-prosemirror-components/src/components/customtag/CustomTagBlockComponent.js
+++ b/wax-prosemirror-components/src/components/customtag/CustomTagBlockComponent.js
@@ -1,9 +1,17 @@
 import React, { useContext, useMemo, useRef, useState, useEffect } from 'react';
-import styled from 'styled-components';
+import styled, { css } from 'styled-components';
 import { WaxContext } from 'wax-prosemirror-core';
 import { v4 as uuidv4 } from 'uuid';
 import MenuButton from '../../ui/buttons/MenuButton';
 
+const activeStyles = css`
+  pointer-events: none;
+`;
+
+const StyledButton = styled(MenuButton)`
+  ${props => props.active && activeStyles}
+`;
+
 const Input = styled.input`
   border: none;
   border-bottom: 1px solid grey;
@@ -138,7 +146,7 @@ const CustomTagBlockComponent = ({ isShowTag, item }) => {
       tagList.push(
         <TagBoxWrapper key={uuidv4()}>
           <Box key={uuidv4()} />
-          <MenuButton
+          <StyledButton
             active={tagStatus[blockTag.label]}
             disabled={isDisabled}
             key={uuidv4()}
diff --git a/wax-prosemirror-components/src/components/FullScreen.js b/wax-prosemirror-components/src/components/various/FullScreen.js
similarity index 96%
rename from wax-prosemirror-components/src/components/FullScreen.js
rename to wax-prosemirror-components/src/components/various/FullScreen.js
index 941c40f31bbf56de0e849e08b2fad3d37afd88ac..3e458f119c336412036ba0b2411d76f4001dccc2 100644
--- a/wax-prosemirror-components/src/components/FullScreen.js
+++ b/wax-prosemirror-components/src/components/various/FullScreen.js
@@ -3,7 +3,7 @@
 import React, { useContext, useMemo } from 'react';
 import { TextSelection } from 'prosemirror-state';
 import { WaxContext } from 'wax-prosemirror-core';
-import MenuButton from '../ui/buttons/MenuButton';
+import MenuButton from '../../ui/buttons/MenuButton';
 
 const Button = ({ view = {}, item }) => {
   const { active, icon, label, select, title } = item;
diff --git a/wax-prosemirror-components/src/components/various/LeftSideButton.js b/wax-prosemirror-components/src/components/various/LeftSideButton.js
new file mode 100644
index 0000000000000000000000000000000000000000..61b65e239a4c3fa3084a07d68c3b0507a0960c8a
--- /dev/null
+++ b/wax-prosemirror-components/src/components/various/LeftSideButton.js
@@ -0,0 +1,61 @@
+/* eslint react/prop-types: 0 */
+import React, { useContext, useMemo } from 'react';
+import { WaxContext } from 'wax-prosemirror-core';
+import styled, { css } from 'styled-components';
+import MenuButton from '../../ui/buttons/MenuButton';
+
+const activeStyles = css`
+  pointer-events: none;
+`;
+
+const StyledButton = styled(MenuButton)`
+  ${props => props.active && activeStyles}
+`;
+
+const LeftSideButton = ({ view = {}, item }) => {
+  const { active, icon, label, onlyOnMain, run, select, title } = item;
+
+  const {
+    view: { main },
+    activeViewId,
+    activeView,
+  } = useContext(WaxContext);
+
+  if (onlyOnMain) view = main;
+
+  const isEditable = main.props.editable(editable => {
+    return editable;
+  });
+
+  const { dispatch, state } = view;
+
+  const handleMouseDown = (e, editorState, editorDispatch) => {
+    e.preventDefault();
+    run(editorState, dispatch);
+  };
+
+  const isActive = !!(
+    active(state, activeViewId) && select(state, activeViewId)
+  );
+
+  let isDisabled = !select(state, activeViewId, activeView);
+  if (!isEditable) isDisabled = true;
+
+  const LeftSideButtonComponent = useMemo(
+    () => (
+      <StyledButton
+        active={isActive || false}
+        disabled={isDisabled}
+        iconName={icon}
+        label={label}
+        onMouseDown={e => handleMouseDown(e, view.state, view.dispatch)}
+        title={title}
+      />
+    ),
+    [isActive, isDisabled],
+  );
+
+  return LeftSideButtonComponent;
+};
+
+export default LeftSideButton;
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js
index 8bd7a8564d91f4fd757975d809c2a8a7f08eb636..b622fd1fa25ee025a07ae182efccbc923c02d010 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -32,6 +35,14 @@ class Author extends Tools {
       return Commands.setBlockType(state.config.schema.nodes.author)(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 
 export default Author;
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js
index 7155f17258e68aaee0598a7430819658f5344a56..6d3fe21688abd5fa5399ae6728827d3ce97730d1 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -36,6 +39,14 @@ class EpigraphPoetry extends Tools {
       );
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 
 export default EpigraphPoetry;
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js
index 365321ad08a3c1a950721f87ced1745bf8a0943f..02a2b94b8eb1876985d116b04cf955fa7919e727 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -37,4 +40,12 @@ class EpigraphProse extends Tools {
       );
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
index 3dd460550c4f71b81f0bb052c30c4251ab46359d..f29ab84670b3e5413ec6a3ba648ab8da80b76bcb 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -47,4 +50,12 @@ class Heading2 extends Tools {
       })(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
index 21a99033e07792b61cace70df0f20a5b012904b0..e2dd3d94ecd790c725fd28c363938c0fe2dcd00a 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -47,4 +50,12 @@ class Heading3 extends Tools {
       })(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js
index fdc4e4ffe33d4132ae6cb0221e470cefcd6a3cc6..3991590cf620ef5a844e0d16726dd36262ce5912 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading4.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -47,4 +50,12 @@ class Heading4 extends Tools {
       })(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js
index 17293be671c324d0c75a37d4c659aff9a5895227..b9a534540edabbcfaeb888b5313a65627c482732 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -33,4 +36,12 @@ class SubTitle extends Tools {
       return Commands.setBlockType(state.config.schema.nodes.subtitle)(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
diff --git a/wax-prosemirror-services/src/FullScreenService/FullScreenTool.js b/wax-prosemirror-services/src/FullScreenService/FullScreenTool.js
index ae8d74663270816021a4578ad5a10c112569b041..031b1f758068ad5550f8d7d81ffa9ce56a440a90 100644
--- a/wax-prosemirror-services/src/FullScreenService/FullScreenTool.js
+++ b/wax-prosemirror-services/src/FullScreenService/FullScreenTool.js
@@ -27,8 +27,9 @@ class FullScreenTool extends Tools {
 
   renderTool(view) {
     if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
     return this._isDisplayed ? (
-      <FullScreen key="FullScreen" item={this.toJSON()} view={view} />
+      <FullScreen item={this.toJSON()} key="FullScreen" view={view} />
     ) : null;
   }
 }
diff --git a/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js b/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js
index f6da4040bdf347e77417eecd5522328445d98d20..8dc87c7063b78fb9f34caf4a3c3cd651a98d93b1 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/BlockQuoteService/BlockQuote.js
@@ -1,6 +1,9 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
 import { wrapIn } from 'prosemirror-commands';
 import { NodeSelection } from 'prosemirror-state';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import Tools from '../../lib/Tools';
 
 @injectable()
@@ -39,5 +42,13 @@ class BlockQuote extends Tools {
       return wrapIn(state.config.schema.nodes.blockquote)(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 export default BlockQuote;
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js b/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js
index c5e8fdfca4080b0a1207d467736b633f5435c7fd..bf8741648362b5835aac2a5918fce5d43065e119 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -36,5 +39,13 @@ class ExtractPoetry extends Tools {
       );
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 export default ExtractPoetry;
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js b/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js
index 0760fabbed7f528a3d258e8bd040142eb5375c48..9096f4f0668697232c2f5b5d025928ef8123fcf4 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -36,5 +39,13 @@ class ExtractProse extends Tools {
       );
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 export default ExtractProse;
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js b/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js
index 774a432142d337f3126bffe139cac6b2f18744f2..a4eb6bf3cceac21b0934b4831965ed7c44ac3fe7 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js
@@ -1,4 +1,7 @@
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
 import Tools from '../../lib/Tools';
 
@@ -36,6 +39,14 @@ class ParagraphContinued extends Tools {
       );
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 
 export default ParagraphContinued;
diff --git a/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js b/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js
index f0ebddd07ba0eb1b59065700874608d400035b4a..caf142fbbb51b29374e995d8cd75dcff67da958b 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js
@@ -1,6 +1,9 @@
-import Tools from '../../lib/Tools';
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
+import Tools from '../../lib/Tools';
 
 export default
 @injectable()
@@ -33,4 +36,12 @@ class Paragraph extends Tools {
       return Commands.setBlockType(state.config.schema.nodes.paragraph)(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
diff --git a/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js b/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js
index 17c67a2789f5edb2f86015c94ed208cf57fd05f0..58d4e63f59d15fd99fb61044328ecf8855aa53ab 100644
--- a/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js
+++ b/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js
@@ -1,6 +1,9 @@
-import Tools from '../../lib/Tools';
+import React from 'react';
 import { injectable } from 'inversify';
+import { isEmpty } from 'lodash';
+import { LeftSideButton } from 'wax-prosemirror-components';
 import { Commands } from 'wax-prosemirror-utilities';
+import Tools from '../../lib/Tools';
 
 @injectable()
 class SourceNote extends Tools {
@@ -32,5 +35,13 @@ class SourceNote extends Tools {
       return Commands.setBlockType(state.config.schema.nodes.sourceNote)(state);
     };
   }
+
+  renderTool(view) {
+    if (isEmpty(view)) return null;
+    // eslint-disable-next-line no-underscore-dangle
+    return this._isDisplayed ? (
+      <LeftSideButton item={this.toJSON()} key="BlockQuote" view={view} />
+    ) : null;
+  }
 }
 export default SourceNote;