diff --git a/unionfs/memunionfs.go b/unionfs/memunionfs.go
index 44150995400624ca481853c3ea8220eb53166a02..cba2b43cc90b90cbe1865fffbdffbbc91098d28f 100644
--- a/unionfs/memunionfs.go
+++ b/unionfs/memunionfs.go
@@ -23,6 +23,8 @@ type MemUnionFs struct {
 	mutex    sync.RWMutex
 	cond     *sync.Cond
 	nextFree int
+	
+	// TODO - should clear out backing every X file creations, to clean up unused files. 
 
 	readonly fuse.FileSystem
 
@@ -379,6 +381,7 @@ func (me *memNode) Create(name string, flags uint32, mode uint32, context *fuse.
 	n.backing = me.fs.getFilename()
 	f, err := os.Create(n.backing)
 	if err != nil {
+		log.Printf("Backing store error %q: %v", n.backing, err)
 		return nil, nil, nil, fuse.OsErrorToErrno(err)
 	}
 	me.Inode().AddChild(name, n.Inode())
@@ -475,12 +478,16 @@ func (me *memNode) Open(flags uint32, context *fuse.Context) (file fuse.File, co
 }
 
 func (me *memNode) GetAttr(file fuse.File, context *fuse.Context) (fi *os.FileInfo, code fuse.Status) {
+	var sz int64
+	if file != nil {
+		fi, _ := file.GetAttr()
+		sz = fi.Size
+	}
 	me.mutex.RLock()
 	defer me.mutex.RUnlock()
 	info := me.info
 	if file != nil {
-		fi, _ := file.GetAttr()
-		info.Size = fi.Size
+		info.Size = sz
 	}
 	return &info, fuse.OK
 }
@@ -547,11 +554,7 @@ func (me *memNode) OpenDir(context *fuse.Context) (stream chan fuse.DirEntry, co
 	}
 	
 	for k, n := range me.Inode().FsChildren() {
-		fi, code := n.FsNode().GetAttr(nil, nil)
-		if !code.Ok() {
-			panic("child does not have mode.")
-		}
-		ch[k] = fi.Mode
+		ch[k] = n.FsNode().(*memNode).info.Mode
 	}
 
 	stream = make(chan fuse.DirEntry, len(ch))
diff --git a/unionfs/memunionfs_test.go b/unionfs/memunionfs_test.go
index eb448776882488b507b68af9036f9150f1918209..1dd45c01f28960380de8fe2b697d887efd996b55 100644
--- a/unionfs/memunionfs_test.go
+++ b/unionfs/memunionfs_test.go
@@ -222,7 +222,7 @@ func TestMemUnionFsPromote(t *testing.T) {
 	}
 }
 
-func TestMemUnionFsCreate(t *testing.T) {
+func TestMemUnionFsSubdirCreate(t *testing.T) {
 	wd, ufs, clean := setupMemUfs(t)
 	defer clean()
 
@@ -238,6 +238,20 @@ func TestMemUnionFsCreate(t *testing.T) {
 	}
 }
 
+func TestMemUnionFsCreate(t *testing.T) {
+	wd, ufs, clean := setupMemUfs(t)
+	defer clean()
+
+	writeToFile(wd+"/mount/file.txt", "hello")
+	_, err := os.Lstat(wd + "/mount/file.txt")
+	CheckSuccess(err)
+	
+	r := ufs.Reap()
+	if r["file.txt"] == nil || r["file.txt"].Backing == "" {
+		t.Errorf("expect 1 file reap result: %v", r)
+	}
+}
+
 func TestMemUnionFsOpenUndeletes(t *testing.T) {
 	wd, _, clean := setupMemUfs(t)
 	defer clean()