diff --git a/src/Data/Micro.hs b/src/Data/Micro.hs
deleted file mode 100644
--- a/src/Data/Micro.hs
+++ /dev/null
@@ -1,94 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# OPTIONS_HADDOCK hide #-}
-
-#include "thyme.h"
-
-module Data.Micro where
-
-import Prelude
-import Control.DeepSeq
-import Data.AdditiveGroup
-import Data.Basis
-import Data.Data
-import Data.Int
-import Data.Ix
-import Data.Ratio
-import Data.VectorSpace
-import GHC.Generics (Generic)
-import System.Random
-import Test.QuickCheck
-
-#if !SHOW_INTERNAL
-import Control.Monad
-import Data.Char
-import Data.Thyme.Format.Internal
-import Numeric
-import Text.ParserCombinators.ReadPrec
-import Text.ParserCombinators.ReadP
-import Text.Read
-#endif
-
-newtype Micro = Micro Int64 deriving (INSTANCES_MICRO)
-
-#if SHOW_INTERNAL
-deriving instance Show Micro
-deriving instance Read Micro
-#else
-instance Show Micro where
-    {-# INLINEABLE showsPrec #-}
-    showsPrec _ (Micro a) = sign . shows si . frac where
-        sign = if a < 0 then (:) '-' else id
-        (si, su) = abs a `divMod` 1000000
-        frac = if su == 0 then id else (:) '.' . fills06 su . drops0 su
-
-instance Read Micro where
-    {-# INLINEABLE readPrec #-}
-    readPrec = lift $ do
-        sign <- (char '-' >> return negate) `mplus` return id
-        s <- readS_to_P readDec
-        us <- (`mplus` return 0) $ do
-            _ <- char '.'
-            [(us10, "")] <- (readDec . take 7 . (++ "000000"))
-                `fmap` munch1 isDigit
-            return (div (us10 + 5) 10)
-        return . Micro . sign $ s * 1000000 + us
-#endif
-
-{-# INLINE toMicro #-}
-toMicro :: Rational -> Micro
-toMicro r = Micro (fromInteger $ 1000000 * numerator r `div` denominator r)
-
-{-# INLINE microQuotRem #-}
-{-# INLINE microDivMod #-}
-microQuotRem, microDivMod :: Micro -> Micro -> (Int64, Micro)
-microQuotRem (Micro a) (Micro b) = (n, Micro f) where (n, f) = quotRem a b
-microDivMod  (Micro a) (Micro b) = (n, Micro f) where (n, f) = divMod a b
-
-instance AdditiveGroup Micro where
-    {-# INLINE zeroV #-}
-    zeroV = Micro 0
-    {-# INLINE (^+^) #-}
-    Micro a ^+^ Micro b = Micro (a + b)
-    {-# INLINE negateV #-}
-    negateV (Micro a) = Micro (negate a)
-
-instance VectorSpace Micro where
-    type Scalar Micro = Rational
-    {-# INLINE (*^) #-}
-    s *^ Micro a = Micro . fromInteger $
-        toInteger a * numerator s `quot` denominator s
-
-instance HasBasis Micro where
-    type Basis Micro = ()
-    {-# INLINE basisValue #-}
-    basisValue () = Micro 1000000
-    {-# INLINE decompose #-}
-    decompose (Micro a) = [((), fromIntegral a % 1000000)]
-    {-# INLINE decompose' #-}
-    decompose' (Micro a) = const (fromIntegral a % 1000000)
-
diff --git a/src/Data/Thyme/Clock/Internal.hs b/src/Data/Thyme/Clock/Internal.hs
--- a/src/Data/Thyme/Clock/Internal.hs
+++ b/src/Data/Thyme/Clock/Internal.hs
@@ -21,7 +21,7 @@
 import Data.Data
 import Data.Int
 import Data.Ix
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Thyme.Calendar.Internal
 import Data.VectorSpace
 import GHC.Generics (Generic)
diff --git a/src/Data/Thyme/Clock/POSIX.hs b/src/Data/Thyme/Clock/POSIX.hs
--- a/src/Data/Thyme/Clock/POSIX.hs
+++ b/src/Data/Thyme/Clock/POSIX.hs
@@ -6,7 +6,7 @@
 import Prelude
 import Control.Lens
 import Data.AdditiveGroup
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Thyme.Clock.Internal
 import qualified Data.Time.Clock.POSIX as T
 import Data.VectorSpace
diff --git a/src/Data/Thyme/Format.hs b/src/Data/Thyme/Format.hs
--- a/src/Data/Thyme/Format.hs
+++ b/src/Data/Thyme/Format.hs
@@ -27,7 +27,7 @@
 import qualified Data.ByteString.Char8 as S
 import Data.Char
 import Data.Int
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Thyme.Calendar
 import Data.Thyme.Calendar.Internal
 import Data.Thyme.Clock.Internal
diff --git a/src/Data/Thyme/Format/Aeson.hs b/src/Data/Thyme/Format/Aeson.hs
--- a/src/Data/Thyme/Format/Aeson.hs
+++ b/src/Data/Thyme/Format/Aeson.hs
@@ -20,10 +20,12 @@
 import Data.Thyme
 import System.Locale
 
--- Copypasta sans change from aeson-0.6.2.1:Data.Aeson.Types.Class
--- Copyright:   (c) 2011, 2012 Bryan O'Sullivan
+-- Copyright:   (c) 2011, 2012, 2013 Bryan O'Sullivan
 --              (c) 2011 MailRank, Inc.
 
+------------------------------------------------------------------------
+-- Copypasta from aeson-0.7.0.0:Data.Aeson.Types.Internal
+
 -- | A newtype wrapper for 'UTCTime' that uses the same non-standard
 -- serialization format as Microsoft .NET, whose @System.DateTime@
 -- type is by default serialized to JSON as in the following example:
@@ -35,11 +37,13 @@
       fromDotNetTime :: UTCTime
     } deriving (Eq, Ord, Read, Show, Typeable, FormatTime)
 
+------------------------------------------------------------------------
+-- Copypasta from aeson-0.7.0.0:Data.Aeson.Types.Instances
+
 instance ToJSON DotNetTime where
     toJSON (DotNetTime t) =
-        String (pack (secs ++ msecs ++ ")/"))
+        String (pack (secs ++ formatMillis t ++ ")/"))
       where secs  = formatTime defaultTimeLocale "/Date(%s" t
-            msecs = take 3 $ formatTime defaultTimeLocale "%q" t
     {-# INLINE toJSON #-}
 
 instance FromJSON DotNetTime where
@@ -54,12 +58,14 @@
 instance ToJSON ZonedTime where
     toJSON t = String $ pack $ formatTime defaultTimeLocale format t
       where
-        format = "%FT%T" ++ milliseconds ++ tzFormat
-        milliseconds = take 4 $ formatTime defaultTimeLocale "%Q" t
+        format = "%FT%T." ++ formatMillis t ++ tzFormat
         tzFormat
           | 0 == timeZoneMinutes (zonedTimeZone t) = "Z"
           | otherwise = "%z"
 
+formatMillis :: (FormatTime t) => t -> String
+formatMillis t = take 3 . formatTime defaultTimeLocale "%q" $ t
+
 instance FromJSON ZonedTime where
     parseJSON (String t) =
       tryFormats alternateFormats
@@ -83,7 +89,7 @@
 
 instance ToJSON UTCTime where
     toJSON t = String (pack (take 23 str ++ "Z"))
-      where str = formatTime defaultTimeLocale "%FT%T%Q" t
+      where str = formatTime defaultTimeLocale "%FT%T.%q" t
     {-# INLINE toJSON #-}
 
 instance FromJSON UTCTime where
diff --git a/src/Data/Thyme/Format/Human.hs b/src/Data/Thyme/Format/Human.hs
--- a/src/Data/Thyme/Format/Human.hs
+++ b/src/Data/Thyme/Format/Human.hs
@@ -18,7 +18,7 @@
 import Data.AdditiveGroup
 import Data.AffineSpace
 import Data.Foldable
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Monoid
 import Data.Thyme.Clock.Internal
 import Data.Thyme.TH
diff --git a/src/Data/Thyme/Internal/Micro.hs b/src/Data/Thyme/Internal/Micro.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Thyme/Internal/Micro.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# OPTIONS_HADDOCK hide #-}
+
+#include "thyme.h"
+
+-- | FOR INTERNAL USE ONLY.
+module Data.Thyme.Internal.Micro where
+
+import Prelude
+import Control.DeepSeq
+import Data.AdditiveGroup
+import Data.Basis
+import Data.Data
+import Data.Int
+import Data.Ix
+import Data.Ratio
+import Data.VectorSpace
+import GHC.Generics (Generic)
+import System.Random
+import Test.QuickCheck
+
+#if !SHOW_INTERNAL
+import Control.Monad
+import Data.Char
+import Data.Thyme.Format.Internal
+import Numeric
+import Text.ParserCombinators.ReadPrec
+import Text.ParserCombinators.ReadP
+import Text.Read
+#endif
+
+newtype Micro = Micro Int64 deriving (INSTANCES_MICRO)
+
+#if SHOW_INTERNAL
+deriving instance Show Micro
+deriving instance Read Micro
+#else
+instance Show Micro where
+    {-# INLINEABLE showsPrec #-}
+    showsPrec _ (Micro a) = sign . shows si . frac where
+        sign = if a < 0 then (:) '-' else id
+        (si, su) = abs a `divMod` 1000000
+        frac = if su == 0 then id else (:) '.' . fills06 su . drops0 su
+
+instance Read Micro where
+    {-# INLINEABLE readPrec #-}
+    readPrec = lift $ do
+        sign <- (char '-' >> return negate) `mplus` return id
+        s <- readS_to_P readDec
+        us <- (`mplus` return 0) $ do
+            _ <- char '.'
+            [(us10, "")] <- (readDec . take 7 . (++ "000000"))
+                `fmap` munch1 isDigit
+            return (div (us10 + 5) 10)
+        return . Micro . sign $ s * 1000000 + us
+#endif
+
+{-# INLINE toMicro #-}
+toMicro :: Rational -> Micro
+toMicro r = Micro (fromInteger $ 1000000 * numerator r `div` denominator r)
+
+{-# INLINE microQuotRem #-}
+{-# INLINE microDivMod #-}
+microQuotRem, microDivMod :: Micro -> Micro -> (Int64, Micro)
+microQuotRem (Micro a) (Micro b) = (n, Micro f) where (n, f) = quotRem a b
+microDivMod  (Micro a) (Micro b) = (n, Micro f) where (n, f) = divMod a b
+
+instance AdditiveGroup Micro where
+    {-# INLINE zeroV #-}
+    zeroV = Micro 0
+    {-# INLINE (^+^) #-}
+    Micro a ^+^ Micro b = Micro (a + b)
+    {-# INLINE negateV #-}
+    negateV (Micro a) = Micro (negate a)
+
+instance VectorSpace Micro where
+    type Scalar Micro = Rational
+    {-# INLINE (*^) #-}
+    s *^ Micro a = Micro . fromInteger $
+        toInteger a * numerator s `quot` denominator s
+
+instance HasBasis Micro where
+    type Basis Micro = ()
+    {-# INLINE basisValue #-}
+    basisValue () = Micro 1000000
+    {-# INLINE decompose #-}
+    decompose (Micro a) = [((), fromIntegral a % 1000000)]
+    {-# INLINE decompose' #-}
+    decompose' (Micro a) = const (fromIntegral a % 1000000)
+
diff --git a/src/Data/Thyme/LocalTime/Internal.hs b/src/Data/Thyme/LocalTime/Internal.hs
--- a/src/Data/Thyme/LocalTime/Internal.hs
+++ b/src/Data/Thyme/LocalTime/Internal.hs
@@ -20,7 +20,7 @@
 import Control.Monad
 import Data.AffineSpace
 import Data.Data
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Thyme.Calendar.Internal
 import Data.Thyme.Clock.Internal
 #if !SHOW_INTERNAL
diff --git a/src/Data/Thyme/Time.hs b/src/Data/Thyme/Time.hs
--- a/src/Data/Thyme/Time.hs
+++ b/src/Data/Thyme/Time.hs
@@ -34,7 +34,7 @@
     ) where
 
 import Prelude
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Ratio
 import Data.Thyme
 import Data.Thyme.Clock.Internal
diff --git a/src/Data/Thyme/Time/Core.hs b/src/Data/Thyme/Time/Core.hs
--- a/src/Data/Thyme/Time/Core.hs
+++ b/src/Data/Thyme/Time/Core.hs
@@ -15,7 +15,7 @@
 import Control.Lens
 import Data.AffineSpace
 import Data.Int
-import Data.Micro
+import Data.Thyme.Internal.Micro
 import Data.Ratio
 import Data.Thyme
 import Data.Thyme.Calendar.OrdinalDate
diff --git a/thyme.cabal b/thyme.cabal
--- a/thyme.cabal
+++ b/thyme.cabal
@@ -1,5 +1,5 @@
 name:           thyme
-version:        0.3.1.0
+version:        0.3.1.1
 synopsis:       A faster time library
 description:
     Thyme is a rewrite of the fine @time@ library, with a particular focus
@@ -59,11 +59,11 @@
         Data.Thyme.Format
         Data.Thyme.Format.Human
         Data.Thyme.Format.Aeson
+        Data.Thyme.Internal.Micro
         Data.Thyme.LocalTime
         Data.Thyme.Time
         Data.Thyme.Time.Core
     other-modules:
-        Data.Micro
         Data.Thyme.Calendar.Internal
         Data.Thyme.Clock.Internal
         Data.Thyme.Format.Internal
