diff --git a/bob/devtools/deploy.py b/bob/devtools/deploy.py
index 191d3af89b777d38949c1c6c9e844b2c6ab7e6e3..4ee1ea35ddf46e13e22635c0ee89bac86659c156 100644
--- a/bob/devtools/deploy.py
+++ b/bob/devtools/deploy.py
@@ -128,9 +128,14 @@ def deploy_documentation(path, package, stable, public, branch, tag, username,
       deploy_docs_to.add(tag)
     deploy_docs_to.add('stable')
 
+  # creates package directory, and then uploads directory there
   for k in deploy_docs_to:
-    remote_path = '%s/%s' % (remote_path_prefix, k)
+    if not davclient.check(remote_path_prefix):  #base package directory
+      logger.info('[dav] mkdir %s', remote_path_prefix)
+      if not dry_run:
+        davclient.mkdir(remote_path_prefix)
     logger.info('[dav] %s -> %s%s%s', path, SERVER, server_info['root'],
         remote_path)
+    remote_path = '%s/%s' % (remote_path_prefix, k)
     if not dry_run:
       davclient.upload_directory(local_path=path, remote_path=remote_path)