diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog for conduit
 
+## 1.3.5
+
+* Add `groupOn`
+
 ## 1.3.4.3
 
 * Fix space leak in `*>` [#496](https://github.com/snoyberg/conduit/issues/496) [#497](https://github.com/snoyberg/conduit/pull/497)
diff --git a/conduit.cabal b/conduit.cabal
--- a/conduit.cabal
+++ b/conduit.cabal
@@ -1,5 +1,5 @@
 Name:                conduit
-Version:             1.3.4.3
+Version:             1.3.5
 Synopsis:            Streaming data processing library.
 description:
     `conduit` is a solution to the streaming data problem, allowing for production,
@@ -44,7 +44,7 @@
                        Data.Streaming.FileRead
                        Data.Streaming.Filesystem
   Build-depends:       base                     >= 4.12         && < 5
-                     , resourcet                >= 1.2          && < 1.3
+                     , resourcet                >= 1.2          && < 1.4
                      , transformers             >= 0.4
                      , mtl
                      , primitive
@@ -132,7 +132,6 @@
                   , hspec
                   , mwc-random
                   , gauge
-                  , kan-extensions
     main-is:        optimize-201408.hs
     ghc-options:    -Wall -O2 -rtsopts
 
diff --git a/src/Data/Conduit/List.hs b/src/Data/Conduit/List.hs
--- a/src/Data/Conduit/List.hs
+++ b/src/Data/Conduit/List.hs
@@ -59,6 +59,9 @@
     , chunksOf
     , groupBy
     , groupOn1
+#if MIN_VERSION_base(4,9,0)
+    , groupOn
+#endif
     , isolate
     , filter
       -- ** Monadic
@@ -95,6 +98,9 @@
     )
 import Data.Monoid (Monoid, mempty, mappend)
 import qualified Data.Foldable as F
+#if MIN_VERSION_base(4,9,0)
+import Data.List.NonEmpty (NonEmpty ((:|)))
+#endif
 import Data.Conduit
 import Data.Conduit.Internal.Conduit (unconsM, unconsEitherM)
 import Data.Conduit.Internal.Fusion
@@ -767,6 +773,16 @@
             | f x == f y = loop (rest . (y:)) x
             | otherwise  = yield (x, rest []) >> loop id y
 STREAMING(groupOn1, groupOn1C, groupOn1S, f)
+
+#if MIN_VERSION_base(4,9,0)
+-- | Like 'groupOn1', but returning a 'NonEmpty' structure.
+--
+-- @since 1.3.5
+groupOn :: (Monad m, Eq b)
+        => (a -> b)
+        -> ConduitT a (NonEmpty a) m ()
+groupOn f = groupOn1 f .| map (Prelude.uncurry (:|))
+#endif
 
 -- | Ensure that the inner sink consumes no more than the given number of
 -- values. Note this this does /not/ ensure that the sink consumes all of those
