diff --git a/Codec/Archive/Tar/Unpack.hs b/Codec/Archive/Tar/Unpack.hs
--- a/Codec/Archive/Tar/Unpack.hs
+++ b/Codec/Archive/Tar/Unpack.hs
@@ -83,30 +83,28 @@
     unpackEntries _     (Fail err)      = either throwIO throwIO err
     unpackEntries links Done            = return links
     unpackEntries links (Next entry es) = case entryContent entry of
-      NormalFile file _ -> extractFile fPerms path file mtime
-                        >> unpackEntries links es
-      Directory         -> extractDir path mtime
+      NormalFile file _ -> do
+        extractFile (entryPermissions entry) (entryPath entry) file (entryTime entry)
+        unpackEntries links es
+      Directory         -> extractDir (entryPath entry) (entryTime entry)
                         >> unpackEntries links es
-      HardLink     link -> (unpackEntries $! saveLink True path link links) es
-      SymbolicLink link -> (unpackEntries $! saveLink False path link links) es
+      HardLink     link -> (unpackEntries $! saveLink True (entryPath entry) link links) es
+      SymbolicLink link -> (unpackEntries $! saveLink False (entryPath entry) link links) es
       OtherEntryType 'L' fn _ ->
         case es of
              (Next entry' es') -> case entryContent entry' of
-               NormalFile file _ -> extractFile fPerms (L.toStrict fn) file mtime
-                                 >> unpackEntries links es'
-               Directory         -> extractDir (L.toStrict fn) mtime
+               NormalFile file _ -> do
+                extractFile (entryPermissions entry') (L.toStrict fn) file (entryTime entry')
+                unpackEntries links es'
+               Directory         -> extractDir (L.toStrict fn) (entryTime entry')
                                  >> unpackEntries links es'
-               HardLink     link -> (unpackEntries $! saveLink True path link links) es'
-               SymbolicLink link -> (unpackEntries $! saveLink False path link links) es'
+               HardLink     link -> (unpackEntries $! saveLink True (L.toStrict fn) link links) es'
+               SymbolicLink link -> (unpackEntries $! saveLink False (L.toStrict fn) link links) es'
                OtherEntryType 'L' _ _ -> throwIO $ userError "Two subsequent OtherEntryType 'L'"
                _ -> unpackEntries links es'
              (Fail err)      -> either throwIO throwIO err
              Done            -> throwIO $ userError "././@LongLink without a subsequent entry"
       _ -> unpackEntries links es --ignore other file types
-      where
-        path  = entryPath entry
-        mtime = entryTime entry
-        fPerms = entryPermissions entry
 
     extractFile fPerms path content mtime = do
       -- Note that tar archives do not make sure each directory is created
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 See also http://pvp.haskell.org/faq
 
+0.6.3.2
+
+  * Fix bugs in untar for entries with long filenames
+
 0.6.3.1
 
   * Fix untar when links point to themselves
diff --git a/tar-bytestring.cabal b/tar-bytestring.cabal
--- a/tar-bytestring.cabal
+++ b/tar-bytestring.cabal
@@ -1,5 +1,5 @@
 name:            tar-bytestring
-version:         0.6.3.1
+version:         0.6.3.2
 license:         BSD3
 license-file:    LICENSE
 author:          Duncan Coutts <duncan@community.haskell.org>
