diff --git a/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java b/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java
index ac14deb..8419e7b 100644
--- a/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java
+++ b/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java
@@ -26,6 +26,8 @@
 import java.util.Enumeration;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
@@ -151,29 +153,7 @@
 
         uploadData = null;
 
-        String enc = request.getCharacterEncoding();
-        
-        if (enc == null && !parserService.getParameterEncoding().equals(ParserService.PARAMETER_ENCODING_DEFAULT )) {
-            try
-            {  
-                // no-op if data was read (parameter, POST..) 
-                request.setCharacterEncoding( parserService.getParameterEncoding() );
-                enc = request.getCharacterEncoding();
-                if (enc != null) {
-                    getLogger().debug("Set the request encoding successfully to parameterEncoding of parser: "+enc );
-                } else {
-                    getLogger().warn("Unsuccessfully (data read happened) tried to set the request encoding to "+ parserService.getParameterEncoding()  );
-                }
-            }
-            catch ( UnsupportedEncodingException e )
-            {
-                getLogger().error("Found only unsupported encoding "+ e.getMessage());
-            }
-        }
-        
-        setCharacterEncoding(enc != null
-                ? enc
-                : parserService.getParameterEncoding());
+        handleEncoding( request );
 
         String contentType = request.getHeader("Content-type");
 
@@ -210,6 +190,22 @@
                     request.getParameterValues(paramName));
         }
 
+        handlePathInfo( request );
+
+        this.request = request;
+
+        if (getLogger().isDebugEnabled())
+        {
+            getLogger().debug("Parameters found in the Request:");
+            for (String key : keySet())
+            {
+                getLogger().debug("Key: " + key + " -> " + getString(key));
+            }
+        }
+    }
+
+    private void handlePathInfo( HttpServletRequest request )
+    {
         // Also cache any pathinfo variables that are passed around as
         // if they are query string data.
         try
@@ -245,17 +241,33 @@
             // things that depend on it being right will fail later
             // and should be caught later.
         }
+    }
 
-        this.request = request;
-
-        if (getLogger().isDebugEnabled())
-        {
-            getLogger().debug("Parameters found in the Request:");
-            for (String key : keySet())
+    private void handleEncoding( HttpServletRequest request )
+    {
+        String enc = request.getCharacterEncoding();
+        
+        if (enc == null && !parserService.getParameterEncoding().equals(ParserService.PARAMETER_ENCODING_DEFAULT )) {
+            try
+            {  
+                // no-op if data was read (parameter, POST..) 
+                request.setCharacterEncoding( parserService.getParameterEncoding() );
+                enc = request.getCharacterEncoding();
+                if (enc != null) {
+                    getLogger().debug("Set the request encoding successfully to parameterEncoding of parser: "+enc );
+                } else {
+                    getLogger().warn("Unsuccessfully (data read happened) tried to set the request encoding to "+ parserService.getParameterEncoding()  );
+                }
+            }
+            catch ( UnsupportedEncodingException e )
             {
-                getLogger().debug("Key: " + key + " -> " + getString(key));
+                getLogger().error("Found only unsupported encoding "+ e.getMessage());
             }
         }
+        
+        setCharacterEncoding(enc != null
+                ? enc
+                : parserService.getParameterEncoding());
     }
 
     /**
@@ -340,7 +352,7 @@
         }
         catch ( ClassCastException e )
         {
-            return null;
+            return new Part[0];// empty array
         }
     }
     
@@ -353,4 +365,29 @@
                             collect( Collectors.toList() );
 
     }
+
+    @Override
+    public String getFileName( Part part )
+    {
+        final String partHeader = part.getHeader("content-disposition");
+        Pattern regex = Pattern.compile("filename\\*?=\"?(.[^\"]+)\"?"); // rfc2183, rfc5987 quoted string, but attachments may have not?
+        for (String content : partHeader.split(";")) {
+            if (content.trim().contains( "filename" )) { // could also filename*=<encoding>''<value>
+                String fnTmp = "";
+                String srcStr = content.trim();
+                Matcher regexMatcher = regex.matcher(srcStr);
+                if (regexMatcher.find()) {
+                    fnTmp = regexMatcher.group(1);
+                    if (getLogger().isDebugEnabled()) {
+                        getLogger().debug( "matched fileName:" + fnTmp );
+                    }
+                } else { // last resort
+                    fnTmp  = srcStr.substring(srcStr.indexOf('=')+1).replace( "\"", "" );
+                    getLogger().debug( "second fileName match:" + fnTmp );
+                }
+                return fnTmp.trim();
+            }
+        }
+        return null;
+    }
 }
diff --git a/src/java/org/apache/fulcrum/parser/ParameterParser.java b/src/java/org/apache/fulcrum/parser/ParameterParser.java
index 331de69..c55edfc 100644
--- a/src/java/org/apache/fulcrum/parser/ParameterParser.java
+++ b/src/java/org/apache/fulcrum/parser/ParameterParser.java
@@ -128,4 +128,12 @@
      * @return Collection<Part>
      */
     Collection<Part> getParts();
+    
+    /**
+     * Convenience fileName utility, which extracts the filename from header
+     *  
+     * 
+     * @return the fileName String object.
+     */
+    String getFileName(Part part);
 }
diff --git a/src/test/org/apache/fulcrum/parser/ParameterParserTest.java b/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
index 9625f38..abda103 100644
--- a/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
+++ b/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
@@ -47,7 +47,7 @@
 {
     private ParameterParser parameterParser = null;
     
-    private Part test;
+    private Part mockTest;
 
     @Before
     public void setUpBefore() throws Exception
@@ -57,7 +57,7 @@
             ParserService parserService = (ParserService)this.lookup(ParserService.ROLE);
             parameterParser = parserService.getParser(DefaultParameterParser.class);
             
-            test = new Part()
+            mockTest = new Part()
             {
 
                 @Override
@@ -104,6 +104,11 @@
                 @Override
                 public String getHeader(String name)
                 {
+                    if (name.equals( "content-disposition")) {
+                        //return "form-data; name=\"file\"; filename*=utf-8''%c2%a3%20uploadedFileName.ext";
+                        //return "attachment; filename=genome.jpeg;";
+                        return "form-data; name=\"file\"; filename=\"uploadedFileName.ext\"";
+                    }
                     return null;
                 }
 
@@ -158,7 +163,7 @@
         assertEquals("keySet() is not empty!", 0, parameterParser.keySet().size());
 
         // Push this into the parser using DefaultParameterParser's add() method.
-        ((DefaultParameterParser) parameterParser).add("upload-field", test);
+        ((DefaultParameterParser) parameterParser).add("upload-field", mockTest);
 
         assertEquals("Part not found in keySet()!", 1, parameterParser.keySet().size());
 
@@ -185,6 +190,30 @@
         assertNull("The returned should be null because a String is not a Part", parameterParser.getPart( "other-field" ));
         Part uploadField = parameterParser.getPart( "upload-field" );
         assertTrue(uploadField.getName().equals( "upload-field" ));
+
+    }
+    
+    /**
+     * This Test method checks the DefaultParameterParser which filename convenience mapping from Part.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testFilename4Path() throws Exception
+    {
+        assertEquals("keySet() is not empty!", 0, parameterParser.keySet().size());
+        
+        // Push this into the parser using DefaultParameterParser's add() method.
+        ((DefaultParameterParser) parameterParser).add("upload-field", mockTest);
+        
+        assertTrue(parameterParser.containsKey("upload-field"));
+        
+        Part uploadField = parameterParser.getPart( "upload-field" );
+        assertEquals("upload-field", uploadField.getName());
+        
+        String fileName = parameterParser.getFileName( uploadField );
+        assertEquals("uploadedFileName.ext",fileName);
+        
     }
 
 }
