ERXStringUtilities.urlDecode(String) uses URLDecoder.decode(), which, despite it's name, is for decoding *form data* in URLs, e.g., HTML Form fields submitted using a HTTP "get" instead of a "post". 

URLDecoder.decode() will decode "+" characters into spaces, which is just going to cause you the same problem you are trying to fix, but now it will be on files that had a plus "+" in their name - probably less likely, but still.

You can think of this as the inverse of how when you when you search with Google and look at the URL in your browser, each " " (space) character in your search string is replaced with "+" - *not* "%20". The Google search is a form being submitted via a HTTP get request.

I believe that the *correct* way to decode the "actualWebPath" variable is to use URI.getPath().

The Javadoc in ERXStringUtilities does not make this clear, but reading the following documentation should:

http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding
http://docs.oracle.com/javase/6/docs/api/java/net/URLDecoder.html#decode(java.lang.String,%20java.lang.String)
http://docs.oracle.com/javase/6/docs/api/java/net/URI.html