diff --git a/toonz/sources/include/tools/assistant.h b/toonz/sources/include/tools/assistant.h
index 5f88920..c908f7d 100644
--- a/toonz/sources/include/tools/assistant.h
+++ b/toonz/sources/include/tools/assistant.h
@@ -57,8 +57,13 @@ typedef std::vector<TAssistantPoint> TAssistantPointList;
 
 class DVAPI TGuideline : public TSmartObject {
 public:
+  const double magnetism;
+  TGuideline(double magnetism): 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
     { }
   void draw() const
diff --git a/toonz/sources/include/tools/modifiers/modifierassistants.h b/toonz/sources/include/tools/modifiers/modifierassistants.h
index 71bb3bb..8a4fc3d 100644
--- a/toonz/sources/include/tools/modifiers/modifierassistants.h
+++ b/toonz/sources/include/tools/modifiers/modifierassistants.h
@@ -41,7 +41,8 @@ private:
     const TPointD *positions,
     int positionsCount,
     TGuidelineList *outGuidelines,
-    bool draw ) const;
+    bool draw,
+    bool enabledOnly ) const;
 
 public:
   const bool drawOnly;
diff --git a/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp b/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp
index 2d5fb4b..bae4abf 100644
--- a/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp
+++ b/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp
@@ -33,6 +33,7 @@ public:
   {
     outGuidelines.push_back(TGuidelineP(
       new TGuidelineInfiniteLine(
+        getMagnetism(),
         toTool*m_points.front().position,
         position )));
   }
diff --git a/toonz/sources/tnztools/assistants/guidelineline.cpp b/toonz/sources/tnztools/assistants/guidelineline.cpp
index 26c2c0d..fe18b80 100644
--- a/toonz/sources/tnztools/assistants/guidelineline.cpp
+++ b/toonz/sources/tnztools/assistants/guidelineline.cpp
@@ -10,8 +10,8 @@
 //    TGuidelineLineBase implementation
 //*****************************************************************************************
 
-TGuidelineLineBase::TGuidelineLineBase(const TPointD &p0, const TPointD &p1):
-  p0(p0), p1(p1) { }
+TGuidelineLineBase::TGuidelineLineBase(double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuideline(magnetism), p0(p0), p1(p1) { }
 
 TPointD
 TGuidelineLineBase::calcDirection(const TPointD &p0, const TPointD &p1) {
@@ -60,8 +60,8 @@ TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool 
 //    TGuidelineLine implementation
 //*****************************************************************************************
 
-TGuidelineLine::TGuidelineLine(const TPointD &p0, const TPointD &p1):
-  TGuidelineLineBase(p0, p1),
+TGuidelineLine::TGuidelineLine(double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuidelineLineBase(magnetism, p0, p1),
   dir(calcDirection(p0, p1)),
   dist(norm(p1 - p0)) { }
 
@@ -81,8 +81,8 @@ TGuidelineLine::draw(bool active) const
 //    TGuidelineInfiniteLine implementation
 //*****************************************************************************************
 
-TGuidelineInfiniteLine::TGuidelineInfiniteLine(const TPointD &p0, const TPointD &p1):
-  TGuidelineLineBase(p0, p1),
+TGuidelineInfiniteLine::TGuidelineInfiniteLine(double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuidelineLineBase(magnetism, p0, p1),
   dir(calcDirection(p0, p1)) { }
 
 TTrackPoint
@@ -101,8 +101,8 @@ TGuidelineInfiniteLine::draw(bool active) const
 //    TGuidelineRay implementation
 //*****************************************************************************************
 
-TGuidelineRay::TGuidelineRay(const TPointD &p0, const TPointD &p1):
-  TGuidelineLineBase(p0, p1),
+TGuidelineRay::TGuidelineRay(double magnetism, const TPointD &p0, const TPointD &p1):
+  TGuidelineLineBase(magnetism, p0, p1),
   dir(calcDirection(p0, p1)) { }
 
 TTrackPoint
diff --git a/toonz/sources/tnztools/assistants/guidelineline.h b/toonz/sources/tnztools/assistants/guidelineline.h
index f283940..6719453 100644
--- a/toonz/sources/tnztools/assistants/guidelineline.h
+++ b/toonz/sources/tnztools/assistants/guidelineline.h
@@ -31,7 +31,7 @@ public:
   const TPointD p0;
   const TPointD p1;
 
-  TGuidelineLineBase(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;
   static TPointD calcDirection(const TPointD &p0, const TPointD &p1);
   static void truncateInfiniteLine(const TRectD &bounds, TPointD &p0, TPointD &p1);
@@ -47,7 +47,7 @@ public:
   const TPointD dir;
   const double dist;
 
-  TGuidelineLine(const TPointD &p0, const TPointD &p1);
+  TGuidelineLine(double magnetism, const TPointD &p0, const TPointD &p1);
   TTrackPoint transformPoint(const TTrackPoint &point) const override;
   void draw(bool active) const override;
 };
@@ -61,7 +61,7 @@ class DVAPI TGuidelineInfiniteLine : public TGuidelineLineBase {
 public:
   const TPointD dir;
 
-  TGuidelineInfiniteLine(const TPointD &p0, const TPointD &p1);
+  TGuidelineInfiniteLine(double magnetism, const TPointD &p0, const TPointD &p1);
   TTrackPoint transformPoint(const TTrackPoint &point) const override;
   void draw(bool active) const override;
 };
@@ -75,7 +75,7 @@ class DVAPI TGuidelineRay : public TGuidelineLineBase {
 public:
   const TPointD dir;
 
-  TGuidelineRay(const TPointD &p0, const TPointD &p1);
+  TGuidelineRay(double magnetism, const TPointD &p0, const TPointD &p1);
   TTrackPoint transformPoint(const TTrackPoint &point) const override;
   void draw(bool active) const override;
 };
diff --git a/toonz/sources/tnztools/modifiers/modifierassistants.cpp b/toonz/sources/tnztools/modifiers/modifierassistants.cpp
index 03a71c0..0658dc8 100644
--- a/toonz/sources/tnztools/modifiers/modifierassistants.cpp
+++ b/toonz/sources/tnztools/modifiers/modifierassistants.cpp
@@ -33,7 +33,7 @@ TModifierAssistants::Modifier::Modifier(TTrackHandler &handler):
 TTrackPoint
 TModifierAssistants::Modifier::calcPoint(double originalIndex) {
   TTrackPoint p = TTrackModifier::calcPoint(originalIndex);
-  return guidelines.empty() ? p : guidelines.front()->transformPoint(p);
+  return guidelines.empty() ? p : guidelines.front()->smoothTransformPoint(p);
 }
 
 
@@ -52,7 +52,8 @@ TModifierAssistants::scanAssistants(
   const TPointD *positions,
   int positionsCount,
   TGuidelineList *outGuidelines,
-  bool draw ) const
+  bool draw,
+  bool enabledOnly ) const
 {
   bool found = false;
   if (TInputManager *manager = getManager())
@@ -89,6 +90,7 @@ TModifierAssistants::scanAssistants(
         for(TMetaObjectListCW::iterator i = reader->begin(); i != reader->end(); ++i)
           if (*i)
           if (const TAssistant *assistant = (*i)->getHandler<TAssistant>())
+          if (!enabledOnly || assistant->getEnabled())
           {
             found = true;
             if (findGuidelines)
@@ -115,7 +117,7 @@ TModifierAssistants::modifyTrack(
     track.handler = new TTrackHandler(track);
     Modifier *modifier = new Modifier(*track.handler);
     if (!drawOnly)
-      scanAssistants(&track[0].position, 1, &modifier->guidelines, false);
+      scanAssistants(&track[0].position, 1, &modifier->guidelines, false, true);
 
     track.handler->tracks.push_back(new TTrack(modifier));
 
@@ -172,7 +174,7 @@ TModifierAssistants::modifyTrack(
 
 TRectD
 TModifierAssistants::calcDrawBounds(const TTrackList&, const THoverList&) {
-  if (scanAssistants(NULL, 0, NULL, false))
+  if (scanAssistants(NULL, 0, NULL, false, false))
     return TConsts::infiniteRectD;
   return TRectD();
 }
@@ -208,7 +210,8 @@ TModifierAssistants::draw(const TTrackList &tracks, const THoverList &hovers) {
     allHovers.empty() ? NULL : &allHovers.front(),
     (int)allHovers.size(),
     &guidelines,
-    true );
+    true,
+    false );
 
   // draw guidelines
   for(TGuidelineList::const_iterator i = guidelines.begin(); i != guidelines.end(); ++i)