diff --git a/src/Data/XML/Pickle/Basic.hs b/src/Data/XML/Pickle/Basic.hs
--- a/src/Data/XML/Pickle/Basic.hs
+++ b/src/Data/XML/Pickle/Basic.hs
@@ -4,7 +4,8 @@
 
 module Data.XML.Pickle.Basic where
 
-import           Control.Applicative ((<$>))
+import           Control.Applicative
+import           Control.Monad (ap)
 import qualified Control.Category as Cat
 import           Control.Exception (Exception)
 import           Data.Maybe
@@ -31,6 +32,11 @@
                                              -- instead of @Just mempty@
                           deriving (Functor, Show)
 
+
+instance Applicative (UnpickleResult t) where
+    pure = return
+    (<*>) = ap
+
 instance Monad (UnpickleResult t) where
     return x = Result x Nothing
     Result x r >>= f = case f x of
@@ -72,11 +78,22 @@
 
 printUPE :: UnpickleError -> [String]
 printUPE (ErrorMessage m) = [Text.unpack m]
-printUPE (TraceStep t es) = ("-> " ++ showTr  t) : printUPE es
 printUPE (Variants vs) = concat
                        . zipWith (:) (map (\x -> show x ++ ")") [(1 :: Int)..])
                        . map (map ( "  " ++))
                        $ (printUPE <$> vs)
+printUPE (TraceStep t es) =
+    let (n, es') = collapsSteps t es
+    in  ("-> " ++ showTr  t
+         ++ if n > 0
+            then (" [x" ++ show (n+1) ++"]" )
+            else "")
+        : printUPE es'
+  where
+    collapsSteps t (TraceStep t' ns) | t == t'
+        = let (n, ns') = collapsSteps t ns
+          in (n+1, ns')
+    collapsSteps _ es = (0, es)
 
 ppUnpickleError :: UnpickleError -> String
 ppUnpickleError e = "Error while unpickling:\n"
diff --git a/xml-picklers.cabal b/xml-picklers.cabal
--- a/xml-picklers.cabal
+++ b/xml-picklers.cabal
@@ -1,6 +1,6 @@
 Cabal-Version: >= 1.2
 Name: xml-picklers
-Version: 0.3.5
+Version: 0.3.6
 Synopsis: XML picklers based on xml-types, ported from hexpat-pickle
 Description:
   A library of combinators that allows Haskell data structures to be pickled
