diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 4f8f423..04f0b2d 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -136,6 +136,25 @@
     using backslashes).  unc+rest is always the input path.
     Paths containing drive letters never have an UNC part.
     """
+    #if p[1:2] == ':':
+        #return '', p # Drive letter present
+    #firstTwo = p[0:2]
+    #if firstTwo == '//' or firstTwo == '\\\\':
+        ## is a UNC path:
+        ## vvvvvvvvvvvvvvvvvvvv equivalent to drive letter
+        ## \\machine\mountpoint\directories...
+        ##           directory ^^^^^^^^^^^^^^^
+        #normp = normcase(p)
+        #index = normp.find('\\', 2)
+        #if index == -1:
+            ###raise RuntimeError, 'illegal UNC path: "' + p + '"'
+            #return ("", p)
+        #index = normp.find('\\', index + 1)
+        #if index == -1:
+            #index = len(p)
+        #return p[:index], p[index:]
+    #return '', p
+
     if p[1:2] == ':':
         return '', p # Drive letter present
     firstTwo = p[0:2]
@@ -144,15 +163,18 @@
         # vvvvvvvvvvvvvvvvvvvv equivalent to drive letter
         # \\machine\mountpoint\directories...
         #           directory ^^^^^^^^^^^^^^^
-        normp = normcase(p)
-        index = normp.find('\\', 2)
-        if index == -1:
-            ##raise RuntimeError, 'illegal UNC path: "' + p + '"'
-            return ("", p)
-        index = normp.find('\\', index + 1)
-        if index == -1:
-            index = len(p)
-        return p[:index], p[index:]
+        normp = p.replace('\\', '/')
+        index = normp.find('/', 2)
+        if index <= 2:
+            return '', p
+        index2 = normp.find('/', index + 1)
+        # a UNC path can't have two slashes in a row
+        # (after the initial two)
+        if index2 == index + 1:
+            return '', p
+        if index2 == -1:
+            index2 = len(p)
+        return p[:index2], p[index2:]
     return '', p
 
 
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index e1852c0..749afbc 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -33,10 +33,24 @@
                ('c:', '/foo/bar'))
 
     def test_splitunc(self):
+        tester('ntpath.splitunc("c:\\foo\\bar")',
+               ('', 'c:\\foo\\bar'))
+        tester('ntpath.splitunc("c:/foo/bar")',
+               ('', 'c:/foo/bar'))
         tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")',
                ('\\\\conky\\mountpoint', '\\foo\\bar'))
         tester('ntpath.splitunc("//conky/mountpoint/foo/bar")',
                ('//conky/mountpoint', '/foo/bar'))
+        tester('ntpath.splitunc("\\\\\\conky\\mountpoint\\foo\\bar")',
+               ('', '\\\\\\conky\\mountpoint\\foo\\bar'))
+        tester('ntpath.splitunc("///conky/mountpoint/foo/bar")',
+               ('', '///conky/mountpoint/foo/bar'))
+        tester('ntpath.splitunc("\\\\conky\\\\mountpoint\\foo\\bar")',
+               ('', '\\\\conky\\\\mountpoint\\foo\\bar'))
+        tester('ntpath.splitunc("//conky//mountpoint/foo/bar")',
+               ('', '//conky//mountpoint/foo/bar'))
+        self.assertEqual(ntpath.splitunc(u'//conky/MOUNTPO\u0130NT/foo/bar'),
+                         (u'//conky/MOUNTPO\u0130NT', u'/foo/bar'))
 
     def test_split(self):
         tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
