diff --git a/conduit-merge.cabal b/conduit-merge.cabal
--- a/conduit-merge.cabal
+++ b/conduit-merge.cabal
@@ -1,5 +1,5 @@
 name: conduit-merge
-version: 0.1.0.1
+version: 0.1.1.0
 cabal-version: >=1.10
 build-type: Simple
 license: BSD3
diff --git a/src/Data/Conduit/Merge.hs b/src/Data/Conduit/Merge.hs
--- a/src/Data/Conduit/Merge.hs
+++ b/src/Data/Conduit/Merge.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE RankNTypes #-}
 
-module Data.Conduit.Merge (mergeSources) where
+module Data.Conduit.Merge (mergeSources, mergeSourcesOn) where
 
 import Control.Monad.Trans (lift)
 import Data.Conduit        (Producer, Source, await, newResumableSource, yield, ($$++))
@@ -8,14 +8,18 @@
 
 -- | Merge multiple sorted source into one sorted producer.
 mergeSources :: (Ord a, Monad m) => [Source m a] -> Producer m a
-mergeSources = mergeResumable . map newResumableSource
+mergeSources = mergeSourcesOn id
+
+-- | Merge multiple sorted source into one sorted producer using specified sorting key.
+mergeSourcesOn :: (Ord b, Monad m) => (a -> b) -> [Source m a] -> Producer m a
+mergeSourcesOn key = mergeResumable . fmap newResumableSource
   where
     mergeResumable sources = do
-        prefetchedSources <- lift $ mapM ($$++ await) sources
+        prefetchedSources <- lift $ traverse ($$++ await) sources
         go [(a, s) | (s, Just a) <- prefetchedSources]
     go [] = pure ()
     go sources = do
-        let (a, src1) : sources1 = sortOn fst sources
+        let (a, src1) : sources1 = sortOn (key . fst) sources
         yield a
         (src2, mb) <- lift $ src1 $$++ await
         let sources2 = case mb of
