diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,6 @@
+## 0.3.2 - 2019-01-14
+* Create a prefix directory whenever a directory type entry is missing from the tarball itself. Fixes [#26](https://github.com/snoyberg/tar-conduit/issues/26).
+
 ## 0.3.1 - 2018-11-19
  * Fixed modification time restoration on Windows for read-only files [#25](https://github.com/snoyberg/tar-conduit/pull/25).
 
diff --git a/src/Data/Conduit/Tar/Unix.hs b/src/Data/Conduit/Tar/Unix.hs
--- a/src/Data/Conduit/Tar/Unix.hs
+++ b/src/Data/Conduit/Tar/Unix.hs
@@ -81,6 +81,7 @@
             excs <- liftIO $ do
                 -- Try to unlink any existing file/symlink
                 void $ tryAny $ Posix.removeLink fpStr
+                when lenient $ Dir.createDirectoryIfMissing True $ Posix.takeDirectory fpStr
                 Posix.createSymbolicLink (decodeFilePath link) fpStr
                 eExc1 <- tryAnyCond $ Posix.setSymbolicLinkOwnerAndGroup fpStr fileUserId fileGroupId
 #if MIN_VERSION_unix(2,7,0)
@@ -111,6 +112,7 @@
                     return (either ((excs ++) . pure) (const excs) eExc)
             unless (null excs) $ yield (return (fi, excs))
         FTNormal -> do
+            when lenient $ liftIO $ Dir.createDirectoryIfMissing True $ Posix.takeDirectory fpStr
             sinkFile fpStr
             excs <- liftIO $ do
                 excs <- restorePermissions
diff --git a/src/Data/Conduit/Tar/Windows.hs b/src/Data/Conduit/Tar/Windows.hs
--- a/src/Data/Conduit/Tar/Windows.hs
+++ b/src/Data/Conduit/Tar/Windows.hs
@@ -16,6 +16,7 @@
 import           Foreign.C.Types          (CTime (..))
 import qualified System.Directory         as Dir
 import qualified System.PosixCompat.Files as Posix
+import qualified System.FilePath as FilePath
 
 
 getFileInfo :: FilePath -> IO FileInfo
@@ -67,6 +68,7 @@
                                     (`when` Dir.setModificationTime fpStr modTime))
                 return (fi, either ((excs ++) . pure) (const excs) eExc)
         FTNormal -> do
+            when lenient $ liftIO $ Dir.createDirectoryIfMissing True $ FilePath.takeDirectory fpStr
             sinkFile fpStr
             excs <- liftIO $ restoreTimeAndMode
             unless (null excs) $ yield $ return (fi, excs)
diff --git a/tar-conduit.cabal b/tar-conduit.cabal
--- a/tar-conduit.cabal
+++ b/tar-conduit.cabal
@@ -1,5 +1,5 @@
 name:                tar-conduit
-version:             0.3.1
+version:             0.3.2
 synopsis:            Extract and create tar files using conduit for streaming
 description:         Please see README.md. This is just filler to avoid warnings.
 homepage:            https://github.com/snoyberg/tar-conduit#readme
@@ -9,8 +9,8 @@
 maintainer:          michael@snoyman.com, bartavelle@gmail.com, alexey@kuleshevi.ch
 category:            Data Conduit
 build-type:          Simple
-extra-source-files:  README.md ChangeLog.md tests/files/libpq-0.3.tar.gz
-cabal-version:       >= 1.24.0.0
+extra-source-files:  README.md ChangeLog.md tests/files/libpq-0.3.tar.gz tests/files/subdir.tar
+cabal-version:       1.24
 
 library
   if impl(ghc < 8)
diff --git a/tests/Spec.hs b/tests/Spec.hs
--- a/tests/Spec.hs
+++ b/tests/Spec.hs
@@ -65,6 +65,13 @@
                     P.length tb1 `shouldBe` P.length tb2
                     zipWithM_ shouldBe (fmap fst tb2) (fmap fst tb1)
                     zipWithM_ shouldBe (fmap snd tb2) (fmap snd tb1)
+        describe "untar" $ do
+            around (withTempTarFiles baseTmp) $
+                it "create-intermediate" $ \(fpIn, hIn, outDir, fpOut) -> do
+                    hClose hIn
+                    extractTarballLenient "tests/files/subdir.tar" (Just outDir)
+                    curDir <- getCurrentDirectory
+                    collectContent (outDir Posix.</> "dir/subdir/") `shouldReturn` "Hello World\n"
         describe "ustar" ustarSpec
         describe "GNUtar" gnutarSpec
         describe "unsupported headers" $ do
diff --git a/tests/files/subdir.tar b/tests/files/subdir.tar
new file mode 100644
Binary files /dev/null and b/tests/files/subdir.tar differ
