diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,13 @@
+Release notes for `units`
+=========================
+
+Version 2.2.1
+-------------
+
+* Compatibility with GHC 7.10.
+
+* Added `AdditiveGroup` and `VectorSpace` instances for `Qu`.
+
 Version 2.2
 -----------
 
diff --git a/Data/Metrology.hs b/Data/Metrology.hs
--- a/Data/Metrology.hs
+++ b/Data/Metrology.hs
@@ -33,7 +33,7 @@
 -- The units package is a framework for strongly-typed dimensional analysis.
 -- This haddock documentation is generally /not/ enough to be able to use this
 -- package effectively. Please see the readme at
--- <http://www.cis.upenn.edu/~eir/packages/units/README.html>.
+-- <https://github.com/goldfirere/units/blob/master/README.md>.
 --
 -- Some of the types below refer to declarations that are not exported and
 -- not documented here. This is because Haddock does not allow finely-tuned
diff --git a/Data/Metrology/Qu.hs b/Data/Metrology/Qu.hs
--- a/Data/Metrology/Qu.hs
+++ b/Data/Metrology/Qu.hs
@@ -22,6 +22,8 @@
 import Data.Metrology.Z
 import Data.Metrology.LCSU
 
+import Data.VectorSpace
+
 -------------------------------------------------------------
 --- Internal ------------------------------------------------
 -------------------------------------------------------------
@@ -206,6 +208,11 @@
 
 deriving instance Eq n => Eq (Qu d l n)
 deriving instance Ord n => Ord (Qu d l n)
+
+deriving instance AdditiveGroup n => AdditiveGroup (Qu d l n)
+instance VectorSpace n => VectorSpace (Qu d l n) where
+  type Scalar (Qu d l n) = Scalar n
+  a *^ (Qu b) = Qu (a *^ b)
 
 -------------------------------------------------------------
 --- Instances for dimensionless quantities ------------------
diff --git a/Data/Metrology/TH.hs b/Data/Metrology/TH.hs
--- a/Data/Metrology/TH.hs
+++ b/Data/Metrology/TH.hs
@@ -11,7 +11,7 @@
 -- @units@ a little more convenient.
 -----------------------------------------------------------------------------
 
-{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TemplateHaskell, CPP #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module Data.Metrology.TH (
@@ -45,6 +45,11 @@
 -- more polymorphic types. (If it doesn't work, not all of the type families
 -- will be evaluated, and the instance declaration will fail. This function
 -- should never cause /incorrect/ behavior.)
+--
+-- Note: Under GHC 7.10 and later, this function works only for base types
+-- like @Length@, not compound types like @Volume@ or @Velocity@. See
+-- <https://github.com/goldfirere/units/issues/34> for more info and a
+-- workaround.
 evalType :: Q Type -> Q Type
 evalType qty = do
   ty <- qty
@@ -193,8 +198,8 @@
       n    = VarT n_name
       const_name = mkName name
       const_type = ForallT [PlainTV lcsu_name, PlainTV n_name]
-                           [ ClassP ''Fractional [n]
-                           , ClassP ''CompatibleUnit [lcsu, unit_type] ] $
+                           [ mkClassP ''Fractional [n]
+                           , mkClassP ''CompatibleUnit [lcsu, unit_type] ] $
                    ConT ''MkQu_ULN `AppT` unit_type `AppT` lcsu `AppT` n
       ty_sig = SigD const_name const_type
       dec    = ValD (VarP const_name) (NormalB $
@@ -202,4 +207,9 @@
                                                  `AppE` SigE (VarE 'undefined)
                                                              unit_type) []
   return [ty_sig, dec]
-                   
+  where
+#if __GLASGOW_HASKELL__ < 709
+    mkClassP = ClassP
+#else
+    mkClassP n tys = foldl AppT (ConT n) tys
+#endif
diff --git a/Tests/Compile/EvalType.hs b/Tests/Compile/EvalType.hs
--- a/Tests/Compile/EvalType.hs
+++ b/Tests/Compile/EvalType.hs
@@ -2,7 +2,8 @@
    Copyright (c) 2014 Richard Eisenberg
 -}
 
-{-# LANGUAGE TemplateHaskell, FlexibleInstances, DataKinds, CPP #-}
+{-# LANGUAGE TemplateHaskell, FlexibleInstances, DataKinds, CPP,
+             KindSignatures #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 module Tests.Compile.EvalType where
@@ -14,7 +15,8 @@
 instance Show $(evalType [t| Length |]) where
   show x = x `showIn` Meter
 
-#if MIN_VERSION_th_desugar(1,5,0)
+#if MIN_VERSION_th_desugar(1,5,0) && __GLASGOW_HASKELL__ < 709
+  -- See #34
 instance Show $(evalType [t| Volume |]) where
   show x = x `showIn` Liter
 #endif
diff --git a/units.cabal b/units.cabal
--- a/units.cabal
+++ b/units.cabal
@@ -1,5 +1,5 @@
 name:           units
-version:        2.2
+version:        2.2.1
 cabal-version:  >= 1.10
 synopsis:       A domain-specific type system for dimensional analysis
 homepage:       https://github.com/goldfirere/units
@@ -42,10 +42,14 @@
 source-repository this
   type:     git
   location: https://github.com/goldfirere/units.git
-  tag:      v2.2
+  tag:      v2.2.1
 
 library
   ghc-options: -Wall
+
+  if impl(ghc >= 7.10)
+    ghc-options: -fno-warn-unticked-promoted-constructors
+
   build-depends: base >= 4.7 && < 5
                , th-desugar >= 1.4.2
                , singletons >= 0.9 && < 2
@@ -105,6 +109,8 @@
 
     -- optimize compile time, not runtime!
   ghc-options:        -O0 -Wall -main-is Tests.Main
+  if impl(ghc >= 7.10)
+    ghc-options: -fno-warn-unticked-promoted-constructors
 
     -- GHC 7.10 requires this in more places, and I don't feel like ferreting out exactly
     -- where.
