diff --git a/Source/Ember/EmberDefines.h b/Source/Ember/EmberDefines.h
index 482ef71..bb144c4 100644
--- a/Source/Ember/EmberDefines.h
+++ b/Source/Ember/EmberDefines.h
@@ -70,16 +70,16 @@ namespace EmberNs
 #define FLOAT_MIN_TAN -FLOAT_MAX_TAN
 #define EMPTYFIELD -9999
 typedef std::chrono::high_resolution_clock Clock;
+typedef std::chrono::duration<double, std::ratio<1, 1000>> DoubleMs;
+typedef std::chrono::time_point<Clock, DoubleMs> DoubleMsTimePoint;
+static inline DoubleMsTimePoint NowMsD() { return time_point_cast<DoubleMs>(Clock::now()); }
+static inline size_t NowMs() { return duration_cast<milliseconds>(Clock::now().time_since_epoch()).count(); }
 typedef uint et;
 typedef std::lock_guard <std::recursive_mutex> rlg;
 
 /// <summary>
 /// Thin wrapper around getting the current time in milliseconds.
 /// </summary>
-static inline size_t NowMs()
-{
-	return duration_cast<milliseconds>(Clock::now().time_since_epoch()).count();
-}
 
 #ifndef byte
 	typedef unsigned char byte;
diff --git a/Source/Ember/Timing.h b/Source/Ember/Timing.h
index 80b643d..373558f 100644
--- a/Source/Ember/Timing.h
+++ b/Source/Ember/Timing.h
@@ -35,7 +35,7 @@ public:
 	/// <returns>The begin time cast to a double</returns>
 	double Tic()
 	{
-		m_BeginTime = Clock::now();
+		m_BeginTime = NowMsD();
 		return BeginTime();
 	}
 
@@ -47,7 +47,7 @@ public:
 	/// <returns>The elapsed time in milliseconds as a double</returns>
 	double Toc(const char* str = nullptr, bool fullString = false)
 	{
-		m_EndTime = Clock::now();
+		m_EndTime = NowMsD();
 		double ms = ElapsedTime();
 
 		if (str)
@@ -76,8 +76,7 @@ public:
 	/// <returns>The elapsed time in milliseconds as a double</returns>
 	double ElapsedTime() const
 	{
-		duration<double> elapsed = duration_cast<milliseconds, Clock::rep, Clock::period>(m_EndTime - m_BeginTime);
-		return elapsed.count() * 1000.0;
+		return (m_EndTime - m_BeginTime).count();
 	}
 
 	/// <summary>
@@ -139,8 +138,8 @@ private:
 	}
 
 	int m_Precision;//How many digits after the decimal place to print for seconds.
-	time_point<Clock> m_BeginTime;//The start of the timing, set with Tic().
-	time_point<Clock> m_EndTime;//The end of the timing, set with Toc().
+	DoubleMsTimePoint m_BeginTime;//The start of the timing, set with Tic().
+	DoubleMsTimePoint m_EndTime;//The end of the timing, set with Toc().
 	static bool m_TimingInit;//Whether the performance info has bee queried.
 	static uint m_ProcessorCount;//The number of cores on the system, set in Init().
 };