diff --git a/src/main.c b/src/main.c
index 7e2ac4669e8f42c266b3d66166fef2f0ae73b65f..9c59ab3d483c99aa3c8cd5aa0f75c18e64f06d77 100644
--- a/src/main.c
+++ b/src/main.c
@@ -899,7 +899,23 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
       }
       else {
 	char *ptr = strchr(nextarg, ':');
-	if(ptr) {
+        /* Since we live in a world of weirdness and confusion, the win32
+           dudes can use : when using drive letters and thus
+           c:\file:password needs to work. In order not to break
+           compatibility, we still use : as separator, but we try to detect
+           when it is used for a file name! On windows. */
+#ifdef WIN32
+        if(ptr &&
+           (ptr == &nextarg[1]) &&
+           (nextarg[2] == '\\') &&
+           (isalpha((int)nextarg[0])) )
+          /* colon in the second column, followed by a backslash, and the
+             first character is an alphabetic letter:
+
+             this is a drive letter colon */
+          ptr = strchr(&nextarg[3], ':'); /* find the next one instead */
+#endif
+        if(ptr) {
 	  /* we have a password too */
 	  *ptr=0;
 	  ptr++;