diff --git a/toonz/sources/common/tgeometry/tgeometry.cpp b/toonz/sources/common/tgeometry/tgeometry.cpp
index 4278048..7b96071 100644
--- a/toonz/sources/common/tgeometry/tgeometry.cpp
+++ b/toonz/sources/common/tgeometry/tgeometry.cpp
@@ -295,12 +295,12 @@ TAffine4 TAffine4::scale(double x, double y, double z) {
 
 TAffine4 TAffine4::rotation(double x, double y, double z, double angle) {
   TAffine4 r;
-  double k = sqrt(x*x + y*y + z*z);
-  if (k > TConsts::epsilon) {
-    double s = sin(angle);
+  double k = x*x + y*y + z*z;
+  if (k > TConsts::epsilon*TConsts::epsilon) {
+	k = 1.0 / sqrt(k);
+	double s = sin(angle);
     double c = cos(angle);
     double ic = 1.0 - c;
-    double k = 1.0/k;
     x *= k;
     y *= k;
     z *= k;
diff --git a/toonz/sources/include/tools/assistant.h b/toonz/sources/include/tools/assistant.h
index 2578a4b..bd1d8f1 100644
--- a/toonz/sources/include/tools/assistant.h
+++ b/toonz/sources/include/tools/assistant.h
@@ -140,4 +140,14 @@ public:
   virtual void drawEdit(TToolViewer *viewer) const;
 };
 
+
+//*****************************************************************************************
+//    export template implementations for win32
+//*****************************************************************************************
+
+#ifdef _WIN32
+template class DVAPI TSmartPointerT<TGuideline>;
+#endif
+
+
 #endif
diff --git a/toonz/sources/include/tools/inputmanager.h b/toonz/sources/include/tools/inputmanager.h
index c025b25..36bf4fe 100644
--- a/toonz/sources/include/tools/inputmanager.h
+++ b/toonz/sources/include/tools/inputmanager.h
@@ -385,4 +385,13 @@ public:
 };
 
 
+//*****************************************************************************************
+//    export template implementations for win32
+//*****************************************************************************************
+
+#ifdef _WIN32
+template class DVAPI TSmartPointerT<TInputModifier>;
+#endif
+
+
 #endif
diff --git a/toonz/sources/include/tools/inputstate.h b/toonz/sources/include/tools/inputstate.h
index 19ff14a..f05a927 100644
--- a/toonz/sources/include/tools/inputstate.h
+++ b/toonz/sources/include/tools/inputstate.h
@@ -38,11 +38,6 @@
 
 typedef std::vector<TPointD> THoverList;
 
-#ifdef _WIN32
-template class DVAPI TKeyHistoryT<TKey>;
-template class DVAPI TKeyHistoryT<Qt::MouseButton>;
-#endif
-
 //===================================================================
 
 
@@ -88,6 +83,23 @@ public:
 
 
 //*****************************************************************************************
+//    export template implementations for win32
+//*****************************************************************************************
+
+#ifdef _WIN32
+template class DVAPI TKeyStateT<TKey>;
+template class DVAPI TSmartPointerT< TKeyStateT<TKey> >;
+template class DVAPI TKeyHistoryT<TKey>;
+template class DVAPI TKeyHistoryT<TKey>::Holder;
+
+template class DVAPI TKeyStateT<Qt::MouseButton>;
+template class DVAPI TSmartPointerT< TKeyStateT<Qt::MouseButton> >;
+template class DVAPI TKeyHistoryT<Qt::MouseButton>;
+template class DVAPI TKeyHistoryT<Qt::MouseButton>::Holder;
+#endif
+
+
+//*****************************************************************************************
 //    TInputState definition
 //*****************************************************************************************
 
diff --git a/toonz/sources/include/tools/keyhistory.h b/toonz/sources/include/tools/keyhistory.h
index eeabefe..5c43db2 100644
--- a/toonz/sources/include/tools/keyhistory.h
+++ b/toonz/sources/include/tools/keyhistory.h
@@ -64,8 +64,15 @@ public:
     }
   };
 
-  static const Type none;
-  static const Pointer empty;
+  static const Type& none() {
+    static Type none;
+    return none;
+  }
+
+  static const Pointer& empty() {
+    static Pointer empty = new TKeyStateT();
+	return empty;
+  }
 
   const Pointer previous;
   const TTimerTicks ticks;
@@ -82,17 +89,17 @@ private:
   }
 
 public:
-  TKeyStateT(): ticks(0), value(none) { }
+  TKeyStateT(): ticks(0), value(none()) { }
 
   Pointer find(const Type &value) {
-    return value == none        ? Pointer()
+    return value == none()      ? Pointer()
          : value == this->value ? this
          : previous             ? previous->find(value)
          :                        Pointer();
   }
 
   Pointer change(bool press, const Type &value, TTimerTicks ticks) {
-    if (value == none)
+    if (value == none())
       return Pointer(this);
     
     Pointer p = find(value);
@@ -105,11 +112,11 @@ public:
     if (press)
       return Pointer(new TKeyStateT((isEmpty() ? Pointer() : Pointer(this)), ticks, value));
     Pointer chain = makeChainWithout(p);
-    return chain ? chain : Pointer(new TKeyStateT(Pointer(), ticks, none));
+    return chain ? chain : Pointer(new TKeyStateT(Pointer(), ticks, none()));
   }
 
   bool isEmpty()
-    { return value == none && (!previous || previous->isEmpty()); }
+    { return value == none() && (!previous || previous->isEmpty()); }
   bool isPressed(const Type &value)
     { return find(value); }
 
@@ -120,13 +127,6 @@ public:
 };
 
 
-template<typename T>
-const typename TKeyStateT<T>::Type TKeyStateT<T>::none = typename TKeyStateT<T>::Type();
-
-template<typename T>
-const typename TKeyStateT<T>::Pointer TKeyStateT<T>::empty = new TKeyStateT<T>();
-
-
 //*****************************************************************************************
 //    TKeyHistory definition
 //*****************************************************************************************
@@ -187,7 +187,7 @@ public:
 
     Holder offset(double timeOffset) const {
       return fabs(timeOffset) < TToolTimer::epsilon ? *this
-           : Holder(history, ticks, this->timeOffset + timeOffset);
+           : Holder(m_history, m_ticks, m_timeOffset + timeOffset);
     }
 
     StateHolder get(double time) const {
diff --git a/toonz/sources/include/tools/track.h b/toonz/sources/include/tools/track.h
index 5c8f6e6..ce21ba5 100644
--- a/toonz/sources/include/tools/track.h
+++ b/toonz/sources/include/tools/track.h
@@ -60,6 +60,18 @@ class DVAPI TTrackToolHandler : public TSmartObject { };
 
 
 //*****************************************************************************************
+//    export template implementations for win32
+//*****************************************************************************************
+
+#ifdef _WIN32
+template class DVAPI TSmartPointerT<TTrack>;
+template class DVAPI TSmartPointerT<TTrackHandler>;
+template class DVAPI TSmartPointerT<TTrackToolHandler>;
+template class DVAPI TSmartPointerT<TTrackModifier>;
+#endif
+
+
+//*****************************************************************************************
 //    TTrackPoint definition
 //*****************************************************************************************
 
@@ -377,4 +389,5 @@ public:
   }
 };
 
+
 #endif
diff --git a/toonz/sources/include/tstringid.h b/toonz/sources/include/tstringid.h
index 80f3ca4..10689ef 100644
--- a/toonz/sources/include/tstringid.h
+++ b/toonz/sources/include/tstringid.h
@@ -54,7 +54,7 @@ public:
     { return iter->first; }
 
   inline operator bool () const
-    { return (bool)id(); }
+    { return id() != 0; }
   inline bool operator== (const TStringId &other) const
     { return id() == other.id(); }
   inline bool operator!= (const TStringId &other) const
diff --git a/toonz/sources/include/tvariant.h b/toonz/sources/include/tvariant.h
index b5f6fe4..2ee2165 100644
--- a/toonz/sources/include/tvariant.h
+++ b/toonz/sources/include/tvariant.h
@@ -74,7 +74,7 @@ public:
     { insert(end(), x.begin(), x.end()); return *this; }
 
   inline bool isSubPathOf(const TVariantPath &other) const
-    { return compare(*this, 0, other, 0, (int)size()); }
+    { return compare(*this, 0, other, 0, (int)size()) == 0; }
   inline bool isBasePathOf(const TVariantPath &other) const
     { return other.isSubPathOf(*this); }
   inline int compare(const TVariantPath &other) const
diff --git a/toonz/sources/tnztools/fullcolorbrushtool.cpp b/toonz/sources/tnztools/fullcolorbrushtool.cpp
index 22eb7d7..dc20487 100644
--- a/toonz/sources/tnztools/fullcolorbrushtool.cpp
+++ b/toonz/sources/tnztools/fullcolorbrushtool.cpp
@@ -681,7 +681,7 @@ void FullColorBrushTool::loadPreset() {
   try  // Don't bother with RangeErrors
   {
     m_thickness.setValue(
-        TIntPairProperty::Value(std::max((int)preset.m_min, 1), preset.m_max));
+        TIntPairProperty::Value(std::max((int)preset.m_min, 1), (int)preset.m_max));
     m_hardness.setValue(preset.m_hardness, true);
     m_opacity.setValue(
         TDoublePairProperty::Value(preset.m_opacityMin, preset.m_opacityMax));
diff --git a/toonz/sources/tnztools/modifiers/modifierassistants.cpp b/toonz/sources/tnztools/modifiers/modifierassistants.cpp
index 16afbbd..99a8ad8 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() > 0 ? p : guidelines.front()->transformPoint(p);
+  return guidelines.empty() ? p : guidelines.front()->transformPoint(p);
 }