diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java
index d44f1b4..d6e175e 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java
@@ -19,14 +19,27 @@
 package org.apache.hyracks.util.file;
 
 import java.io.File;
+import java.util.regex.Pattern;
 
 public class FileUtil {
+
     private FileUtil() {
     }
 
     public static String joinPath(String... elements) {
-        return String.join(File.separator, elements)
-                .replaceAll("([^:])(" + File.separator + ")+", "$1$2")
-                .replaceAll(File.separator + "$", "");
+        return joinPath(File.separatorChar, elements);
+    }
+
+    static String joinPath(char separatorChar, String... elements) {
+        final String separator = String.valueOf(separatorChar);
+        final String escapedSeparator = Pattern.quote(separator);
+        String joined = String.join(separator, elements);
+        if (separatorChar == '\\') {
+            // preserve leading double-slash on windows (UNC)
+            return joined.replaceAll("([^" + escapedSeparator + "])(" + escapedSeparator + ")+", "$1$2")
+                    .replaceAll(escapedSeparator + "$", "");
+        } else {
+            return joined.replaceAll("(" + escapedSeparator + ")+", "$1").replaceAll(escapedSeparator + "$", "");
+        }
     }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java b/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java
new file mode 100644
index 0000000..8d6c631
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.util.file;
+
+import static org.apache.hyracks.util.file.FileUtil.joinPath;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class FileUtilTest {
+
+    @Test
+    public void testUnixPaths() {
+        Assert.assertEquals("/tmp/far/baz/lala", joinPath('/', "/tmp/", "/", "far", "baz/", "///lala"));
+        Assert.assertEquals("tmp/far/bar", joinPath('/', "tmp//far", "bar"));
+        Assert.assertEquals("/tmp/far/bar", joinPath('/', "/tmp/", "far", "bar/"));
+        Assert.assertEquals("/tmp/far/bar", joinPath('/', "/" + "/tmp/", "far", "bar/"));
+    }
+
+    @Test
+    public void testWindozePaths() {
+        Assert.assertEquals("C:\\temp\\far\\baz\\lala",
+                joinPath('\\', "C:\\", "temp\\", "\\far", "\\baz\\", "\\", "\\", "\\lala"));
+        Assert.assertEquals("\\\\myserver\\tmp\\far\\baz\\lala",
+                joinPath('\\', "\\\\myserver\\tmp\\\\far\\baz\\\\\\\\lala"));
+        Assert.assertEquals("C:\\temp\\far\\baz\\lala", joinPath('\\', "C:\\temp\\\\far\\baz\\\\\\\\lala\\"));
+    }
+}
