diff --git a/assets/embed/public/css/styles.css b/assets/embed/public/css/styles.css
index 7fe9d964..bb21074c 100644
--- a/assets/embed/public/css/styles.css
+++ b/assets/embed/public/css/styles.css
@@ -774,7 +774,7 @@ header .action span {
     border: 0;
     box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
     padding: .5em;
-    width: 10em;
+    width: 22em;
     border-radius: .2em;
 }
 
@@ -1166,4 +1166,4 @@ i.spin {
         column-count: 1;
         column-gap: 0;
     }
-}
\ No newline at end of file
+}
diff --git a/assets/embed/public/js/application.js b/assets/embed/public/js/application.js
index e326f9b4..ee333a21 100644
--- a/assets/embed/public/js/application.js
+++ b/assets/embed/public/js/application.js
@@ -431,7 +431,9 @@ var newDirEvent = function(event) {
         let button = document.getElementById('new');
         let html = button.changeToLoading();
         let request = new XMLHttpRequest();
-        request.open("MKCOL", toWebDavURL(window.location.pathname + document.getElementById('newdir').value + "/"));
+        let name = document.getElementById('newdir').value;
+
+        request.open((name.endsWith("/") ? "MKCOL" : "PUT"), toWebDavURL(window.location.pathname + name));
         request.setRequestHeader('Token', token);
         request.send();
         request.onreadystatechange = function() {
diff --git a/assets/embed/templates/listing.tmpl b/assets/embed/templates/listing.tmpl
index 70f443d7..c03f5f34 100644
--- a/assets/embed/templates/listing.tmpl
+++ b/assets/embed/templates/listing.tmpl
@@ -38,7 +38,7 @@
 {{ end }}
 
 {{ if .User.AllowNew }}
-
+
 
     
         add
diff --git a/config/config.go b/config/config.go
index c5f0145e..952cb134 100644
--- a/config/config.go
+++ b/config/config.go
@@ -69,6 +69,7 @@ func Parse(c *caddy.Controller) ([]Config, error) {
 		cfg.AllowEdit = true
 		cfg.AllowNew = true
 		cfg.Commands = []string{"git", "svn", "hg"}
+		cfg.WebDav = true
 		cfg.Rules = []*Rule{&Rule{
 			Regex:  true,
 			Allow:  false,
@@ -85,6 +86,7 @@ func Parse(c *caddy.Controller) ([]Config, error) {
 		cfg.BaseURL = strings.TrimPrefix(cfg.BaseURL, "/")
 		cfg.BaseURL = strings.TrimSuffix(cfg.BaseURL, "/")
 		cfg.BaseURL = "/" + cfg.BaseURL
+		cfg.WebDavURL = cfg.BaseURL + "webdav"
 
 		if cfg.BaseURL == "/" {
 			cfg.BaseURL = ""
@@ -105,23 +107,15 @@ func Parse(c *caddy.Controller) ([]Config, error) {
 					return configs, c.Err("frontmatter type not supported")
 				}
 			case "webdav":
-				cfg.WebDav = true
-
-				prefix := "webdav"
-				if c.NextArg() {
-					prefix = c.Val()
+				if !c.NextArg() {
+					return configs, c.ArgErr()
 				}
 
+				prefix := c.Val()
 				prefix = strings.TrimPrefix(prefix, "/")
 				prefix = strings.TrimSuffix(prefix, "/")
 				prefix = cfg.BaseURL + "/" + prefix
-
 				cfg.WebDavURL = prefix
-				cfg.WebDavHandler = &webdav.Handler{
-					Prefix:     prefix,
-					FileSystem: webdav.Dir(cfg.PathScope),
-					LockSystem: webdav.NewMemLS(),
-				}
 			case "show":
 				if !c.NextArg() {
 					return configs, c.ArgErr()
@@ -240,6 +234,12 @@ func Parse(c *caddy.Controller) ([]Config, error) {
 			}
 		}
 
+		cfg.WebDavHandler = &webdav.Handler{
+			Prefix:     cfg.WebDavURL,
+			FileSystem: webdav.Dir(cfg.PathScope),
+			LockSystem: webdav.NewMemLS(),
+		}
+
 		caddyConf := httpserver.GetConfig(c)
 		cfg.AbsoluteURL = strings.TrimSuffix(caddyConf.Addr.Path, "/") + "/" + cfg.BaseURL
 		cfg.AbsoluteURL = strings.Replace(cfg.AbsoluteURL, "//", "/", -1)
diff --git a/filemanager.go b/filemanager.go
index 3bf02019..2c0c5009 100644
--- a/filemanager.go
+++ b/filemanager.go
@@ -56,7 +56,24 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 				user = c.User
 			}
 
-			if c.WebDav && strings.HasPrefix(r.URL.Path, c.WebDavURL) {
+			if strings.HasPrefix(r.URL.Path, c.WebDavURL) {
+				url := strings.TrimPrefix(r.URL.Path, c.WebDavURL)
+
+				if !user.Allowed(url) {
+					return http.StatusForbidden, nil
+				}
+
+				switch r.Method {
+				case "PROPPATCH", "MOVE", "PATCH", "PUT", "DELETE":
+					if !user.AllowEdit {
+						return http.StatusForbidden, nil
+					}
+				case "MKCOL", "COPY":
+					if !user.AllowNew {
+						return http.StatusForbidden, nil
+					}
+				}
+
 				if r.Method == http.MethodPut {
 					_, err = fi.Update(w, r, c, user)
 					if err != nil {
@@ -64,24 +81,6 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 					}
 				}
 
-				//url := strings.TrimPrefix(r.URL.Path, c.WebDavURL)
-
-				/*
-					if !user.Allowed(url) {
-						return http.StatusForbidden, nil
-					}
-
-					switch r.Method {
-					case "PROPPATCH", "MOVE", "PATCH", "PUT", "DELETE":
-						if !user.AllowEdit {
-							return http.StatusForbidden, nil
-						}
-					case "MKCOL", "COPY":
-						if !user.AllowNew {
-							return http.StatusForbidden, nil
-						}
-					} */
-
 				c.WebDavHandler.ServeHTTP(w, r)
 				return 0, nil
 			}
@@ -122,9 +121,7 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 				}
 			}
 
-			// Route the request depending on the HTTP Method.
-			switch r.Method {
-			case http.MethodGet:
+			if r.Method == http.MethodGet {
 				// Read and show directory or file.
 				if serveAssets {
 					return assets.Serve(w, r, c)
@@ -136,13 +133,18 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 				if !fi.IsDir {
 					query := r.URL.Query()
 					if val, ok := query["raw"]; ok && val[0] == "true" {
+						// TODO: change URL to webdav and continue as webdav
 						return fi.ServeRawFile(w, r, c)
 					}
 
 					if val, ok := query["download"]; ok && val[0] == "true" {
 						w.Header().Set("Content-Disposition", "attachment; filename="+fi.Name)
+						// TODO: change URL to webdav and continue as webdav
 						return fi.ServeRawFile(w, r, c)
+
 					}
+
+					// c.WebDavHandler.ServeHTTP(w, r)
 				}
 
 				code, err := fi.ServeAsHTML(w, r, c, user)
@@ -150,7 +152,9 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 					return errors.PrintHTML(w, code, err)
 				}
 				return code, err
-			case http.MethodPost:
+			}
+
+			if r.Method == http.MethodPost {
 				// Upload a new file.
 				if r.Header.Get("Upload") == "true" {
 					if !user.AllowNew {
@@ -173,11 +177,9 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
 
 					return command(w, r, c, user)
 				}
-
-				fallthrough
-			default:
-				return http.StatusNotImplemented, nil
 			}
+
+			return http.StatusNotImplemented, nil
 		}
 	}