diff --git a/AutoTx/AutoTx.cs b/AutoTx/AutoTx.cs
index 4539298ff8c40eb08d75ce6f3e3dd3f10d87ee73..7bdbfd554dad5dca41143548b4b89bb75bd6046f 100644
--- a/AutoTx/AutoTx.cs
+++ b/AutoTx/AutoTx.cs
@@ -21,10 +21,16 @@ namespace AutoTx
         private string _statusPath;
         private string _incomingPath;
         private string _managedPath;
+
+        private string[] _remoteUserDirs;
+        private string[] _localUserDirs;
+
         private List<string> _transferredFiles = new List<string>();
 
         private int _txProgress;
 
+        private DateTime _lastUserDirCheck = DateTime.Now;
+
         // the transfer state:
         private enum TxState
         {
@@ -60,6 +66,7 @@ namespace AutoTx
             InitializeComponent();
             CreateEventLog();
             LoadSettings();
+            CreateIncomingDirectories();
         }
 
         /// <summary>
@@ -410,6 +417,10 @@ namespace AutoTx
             CheckFreeDiskSpace();
             UpdateServiceState();
 
+            var delta = DateTime.Now - _lastUserDirCheck;
+            if (delta.Seconds >= 10)
+                CreateIncomingDirectories();
+
             // tasks depending on the service state:
             if (_serviceSuspended) {
                 // make sure to pause any running transfer:
@@ -852,6 +863,35 @@ namespace AutoTx
             return retval;
         }
 
+        /// <summary>
+        /// Helper to create directories for all users that have one in the local
+        /// user directory (C:\Users) AND in the DestinationDirectory.
+        /// </summary>
+        private void CreateIncomingDirectories() {
+            _localUserDirs = new DirectoryInfo(@"C:\Users")
+                .GetDirectories()
+                .Select(d => d.Name)
+                .ToArray();
+            _remoteUserDirs = new DirectoryInfo(_config.DestinationDirectory)
+                .GetDirectories()
+                .Select(d => d.Name)
+                .ToArray();
+
+            foreach (var userDir in _localUserDirs) {
+                // don't create an incoming directory for the same name as the
+                // temporary transfer location:
+                if (_config.TmpTransferDir == userDir)
+                    continue;
+
+                // don't create a directory if it doesn't exist on the target:
+                if (!_remoteUserDirs.Contains(userDir))
+                    continue;
+
+                CreateNewDirectory(Path.Combine(_incomingPath, userDir), false);
+            }
+            _lastUserDirCheck = DateTime.Now;
+        }
+
         #endregion
 
     }