diff --git a/Data/Concurrent/Deque/Class.hs b/Data/Concurrent/Deque/Class.hs
--- a/Data/Concurrent/Deque/Class.hs
+++ b/Data/Concurrent/Deque/Class.hs
@@ -1,6 +1,10 @@
 {-# LANGUAGE TypeFamilies, CPP, TypeSynonymInstances, MultiParamTypeClasses,
-    FlexibleInstances, EmptyDataDecls, DefaultSignatures #-}
+    FlexibleInstances, EmptyDataDecls  #-}
 
+#ifdef DEFAULT_SIGNATURES
+{-# LANGUAGE DefaultSignatures #-}
+#endif
+
 {- |
    An abstract, parameterizable interface for queues.  
 
@@ -135,8 +139,11 @@
    --   If bounded, the size is unspecified.
    newQ  :: IO (d elt)
 
+#ifdef DEFAULT_SIGNATURES
+#warning "Providing default binding and signature for newQ..."
    default newQ :: BoundedL d => IO (d elt)
    newQ = newBoundedQ 256
+#endif
 
    -- | Is the queue currently empty?  Beware that this can be a highly transient state.
    nullQ :: d elt -> IO Bool
diff --git a/Data/Concurrent/Deque/Reference.hs b/Data/Concurrent/Deque/Reference.hs
--- a/Data/Concurrent/Deque/Reference.hs
+++ b/Data/Concurrent/Deque/Reference.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeFamilies, CPP #-}
 
 {-| 
   A strawman implementation of concurrent Dequeus.  This
@@ -22,15 +22,19 @@
 import qualified Data.Concurrent.Deque.Class as C
 import Data.Sequence
 import Data.IORef
+#ifdef USE_CAS
+#warning "abstract-deque: reference implementation using CAS..."
 import Data.CAS (atomicModifyIORefCAS)
+-- Toggle these and compare performance:
+modify = atomicModifyIORefCAS
+#else
+modify = atomicModifyIORef
+#endif
+{-# INLINE modify #-}
 
 -- | Stores a size bound (if any) as well as a mutable Seq.
 data SimpleDeque elt = DQ {-# UNPACK #-} !Int !(IORef (Seq elt))
 
-{-# INLINE modify #-}
--- Toggle these and compare performance:
--- modify = atomicModifyIORef
-modify = atomicModifyIORefCAS
 
 newQ = do r <- newIORef empty
 	  return (DQ 0 r)
diff --git a/abstract-deque.cabal b/abstract-deque.cabal
--- a/abstract-deque.cabal
+++ b/abstract-deque.cabal
@@ -1,5 +1,5 @@
 Name:                abstract-deque
-Version:             0.1.4
+Version:             0.1.5
 License:             BSD3
 License-file:        LICENSE
 Author:              Ryan R. Newton
@@ -10,10 +10,11 @@
 
 -- Version History:
 -- 0.1: 
--- 0.1.1: Added nullQ to interface.
+-- 0.1.1: Added nullQ to interface. [First release]
 -- 0.1.2: dependency on IORefCAS
 -- 0.1.3: Actually turned on real CAS! DANGER
--- 0.1.4: First release.
+-- 0.1.4: Another release.
+-- 0.1.5: Fix for 6.12 and 7.0.
 
 Synopsis: Abstract, parameterized interface to mutable Deques.
 
@@ -43,9 +44,17 @@
                      Data.Concurrent.Deque.Tests,
                      Data.Concurrent.Deque.Reference,
                      Data.Concurrent.Deque.Reference.DequeInstance
-  build-depends:     base >= 4.4.0.0 && < 5, 
-                     containers, HUnit, 
-                     IORefCAS >= 0.2 
+  build-depends:     base >= 4 && < 5, 
+                     containers, HUnit
+
+  if impl( ghc >= 7.2) {
+    build-depends:   IORefCAS >= 0.2 
+    cpp-options:  -DUSE_CAS -DDEFAULT_SIGNATURES
+--    extensions: DefaultSignatures
+--    GHC-Options: -XDefaultSignatures
+  }
+
+  extensions: CPP
   ghc-options: -O2
 
 
@@ -53,5 +62,5 @@
 Test-Suite test-abstract-deque
     type:       exitcode-stdio-1.0
     main-is:    Test.hs
-    build-depends:     base >= 4.4.0.0 && < 5, IORefCAS >= 0.2, containers, HUnit
+    build-depends:     base >= 4 && < 5, IORefCAS >= 0.2, containers, HUnit
     ghc-options: -O2 -threaded -rtsopts 
