diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java
index 68dd8c49db186ba72955d68e3fbe656c78e72103..8b3c81e2be11c953fd6605455c3e850caffda1dc 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/cifs/DataSetCifsView.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server.cifs;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.Properties;
 
 import org.alfresco.jlan.server.SrvSession;
 import org.alfresco.jlan.server.auth.ClientInfo;
@@ -50,7 +51,6 @@ import ch.systemsx.cisd.openbis.dss.generic.server.ftp.DSSFileSystemView;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverConfig;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolverRegistry;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.NonExistingFtpFile;
-import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.V3FtpPathResolverRegistry;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
@@ -91,10 +91,11 @@ public class DataSetCifsView implements DiskInterface
     public DeviceContext createContext(String shareName, ConfigElement args) throws DeviceContextException
     {
         operationLog.info("create context for share " + shareName + ": " + Utils.render(args));
-        FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(CifsServerConfig.getServerProperties());
+        Properties serverProperties = CifsServerConfig.getServerProperties();
+        FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(serverProperties);
         resolverConfig.logStartupInfo("CIFS");
-        // pathResolverRegistry = new FtpPathResolverRegistry(resolverConfig);
-        pathResolverRegistry = new V3FtpPathResolverRegistry(resolverConfig);
+
+        pathResolverRegistry = resolverConfig.getResolverRegistry();
         return new DiskDeviceContext(shareName);
     }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverConfig.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverConfig.java
index e553f1105b93772109fc8a929e5c952875c8d454..54a36fddf970d7e179cfaa7e6d0fba37c551fb2e 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverConfig.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverConfig.java
@@ -19,38 +19,40 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Map.Entry;
+import java.util.Properties;
 
 import org.apache.log4j.Logger;
 
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.properties.ExtendedProperties;
 import ch.systemsx.cisd.common.properties.PropertyUtils;
+import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.V3FtpPathResolverRegistry;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 public class FtpPathResolverConfig
 {
     final static String DATASET_DISPLAY_TEMPLATE_KEY = "dataset.display.template";
-    
+
     final static String SHOW_PARENTS_AND_CHILDREN_KEY = "dataset.show-parents-and-children";
-    
+
     final static String DATASET_FILELIST_SUBPATH_KEY = "dataset.filelist.subpath.";
 
     final static String DATASET_FILELIST_FILTER_KEY = "dataset.filelist.filter.";
-   
+
+    final static String PATH_RESOLVER_KEY = "resolver-class";
+
     private static final String DEFAULT_DATASET_TEMPLATE = "${dataSetCode}";
-    
+
     private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
             FtpPathResolverConfig.class);
-    
+
     private boolean showParentsAndChildren;
-    
+
     private String dataSetDisplayTemplate = "";
 
     private Map<String /* dataset type */, String /* path */> fileListSubPaths =
@@ -59,12 +61,16 @@ public class FtpPathResolverConfig
     private Map<String /* dataset type */, String /* filter pattern */> fileListFilters =
             new HashMap<String, String>();
 
+    private final String resolverClass;
+
     public FtpPathResolverConfig(Properties props)
     {
         dataSetDisplayTemplate =
                 PropertyUtils.getProperty(props, DATASET_DISPLAY_TEMPLATE_KEY, DEFAULT_DATASET_TEMPLATE);
         showParentsAndChildren = PropertyUtils.getBoolean(props, SHOW_PARENTS_AND_CHILDREN_KEY, false);
 
+        resolverClass = PropertyUtils.getProperty(props, PATH_RESOLVER_KEY, V3FtpPathResolverRegistry.class.getCanonicalName());
+
         ExtendedProperties fileListSubPathProps =
                 ExtendedProperties.getSubset(props, DATASET_FILELIST_SUBPATH_KEY, true);
         for (Object key : fileListSubPathProps.keySet())
@@ -84,7 +90,7 @@ public class FtpPathResolverConfig
             fileListFilters.put(dataSetType, filter);
         }
     }
-    
+
     public String getDataSetDisplayTemplate()
     {
         return dataSetDisplayTemplate;
@@ -104,7 +110,7 @@ public class FtpPathResolverConfig
     {
         return Collections.unmodifiableMap(fileListFilters);
     }
-    
+
     public void logStartupInfo(String serverType)
     {
         operationLog.info(serverType + " Server data set display template : " + dataSetDisplayTemplate);
@@ -124,6 +130,33 @@ public class FtpPathResolverConfig
                             + "set type '%s' : '%s'", serverType, filterEntry.getKey(), filterEntry.getValue());
             operationLog.info(message);
         }
+    }
 
+    public IFtpPathResolverRegistry getResolverRegistry()
+    {
+        try
+        {
+            Class<?> clazz = Class.forName(resolverClass);
+            Object instance = clazz.newInstance();
+            IFtpPathResolverRegistry registry = (IFtpPathResolverRegistry) instance;
+            registry.initialize(this);
+            operationLog.info("Succesfully initialized path resolver of type " + registry.getClass().getName());
+            return registry;
+        } catch (ClassNotFoundException ex)
+        {
+            throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't find class " + resolverClass, ex);
+        } catch (InstantiationException ex)
+        {
+            throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't instantiate object of a class " + resolverClass, ex);
+        } catch (IllegalAccessException ex)
+        {
+            throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't instantiate object of a class " + resolverClass, ex);
+        } catch (ClassCastException ex)
+        {
+            throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't cast object of a class " + resolverClass + " to "
+                    + IFtpPathResolverRegistry.class.getName(),
+                    ex);
+        }
     }
+
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverRegistry.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverRegistry.java
index 8f92344672f9ba3beda06abca53721948f8e244d..92ab079277b377fba8e6913ca30382fb29b88137 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverRegistry.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverRegistry.java
@@ -46,7 +46,8 @@ public class FtpPathResolverRegistry implements IFtpPathResolverRegistry
     /**
      * initializes the registry with all known {@link IFtpPathResolver}-s.
      */
-    public FtpPathResolverRegistry(FtpPathResolverConfig config)
+    @Override
+    public void initialize(FtpPathResolverConfig config)
     {
         pathResolvers.add(new RootFolderResolver());
         pathResolvers.add(new SpaceFolderResolver());
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpServer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpServer.java
index 8fd9eb20ceb88ed64b29214d951ecffb1bfac9e5..2a46bac0650e4c3ee2c97efcfa29aa4667df3b85 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpServer.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpServer.java
@@ -77,7 +77,6 @@ import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.properties.PropertyParametersUtil;
 import ch.systemsx.cisd.common.utilities.SystemTimeProvider;
-import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.V3FtpPathResolverRegistry;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil;
 import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
@@ -121,8 +120,7 @@ public class FtpServer implements FileSystemFactory, org.apache.sshd.server.File
                 DssPropertyParametersUtil.loadServiceProperties(), "ftp.server", true).getProperties();
         this.config = new FtpServerConfig(ftpProperties);
         FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(ftpProperties);
-        this.pathResolverRegistry = new V3FtpPathResolverRegistry(resolverConfig);
-        // this.pathResolverRegistry = new FtpPathResolverRegistry(resolverConfig);
+        this.pathResolverRegistry = resolverConfig.getResolverRegistry();
 
         if (config.isStartServer())
         {
@@ -239,7 +237,6 @@ public class FtpServer implements FileSystemFactory, org.apache.sshd.server.File
         return s;
     }
 
-    @SuppressWarnings("unchecked")
     private List<NamedFactory<Command>> creatSubsystemFactories()
     {
         return Arrays.<NamedFactory<Command>> asList(new SftpSubsystem.Factory());
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/IFtpPathResolverRegistry.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/IFtpPathResolverRegistry.java
index 54357d21990029ac85b70c4eeeeaec06c1f57d69..a68d0081fc813a97ece994a9b09e60788216e91a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/IFtpPathResolverRegistry.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/IFtpPathResolverRegistry.java
@@ -24,6 +24,11 @@ import org.apache.ftpserver.ftplet.FtpFile;
 public interface IFtpPathResolverRegistry
 {
 
+    /**
+     * Method called once to initialize object
+     */
+    void initialize(FtpPathResolverConfig config);
+
     /**
      * Returns an {@link FtpFile} for <var>path</var>.
      * <p>
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java
index 41e76ba56aa34bc120c15c4b24f1ab5e166cb021..19adef5b9648e87ad4c42186cb7796bd5ef16f43 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/v3/V3FtpPathResolverRegistry.java
@@ -19,15 +19,12 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3;
 import org.apache.ftpserver.ftplet.FtpFile;
 import org.apache.log4j.Logger;
 
-import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverConfig;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext;
-import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolver;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolverRegistry;
 import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile;
-import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 
 /**
  * A registry of ftp resolvers. It keeps the style of old-style resolver regisrty, but actually only calls itself root resolver.
@@ -40,19 +37,8 @@ public class V3FtpPathResolverRegistry implements IFtpPathResolverRegistry
     private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
             V3FtpPathResolverRegistry.class);
 
-    private IApplicationServerApi v3api;
-
-    public IApplicationServerApi getV3api()
-    {
-        if (v3api == null)
-            v3api = ServiceProvider.getV3ApplicationService();
-        return v3api;
-    }
-
-    /**
-     * initializes the registry with all known {@link IFtpPathResolver}-s.
-     */
-    public V3FtpPathResolverRegistry(FtpPathResolverConfig config)
+    @Override
+    public void initialize(FtpPathResolverConfig config)
     {
 
     }