diff --git a/lib/modules/Standards.pmod/URI.pike b/lib/modules/Standards.pmod/URI.pike
index c7e47ea07794a693fef772469cdf1495e0891ac9..c5bb0de04f66484dcbf23cbd59beed44716a7317 100644
--- a/lib/modules/Standards.pmod/URI.pike
+++ b/lib/modules/Standards.pmod/URI.pike
@@ -265,9 +265,11 @@ void reparse_uri(this_program|string|void base_uri)
 
   // DWIM for "www.cnn.com" style input, when parsed in the context of
   // base "http://".
-  if( !scheme && this::base_uri?->scheme &&
-      !sizeof(this::base_uri->authority) )
+  if( !has_prefix(uri, "//") && !scheme && this::base_uri?->scheme &&
+      !sizeof(this::base_uri->authority) &&
+      !sizeof(this::base_uri->path))
   {
+    DEBUG("DWIM authority: %O\n", uri);
     uri = "//"+uri;
   }
 
diff --git a/lib/modules/Standards.pmod/testsuite.in b/lib/modules/Standards.pmod/testsuite.in
index ff2964e6207dc27e7846541f27cdc70d24259b3f..ea1d26b69bdbcaf450c491eeb0ed044c947cb343 100644
--- a/lib/modules/Standards.pmod/testsuite.in
+++ b/lib/modules/Standards.pmod/testsuite.in
@@ -103,6 +103,9 @@ test_equal(Standards.URI("http://www.com/?a=b&c")->get_query_variables(),(["a":"
 test_equal(Standards.URI("http://www.com/?foo")->get_http_path_query(),"/?foo")
 test_equal(Standards.URI("http://www.com/?")->get_http_path_query(),"/?")
 test_equal(Standards.URI("http://www.com/")->get_http_path_query(),"/")
+test_equal((string)Standards.URI("://"), "://")
+test_equal((string)Standards.URI("/", "://"), ":///")
+test_equal((string)Standards.URI("foo.bar", ":///"), ":///foo.bar")
 test_eval_error(Standards.URI("www.com"))
 test_eq((string)Standards.URI("www.com","http://"),"http://www.com")
 test_eq((string)Standards.URI("www.com/x?a=b#y","http://"),"http://www.com/x?a=b#y")