diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+## 0.8.0.6 (2018-02-04)
+
+Fixes:
+
+  - Don't run time-sensitive tests by default (fixes spurious failures
+    on loaded CI servers).
+
 ## 0.8.0.5 (2018-02-04)
 
 Changes:
diff --git a/mellon-core.cabal b/mellon-core.cabal
--- a/mellon-core.cabal
+++ b/mellon-core.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 230c051b3a9aee836cded92a01acf529ac1e0e4fc62e0a333b929a0ae1744a06
+-- hash: 2b60576710315c00296e13627bd7fd3ab19d484a2df14c6194143b80cd8369f0
 
 name:                   mellon-core
-version:                0.8.0.5
+version:                0.8.0.6
 synopsis:               Control physical access devices
 description:            /Speak, friend, and enter./
                         .
@@ -134,6 +134,11 @@
   type: git
   location: https://github.com/quixoftic/mellon
 
+flag enable-timing-sensitive-tests
+  description: Enable tests that are timing-sensitive (may fail on loaded machines like CI servers)
+  manual: True
+  default: False
+
 flag test-doctests
   description: Build doctests
   manual: True
@@ -223,7 +228,7 @@
   hs-source-dirs:
       test
   default-extensions: NoImplicitPrelude
-  other-extensions: DeriveDataTypeable
+  other-extensions: CPP DeriveDataTypeable
   ghc-options: -w -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       async
@@ -238,6 +243,8 @@
     ghc-options: -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates
   else
     ghc-options: -Wall -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates
+  if flag(enable-timing-sensitive-tests)
+    cpp-options: -DENABLE_TIMING_SENSITIVE_TESTS
   other-modules:
       Mellon.Controller.AsyncSpec
       Spec
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name:       mellon-core
-version:    0.8.0.5
+version:    0.8.0.6
 synopsis:   Control physical access devices
 category:   System
 stability:  experimental
@@ -216,6 +216,10 @@
     description: Build doctests
     manual: true
     default: true
+  enable-timing-sensitive-tests:
+    description: Enable tests that are timing-sensitive (may fail on loaded machines like CI servers)
+    manual: true
+    default: false
 
 when:
   - condition: impl(ghc >= 8.0)
@@ -300,12 +304,16 @@
     source-dirs:
       - test
     other-extensions:
+      - CPP
       - DeriveDataTypeable
     ghc-options:
       - -w
       - -threaded
       - -rtsopts
       - -with-rtsopts=-N
+    when:
+      - condition: flag(enable-timing-sensitive-tests)
+        cpp-options: -DENABLE_TIMING_SENSITIVE_TESTS
     dependencies:
       - base
       - async
diff --git a/test/Mellon/Controller/AsyncSpec.hs b/test/Mellon/Controller/AsyncSpec.hs
--- a/test/Mellon/Controller/AsyncSpec.hs
+++ b/test/Mellon/Controller/AsyncSpec.hs
@@ -1,3 +1,5 @@
+{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-incomplete-uni-patterns -fno-warn-unused-top-binds #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 
@@ -200,7 +202,13 @@
 spec = do
   describe "Controller tests" $ do
     it "should produce the correct lock sequence plus or minus a few hundred milliseconds" $ do
+       -- This test is too timing-sensitive to run on a CI server, so
+       -- it's disabled by default.
+#ifdef ENABLE_TIMING_SENSITIVE_TESTS
       controllerTest >>= (`shouldBe` Right "OK")
+#else
+      pendingWith "disabled (enable with 'cabal configure -f enable-timing-sensitive-tests')"
+#endif
     it "should recover from asynchronous exceptions" $ do
       asyncExceptionTest
     it "should recover from synchronous exceptions" $ do
