diff --git a/toonz/sources/include/tools/inputmanager.h b/toonz/sources/include/tools/inputmanager.h
index 3dfcc51..011b05a 100644
--- a/toonz/sources/include/tools/inputmanager.h
+++ b/toonz/sources/include/tools/inputmanager.h
@@ -222,6 +222,10 @@ public:
   void insertModifier(int index, const TInputModifierP &modifier);
   void addModifier(const TInputModifierP &modifier)
     { insertModifier(getModifiersCount(), modifier); }
+  void addModifiers(const TInputModifier::List &modifiers) {
+    for(TInputModifier::List::const_iterator i = modifiers.begin(); i != modifiers.end(); ++i)
+      addModifier(*i);
+  }
   void removeModifier(int index);
   void removeModifier(const TInputModifierP &modifier)
     { removeModifier(findModifier(modifier)); }
diff --git a/toonz/sources/tnztools/fullcolorbrushtool.cpp b/toonz/sources/tnztools/fullcolorbrushtool.cpp
index bf62676..9472cc5 100644
--- a/toonz/sources/tnztools/fullcolorbrushtool.cpp
+++ b/toonz/sources/tnztools/fullcolorbrushtool.cpp
@@ -211,7 +211,6 @@ void FullColorBrushTool::onActivate() {
   if (!m_notifier) m_notifier = new FullColorBrushToolNotifier(this);
   m_notifier->onActivate();
 
-  updateModifiers();
   updateCurrentStyle();
 
   if (m_firstTime) {
@@ -231,6 +230,7 @@ void FullColorBrushTool::onActivate() {
 
   setWorkAndBackupImages();
   onColorStyleChanged();
+  updateModifiers();
 }
 
 //--------------------------------------------------------------------------------------------------
@@ -321,8 +321,7 @@ void FullColorBrushTool::updateModifiers() {
 #ifndef NDEBUG
   m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer()));
 #endif
-  for(TInputModifier::List::iterator i = m_modifierReplicate.begin(); i != m_modifierReplicate.end(); ++i)
-    m_inputmanager.addModifier(*i);
+  m_inputmanager.addModifiers(m_modifierReplicate);
   m_inputmanager.addModifier(
       TInputModifierP(m_modifierSegmentation.getPointer()));
 }
@@ -360,8 +359,7 @@ void FullColorBrushTool::handleMouseEvent(MouseEventType type,
     m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer()));
     m_inputmanager.addModifier(
         TInputModifierP(m_modifierAssistants.getPointer()));
-    for(TInputModifier::List::iterator i = m_modifierReplicate.begin(); i != m_modifierReplicate.end(); ++i)
-      m_inputmanager.addModifier(*i);
+    m_inputmanager.addModifiers(m_modifierReplicate);
     m_inputmanager.addModifier(
         TInputModifierP(m_modifierSegmentation.getPointer()));
     m_inputmanager.drawPreview = true;
diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp
index b4ba5d5..2270c94 100644
--- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp
+++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp
@@ -6,6 +6,7 @@
 #include "tools/toolhandle.h"
 #include "tools/toolutils.h"
 #include "tools/tooloptions.h"
+#include "tools/replicator.h"
 
 // TnzQt includes
 #include "toonzqt/dvdialog.h"
@@ -1009,6 +1010,7 @@ void ToonzRasterBrushTool::onActivate() {
                                       m_hardness.getValue() * 0.01);
   setWorkAndBackupImages();
 
+  updateModifiers();
   m_brushTimer.start();
   // TODO:app->editImageOrSpline();
 }
@@ -1036,13 +1038,17 @@ bool ToonzRasterBrushTool::askWrite(const TRect &rect) {
   return true;
 }
 
-//--------------------------------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------------
 
-bool ToonzRasterBrushTool::preLeftButtonDown() {
+void ToonzRasterBrushTool::updateModifiers() {
   int smoothRadius = (int)round(m_smooth.getValue());
   m_modifierAssistants->magnetism = m_assistants.getValue() ? 1 : 0;
   m_inputmanager.drawPreview      = false; //!m_modifierAssistants->drawOnly;
 
+  m_modifierReplicate.clear();
+  if (m_assistants.getValue())
+    TReplicator::scanReplicators(this, &m_modifierReplicate, false, true, false, nullptr);
+  
   m_inputmanager.clearModifiers();
   m_inputmanager.addModifier(TInputModifierP(m_modifierTangents.getPointer()));
   if (smoothRadius > 0) {
@@ -1056,8 +1062,14 @@ bool ToonzRasterBrushTool::preLeftButtonDown() {
 #ifndef NDEBUG
   m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer()));
 #endif
+  m_inputmanager.addModifiers(m_modifierReplicate);
   m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer()));
+}
+
+//--------------------------------------------------------------------------------------------------
 
+bool ToonzRasterBrushTool::preLeftButtonDown() {
+  updateModifiers();
   touchImage();
   if (m_isFrameCreated) {
     setWorkAndBackupImages();
@@ -1084,6 +1096,7 @@ void ToonzRasterBrushTool::handleMouseEvent(MouseEventType type,
     m_inputmanager.clearModifiers();
     m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer()));
     m_inputmanager.addModifier(TInputModifierP(m_modifierAssistants.getPointer()));
+    m_inputmanager.addModifiers(m_modifierReplicate);
     m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer()));
     m_inputmanager.drawPreview = true;
   }
diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.h b/toonz/sources/tnztools/toonzrasterbrushtool.h
index 826cb59..bff7ccb 100644
--- a/toonz/sources/tnztools/toonzrasterbrushtool.h
+++ b/toonz/sources/tnztools/toonzrasterbrushtool.h
@@ -108,8 +108,10 @@ public:
 
   ToolType getToolType() const override
     { return TTool::LevelWriteTool; }
-  unsigned int getToolHints() const override
-    { return (TTool::getToolHints() & ~HintAssistantsAll) | HintReplicatorsEnabled; }
+  unsigned int getToolHints() const override {
+    unsigned int h = TTool::getToolHints() & ~HintAssistantsAll;
+    return m_assistants.getValue() ? h | HintReplicatorsEnabled : h;
+  }
   
   ToolOptionsBox *createOptionsBox() override;
 
@@ -162,6 +164,8 @@ public:
   bool isMyPaintStyleSelected() { return m_isMyPaintStyleSelected; }
 
 private:
+  void updateModifiers();
+
   enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE };
   void handleMouseEvent(MouseEventType type, const TPointD &pos,
                         const TMouseEvent &e);
@@ -177,6 +181,7 @@ protected:
 #ifndef NDEBUG
   TSmartPointerT<TModifierTest> m_modifierTest;
 #endif
+  TInputModifier::List m_modifierReplicate;
 
   class MyPaintStroke: public TTrackHandler {
   public:
diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.cpp b/toonz/sources/tnztools/toonzvectorbrushtool.cpp
index 1e01069..31fb828 100644
--- a/toonz/sources/tnztools/toonzvectorbrushtool.cpp
+++ b/toonz/sources/tnztools/toonzvectorbrushtool.cpp
@@ -6,6 +6,7 @@
 #include "tools/toolhandle.h"
 #include "tools/toolutils.h"
 #include "tools/tooloptions.h"
+#include "tools/replicator.h"
 #include "bluredbrush.h"
 
 // TnzQt includes
@@ -657,6 +658,7 @@ void ToonzVectorBrushTool::onActivate() {
       loadLastBrush();
   }
   resetFrameRange();
+  updateModifiers();
   // TODO:app->editImageOrSpline();
 }
 
@@ -1043,9 +1045,7 @@ void ToonzVectorBrushTool::inputPaintTracks(const TTrackList &tracks) {
 
 //--------------------------------------------------------------------------------------------------
 
-bool ToonzVectorBrushTool::preLeftButtonDown() {
-  if (getViewer() && getViewer()->getGuidedStrokePickerMode()) return false;
-
+void ToonzVectorBrushTool::updateModifiers() {
   m_pixelSize = getPixelSize();
   int smoothRadius = (int)round(m_smooth.getValue());
   m_modifierAssistants->magnetism = m_assistants.getValue() ? 1 : 0;
@@ -1054,6 +1054,10 @@ bool ToonzVectorBrushTool::preLeftButtonDown() {
   m_modifierSimplify->step = 2*m_pixelSize;
   m_inputmanager.drawPreview = false;
 
+  m_modifierReplicate.clear();
+  if (m_assistants.getValue())
+    TReplicator::scanReplicators(this, &m_modifierReplicate, false, true, false, nullptr);
+  
   m_inputmanager.clearModifiers();
   m_inputmanager.addModifier(TInputModifierP(m_modifierTangents.getPointer()));
   if (smoothRadius > 0) {
@@ -1067,9 +1071,16 @@ bool ToonzVectorBrushTool::preLeftButtonDown() {
 #ifndef NDEBUG
   m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer()));
 #endif
+  m_inputmanager.addModifiers(m_modifierReplicate);
   m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer()));
   m_inputmanager.addModifier(TInputModifierP(m_modifierSimplify.getPointer()));
+}
 
+//--------------------------------------------------------------------------------------------------
+
+bool ToonzVectorBrushTool::preLeftButtonDown() {
+  if (getViewer() && getViewer()->getGuidedStrokePickerMode()) return false;
+  updateModifiers();
   touchImage();
   if (m_isFrameCreated) {
     // When the xsheet frame is selected, whole viewer will be updated from
@@ -1096,6 +1107,7 @@ void ToonzVectorBrushTool::handleMouseEvent(MouseEventType type,
     m_inputmanager.clearModifiers();
     m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer()));
     m_inputmanager.addModifier(TInputModifierP(m_modifierAssistants.getPointer()));
+    m_inputmanager.addModifiers(m_modifierReplicate);
     m_inputmanager.addModifier(TInputModifierP(m_modifierSegmentation.getPointer()));
     m_inputmanager.addModifier(TInputModifierP(m_modifierSimplify.getPointer()));
     m_inputmanager.drawPreview = true;
diff --git a/toonz/sources/tnztools/toonzvectorbrushtool.h b/toonz/sources/tnztools/toonzvectorbrushtool.h
index ae12706..b15a33b 100644
--- a/toonz/sources/tnztools/toonzvectorbrushtool.h
+++ b/toonz/sources/tnztools/toonzvectorbrushtool.h
@@ -99,8 +99,10 @@ public:
 
   ToolType getToolType() const override
     { return TTool::LevelWriteTool; }
-  unsigned int getToolHints() const override
-    { return (TTool::getToolHints() & ~HintAssistantsAll) | HintReplicatorsEnabled; }
+  unsigned int getToolHints() const override {
+    unsigned int h = TTool::getToolHints() & ~HintAssistantsAll;
+    return m_assistants.getValue() ? h | HintReplicatorsEnabled : h;
+  }
 
   ToolOptionsBox *createOptionsBox() override;
 
@@ -168,6 +170,8 @@ protected:
 
   void snap(const TPointD &pos, bool snapEnabled, bool withSelfSnap = false);
 
+  void updateModifiers();
+  
   enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE };
   void handleMouseEvent(MouseEventType type, const TPointD &pos,
                         const TMouseEvent &e);
@@ -200,6 +204,7 @@ protected:
 #ifndef NDEBUG
   TSmartPointerT<TModifierTest> m_modifierTest;
 #endif
+  TInputModifier::List m_modifierReplicate;
   
   TrackList m_tracks;
   TrackList m_rangeTracks;