Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Dispatcher.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Dispatcher.java	(revision 2501)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/Dispatcher.java	(revision 2502)
@@ -45,5 +45,4 @@
 import net.fckeditor.tool.Utils;
 import net.fckeditor.tool.UtilsFile;
-import net.fckeditor.tool.UtilsResponse;
 
 import org.apache.commons.fileupload.FileItem;
@@ -103,4 +102,5 @@
 		GetResponse getResponse = null;
 		// check parameters
+		// TODO should we move the parameter check to Context -> throws an exception?
 		if (!CommandHandler.isValidForGet(context.getCommandStr()))
 			getResponse = GetResponse.getErrorInvalidCommand();
@@ -111,6 +111,6 @@
 		else {
 			
-			ResourceType type = ResourceType.getDefaultResourceType(context.getTypeStr());
-			CommandHandler command = CommandHandler.getCommand(context.getCommandStr());
+			ResourceType type = context.getDefaultResourceType();
+			CommandHandler command = context.getCommand();
 			
 			// check permissions for user action
@@ -136,8 +136,6 @@
 					} else if (command.equals(CommandHandler.GET_FOLDERS) || command.equals(CommandHandler.GET_FOLDERS_AND_FILES)) {
 						// TODO I don't like this code, it has to be more generic
-						String responseUrl = UtilsResponse.constructResponseUrl( 
-								ConnectorHandler.getUserFilesPath(),
-								"/".concat(context.getTypeStr().toLowerCase()), context.getCurrentFolderStr());
-						getResponse = getFoldersAndFiles(command, type, context.getCurrentFolderStr(), responseUrl);
+						String responseUrl = context.buildUrl(ConnectorHandler.getUserFilesPath());
+						getResponse = getFoldersAndFiles(command, type, context.getCurrentFolderStr(), responseUrl); 
 					} else 
 						getResponse = GetResponse.getErrorUnknown();
@@ -215,5 +213,6 @@
 			uploadResponse = UploadResponse.getErrorFileUploadDisabled();
 
-		// check parameters
+		// check parameters  
+		// TODO should we move the parameter check to Context -> throws an exception?
 		else if (!CommandHandler.isValidForPost(context.getCommandStr()))
 			uploadResponse = UploadResponse.getErrorInvalidCommand();
@@ -225,5 +224,5 @@
 
 			// call the Connector#fileUpload
-			ResourceType type = ResourceType.getDefaultResourceType(context.getTypeStr());
+			ResourceType type = context.getDefaultResourceType();
 			FileItemFactory factory = new DiskFileItemFactory();
 			ServletFileUpload upload = new ServletFileUpload(factory);
@@ -232,5 +231,5 @@
 				// We upload just one file at the same time
 				FileItem uplFile = items.get(0);
-				// check the extension
+				// check the extension (can't be done if QuickUpload)
 				if (!isQuickUpload && !ExtensionsHandler.isAllowed(type, FilenameUtils.getExtension(uplFile.getName())))
 					uploadResponse = UploadResponse.getErrorInvalidExtension();
@@ -247,8 +246,5 @@
 					}
 					// TODO I don't like this either
-					String responseUrl = UtilsResponse.constructResponseUrl( 
-							ConnectorHandler.getUserFilesPath(), 
-							(type == null) ? null : "/".concat(context.getTypeStr().toLowerCase()), 
-							context.getCurrentFolderStr().concat("/").concat(newFileName));
+					String responseUrl = context.buildUrl(ConnectorHandler.getUserFilesPath());
 					if (fileName.equals(newFileName))
 						uploadResponse = new UploadResponse(UploadResponse.SC_OK, responseUrl);
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/impl/SimpleFileSystemConnector.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/impl/SimpleFileSystemConnector.java	(revision 2501)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/connector/impl/SimpleFileSystemConnector.java	(revision 2502)
@@ -42,4 +42,6 @@
 import net.fckeditor.handlers.ConnectorHandler;
 import net.fckeditor.handlers.ResourceType;
+import net.fckeditor.requestcycle.ThreadLocalData;
+import net.fckeditor.tool.Utils;
 import net.fckeditor.tool.UtilsFile;
 
@@ -59,4 +61,5 @@
 // FIXME the name is inappropriate, it should be ContextFileSystemConnector
 // we should provide another implementation which leads outside of the context
+// HINT: we should keep this name because it can run without any PathBuilder implementation
 public class SimpleFileSystemConnector implements Connector {
 	private static final Logger logger = LoggerFactory.getLogger(SimpleFileSystemConnector.class);
@@ -182,6 +185,11 @@
 	
 	private static File getAndCreateResourceTypeDir(final String baseDir, final ResourceType type) {
-		File dir = new File(servletContext.getRealPath(baseDir), type.getPath());
-		if (!dir.exists())
+		String folderStr = new String(baseDir);
+		String contextPath = ThreadLocalData.getServletRequest().getContextPath();
+		//we have to check, if there is a context path and cut it, it's obsolete for the filesystem
+		if (Utils.isNotEmpty(contextPath))
+			folderStr = folderStr.substring(contextPath.length());
+		File dir = new File(servletContext.getRealPath(folderStr), type.getPath());
+		if (!dir.exists()) 
 			dir.mkdirs();
 		return dir;
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/handlers/ConnectorHandler.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/handlers/ConnectorHandler.java	(revision 2501)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/handlers/ConnectorHandler.java	(revision 2502)
@@ -80,5 +80,4 @@
 
 	/**
-	 * TODO change JavaDoc
 	 * Getter for the value to instruct the connector to return the full URL of
 	 * a file/folder in the XML response rather than the absolute URL.
@@ -87,4 +86,8 @@
 	 *         set else <code>false</code>.
 	 */
+	public static boolean isFullUrl() {
+		return Boolean.parseBoolean(PropertiesLoader.getProperty("connector.fullUrl"));
+	}
+	
 	public static String getBaseUrl() {
 		return PropertiesLoader.getProperty("connector.baseUrl");
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/requestcycle/Context.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/requestcycle/Context.java	(revision 2501)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/requestcycle/Context.java	(revision 2502)
@@ -23,4 +23,7 @@
 import javax.servlet.http.HttpServletRequest;
 
+import net.fckeditor.handlers.CommandHandler;
+import net.fckeditor.handlers.ConnectorHandler;
+import net.fckeditor.handlers.ResourceType;
 import net.fckeditor.tool.Utils;
 
@@ -66,4 +69,8 @@
 	}
 	
+	public ResourceType getDefaultResourceType() {
+		return ResourceType.getDefaultResourceType(typeStr);
+	}
+	
 	/**
 	 * @return the commandStr
@@ -71,4 +78,8 @@
 	public String getCommandStr() {
 		return commandStr;
+	}
+	
+	public CommandHandler getCommand() {
+		return CommandHandler.valueOf(commandStr);
 	}
 	
@@ -85,3 +96,35 @@
 		logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
 	}
+	
+	/**
+	 * @return
+	 */
+	public String buildCurrentTypeDir() {
+		StringBuffer sb = new StringBuffer();
+		if (Utils.isNotEmpty(typeStr))
+			sb.append(getDefaultResourceType().getPath());
+		if (Utils.isNotEmpty(currentFolderStr))
+			sb.append(currentFolderStr);
+		if (!sb.toString().endsWith("/"))
+			sb.append("/");
+		return sb.toString();
+	}
+	
+	public String buildUrl(final String baseDir) {
+    	StringBuffer sb = new StringBuffer();
+    	HttpServletRequest request = ThreadLocalData.getServletRequest();
+
+		if (Utils.isNotEmpty(ConnectorHandler.getBaseUrl())) {
+			sb.append(ConnectorHandler.getBaseUrl());
+		} else if (ConnectorHandler.isFullUrl()) {
+    		String address = request.getRequestURL().toString();
+    		sb.append(address.substring(0, address.indexOf('/', 8)));
+    	}
+    	    	
+    	sb.append(baseDir);
+    	String currentTypeDir = buildCurrentTypeDir();
+    	if (!currentTypeDir.equals("/"))
+    		sb.append(buildCurrentTypeDir());
+    	return sb.toString();
+	}
 }
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/requestcycle/impl/ContextPathBuilder.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/requestcycle/impl/ContextPathBuilder.java	(revision 2501)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/requestcycle/impl/ContextPathBuilder.java	(revision 2502)
@@ -38,12 +38,6 @@
 	 */
 	public String getUserFilesPath() {
-		return ThreadLocalData.getServletRequest().getContextPath().concat(ConnectorHandler.getDefaultUserFilesPath());
-	}
-
-	/* (non-Javadoc)
-	 * @see net.fckeditor.requestcycle.UserPathBuilder#getUrlPath()
-	 */
-	public String getUrlPath() {
-		return null;
+		String path = ThreadLocalData.getServletRequest().getContextPath().concat(ConnectorHandler.getDefaultUserFilesPath());
+		return path;
 	}
 	
@@ -54,5 +48,3 @@
 		return ConnectorHandler.getDefaultUserFilesPath();
 	}
-
-	
 }
Index: /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/response/GetResponse.java
===================================================================
--- /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/response/GetResponse.java	(revision 2501)
+++ /FCKeditor.Java/branches/2.5-test/java-core/src/main/java/net/fckeditor/response/GetResponse.java	(revision 2502)
@@ -175,5 +175,4 @@
 	 */
 	public void setFolders(final List<String> dirs) {
-
 		if (foldersElement != null) {
 			Element parent = (Element) foldersElement.getParentNode();
@@ -197,5 +196,4 @@
 	 */
 	public void setFiles(final List<Map<String, Object>> files) {
-		
 		if (filesElement != null) {
 			Element parent = (Element) filesElement.getParentNode();
