diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+0.15
+----
+* Fixed a serious bug in the semantics of generic `Serial1` generation for the recursive case and improved `Generic1` support for `:.:`.
+
 0.14.1.2
 --------
 * Support `void` 0.7 / GHC 7.10
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2013 Edward Kmett
+Copyright 2013-2015 Edward Kmett
 
 All rights reserved.
 
diff --git a/bytes.cabal b/bytes.cabal
--- a/bytes.cabal
+++ b/bytes.cabal
@@ -1,6 +1,6 @@
 name:          bytes
 category:      Data, Serialization
-version:       0.14.1.3
+version:       0.15
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -9,7 +9,7 @@
 stability:     experimental
 homepage:      http://github.com/analytics/bytes
 bug-reports:   http://github.com/analytics/bytes/issues
-copyright:     Copyright (C) 2013 Edward A. Kmett
+copyright:     Copyright (C) 2013-2015 Edward A. Kmett
 build-type:    Custom
 tested-with:   GHC == 7.4.1, GHC == 7.6.1
 synopsis:      Sharing code for serialization between binary and cereal
diff --git a/src/Data/Bytes/Get.hs b/src/Data/Bytes/Get.hs
--- a/src/Data/Bytes/Get.hs
+++ b/src/Data/Bytes/Get.hs
@@ -6,7 +6,7 @@
 {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
 --------------------------------------------------------------------
 -- |
--- Copyright :  (c) Edward Kmett 2013
+-- Copyright :  (c) Edward Kmett 2013-2015
 -- License   :  BSD3
 -- Maintainer:  Edward Kmett <ekmett@gmail.com>
 -- Stability :  experimental
diff --git a/src/Data/Bytes/Put.hs b/src/Data/Bytes/Put.hs
--- a/src/Data/Bytes/Put.hs
+++ b/src/Data/Bytes/Put.hs
@@ -8,7 +8,7 @@
 {-# LANGUAGE Trustworthy #-}
 --------------------------------------------------------------------
 -- |
--- Copyright :  (c) Edward Kmett 2013
+-- Copyright :  (c) Edward Kmett 2013-2015
 -- License   :  BSD3
 -- Maintainer:  Edward Kmett <ekmett@gmail.com>
 -- Stability :  experimental
diff --git a/src/Data/Bytes/Serial.hs b/src/Data/Bytes/Serial.hs
--- a/src/Data/Bytes/Serial.hs
+++ b/src/Data/Bytes/Serial.hs
@@ -15,7 +15,7 @@
 #endif
 --------------------------------------------------------------------
 -- |
--- Copyright :  (c) Edward Kmett 2013
+-- Copyright :  (c) Edward Kmett 2013-2015
 -- License   :  BSD3
 -- Maintainer:  Edward Kmett <ekmett@gmail.com>
 -- Stability :  experimental
@@ -721,9 +721,9 @@
   gserializeWith f (Par1 a) = f a
   gdeserializeWith m = liftM Par1 m
 
-instance GSerial1 f => GSerial1 (Rec1 f) where
-  gserializeWith f (Rec1 fa) = gserializeWith f fa
-  gdeserializeWith m = liftM Rec1 (gdeserializeWith m)
+instance Serial1 f => GSerial1 (Rec1 f) where
+  gserializeWith f (Rec1 fa) = serializeWith f fa
+  gdeserializeWith m = liftM Rec1 (deserializeWith m)
 
 -- instance (Serial1 f, GSerial1 g) => GSerial1 (f :.: g) where
 
@@ -746,6 +746,10 @@
     0 -> liftM L1 (gdeserializeWith m)
     1 -> liftM R1 (gdeserializeWith m)
     _ -> fail "Missing case"
+
+instance (Serial1 f, GSerial1 g) => GSerial1 (f :.: g) where
+  gserializeWith f (Comp1 m) = serializeWith (gserializeWith f) m
+  gdeserializeWith m = Comp1 `liftM` deserializeWith (gdeserializeWith m)
 
 instance GSerial1 f => GSerial1 (M1 i c f) where
   gserializeWith f (M1 x) = gserializeWith f x
