Index: src/java/org/apache/nutch/util/URLUtil.java
===================================================================
--- src/java/org/apache/nutch/util/URLUtil.java	(revision 1550160)
+++ src/java/org/apache/nutch/util/URLUtil.java	(working copy)
@@ -498,13 +498,12 @@
   public static String toUNICODE(String url) {
     try {
       URL u = new URL(url);
-      URI p = new URI(u.getProtocol(),
-        null,
-        IDN.toUnicode(u.getHost()),
-        u.getPort(),
-        u.getPath(),
-        u.getQuery(),
-        u.getRef());
+      URI p = new URI(u.getProtocol() + "://" +
+        IDN.toUnicode(u.getHost()) +
+        (u.getPort() != -1 ? u.getPort() : "") +
+        u.getPath() +
+        (u.getQuery() != null ? "?" + u.getQuery() : "") +
+        (u.getRef() != null ? "#" + u.getRef() : ""));
 
       return p.toString();
     }
Index: src/test/org/apache/nutch/util/TestURLUtil.java
===================================================================
--- src/test/org/apache/nutch/util/TestURLUtil.java	(revision 1550160)
+++ src/test/org/apache/nutch/util/TestURLUtil.java	(working copy)
@@ -258,5 +258,15 @@
       assertEquals(targets[i][1], targets[i][1], u.toString());
     }
   }
+  
+  public void testToUNICODE() throws Exception {
+    assertEquals("http://www.çevir.com/b/c/d;p?q#f", URLUtil.toUNICODE("http://www.xn--evir-zoa.com/b/c/d;p?q#f"));
+    assertEquals("http://uni-tübingen.de/", URLUtil.toUNICODE("http://xn--uni-tbingen-xhb.de/"));
+  }
+  
+  public void testToASCII() throws Exception {
+    assertEquals("http://www.xn--evir-zoa.com", URLUtil.toASCII("http://www.çevir.com"));
+    assertEquals("http://xn--uni-tbingen-xhb.de/b/c/d;p?q#f", URLUtil.toASCII("http://uni-tübingen.de/b/c/d;p?q#f"));
+  }
 
 }
