diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,12 @@
+* 0.2.2 (14 April 2013)
+
+  - Add 'dropInnerBlanks' combinator for dropping blank chunks between
+    consecutive delimiters while still keeping the delimiters separate.
+
+* 0.2.1.3 (28 March 2013)
+
+  - bump upper bound to allow base-4.7
+
 * 0.2.1.2 (28 January 2013)
 
   - Patch from Daniel Wagner to make splitting lazier when using
diff --git a/split.cabal b/split.cabal
--- a/split.cabal
+++ b/split.cabal
@@ -1,5 +1,5 @@
 Name:                split
-Version:             0.2.1.3
+Version:             0.2.2
 Stability:           stable
 
 Description:         A collection of various methods for splitting
diff --git a/src/Data/List/Split.hs b/src/Data/List/Split.hs
--- a/src/Data/List/Split.hs
+++ b/src/Data/List/Split.hs
@@ -68,6 +68,7 @@
                        , condense
                        , dropInitBlank
                        , dropFinalBlank
+                       , dropInnerBlanks
 
                        -- ** Derived combinators
                        -- $derived
diff --git a/src/Data/List/Split/Internals.hs b/src/Data/List/Split/Internals.hs
--- a/src/Data/List/Split/Internals.hs
+++ b/src/Data/List/Split/Internals.hs
@@ -89,6 +89,10 @@
 
 -- | What to do with multiple consecutive delimiters?
 data CondensePolicy = Condense         -- ^ Condense into a single delimiter.
+                    | DropBlankFields  -- ^ Keep consecutive
+                                       --   delimiters separate, but
+                                       --   don't insert blank chunks in
+                                       --   between them.
                     | KeepBlankFields  -- ^ Insert blank chunks
                                        --   between consecutive
                                        --   delimiters.
@@ -160,7 +164,7 @@
               . dropInitial (initBlankPolicy s)
               . doMerge (delimPolicy s)
               . doDrop (delimPolicy s)
-              . insertBlanks
+              . insertBlanks (condensePolicy s)
               . doCondense (condensePolicy s)
 
 -- | Drop delimiters if the 'DelimPolicy' is 'Drop'.
@@ -171,27 +175,30 @@
 -- | Condense multiple consecutive delimiters into one if the
 --   'CondensePolicy' is 'Condense'.
 doCondense :: CondensePolicy -> SplitList a -> SplitList a
-doCondense KeepBlankFields ls = ls
 doCondense Condense ls = condense' ls
   where condense' [] = []
         condense' (c@(Text _) : l) = c : condense' l
         condense' l = (Delim $ concatMap fromElem ds) : condense' rest
           where (ds,rest) = span isDelim l
+doCondense _ ls = ls
 
--- | Insert blank chunks between any remaining consecutive delimiters,
---   and at the beginning or end if the first or last element is a
---   delimiter.
-insertBlanks :: SplitList a -> SplitList a
-insertBlanks [] = [Text []]
-insertBlanks (d@(Delim _) : l) = Text [] : insertBlanks' (d:l)
-insertBlanks l = insertBlanks' l
+-- | Insert blank chunks between any remaining consecutive delimiters
+--   (unless the condense policy is 'DropBlankFields'), and at the
+--   beginning or end if the first or last element is a delimiter.
+insertBlanks :: CondensePolicy -> SplitList a -> SplitList a
+insertBlanks _ [] = [Text []]
+insertBlanks cp (d@(Delim _) : l) = Text [] : insertBlanks' cp (d:l)
+insertBlanks cp l = insertBlanks' cp l
 
 -- | Insert blank chunks between consecutive delimiters.
-insertBlanks' :: SplitList a -> SplitList a
-insertBlanks' [] = []
-insertBlanks' (d1@(Delim _) : d2@(Delim _) : l) = d1 : Text [] : insertBlanks' (d2:l)
-insertBlanks' [d@(Delim _)] = [d, Text []]
-insertBlanks' (c : l) = c : insertBlanks' l
+insertBlanks' :: CondensePolicy -> SplitList a -> SplitList a
+insertBlanks' _ [] = []
+insertBlanks' cp@DropBlankFields (d1@(Delim _) : d2@(Delim _) : l)
+  = d1           : insertBlanks' cp (d2:l)
+insertBlanks' cp (d1@(Delim _) : d2@(Delim _) : l)
+  = d1 : Text [] : insertBlanks' cp (d2:l)
+insertBlanks' _ [d@(Delim _)] = [d, Text []]
+insertBlanks' cp (c : l) = c : insertBlanks' cp l
 
 -- | Merge delimiters into adjacent chunks according to the 'DelimPolicy'.
 doMerge :: DelimPolicy -> SplitList a -> SplitList a
@@ -325,10 +332,19 @@
 dropFinalBlank :: Splitter a -> Splitter a
 dropFinalBlank s = s { finalBlankPolicy = DropBlank }
 
+-- | Don't generate blank chunks between consecutive delimiters.
+--   For example:
+--
+-- > split (oneOf ":") "::b:::a" == ["",":","",":","b",":","",":","",":","a"]
+-- > split (dropInnerBlanks $ oneOf ":") "::b:::a" == ["", ":",":","b",":",":",":","a"]
+dropInnerBlanks :: Splitter a -> Splitter a
+dropInnerBlanks s = s { condensePolicy = DropBlankFields }
+
 -- ** Derived combinators
 
--- | Drop all blank chunks from the output.  Equivalent to
---   @'dropInitBlank' . 'dropFinalBlank' . 'condense'@.  For example:
+-- | Drop all blank chunks from the output, and condense consecutive
+--   delimiters into one.  Equivalent to @'dropInitBlank'
+--   . 'dropFinalBlank' . 'condense'@.  For example:
 --
 -- > split (oneOf ":") "::b:::a" == ["",":","",":","b",":","",":","",":","a"]
 -- > split (dropBlanks $ oneOf ":") "::b:::a" == ["::","b",":::","a"]
diff --git a/test/Properties.hs b/test/Properties.hs
--- a/test/Properties.hs
+++ b/test/Properties.hs
@@ -12,8 +12,9 @@
 
 import           Data.Char
 import           Data.Functor
-import           Data.List                 (genericTake, group, intercalate, isInfixOf, isPrefixOf,
- isSuffixOf, tails)
+import           Data.List                 (genericTake, group, intercalate,
+                                            isInfixOf, isPrefixOf, isSuffixOf,
+                                            tails)
 import           Data.Maybe                (isJust)
 
 newtype Elt = Elt { unElt :: Char }
@@ -159,19 +160,19 @@
 prop_doCondense_no_consec_delims l = noConsecDelims $ doCondense Condense l
 
 prop_insBlanks_no_consec_delims :: SplitList Elt -> Bool
-prop_insBlanks_no_consec_delims l = noConsecDelims $ insertBlanks l
+prop_insBlanks_no_consec_delims l = noConsecDelims $ insertBlanks Condense l
 
 prop_insBlanks_fl_not_delim :: SplitList Elt -> Bool
 prop_insBlanks_fl_not_delim l =
-    case insertBlanks l of
+    case insertBlanks Condense l of
       [] -> True
       xs -> (not . isDelim $ head xs) && (not . isDelim $ last xs)
 
 prop_mergeL_no_delims :: SplitList Elt -> Bool
-prop_mergeL_no_delims = all (not . isDelim) . mergeLeft . insertBlanks
+prop_mergeL_no_delims = all (not . isDelim) . mergeLeft . insertBlanks Condense
 
 prop_mergeR_no_delims :: SplitList Elt -> Bool
-prop_mergeR_no_delims = all (not . isDelim) . mergeRight . insertBlanks
+prop_mergeR_no_delims = all (not . isDelim) . mergeRight . insertBlanks Condense
 
 getDelims :: Splitter Elt -> [Elt] -> [[Elt]]
 getDelims s l = [ d | Delim d <- splitInternal (delimiter s) l ]
