diff --git a/vfs/vfs.go b/vfs/vfs.go
index d220d015e..fc4eb1264 100644
--- a/vfs/vfs.go
+++ b/vfs/vfs.go
@@ -193,12 +193,8 @@ func New(f fs.Fs, opt *vfscommon.Options) *VFS {
 		vfs.Opt = vfscommon.DefaultOpt
 	}
 
-	// Mask the permissions with the umask
-	vfs.Opt.DirPerms &= ^os.FileMode(vfs.Opt.Umask)
-	vfs.Opt.FilePerms &= ^os.FileMode(vfs.Opt.Umask)
-
-	// Make sure directories are returned as directories
-	vfs.Opt.DirPerms |= os.ModeDir
+	// Fill out anything else
+	vfs.Opt.Init()
 
 	// Find a VFS with the same name and options and return it if possible
 	activeMu.Lock()
diff --git a/vfs/vfscommon/options.go b/vfs/vfscommon/options.go
index 90cbe5bb7..5c1ae7900 100644
--- a/vfs/vfscommon/options.go
+++ b/vfs/vfscommon/options.go
@@ -62,3 +62,14 @@ var DefaultOpt = Options{
 	ReadAhead:         0 * fs.Mebi,
 	UsedIsSize:        false,
 }
+
+// Init the options, making sure everything is withing range
+func (opt *Options) Init() {
+	// Mask the permissions with the umask
+	opt.DirPerms &= ^os.FileMode(opt.Umask)
+	opt.FilePerms &= ^os.FileMode(opt.Umask)
+
+	// Make sure directories are returned as directories
+	opt.DirPerms |= os.ModeDir
+
+}