diff --git a/toonz/sources/include/tools/assistant.h b/toonz/sources/include/tools/assistant.h
index c908f7d..3ec9c7f 100644
--- a/toonz/sources/include/tools/assistant.h
+++ b/toonz/sources/include/tools/assistant.h
@@ -57,19 +57,31 @@ typedef std::vector<TAssistantPoint> TAssistantPointList;
 
 class DVAPI TGuideline : public TSmartObject {
 public:
+  const bool enabled;
   const double magnetism;
-  TGuideline(double magnetism): magnetism(magnetism) { }
+
+  TGuideline(bool enabled, double magnetism):
+    enabled(enabled), magnetism(magnetism) { }
 
   virtual TTrackPoint transformPoint(const TTrackPoint &point) const
     { return point; }
-  TTrackPoint smoothTransformPoint(const TTrackPoint &point, double magnetism = 1.0) const
-    { return TTrack::interpolationLinear(point, transformPoint(point), magnetism*this->magnetism); }
-  virtual void draw(bool active) const
+  virtual void draw(bool active, bool enabled) const
     { }
-  void draw() const
-    { draw(false); }
+  void draw(bool active = false) const
+    { draw(active, true); }
+
+  TTrackPoint smoothTransformPoint(const TTrackPoint &point, double magnetism = 1.0) const {
+    return enabled
+         ? TTrack::interpolationLinear(point, transformPoint(point), magnetism*this->magnetism)
+         : point;
+  }
 
-  void drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool active) const;
+  void drawSegment(
+    const TPointD &p0,
+    const TPointD &p1,
+    double pixelSize,
+    bool active,
+    bool enabled = true) const;
 
   double calcTrackWeight(const TTrack &track, const TAffine &toScreen, bool &outLongEnough) const;
   static TGuidelineP findBest(const TGuidelineList &guidelines, const TTrack &track, const TAffine &toScreen, bool &outLongEnough);
@@ -242,7 +254,7 @@ protected:
   //! put value from property to variant
   virtual void onPropertyChanged(const TStringId &name);
 
-  void drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize) const;
+  void drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool enabled = true) const;
   void drawPoint(const TAssistantPoint &point, double pixelSize) const;
 
   void addProperty(TProperty *p);
@@ -251,7 +263,8 @@ protected:
 public:
   virtual void updateTranslation() const;
   virtual void getGuidelines(const TPointD &position, const TAffine &toTool, TGuidelineList &outGuidelines) const;
-  virtual void draw(TToolViewer *viewer) const;
+  virtual void draw(TToolViewer *viewer, bool enabled) const;
+  void draw(TToolViewer *viewer) const { draw(viewer, true); }
   virtual void drawEdit(TToolViewer *viewer) const;
 };
 
diff --git a/toonz/sources/tnztools/assistant.cpp b/toonz/sources/tnztools/assistant.cpp
index 2a4af8a..b4f669f 100644
--- a/toonz/sources/tnztools/assistant.cpp
+++ b/toonz/sources/tnztools/assistant.cpp
@@ -12,10 +12,20 @@
 //************************************************************************
 
 void
-TGuideline::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool active) const {
+TGuideline::drawSegment(
+  const TPointD &p0,
+  const TPointD &p1,
+  double pixelSize,
+  bool active,
+  bool enabled ) const
+{
   double colorBlack[4] = { 0.0, 0.0, 0.0, 0.5 };
   double colorWhite[4] = { 1.0, 1.0, 1.0, 0.5 };
-  if (!active) colorBlack[3] = (colorWhite[3] *= 0.5);
+
+  if (!this->enabled || !enabled)
+    colorBlack[3] = (colorWhite[3] = 0.25);
+  else if (!active)
+    colorBlack[3] = (colorWhite[3] = 0.75);
 
   glPushAttrib(GL_ALL_ATTRIB_BITS);
   tglEnableBlending();
@@ -38,7 +48,7 @@ TGuideline::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, 
 double
 TGuideline::calcTrackWeight(const TTrack &track, const TAffine &toScreen, bool &outLongEnough) const {
   outLongEnough = false;
-  if (track.size() < 2)
+  if (!enabled || track.size() < 2)
     return std::numeric_limits<double>::infinity();
 
   const double snapLenght = 20.0;
@@ -320,9 +330,11 @@ TAssistant::onPropertyChanged(const TStringId &name) {
 //---------------------------------------------------------------------------------------------------
 
 void
-TAssistant::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize) const {
+TAssistant::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool enabled) const {
   double colorBlack[4] = { 0.0, 0.0, 0.0, 0.5 };
   double colorWhite[4] = { 1.0, 1.0, 1.0, 0.5 };
+  if (!enabled || !this->getEnabled())
+    colorBlack[3] = (colorWhite[3] *= 0.5);
 
   glPushAttrib(GL_ALL_ATTRIB_BITS);
   tglEnableBlending();
@@ -400,7 +412,7 @@ TAssistant::getGuidelines(const TPointD &position, const TAffine &toTool, TGuide
 //---------------------------------------------------------------------------------------------------
 
 void
-TAssistant::draw(TToolViewer *viewer) const
+TAssistant::draw(TToolViewer *viewer, bool enabled) const
   { }
 
 //---------------------------------------------------------------------------------------------------
diff --git a/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp b/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp
index bae4abf..0c4a3f9 100644
--- a/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp
+++ b/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp
@@ -33,18 +33,19 @@ public:
   {
     outGuidelines.push_back(TGuidelineP(
       new TGuidelineInfiniteLine(
+        getEnabled(),
         getMagnetism(),
         toTool*m_points.front().position,
         position )));
   }
 
-  void draw(TToolViewer *viewer) const override {
+  void draw(TToolViewer *viewer, bool enabled) const override {
     double pixelSize = sqrt(tglGetPixelSize2());
     const TPointD &p = m_points.front().position;
     TPointD dx(20.0*pixelSize, 0.0);
     TPointD dy(0.0, 10.0*pixelSize);
-    drawSegment(p-dx-dy, p+dx+dy, pixelSize);
-    drawSegment(p-dx+dy, p+dx-dy, pixelSize);
+    drawSegment(p-dx-dy, p+dx+dy, pixelSize, enabled);
+    drawSegment(p-dx+dy, p+dx-dy, pixelSize, enabled);
   }
 };
 
diff --git a/toonz/sources/tnztools/assistants/guidelineline.cpp b/toonz/sources/tnztools/assistants/guidelineline.cpp
index fe18b80..9ae3bf2 100644
--- a/toonz/sources/tnztools/assistants/guidelineline.cpp
+++ b/toonz/sources/tnztools/assistants/guidelineline.cpp
@@ -10,8 +10,8 @@
 //    TGuidelineLineBase implementation
 //*****************************************************************************************
 
-TGuidelineLineBase::TGuidelineLineBase(double magnetism, const TPointD &p0, const TPointD &p1):
-  TGuideline(magnetism), p0(p0), p1(p1) { }
+TGuidelineLineBase::TGuidelineLineBase(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuideline(enabled, magnetism), p0(p0), p1(p1) { }
 
 TPointD
 TGuidelineLineBase::calcDirection(const TPointD &p0, const TPointD &p1) {
@@ -40,7 +40,7 @@ TGuidelineLineBase::truncateInfiniteLine(const TRectD &bounds, TPointD &p0, TPoi
 }
 
 void
-TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active) const {
+TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active, bool enabled) const {
   TAffine4 modelview, projection;
   glGetDoublev(GL_MODELVIEW_MATRIX, modelview.a);
   glGetDoublev(GL_PROJECTION_MATRIX, projection.a);
@@ -52,7 +52,7 @@ TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool 
 
   double pixelSize = sqrt(tglGetPixelSize2());
   TAffine matrixInv = matrix.inv();
-  drawSegment((ray ? p0 : matrixInv*pp0), matrixInv*pp1, pixelSize, active);
+  drawSegment((ray ? p0 : matrixInv*pp0), matrixInv*pp1, pixelSize, active, enabled);
 }
 
 
@@ -60,8 +60,8 @@ TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool 
 //    TGuidelineLine implementation
 //*****************************************************************************************
 
-TGuidelineLine::TGuidelineLine(double magnetism, const TPointD &p0, const TPointD &p1):
-  TGuidelineLineBase(magnetism, p0, p1),
+TGuidelineLine::TGuidelineLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuidelineLineBase(enabled, magnetism, p0, p1),
   dir(calcDirection(p0, p1)),
   dist(norm(p1 - p0)) { }
 
@@ -73,16 +73,16 @@ TGuidelineLine::transformPoint(const TTrackPoint &point) const {
 }
 
 void
-TGuidelineLine::draw(bool active) const
-  { drawSegment(p0, p1, sqrt(tglGetPixelSize2()), active); }
+TGuidelineLine::draw(bool active, bool enabled) const
+  { drawSegment(p0, p1, sqrt(tglGetPixelSize2()), active, enabled); }
 
 
 //*****************************************************************************************
 //    TGuidelineInfiniteLine implementation
 //*****************************************************************************************
 
-TGuidelineInfiniteLine::TGuidelineInfiniteLine(double magnetism, const TPointD &p0, const TPointD &p1):
-  TGuidelineLineBase(magnetism, p0, p1),
+TGuidelineInfiniteLine::TGuidelineInfiniteLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuidelineLineBase(enabled, magnetism, p0, p1),
   dir(calcDirection(p0, p1)) { }
 
 TTrackPoint
@@ -93,16 +93,16 @@ TGuidelineInfiniteLine::transformPoint(const TTrackPoint &point) const {
 }
 
 void
-TGuidelineInfiniteLine::draw(bool active) const
-  { drawInliniteLine(p0, p1, false, active); }
+TGuidelineInfiniteLine::draw(bool active, bool enabled) const
+  { drawInliniteLine(p0, p1, false, active, enabled); }
 
 
 //*****************************************************************************************
 //    TGuidelineRay implementation
 //*****************************************************************************************
 
-TGuidelineRay::TGuidelineRay(double magnetism, const TPointD &p0, const TPointD &p1):
-  TGuidelineLineBase(magnetism, p0, p1),
+TGuidelineRay::TGuidelineRay(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuidelineLineBase(enabled, magnetism, p0, p1),
   dir(calcDirection(p0, p1)) { }
 
 TTrackPoint
@@ -113,6 +113,6 @@ TGuidelineRay::transformPoint(const TTrackPoint &point) const {
 }
 
 void
-TGuidelineRay::draw(bool active) const
-  { drawInliniteLine(p0, p1, true, active); }
+TGuidelineRay::draw(bool active, bool enabled) const
+  { drawInliniteLine(p0, p1, true, active, enabled); }
 
diff --git a/toonz/sources/tnztools/assistants/guidelineline.h b/toonz/sources/tnztools/assistants/guidelineline.h
index 6719453..cb2d76d 100644
--- a/toonz/sources/tnztools/assistants/guidelineline.h
+++ b/toonz/sources/tnztools/assistants/guidelineline.h
@@ -31,8 +31,8 @@ public:
   const TPointD p0;
   const TPointD p1;
 
-  TGuidelineLineBase(double magnetism, const TPointD &p0, const TPointD &p1);
-  void drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active) const;
+  TGuidelineLineBase(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1);
+  void drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active, bool enabled) const;
   static TPointD calcDirection(const TPointD &p0, const TPointD &p1);
   static void truncateInfiniteLine(const TRectD &bounds, TPointD &p0, TPointD &p1);
 };
@@ -47,9 +47,9 @@ public:
   const TPointD dir;
   const double dist;
 
-  TGuidelineLine(double magnetism, const TPointD &p0, const TPointD &p1);
+  TGuidelineLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1);
   TTrackPoint transformPoint(const TTrackPoint &point) const override;
-  void draw(bool active) const override;
+  void draw(bool active, bool enabled) const override;
 };
 
 
@@ -61,9 +61,9 @@ class DVAPI TGuidelineInfiniteLine : public TGuidelineLineBase {
 public:
   const TPointD dir;
 
-  TGuidelineInfiniteLine(double magnetism, const TPointD &p0, const TPointD &p1);
+  TGuidelineInfiniteLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1);
   TTrackPoint transformPoint(const TTrackPoint &point) const override;
-  void draw(bool active) const override;
+  void draw(bool active, bool enabled) const override;
 };
 
 
@@ -75,9 +75,9 @@ class DVAPI TGuidelineRay : public TGuidelineLineBase {
 public:
   const TPointD dir;
 
-  TGuidelineRay(double magnetism, const TPointD &p0, const TPointD &p1);
+  TGuidelineRay(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1);
   TTrackPoint transformPoint(const TTrackPoint &point) const override;
-  void draw(bool active) const override;
+  void draw(bool active, bool enabled) const override;
 };
 
 #endif
diff --git a/toonz/sources/tnztools/modifiers/modifierassistants.cpp b/toonz/sources/tnztools/modifiers/modifierassistants.cpp
index 317d71b..1a62e44 100644
--- a/toonz/sources/tnztools/modifiers/modifierassistants.cpp
+++ b/toonz/sources/tnztools/modifiers/modifierassistants.cpp
@@ -99,7 +99,7 @@ TModifierAssistants::scanAssistants(
             if (findGuidelines)
               for(int i = 0; i < positionsCount; ++i)
                 assistant->getGuidelines(positions[i], imageToTrack, *outGuidelines);
-            if (draw) assistant->draw(viewer);
+            if (draw) assistant->draw(viewer, !drawOnly);
             if (!doSomething) return true;
           }
 
@@ -202,7 +202,8 @@ void
 TModifierAssistants::draw(const TTrackList &tracks, const THoverList &hovers) {
   THoverList allHovers;
   allHovers.reserve(hovers.size() + tracks.size());
-  allHovers.insert(allHovers.end(), hovers.begin(), hovers.end());
+  if (tracks.empty()) // hide hovers if track exists
+    allHovers.insert(allHovers.end(), hovers.begin(), hovers.end());
   for(TTrackList::const_iterator i = tracks.begin(); i != tracks.end(); ++i)
     if ((*i)->handler && !(*i)->handler->tracks.empty() && !(*i)->handler->tracks.front()->empty())
       allHovers.push_back( (*i)->handler->tracks.front()->back().position );
@@ -218,7 +219,7 @@ TModifierAssistants::draw(const TTrackList &tracks, const THoverList &hovers) {
 
   // draw guidelines
   for(TGuidelineList::const_iterator i = guidelines.begin(); i != guidelines.end(); ++i)
-    (*i)->draw();
+    (*i)->draw(false, !drawOnly);
 
   // draw tracks
   TInputModifier::drawTracks(tracks);