diff --git a/toonz/sources/include/tools/tool.h b/toonz/sources/include/tools/tool.h
index 4e79da4..7346bf9 100644
--- a/toonz/sources/include/tools/tool.h
+++ b/toonz/sources/include/tools/tool.h
@@ -426,6 +426,9 @@ return true if the method execution can have changed the current tool
 
   virtual TPropertyGroup *getProperties(int) { return 0; }
 
+  virtual bool onPropertyChanged(std::string propertyName, bool addToUndo) {
+    return onPropertyChanged(propertyName);
+  }
   /*!
           Does the tasks associated to changes in \p propertyName and returns \p
      true;
diff --git a/toonz/sources/tnztools/editassistantstool.cpp b/toonz/sources/tnztools/editassistantstool.cpp
index c0443f4..ddb78b6 100644
--- a/toonz/sources/tnztools/editassistantstool.cpp
+++ b/toonz/sources/tnztools/editassistantstool.cpp
@@ -203,14 +203,14 @@ public:
       m_readAssistant->updateTranslation();
   }
 
-  bool onPropertyChanged(std::string name/*, bool addToUndo*/) override {
+  bool onPropertyChanged(std::string name, bool addToUndo) override {
     if (TProperty *property = m_toolProperties.getProperty(name)) {
       if (name == m_assistantType.getName())
         m_newAssisnantType = TStringId::find( to_string(m_assistantType.getValue()) );
     } else {
       if (Closer closer = write(ModeAssistant, true))
         m_writeAssistant->propertyChanged(TStringId::find(name));
-      //if (addToUndo) apply();
+      if (addToUndo) apply();
       getViewer()->GLInvalidateAll();
     }
     return true;
diff --git a/toonz/sources/tnztools/filltool.cpp b/toonz/sources/tnztools/filltool.cpp
index 649dddf..84ea123 100644
--- a/toonz/sources/tnztools/filltool.cpp
+++ b/toonz/sources/tnztools/filltool.cpp
@@ -2036,7 +2036,7 @@ void FillTool::resetMulti() {
 
 //-----------------------------------------------------------------------------
 
-bool FillTool::onPropertyChanged(std::string propertyName) {
+bool FillTool::onPropertyChanged(std::string propertyName, bool addToUndo) {
   /*--- m_rectFill->onPropertyChangedを呼ぶかどうかのフラグ
                   fillType, frameRange, selective,
      colorTypeが変わったときに呼ぶ---*/
@@ -2093,8 +2093,7 @@ bool FillTool::onPropertyChanged(std::string propertyName) {
   }
 
   else if (!m_frameSwitched &&
-           (propertyName == m_maxGapDistance.getName() ||
-            propertyName == m_maxGapDistance.getName() + "withUndo")) {
+           (propertyName == m_maxGapDistance.getName())) {
     TXshLevel *xl = TTool::getApplication()->getCurrentLevel()->getLevel();
     m_level       = xl ? xl->getSimpleLevel() : 0;
     if (TVectorImageP vi = getImage(true)) {
@@ -2114,8 +2113,7 @@ bool FillTool::onPropertyChanged(std::string propertyName) {
       if (m_level) {
         m_level->setDirtyFlag(true);
         TTool::getApplication()->getCurrentLevel()->notifyLevelChange();
-        if (propertyName == m_maxGapDistance.getName() + "withUndo" &&
-            m_changedGapOriginalValue != -1.0) {
+        if (addToUndo && m_changedGapOriginalValue != -1.0) {
           TUndoManager::manager()->add(new VectorGapSizeChangeUndo(
               m_changedGapOriginalValue, m_maxGapDistance.getValue(),
               m_level.getPointer(), fid, vi, m_oldFillInformation));
diff --git a/toonz/sources/tnztools/filltool.h b/toonz/sources/tnztools/filltool.h
index 80bdd67..29ca186 100644
--- a/toonz/sources/tnztools/filltool.h
+++ b/toonz/sources/tnztools/filltool.h
@@ -124,7 +124,7 @@ public:
   void leftButtonDoubleClick(const TPointD &pos, const TMouseEvent &e) override;
   void resetMulti();
 
-  bool onPropertyChanged(std::string propertyName) override;
+  bool onPropertyChanged(std::string propertyName, bool addToUndo) override;
   void onImageChanged() override;
   void draw() override;
 
diff --git a/toonz/sources/tnztools/fullcolorbrushtool.cpp b/toonz/sources/tnztools/fullcolorbrushtool.cpp
index fdadf1d..d349d39 100644
--- a/toonz/sources/tnztools/fullcolorbrushtool.cpp
+++ b/toonz/sources/tnztools/fullcolorbrushtool.cpp
@@ -285,6 +285,8 @@ bool FullColorBrushTool::askWrite(const TRect &rect) {
 //--------------------------------------------------------------------------------------------------
 
 bool FullColorBrushTool::preLeftButtonDown() {
+  m_modifierAssistants->drawOnly = !FullcolorAssistants;
+  
   m_inputmanager.clearModifiers();
   m_inputmanager.addModifier( TInputModifierP(m_modifierTangents.getPointer()) );
   m_inputmanager.addModifier( TInputModifierP(m_modifierSegmentation.getPointer()) );
diff --git a/toonz/sources/tnztools/tooloptionscontrols.cpp b/toonz/sources/tnztools/tooloptionscontrols.cpp
index 1af2ee9..f26ee4f 100644
--- a/toonz/sources/tnztools/tooloptionscontrols.cpp
+++ b/toonz/sources/tnztools/tooloptionscontrols.cpp
@@ -53,12 +53,8 @@ ToolOptionControl::ToolOptionControl(TTool *tool, std::string propertyName,
 
 //-----------------------------------------------------------------------------
 
-void ToolOptionControl::notifyTool(bool addToUndo) {
-  std::string tempPropertyName = m_propertyName;
-  if (addToUndo && m_propertyName == "Maximum Gap")
-    tempPropertyName = tempPropertyName + "withUndo";
-  m_tool->onPropertyChanged(tempPropertyName);
-}
+void ToolOptionControl::notifyTool(bool addToUndo)
+  { m_tool->onPropertyChanged(m_propertyName, addToUndo); }
 
 //-----------------------------------------------------------------------------
 /*! return true if the control is belonging to the visible combo viewer. very
@@ -221,7 +217,7 @@ void ToolOptionPairSlider::updateStatus() {
 
 void ToolOptionPairSlider::onValuesChanged(bool isDragging) {
   m_property->setValue(getValues());
-  notifyTool();
+  notifyTool(!isDragging);
   // synchronize the state with the same widgets in other tool option bars
   if (m_toolHandle) m_toolHandle->notifyToolChanged();
 }
@@ -260,7 +256,7 @@ void ToolOptionIntPairSlider::updateStatus() {
 
 void ToolOptionIntPairSlider::onValuesChanged(bool isDragging) {
   m_property->setValue(getValues());
-  notifyTool();
+  notifyTool(!isDragging);
   // synchronize the state with the same widgets in other tool option bars
   if (m_toolHandle) m_toolHandle->notifyToolChanged();
 }
@@ -299,7 +295,7 @@ void ToolOptionIntSlider::updateStatus() {
 
 void ToolOptionIntSlider::onValueChanged(bool isDragging) {
   m_property->setValue(getValue());
-  notifyTool();
+  notifyTool(!isDragging);
 }
 
 //=============================================================================
diff --git a/toonz/sources/tnztools/tooloptionscontrols.h b/toonz/sources/tnztools/tooloptionscontrols.h
index 78fad5b..263919a 100644
--- a/toonz/sources/tnztools/tooloptionscontrols.h
+++ b/toonz/sources/tnztools/tooloptionscontrols.h
@@ -73,7 +73,7 @@ public:
   const std::string &propertyName() const { return m_propertyName; }
 
   void onPropertyChanged() override { updateStatus(); }
-  void notifyTool(bool addToUndo = false);
+  void notifyTool(bool addToUndo = true);
   // return true if the control is belonging to the visible viewer
   bool isInVisibleViewer(QWidget *widget);