diff --git a/core/coreunix/add.go b/core/coreunix/add.go
index f045b9821126f325c20167e981603c39de201e12..50aabd337b2075f2b6883928d836e303a8096d6e 100644
--- a/core/coreunix/add.go
+++ b/core/coreunix/add.go
@@ -328,6 +328,13 @@ func (adder *Adder) addNode(node *dag.Node, path string) error {
 		path = key.Pretty()
 	}
 
+	dir := gopath.Dir(path)
+	if dir != "." {
+		if err := mfs.Mkdir(adder.mr, dir, true); err != nil {
+			return err
+		}
+	}
+
 	if err := mfs.PutNode(adder.mr, path, node); err != nil {
 		return err
 	}
diff --git a/mfs/dir.go b/mfs/dir.go
index 43271fe490fcf2bb097720de883fe3f3b9e236f2..946d9e9a4aeeb01511d4370933e72d1198691eab 100644
--- a/mfs/dir.go
+++ b/mfs/dir.go
@@ -268,7 +268,9 @@ func (d *Directory) Mkdir(name string) (*Directory, error) {
 		return nil, err
 	}
 
-	return d.childDir(name)
+	dirobj := NewDirectory(d.ctx, name, ndir, d, d.dserv)
+	d.childDirs[name] = dirobj
+	return dirobj, nil
 }
 
 func (d *Directory) Unlink(name string) error {
diff --git a/mfs/ops.go b/mfs/ops.go
index fc36b2256d3f531be8b093ab9762992bb6049101..59c6e239b1b671a67c5758c7925df6669a406294 100644
--- a/mfs/ops.go
+++ b/mfs/ops.go
@@ -116,7 +116,10 @@ func Mkdir(r *Root, pth string, parents bool) error {
 
 	if len(parts) == 0 {
 		// this will only happen on 'mkdir /'
-		return fmt.Errorf("cannot mkdir '%s'", pth)
+		if parents {
+			return nil
+		}
+		return fmt.Errorf("cannot create directory '/': Already exists")
 	}
 
 	cur := r.GetValue().(*Directory)