diff --git a/Storage/Hashed/Index.hs b/Storage/Hashed/Index.hs
--- a/Storage/Hashed/Index.hs
+++ b/Storage/Hashed/Index.hs
@@ -112,8 +112,6 @@
 off_hash = off_dsclen + size_dsclen
 off_dsc = off_hash + size_hash
 
-emptyDirHash = sha256 BL.empty
-
 itemAllocSize :: AnchoredPath -> Int
 itemAllocSize apath =
     align 4 $ size_hash + size_size + size_aux + size_dsclen + 2 + BS.length (flatten apath)
@@ -272,7 +270,9 @@
        inferiors <- if want then subs $ start substate
                             else return []
 
-       let we_changed = or [ changed x | (_, x) <- inferiors ]
+       let we_changed = or [ changed x | (_, x) <- inferiors ] || nullleaf
+           nullleaf = null inferiors && oldhash == nullsha
+           nullsha = SHA256 (BS.replicate 32 0)
            tree' = makeTree [ (n, fromJust $ treeitem s) | (n, s) <- inferiors, isJust $ treeitem s ]
            treehash = we_changed ? (hashtree index tree', oldhash)
            tree = tree' { treeHash = treehash }
@@ -364,7 +364,6 @@
                         let path'' = path' `appendPath` name
                         noff <- subs xs
                         create x path'' noff
-                  when (null $ listImmediate s) $ updateItem i 0 emptyDirHash
                   lastOff <- subs (listImmediate s)
                   xlatePoke64 (iAux i) (fromIntegral lastOff)
                   return lastOff
diff --git a/hashed-storage.cabal b/hashed-storage.cabal
--- a/hashed-storage.cabal
+++ b/hashed-storage.cabal
@@ -1,5 +1,5 @@
 name:          hashed-storage
-version:       0.4.5
+version:       0.4.6
 synopsis:      Hashed file storage support code.
 
 description:   Support code for reading and manipulating hashed file storage
