diff --git a/System/Remote/Monitoring.hs b/System/Remote/Monitoring.hs
--- a/System/Remote/Monitoring.hs
+++ b/System/Remote/Monitoring.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE ExistentialQuantification, OverloadedStrings, RecordWildCards,
+{-# LANGUAGE CPP, ExistentialQuantification, OverloadedStrings, RecordWildCards,
   FunctionalDependencies #-}
 -- | This module provides remote monitoring of a running process over
 -- HTTP.  It can be used to run an HTTP server that provides both a
@@ -171,14 +171,28 @@
 --
 -- [@peak_megabytes_allocated@] Maximum number of megabytes allocated
 --
+#if MIN_VERSION_base(4,6,0)
+-- [@par_tot_bytes_copied@] Number of bytes copied during GC, minus
+-- space held by mutable lists held by the capabilities.  Can be used
+-- with 'parMaxBytesCopied' to determine how well parallel GC utilized
+-- all cores.
+--
+-- [@par_avg_bytes_copied@] Deprecated alias for
+-- @par_tot_bytes_copied@.
+#else
 -- [@par_avg_bytes_copied@] Number of bytes copied during GC, minus
 -- space held by mutable lists held by the capabilities.  Can be used
 -- with 'parMaxBytesCopied' to determine how well parallel GC utilized
 -- all cores.
+#endif
 --
 -- [@par_max_bytes_copied@] Sum of number of bytes copied each GC by
 -- the most active GC thread each GC.  The ratio of
+#if MIN_VERSION_base(4,6,0)
+-- 'parTotBytesCopied' divided by 'parMaxBytesCopied' approaches 1 for
+#else
 -- 'parAvgBytesCopied' divided by 'parMaxBytesCopied' approaches 1 for
+#endif
 -- a maximally sequential run and approaches the number of threads
 -- (set by the RTS flag @-N@) for a maximally parallel run.
 
@@ -340,8 +354,34 @@
     ![(T.Text, Json)]       -- Labels
     {-# UNPACK #-} !Double  -- Milliseconds since epoch
 
+emptyGCStats :: Stats.GCStats
+emptyGCStats = Stats.GCStats
+    { bytesAllocated         = 0
+    , numGcs                 = 0
+    , maxBytesUsed           = 0
+    , numByteUsageSamples    = 0
+    , cumulativeBytesUsed    = 0
+    , bytesCopied            = 0
+    , currentBytesUsed       = 0
+    , currentBytesSlop       = 0
+    , maxBytesSlop           = 0
+    , peakMegabytesAllocated = 0
+    , mutatorCpuSeconds      = 0
+    , mutatorWallSeconds     = 0
+    , gcCpuSeconds           = 0
+    , gcWallSeconds          = 0
+    , cpuSeconds             = 0
+    , wallSeconds            = 0
+#if MIN_VERSION_base(4,6,0)
+    , parTotBytesCopied      = 0
+#else
+    , parAvgBytesCopied      = 0
+#endif
+    , parMaxBytesCopied      = 0
+    }
+
 instance A.ToJSON Stats where
-    toJSON (Stats gcStats@(Stats.GCStats {..}) counters gauges labels t) = A.object $
+    toJSON (Stats gcStats counters gauges labels t) = A.object $
         [ "server_timestamp_millis" .= t
         , "counters"                .= Assocs (gcCounters ++ counters)
         , "gauges"                  .= Assocs (gcGauges ++ gauges)
@@ -373,9 +413,15 @@
         , "gc_wall_seconds"          .= gcWallSeconds
         , "cpu_seconds"              .= cpuSeconds
         , "wall_seconds"             .= wallSeconds
+#if MIN_VERSION_base(4,6,0)
+        , "par_tot_bytes_copied"     .= parTotBytesCopied
+        , "par_avg_bytes_copied"     .= parTotBytesCopied
+#else
         , "par_avg_bytes_copied"     .= parAvgBytesCopied
+#endif
         , "par_max_bytes_copied"     .= parMaxBytesCopied
-        ] ++ map (uncurry (.=)) counters ++
+        ] ++
+        map (uncurry (.=)) counters ++
         map (uncurry (.=)) gauges ++
         map (uncurry (.=)) labels
 
@@ -438,7 +484,8 @@
 
 -- | Get a snapshot of all values.  Note that we're not guaranteed to
 -- see a consistent snapshot of the whole map.
-readAllRefs :: (Ref r t, A.ToJSON t) => IORef (M.HashMap T.Text r) -> IO [(T.Text, Json)]
+readAllRefs :: (Ref r t, A.ToJSON t) => IORef (M.HashMap T.Text r)
+            -> IO [(T.Text, Json)]
 readAllRefs mapRef = do
     m <- readIORef mapRef
     forM (M.toList m) $ \ (name, ref) -> do
@@ -455,6 +502,17 @@
     writeLBS $ A.encode $ A.toJSON $ Group list time
 {-# INLINABLE serveMany #-}
 
+getGcStats :: IO Stats.GCStats
+getGcStats = do
+#if MIN_VERSION_base(4,6,0)
+    enabled <- Stats.getGCStatsEnabled
+    if enabled
+        then Stats.getGCStats
+        else return emptyGCStats
+#else
+    Stats.getGCStats
+#endif
+
 -- | Serve all counter, gauges and labels, built-in or not, as a
 -- nested JSON object.
 serveAll :: IORef Counters -> IORef Gauges -> IORef Labels -> Snap ()
@@ -465,19 +523,20 @@
     -- requests ought to go to the 'serveOne' handler.
     unless (S.null $ rqPathInfo req) pass
     modifyResponse $ setContentType "application/json"
-    gcStats <- liftIO Stats.getGCStats
+    gcStats <- liftIO getGcStats
     counterList <- liftIO $ readAllRefs counters
     gaugeList <- liftIO $ readAllRefs gauges
     labelList <- liftIO $ readAllRefs labels
     time <- liftIO getTimeMillis
-    writeLBS $ A.encode $ A.toJSON $ Stats gcStats counterList gaugeList labelList time
+    writeLBS $ A.encode $ A.toJSON $ Stats gcStats counterList gaugeList
+        labelList time
 
 -- | Serve all counters and gauges, built-in or not, as a flattened
 -- JSON object.
 serveCombined :: IORef Counters -> IORef Gauges -> IORef Labels -> Snap ()
 serveCombined counters gauges labels = do
     modifyResponse $ setContentType "application/json"
-    gcStats <- liftIO Stats.getGCStats
+    gcStats <- liftIO getGcStats
     counterList <- liftIO $ readAllRefs counters
     gaugeList <- liftIO $ readAllRefs gauges
     labelList <- liftIO $ readAllRefs labels
@@ -503,7 +562,7 @@
                 -- Try built-in (e.g. GC) refs
                 case Map.lookup name builtinCounters of
                     Just f -> do
-                        gcStats <- liftIO Stats.getGCStats
+                        gcStats <- liftIO getGcStats
                         writeBS $ S8.pack $ f gcStats
                     Nothing -> do
                         modifyResponse $ setResponseStatus 404 "Not Found"
@@ -531,7 +590,12 @@
     , ("gc_wall_seconds"          , show . Stats.gcWallSeconds)
     , ("cpu_seconds"              , show . Stats.cpuSeconds)
     , ("wall_seconds"             , show . Stats.wallSeconds)
+#if MIN_VERSION_base(4,6,0)
+    , ("par_tot_bytes_copied"     , show . Stats.parTotBytesCopied)
+    , ("par_avg_bytes_copied"     , show . Stats.parTotBytesCopied)
+#else
     , ("par_avg_bytes_copied"     , show . Stats.parAvgBytesCopied)
+#endif
     , ("par_max_bytes_copied"     , show . Stats.parMaxBytesCopied)
     ]
 
@@ -542,8 +606,7 @@
     toJSON (Json x) = A.toJSON x
 
 -- | Partition GC statistics into counters and gauges.
-partitionGcStats :: Stats.GCStats
-                 -> ([(T.Text, Json)], [(T.Text, Json)])
+partitionGcStats :: Stats.GCStats -> ([(T.Text, Json)], [(T.Text, Json)])
 partitionGcStats (Stats.GCStats {..}) = (counters, gauges)
   where
     counters = [
@@ -565,7 +628,12 @@
         , ("current_bytes_slop"       , Json currentBytesSlop)
         , ("max_bytes_slop"           , Json maxBytesSlop)
         , ("peak_megabytes_allocated" , Json peakMegabytesAllocated)
+#if MIN_VERSION_base(4,6,0)
+        , ("par_tot_bytes_copied"     , Json parTotBytesCopied)
+        , ("par_avg_bytes_copied"     , Json parTotBytesCopied)
+#else
         , ("par_avg_bytes_copied"     , Json parAvgBytesCopied)
+#endif
         , ("par_max_bytes_copied"     , Json parMaxBytesCopied)
         ]
 
diff --git a/ekg.cabal b/ekg.cabal
--- a/ekg.cabal
+++ b/ekg.cabal
@@ -1,5 +1,5 @@
 name:                ekg
-version:             0.3.1.1
+version:             0.3.1.2
 synopsis:            Remote monitoring of processes
 description:
   This library lets you remotely monitor a running process over HTTP.
