diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
 # ChangeLog
 
+## 0.7.2
+
+* Fixes compilation with `vector >= 0.12.1.1` by making
+  `deriveManyStoreUnboxVector` capable of handling more complex
+  instance constraints. In particular, it now correctly generates
+  instances `Store (Vector (f (g a))) => Store (Vector (Compose f g
+  a))` and `Store (Vector (f a)) => Store (Vector (Alt f a))`.
+
 ## 0.7.1
 
 * Fixes compilation with GHC-7.10 due to it not defining `Generic`
diff --git a/src/Data/Store/TH/Internal.hs b/src/Data/Store/TH/Internal.hs
--- a/src/Data/Store/TH/Internal.hs
+++ b/src/Data/Store/TH/Internal.hs
@@ -347,24 +347,32 @@
 deriveManyStoreUnboxVector = do
     unboxes <- getUnboxInfo
     stores <- postprocess . instancesMap <$> getInstances ''Store
-    let unboxInsts =
+    unboxInstances <- postprocess . instancesMap <$> getInstances ''UV.Unbox
+    let dataFamilyDecls =
             M.fromList (map (\(preds, ty, cons) -> ([AppT (ConT ''UV.Vector) ty], (preds, cons))) unboxes)
             `M.difference`
             stores
+#if MIN_VERSION_template_haskell(2,10,0)
+        substituteConstraint (AppT (ConT n) arg)
+          | n == ''UV.Unbox = AppT (ConT ''Store) (AppT (ConT ''UV.Vector) arg)
+#else
+        substituteConstraint (ClassP n [arg])
+          | n == ''UV.Unbox = ClassP ''Store [AppT (ConT ''UV.Vector) arg]
+#endif
+        substituteConstraint x = x
     -- TODO: ideally this would use a variant of 'deriveStore' which
     -- assumes VarSize.
-    forM (M.toList unboxInsts) $ \case
-        ([ty], (preds, cons)) -> do
-            {-
-            -- While this approach is reasonable-ish, it ends up
-            -- requiring UndecidableInstances.
-            let extraPreds =
-                    map (AppT (ConT ''Store)) $
-                    filter (not . isMonoType) $
-                    concatMap (map snd . dcFields) cons
-            -}
-            let extraPreds = map (storePred . AppT (ConT ''UV.Vector)) $ listify isVarT ty
-            deriveStore (nub (preds ++ extraPreds)) ty cons
+    forM (M.toList dataFamilyDecls) $ \case
+        ([ty], (_, cons)) -> do
+            let headTy = getTyHead (unAppsT ty !! 1)
+            (preds, ty') <- case M.lookup [headTy] unboxInstances of
+              Nothing -> do
+                reportWarning $ "No Unbox instance found for " ++ pprint headTy
+                return ([], ty)
+              Just (TypeclassInstance cs (AppT _ ty') _) ->
+                return (map substituteConstraint cs, AppT (ConT ''UV.Vector) ty')
+              Just _ -> fail "Impossible case"
+            deriveStore preds ty' cons
         _ -> fail "impossible case in deriveManyStoreUnboxVector"
 
 -- TODO: Add something for this purpose to TH.ReifyDataType
@@ -389,8 +397,10 @@
     go (DataInstD preds _ [ty] cons _) = (preds, ty, concatMap conToDataCons cons)
 #endif
     go x = error ("Unexpected result from reifying Unboxed Vector instances: " ++ pprint x)
+    dequalVarT :: Type -> Type
     dequalVarT (VarT n) = VarT (dequalify n)
     dequalVarT ty = ty
+
 
 ------------------------------------------------------------------------
 -- Utilities
diff --git a/store.cabal b/store.cabal
--- a/store.cabal
+++ b/store.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d5e9f1dc824c80abb31d16173dc0f03262e5125f67a92e81d0c5da4796ed8a26
+-- hash: 196a4a2e4a6b3e3eaf65b19fdbd12fea95fc3f94de915299ff2ebd319ba41302
 
 name:           store
-version:        0.7.1
+version:        0.7.2
 synopsis:       Fast binary serialization
 category:       Serialization, Data
 homepage:       https://github.com/fpco/store#readme
