diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java
index 7c65782..e0cfa55 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java
@@ -46,7 +46,7 @@
     FileName[] EMPTY_ARRAY = new FileName[0];
 
     /**
-     * Returns the base name of this file. The base name is the last element of the file name. For example the base name
+     * Gets the base name of this file. The base name is the last element of the file name. For example the base name
      * of {@code /somefolder/somefile} is {@code somefile}.
      * <p>
      * The root file of a file system has an empty base name.
@@ -57,7 +57,7 @@
     String getBaseName();
 
     /**
-     * Returns the depth of this file name, within its file system. The depth of the root of a file system is 0. The
+     * Gets the depth of this file name, within its file system. The depth of the root of a file system is 0. The
      * depth of any other file is 1 + the depth of its parent.
      *
      * @return The depth of this file name.
@@ -65,14 +65,14 @@
     int getDepth();
 
     /**
-     * Returns the extension of this file name.
+     * Gets the extension of this file name.
      *
      * @return The extension. Returns an empty string if the name has no extension.
      */
     String getExtension();
 
     /**
-     * Returns a "friendly path", this is a path without a password.
+     * Gets a "friendly path", this is a path without a password.
      * <p>
      * This path can not be used to resolve the path again.
      * </p>
@@ -82,15 +82,15 @@
     String getFriendlyURI();
 
     /**
-     * Returns the file name of the parent of this file. The root of a file system has no parent.
+     * Gets the file name of the parent of this file. The root of a file system has no parent.
      *
      * @return A {@link FileName} object representing the parent name. Returns null for the root of a file system.
      */
     FileName getParent();
 
     /**
-     * Returns the absolute path of this file, within its file system. This path is normalized, so that {@code .} and
-     * {@code ..} elements have been removed. Also, the path only contains {@code /} as its separator character. The
+     * Gets the absolute path string of this file, within its file system. This path is normalized, so that {@code .}
+     * and {@code ..} elements have been removed. Also, the path only contains {@code /} as its separator character. The
      * path always starts with {@code /}
      * <p>
      * The root of a file system has {@code /} as its absolute path.
@@ -108,10 +108,11 @@
      * The root of a file system has {@code /} as its absolute path.
      * </p>
      * <p>
-     * In contrast to {@link #getPath()} the path is decoded i.e. all %nn stuff replaced by its character.
+     * In contrast to {@link #getPath()}, this path is decoded: All %nn escapes are replaced by their respective
+     * characters.
      * </p>
      *
-     * @return The path. Never returns null.
+     * @return The decoded path. Never returns null.
      * @throws FileSystemException if the path is not correctly encoded
      */
     String getPathDecoded() throws FileSystemException;
@@ -126,28 +127,28 @@
     String getRelativeName(FileName name) throws FileSystemException;
 
     /**
-     * Finds the root of the file system.
+     * Gets the root of the file system.
      *
      * @return the file system root.
      */
     FileName getRoot();
 
     /**
-     * Returns the root URI of the file system this file belongs to.
+     * Gets the root URI string of the file system this file belongs to.
      *
-     * @return the root URI.
+     * @return the root URI string.
      */
     String getRootURI();
 
     /**
-     * Returns the URI scheme of this file.
+     * Gets the URI scheme of this file.
      *
      * @return The URI scheme of this file.
      */
     String getScheme();
 
     /**
-     * Returns the requested or current type of this name.
+     * Gets the requested or current type of this name.
      * <p>
      * The "requested" type is the one determined during resolving the name. In this case the name is a
      * {@link FileType#FOLDER} if it ends with an "/" else it will be a {@link FileType#FILE}.
@@ -161,14 +162,14 @@
     FileType getType();
 
     /**
-     * Returns the absolute URI of this file.
+     * Gets the absolute URI string of this file.
      *
-     * @return the absolute URI of this file.
+     * @return the absolute URI string of this file.
      */
     String getURI();
 
     /**
-     * Determines if another file name is an ancestor of this file name.
+     * Tests if another file name is an ancestor of this file name.
      *
      * @param ancestor The FileName to check.
      * @return true if another file name is an ancestor of this file name.
@@ -176,7 +177,7 @@
     boolean isAncestor(FileName ancestor);
 
     /**
-     * Determines if another file name is a descendent of this file name.
+     * Tests if another file name is a descendent of this file name.
      *
      * @param descendent the FileName to check.
      * @return true if the other FileName is a descendent of this file name.
@@ -184,7 +185,7 @@
     boolean isDescendent(FileName descendent);
 
     /**
-     * Determines if another file name is a descendent of this file name.
+     * Tests if another file name is a descendent of this file name.
      *
      * @param descendent the FileName to check.
      * @param nameScope the NameScope of the FileName.
@@ -193,7 +194,7 @@
     boolean isDescendent(FileName descendent, NameScope nameScope);
 
     /**
-     * Checks if this file name is a name for a regular file.
+     * Tests if this file name is a name for a regular file.
      *
      * @return true if this file name is a name for a regular file.
      * @throws FileSystemException if an error occurs.
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.java
index ac18609..5c2dbe2 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.java
@@ -57,14 +57,27 @@
     }
 
     /**
-     * Determines if a name is an absolute file name.
-     *
-     * @param name The file name.
-     * @return true if the name is absolute, false otherwise.
+     * Creates the file system.
      */
     @Override
-    public boolean isAbsoluteLocalName(final String name) {
-        return ((LocalFileNameParser) getFileNameParser()).isAbsoluteName(name);
+    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
+            throws FileSystemException {
+        // Create the file system
+        final LocalFileName rootName = (LocalFileName) name;
+        return new LocalFileSystem(rootName, rootName.getRootFile(), fileSystemOptions);
+    }
+
+    /**
+     * Finds a local file.
+     *
+     * @param file The File to locate.
+     * @return the located FileObject.
+     * @throws FileSystemException if an error occurs.
+     */
+    @Override
+    public FileObject findLocalFile(final File file) throws FileSystemException {
+        return findLocalFile(UriParser.encode(file.getAbsolutePath()));
+        // return findLocalFile(file.getAbsolutePath());
     }
 
     /**
@@ -84,32 +97,19 @@
         return findFile(fileName, null);
     }
 
-    /**
-     * Finds a local file.
-     *
-     * @param file The File to locate.
-     * @return the located FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findLocalFile(final File file) throws FileSystemException {
-        return findLocalFile(UriParser.encode(file.getAbsolutePath()));
-        // return findLocalFile(file.getAbsolutePath());
-    }
-
-    /**
-     * Creates the file system.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-            throws FileSystemException {
-        // Create the file system
-        final LocalFileName rootName = (LocalFileName) name;
-        return new LocalFileSystem(rootName, rootName.getRootFile(), fileSystemOptions);
-    }
-
     @Override
     public Collection<Capability> getCapabilities() {
         return capabilities;
     }
+
+    /**
+     * Determines if a name is an absolute file name.
+     *
+     * @param name The file name.
+     * @return true if the name is absolute, false otherwise.
+     */
+    @Override
+    public boolean isAbsoluteLocalName(final String name) {
+        return ((LocalFileNameParser) getFileNameParser()).isAbsoluteName(name);
+    }
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.java
index 2498f7f..519eb7a 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.java
@@ -29,16 +29,26 @@
     private static final GenericFileNameParser INSTANCE = new GenericFileNameParser();
 
     /**
-     * retrieve a instance to this parser.
+     * Gets the singleton instance.
      *
-     * @return the parser
+     * @return the singleton instance.
      */
     public static GenericFileNameParser getInstance() {
         return INSTANCE;
     }
 
+    /*
+     * ... this is why why need this: here the rootFilename can only be "/" (see above) put this "/" is also in the
+     * pathname so its of no value for the LocalFileName instance
+     */
+    @Override
+    protected FileName createFileName(final String scheme, final String rootFile, final String path,
+            final FileType type) {
+        return new LocalFileName(scheme, "", path, type);
+    }
+
     /**
-     * Pops the root prefix off a URI, which has had the scheme removed.
+     * Extracts the root prefix from a URI string, which has had the scheme removed.
      */
     @Override
     protected String extractRootPrefix(final String uri, final StringBuilder name) throws FileSystemException {
@@ -52,14 +62,4 @@
         // do not strip the separator, BUT also return it ...
         return "/";
     }
-
-    /*
-     * ... this is why whe need this: here the rootFilename can only be "/" (see above) put this "/" is also in the
-     * pathname so its of no value for the LocalFileName instance
-     */
-    @Override
-    protected FileName createFileName(final String scheme, final String rootFile, final String path,
-            final FileType type) {
-        return new LocalFileName(scheme, "", path, type);
-    }
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
index 94eb6c2..d9f6c1d 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
@@ -199,14 +199,6 @@
     }
 
     /**
-     * Determines if this file can be written to.
-     */
-    @Override
-    protected boolean doIsWriteable() throws FileSystemException {
-        return file.canWrite();
-    }
-
-    /**
      * Determines if this file is a symbolic link.
      * @since 2.4
      */
@@ -216,6 +208,14 @@
     }
 
     /**
+     * Determines if this file can be written to.
+     */
+    @Override
+    protected boolean doIsWriteable() throws FileSystemException {
+        return file.canWrite();
+    }
+
+    /**
      * Returns the children of the file.
      */
     @Override
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.java
index fe479dd..ff86c02 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.java
@@ -35,12 +35,13 @@
     }
 
     /**
-     * Returns the root file for this file.
-     *
-     * @return The root file name.
+     * Builds the root URI for this file name.
      */
-    public String getRootFile() {
-        return rootFile;
+    @Override
+    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword) {
+        buffer.append(getScheme());
+        buffer.append("://");
+        buffer.append(rootFile);
     }
 
     /**
@@ -56,6 +57,15 @@
     }
 
     /**
+     * Returns the root file for this file.
+     *
+     * @return The root file name.
+     */
+    public String getRootFile() {
+        return rootFile;
+    }
+
+    /**
      * Returns the decoded URI of the file.
      *
      * @return the FileName as a URI.
@@ -68,14 +78,4 @@
             return super.getURI();
         }
     }
-
-    /**
-     * Builds the root URI for this file name.
-     */
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword) {
-        buffer.append(getScheme());
-        buffer.append("://");
-        buffer.append(rootFile);
-    }
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.java
index 44c609c..b012932 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.java
@@ -30,6 +30,26 @@
  */
 public abstract class LocalFileNameParser extends AbstractFileNameParser {
 
+    protected abstract FileName createFileName(String scheme, final String rootFile, final String path,
+            final FileType type);
+
+    /**
+     * Pops the root prefix off a URI, which has had the scheme removed.
+     *
+     * @param name the URI to modify.
+     * @param uri the whole URI for error reporting.
+     * @return the root prefix extracted.
+     * @throws FileSystemException if an error occurs.
+     */
+    protected abstract String extractRootPrefix(final String uri, final StringBuilder name) throws FileSystemException;
+
+    private String[] getSchemes(final VfsComponentContext context, final FileName base, final String uri) {
+        if (context == null) {
+            return new String[] { base != null ? base.getScheme() : URI.create(uri).getScheme() };
+        }
+        return context.getFileSystemManager().getSchemes();
+    }
+
     /**
      * Determines if a name is an absolute file name.
      *
@@ -48,16 +68,6 @@
         }
     }
 
-    /**
-     * Pops the root prefix off a URI, which has had the scheme removed.
-     *
-     * @param name the URI to modify.
-     * @param uri the whole URI for error reporting.
-     * @return the root prefix extracted.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected abstract String extractRootPrefix(final String uri, final StringBuilder name) throws FileSystemException;
-
     @Override
     public FileName parseUri(final VfsComponentContext context, final FileName base, final String uri)
             throws FileSystemException {
@@ -87,14 +97,4 @@
 
         return createFileName(scheme, rootFile, path, fileType);
     }
-
-    private String[] getSchemes(final VfsComponentContext context, final FileName base, final String uri) {
-        if (context == null) {
-            return new String[] { base != null ? base.getScheme() : URI.create(uri).getScheme() };
-        }
-        return context.getFileSystemManager().getSchemes();
-    }
-
-    protected abstract FileName createFileName(String scheme, final String rootFile, final String path,
-            final FileType type);
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java
index 3067377..edb353d 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java
@@ -32,11 +32,11 @@
  */
 final class LocalFileRandomAccessContent extends AbstractRandomAccessContent {
 
+    private final static int BYTE_VALUE_MASK = 0xFF;
     // private final LocalFile localFile;
     private final RandomAccessFile raf;
-    private final InputStream rafis;
 
-    private final static int BYTE_VALUE_MASK = 0xFF;
+    private final InputStream rafis;
 
     LocalFileRandomAccessContent(final File localFile, final RandomAccessMode mode) throws FileSystemException {
         super(mode);
@@ -45,6 +45,21 @@
             raf = new RandomAccessFile(localFile, mode.getModeString());
             rafis = new InputStream() {
                 @Override
+                public int available() throws IOException {
+                    final long available = raf.length() - raf.getFilePointer();
+                    if (available > Integer.MAX_VALUE) {
+                        return Integer.MAX_VALUE;
+                    }
+
+                    return (int) available;
+                }
+
+                @Override
+                public void close() throws IOException {
+                    raf.close();
+                }
+
+                @Override
                 public int read() throws IOException {
                     try {
                         return raf.readByte() & BYTE_VALUE_MASK;
@@ -54,17 +69,6 @@
                 }
 
                 @Override
-                public long skip(final long n) throws IOException {
-                    raf.seek(raf.getFilePointer() + n);
-                    return n;
-                }
-
-                @Override
-                public void close() throws IOException {
-                    raf.close();
-                }
-
-                @Override
                 public int read(final byte[] b) throws IOException {
                     return raf.read(b);
                 }
@@ -75,13 +79,9 @@
                 }
 
                 @Override
-                public int available() throws IOException {
-                    final long available = raf.length() - raf.getFilePointer();
-                    if (available > Integer.MAX_VALUE) {
-                        return Integer.MAX_VALUE;
-                    }
-
-                    return (int) available;
+                public long skip(final long n) throws IOException {
+                    raf.seek(raf.getFilePointer() + n);
+                    return n;
                 }
             };
         } catch (final FileNotFoundException e) {
@@ -90,13 +90,18 @@
     }
 
     @Override
+    public void close() throws IOException {
+        raf.close();
+    }
+
+    @Override
     public long getFilePointer() throws IOException {
         return raf.getFilePointer();
     }
 
     @Override
-    public void seek(final long pos) throws IOException {
-        raf.seek(pos);
+    public InputStream getInputStream() throws IOException {
+        return rafis;
     }
 
     @Override
@@ -105,8 +110,8 @@
     }
 
     @Override
-    public void close() throws IOException {
-        raf.close();
+    public boolean readBoolean() throws IOException {
+        return raf.readBoolean();
     }
 
     @Override
@@ -130,21 +135,21 @@
     }
 
     @Override
+    public void readFully(final byte[] b) throws IOException {
+        raf.readFully(b);
+    }
+
+    @Override
+    public void readFully(final byte[] b, final int off, final int len) throws IOException {
+        raf.readFully(b, off, len);
+    }
+
+    @Override
     public int readInt() throws IOException {
         return raf.readInt();
     }
 
     @Override
-    public int readUnsignedByte() throws IOException {
-        return raf.readUnsignedByte();
-    }
-
-    @Override
-    public int readUnsignedShort() throws IOException {
-        return raf.readUnsignedShort();
-    }
-
-    @Override
     public long readLong() throws IOException {
         return raf.readLong();
     }
@@ -155,23 +160,13 @@
     }
 
     @Override
-    public boolean readBoolean() throws IOException {
-        return raf.readBoolean();
+    public int readUnsignedByte() throws IOException {
+        return raf.readUnsignedByte();
     }
 
     @Override
-    public int skipBytes(final int n) throws IOException {
-        return raf.skipBytes(n);
-    }
-
-    @Override
-    public void readFully(final byte[] b) throws IOException {
-        raf.readFully(b);
-    }
-
-    @Override
-    public void readFully(final byte[] b, final int off, final int len) throws IOException {
-        raf.readFully(b, off, len);
+    public int readUnsignedShort() throws IOException {
+        return raf.readUnsignedShort();
     }
 
     @Override
@@ -180,48 +175,18 @@
     }
 
     @Override
-    public void writeDouble(final double v) throws IOException {
-        raf.writeDouble(v);
+    public void seek(final long pos) throws IOException {
+        raf.seek(pos);
     }
 
     @Override
-    public void writeFloat(final float v) throws IOException {
-        raf.writeFloat(v);
+    public void setLength(final long newLength) throws IOException {
+        raf.setLength(newLength);
     }
 
     @Override
-    public void write(final int b) throws IOException {
-        raf.write(b);
-    }
-
-    @Override
-    public void writeByte(final int v) throws IOException {
-        raf.writeByte(v);
-    }
-
-    @Override
-    public void writeChar(final int v) throws IOException {
-        raf.writeChar(v);
-    }
-
-    @Override
-    public void writeInt(final int v) throws IOException {
-        raf.writeInt(v);
-    }
-
-    @Override
-    public void writeShort(final int v) throws IOException {
-        raf.writeShort(v);
-    }
-
-    @Override
-    public void writeLong(final long v) throws IOException {
-        raf.writeLong(v);
-    }
-
-    @Override
-    public void writeBoolean(final boolean v) throws IOException {
-        raf.writeBoolean(v);
+    public int skipBytes(final int n) throws IOException {
+        return raf.skipBytes(n);
     }
 
     @Override
@@ -235,27 +200,62 @@
     }
 
     @Override
+    public void write(final int b) throws IOException {
+        raf.write(b);
+    }
+
+    @Override
+    public void writeBoolean(final boolean v) throws IOException {
+        raf.writeBoolean(v);
+    }
+
+    @Override
+    public void writeByte(final int v) throws IOException {
+        raf.writeByte(v);
+    }
+
+    @Override
     public void writeBytes(final String s) throws IOException {
         raf.writeBytes(s);
     }
 
     @Override
+    public void writeChar(final int v) throws IOException {
+        raf.writeChar(v);
+    }
+
+    @Override
     public void writeChars(final String s) throws IOException {
         raf.writeChars(s);
     }
 
     @Override
+    public void writeDouble(final double v) throws IOException {
+        raf.writeDouble(v);
+    }
+
+    @Override
+    public void writeFloat(final float v) throws IOException {
+        raf.writeFloat(v);
+    }
+
+    @Override
+    public void writeInt(final int v) throws IOException {
+        raf.writeInt(v);
+    }
+
+    @Override
+    public void writeLong(final long v) throws IOException {
+        raf.writeLong(v);
+    }
+
+    @Override
+    public void writeShort(final int v) throws IOException {
+        raf.writeShort(v);
+    }
+
+    @Override
     public void writeUTF(final String str) throws IOException {
         raf.writeUTF(str);
     }
-
-    @Override
-    public InputStream getInputStream() throws IOException {
-        return rafis;
-    }
-
-    @Override
-    public void setLength(final long newLength) throws IOException {
-        raf.setLength(newLength);
-    }
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.java
index 584e47d..9d1a8f4 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.java
@@ -43,6 +43,14 @@
     }
 
     /**
+     * Returns the capabilities of this file system.
+     */
+    @Override
+    protected void addCapabilities(final Collection<Capability> caps) {
+        caps.addAll(DefaultLocalFileProvider.capabilities);
+    }
+
+    /**
      * Creates a file object.
      */
     @Override
@@ -52,14 +60,6 @@
     }
 
     /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps) {
-        caps.addAll(DefaultLocalFileProvider.capabilities);
-    }
-
-    /**
      * Creates a temporary local copy of a file and its descendants.
      */
     @Override
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.java
index f35fbdb..e56f4ab 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.java
@@ -29,18 +29,6 @@
     }
 
     /**
-     * Factory method for creating name instances.
-     *
-     * @param path The file path.
-     * @param type The file type.
-     * @return The FileName.
-     */
-    @Override
-    public FileName createName(final String path, final FileType type) {
-        return new WindowsFileName(getScheme(), getRootFile(), path, type);
-    }
-
-    /**
      * Builds the root URI for this file name.
      */
     @Override
@@ -53,4 +41,16 @@
         }
         buffer.append(getRootFile());
     }
+
+    /**
+     * Factory method for creating name instances.
+     *
+     * @param path The file path.
+     * @param type The file type.
+     * @return The FileName.
+     */
+    @Override
+    public FileName createName(final String path, final FileType type) {
+        return new WindowsFileName(getScheme(), getRootFile(), path, type);
+    }
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.java
index 5ab3da7..68a2939 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.java
@@ -25,6 +25,41 @@
  */
 public class WindowsFileNameParser extends LocalFileNameParser {
 
+    @Override
+    protected FileName createFileName(final String scheme, final String rootFile, final String path,
+            final FileType type) {
+        return new WindowsFileName(scheme, rootFile, path, type);
+    }
+
+    /**
+     * Extracts a drive prefix from a path. Leading '/' chars have been removed.
+     */
+    private String extractDrivePrefix(final StringBuilder name) {
+        // Looking for <letter> ':' '/'
+        if (name.length() < 3) {
+            // Too short
+            return null;
+        }
+        final char ch = name.charAt(0);
+        if (ch == '/' || ch == ':') {
+            // Missing drive letter
+            return null;
+        }
+        if (name.charAt(1) != ':') {
+            // Missing ':'
+            return null;
+        }
+        if (name.charAt(2) != '/') {
+            // Missing separator
+            return null;
+        }
+
+        final String prefix = name.substring(0, 2);
+        name.delete(0, 2);
+
+        return prefix.intern();
+    }
+
     /**
      * Pops the root prefix off a URI, which has had the scheme removed.
      */
@@ -33,10 +68,34 @@
         return extractWindowsRootPrefix(uri, name);
     }
 
-    @Override
-    protected FileName createFileName(final String scheme, final String rootFile, final String path,
-            final FileType type) {
-        return new WindowsFileName(scheme, rootFile, path, type);
+    /**
+     * Extracts a UNC name from a path. Leading '/' chars have been removed.
+     */
+    private String extractUNCPrefix(final String uri, final StringBuilder name) throws FileSystemException {
+        // Looking for <name> '/' <name> ( '/' | <end> )
+
+        // Look for first separator
+        final int maxpos = name.length();
+        int pos = 0;
+        for (; pos < maxpos && name.charAt(pos) != '/'; pos++) {
+        }
+        pos++;
+        if (pos >= maxpos) {
+            throw new FileSystemException("vfs.provider.local/missing-share-name.error", uri);
+        }
+
+        // Now have <name> '/'
+        final int startShareName = pos;
+        for (; pos < maxpos && name.charAt(pos) != '/'; pos++) {
+        }
+        if (pos == startShareName) {
+            throw new FileSystemException("vfs.provider.local/missing-share-name.error", uri);
+        }
+
+        // Now have <name> '/' <name> ( '/' | <end> )
+        final String prefix = name.substring(0, pos);
+        name.delete(0, pos);
+        return prefix;
     }
 
     /**
@@ -71,63 +130,4 @@
 
         return "//" + extractUNCPrefix(uri, name);
     }
-
-    /**
-     * Extracts a drive prefix from a path. Leading '/' chars have been removed.
-     */
-    private String extractDrivePrefix(final StringBuilder name) {
-        // Looking for <letter> ':' '/'
-        if (name.length() < 3) {
-            // Too short
-            return null;
-        }
-        final char ch = name.charAt(0);
-        if (ch == '/' || ch == ':') {
-            // Missing drive letter
-            return null;
-        }
-        if (name.charAt(1) != ':') {
-            // Missing ':'
-            return null;
-        }
-        if (name.charAt(2) != '/') {
-            // Missing separator
-            return null;
-        }
-
-        final String prefix = name.substring(0, 2);
-        name.delete(0, 2);
-
-        return prefix.intern();
-    }
-
-    /**
-     * Extracts a UNC name from a path. Leading '/' chars have been removed.
-     */
-    private String extractUNCPrefix(final String uri, final StringBuilder name) throws FileSystemException {
-        // Looking for <name> '/' <name> ( '/' | <end> )
-
-        // Look for first separator
-        final int maxpos = name.length();
-        int pos = 0;
-        for (; pos < maxpos && name.charAt(pos) != '/'; pos++) {
-        }
-        pos++;
-        if (pos >= maxpos) {
-            throw new FileSystemException("vfs.provider.local/missing-share-name.error", uri);
-        }
-
-        // Now have <name> '/'
-        final int startShareName = pos;
-        for (; pos < maxpos && name.charAt(pos) != '/'; pos++) {
-        }
-        if (pos == startShareName) {
-            throw new FileSystemException("vfs.provider.local/missing-share-name.error", uri);
-        }
-
-        // Now have <name> '/' <name> ( '/' | <end> )
-        final String prefix = name.substring(0, pos);
-        name.delete(0, pos);
-        return prefix;
-    }
 }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.java
index fe8c3ba..20d8ce1 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.java
@@ -31,8 +31,8 @@
  */
 public class UrlFileNameParser extends AbstractFileNameParser {
 
-    private final URLFileNameParser url = new URLFileNameParser(80);
-    private final GenericFileNameParser generic = new GenericFileNameParser();
+    private final URLFileNameParser urlFileNameParser = new URLFileNameParser(80);
+    private final GenericFileNameParser genericFileNameParser = new GenericFileNameParser();
 
     public UrlFileNameParser() {
     }
@@ -55,14 +55,14 @@
     public FileName parseUri(final VfsComponentContext context, final FileName base, final String uri)
             throws FileSystemException {
         if (isUrlBased(base, uri)) {
-            return url.parseUri(context, base, uri);
+            return urlFileNameParser.parseUri(context, base, uri);
         }
 
-        return generic.parseUri(context, base, uri);
+        return genericFileNameParser.parseUri(context, base, uri);
     }
 
     /**
-     * Guess if the given file name is an URL with host or not.
+     * Guess if the given file name is a URL with host or not.
      * <p>
      * VFS treats such URLs differently.
      * </p>
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlFileNameParserTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlFileNameParserTest.java
index 6baadda..d99faf6 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlFileNameParserTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlFileNameParserTest.java
@@ -25,9 +25,7 @@
 
 public class UrlFileNameParserTest {
 
-    @Test
-    public void testJira739() throws Exception {
-        final String uriStr = "maprfs:///";
+    private void testJira739(final String uriStr) throws Exception {
         // Check that we have a valid URI
         final URI uri = new URI(uriStr);
         // VFS-739 shows that parseUri throws an NPE:
@@ -35,4 +33,19 @@
         Assert.assertEquals(uriStr, fileName.getURI());
         Assert.assertEquals(uri.getScheme(), fileName.getScheme());
     }
+
+    @Test
+    public void testJira739_scheme_file() throws Exception {
+        testJira739("file:///");
+    }
+
+    @Test
+    public void testJira739_scheme_maprfs() throws Exception {
+        testJira739("maprfs:///");
+    }
+
+    @Test
+    public void testJira739_scheme_ram() throws Exception {
+        testJira739("ram:///");
+    }
 }
diff --git a/commons-vfs2/src/test/resources/test-data/1 1.txt b/commons-vfs2/src/test/resources/test-data/1 1.txt
new file mode 100644
index 0000000..7c4a013
--- /dev/null
+++ b/commons-vfs2/src/test/resources/test-data/1 1.txt
@@ -0,0 +1 @@
+aaa
\ No newline at end of file
diff --git "a/commons-vfs2/src/test/resources/test-data/\345\245\275.txt" "b/commons-vfs2/src/test/resources/test-data/\345\245\275.txt"
new file mode 100644
index 0000000..7c4a013
--- /dev/null
+++ "b/commons-vfs2/src/test/resources/test-data/\345\245\275.txt"
@@ -0,0 +1 @@
+aaa
\ No newline at end of file
