diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/XPlanCliSubcommand.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/XPlanCliSubcommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ea05d6ebc861040f47607e6c2f5eaf5cc3fee60
--- /dev/null
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/XPlanCliSubcommand.java
@@ -0,0 +1,50 @@
+package de.latlon.xplanbox.cli;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.PropertySource;
+import picocli.CommandLine;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+
+/**
+ * Base class for all sub commands defining the option of all sub commands.
+ *
+ * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a>
+ */
+public abstract class XPlanCliSubcommand implements Callable<Integer> {
+
+	@CommandLine.Option(names = { "-v", "--verbose" }, defaultValue = "false")
+	private boolean verbose;
+
+	@CommandLine.Option(names = { "--config" }, description = "Path to the XPLANBOX_CONFIG directory.")
+	private File config;
+
+	@CommandLine.Option(names = { "--workspace" }, defaultValue = "Path to the DEEGREE_WORKSPACE_ROOT directory.")
+	private File workspace;
+
+	@Override
+	public Integer call() throws Exception {
+		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
+		register(applicationContext);
+		ConfigurableEnvironment env = applicationContext.getEnvironment();
+		Map<String, Object> map = new HashMap();
+		map.put("xplanbox.config", config != null ? config.getAbsolutePath() : null);
+		map.put("xplanbox.workspace", workspace != null ? workspace : null);
+		PropertySource<?> propertySource = new MapPropertySource("manager", map);
+		env.getPropertySources().addLast(propertySource);
+		applicationContext.setEnvironment(env);
+		applicationContext.refresh();
+		return callSubcommand(applicationContext);
+	}
+
+	protected abstract void register(AnnotationConfigApplicationContext applicationContext);
+
+	protected abstract Integer callSubcommand(ApplicationContext applicationContext) throws Exception;
+
+}
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/DistrictUpdateSubcommand.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/DistrictUpdateSubcommand.java
index 5718a7ddfea6b67d783c0603f2c24293520a4002..055ec5f1097706022a8240c1efeb683b185b4b28 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/DistrictUpdateSubcommand.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/DistrictUpdateSubcommand.java
@@ -23,6 +23,7 @@ package de.latlon.xplanbox.cli.admin;
 import de.latlon.xplan.commons.XPlanType;
 import de.latlon.xplan.manager.database.XPlanDao;
 import de.latlon.xplan.manager.web.shared.XPlan;
+import de.latlon.xplanbox.cli.XPlanCliSubcommand;
 import de.latlon.xplanbox.cli.admin.config.AdminContext;
 import org.deegree.feature.FeatureCollection;
 import org.slf4j.Logger;
@@ -33,7 +34,6 @@ import org.springframework.stereotype.Component;
 import picocli.CommandLine;
 
 import java.util.List;
-import java.util.concurrent.Callable;
 
 import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDistrict;
 
@@ -45,15 +45,18 @@ import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDistri
 @Component
 @CommandLine.Command(name = "district-update", description = "Update column district of table xplanmgr.plans.",
 		subcommands = { CommandLine.HelpCommand.class })
-public class DistrictUpdateSubcommand implements Callable<Integer> {
+public class DistrictUpdateSubcommand extends XPlanCliSubcommand {
 
 	private static final Logger LOG = LoggerFactory.getLogger(DistrictUpdateSubcommand.class);
 
 	@Override
-	public Integer call() throws Exception {
-		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AdminContext.class);
-		XPlanDao dao = applicationContext.getBean(XPlanDao.class);
+	protected void register(AnnotationConfigApplicationContext applicationContext) {
+		applicationContext.register(AdminContext.class);
+	}
 
+	@Override
+	protected Integer callSubcommand(ApplicationContext applicationContext) throws Exception {
+		XPlanDao dao = applicationContext.getBean(XPlanDao.class);
 		List<XPlan> plans = dao.getXPlanList();
 		for (XPlan plan : plans) {
 			LOG.info("Update district of plan with id {}", plan.getId());
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/ReSynthesizerSubcommand.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/ReSynthesizerSubcommand.java
index 700f3cd272a59ad82b1479470ef3186c78ed100f..6b3ce1b13add5238aaba4a6712dc38881006db7e 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/ReSynthesizerSubcommand.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/ReSynthesizerSubcommand.java
@@ -30,6 +30,7 @@ import de.latlon.xplan.manager.database.XPlanManagerDao;
 import de.latlon.xplan.manager.synthesizer.FeatureTypeNameSynthesizer;
 import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer;
 import de.latlon.xplan.manager.web.shared.XPlan;
+import de.latlon.xplanbox.cli.XPlanCliSubcommand;
 import de.latlon.xplanbox.cli.admin.config.ReSynthesizerContext;
 import org.deegree.feature.Feature;
 import org.deegree.feature.FeatureCollection;
@@ -46,7 +47,6 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
-import java.util.concurrent.Callable;
 
 import static de.latlon.xplan.manager.synthesizer.FeatureTypeNameSynthesizer.SYN_FEATURETYPE_PREFIX;
 
@@ -59,7 +59,7 @@ import static de.latlon.xplan.manager.synthesizer.FeatureTypeNameSynthesizer.SYN
 @CommandLine.Command(name = "resynthesize",
 		description = "Reads the XPlanGML data and updates the re-synthesized data in the xplansyn schema.",
 		subcommands = { CommandLine.HelpCommand.class })
-public class ReSynthesizerSubcommand implements Callable<Integer> {
+public class ReSynthesizerSubcommand extends XPlanCliSubcommand {
 
 	private static final Logger LOG = LoggerFactory.getLogger(ReSynthesizerSubcommand.class);
 
@@ -71,10 +71,14 @@ public class ReSynthesizerSubcommand implements Callable<Integer> {
 			description = "The ID of a plan in the XPlanManager of the plan to re-synthesize. If missing all plans are re-synthesized.")
 	private String[] ids;
 
+	@Override
+	protected void register(AnnotationConfigApplicationContext applicationContext) {
+		applicationContext.register(ReSynthesizerContext.class);
+	}
+
 	@Override
 	@Transactional(rollbackOn = Exception.class)
-	public Integer call() throws Exception {
-		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ReSynthesizerContext.class);
+	protected Integer callSubcommand(ApplicationContext applicationContext) throws Exception {
 		XPlanManagerDao xPlanManagerDao = applicationContext.getBean(XPlanManagerDao.class);
 		XPlanSynthesizer xPlanSynthesizer = applicationContext.getBean(XPlanSynthesizer.class);
 		SortPropertyReader sortPropertyReader = applicationContext.getBean(SortPropertyReader.class);
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/SortdateUpdateSubcommand.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/SortdateUpdateSubcommand.java
index 1394f5d2fe7603dc5fc95292e2999551238837e9..1738166bea8252db7dc9dc617a5478faeee87790 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/SortdateUpdateSubcommand.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/SortdateUpdateSubcommand.java
@@ -26,6 +26,7 @@ import de.latlon.xplan.commons.feature.SortPropertyReader;
 import de.latlon.xplan.manager.database.XPlanDao;
 import de.latlon.xplan.manager.web.shared.XPlan;
 import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager;
+import de.latlon.xplanbox.cli.XPlanCliSubcommand;
 import de.latlon.xplanbox.cli.admin.config.SortdateUpdateContext;
 import de.latlon.xplanbox.cli.admin.db.SortPropertyDbUpdater;
 import org.deegree.feature.FeatureCollection;
@@ -41,7 +42,6 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Callable;
 
 /**
  * Updates the sort property.
@@ -51,10 +51,15 @@ import java.util.concurrent.Callable;
 @Component
 @CommandLine.Command(name = "sortdate-update", description = "Update sort date.",
 		subcommands = { CommandLine.HelpCommand.class })
-public class SortdateUpdateSubcommand implements Callable<Integer> {
+public class SortdateUpdateSubcommand extends XPlanCliSubcommand {
 
 	private static final Logger LOG = LoggerFactory.getLogger(SortdateUpdateSubcommand.class);
 
+	@Override
+	protected void register(AnnotationConfigApplicationContext applicationContext) {
+		applicationContext.register(SortdateUpdateContext.class);
+	}
+
 	/**
 	 * Retrieves all plans from the manager store, parses the date from the plan with the
 	 * help of the {@link SortPropertyReader} and updates the sort property in the syn
@@ -62,8 +67,7 @@ public class SortdateUpdateSubcommand implements Callable<Integer> {
 	 */
 	@Override
 	@Transactional(rollbackOn = Exception.class)
-	public Integer call() throws Exception {
-		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SortdateUpdateContext.class);
+	protected Integer callSubcommand(ApplicationContext applicationContext) throws Exception {
 		XPlanDao xPlanDao = applicationContext.getBean(XPlanDao.class);
 		SortPropertyReader sortPropertyReader = applicationContext.getBean(SortPropertyReader.class);
 		SortPropertyDbUpdater sortPropertyDbUpdater = applicationContext.getBean(SortPropertyDbUpdater.class);
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java
index ad85a83406c4b711c26bc6dcdea66f3550fbd5ef..a332238496890d73f79989877635efe507e888a4 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java
@@ -101,8 +101,10 @@ public class CommonContext {
 	}
 
 	@Bean
-	public ManagerWorkspaceWrapper managerWorkspaceWrapper() throws WorkspaceException {
-		DeegreeWorkspace managerWorkspace = instantiateWorkspace(DEFAULT_XPLAN_MANAGER_WORKSPACE);
+	public ManagerWorkspaceWrapper managerWorkspaceWrapper(
+			@Value("${xplanbox.workspace:#{environment.DEEGREE_WORKSPACE_ROOT}}") File workspaceRoot)
+			throws WorkspaceException {
+		DeegreeWorkspace managerWorkspace = instantiateWorkspace(DEFAULT_XPLAN_MANAGER_WORKSPACE, workspaceRoot);
 		return new ManagerWorkspaceWrapper(managerWorkspace);
 	}
 
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java
index 3d966731967fe51ec5fc9ce4ce1b6d177977377b..c40f7bfe958f90769104e0edc50919ae4df74eb3 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java
@@ -34,12 +34,15 @@ import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3Raster
 import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper;
 import de.latlon.xplan.manager.workspace.WorkspaceException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
+import java.io.File;
+
 import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLANSYN_WMS_WORKSPACE;
 
 /**
@@ -67,8 +70,11 @@ public class SortdateUpdateContext {
 	}
 
 	@Bean
-	public WmsWorkspaceWrapper wmsWorkspaceWrapper() throws WorkspaceException {
-		DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE);
+	public WmsWorkspaceWrapper wmsWorkspaceWrapper(
+			@Value("${xplanbox.workspace:#{environment.DEEGREE_WORKSPACE_ROOT}}") File workspaceRoot)
+			throws WorkspaceException {
+		DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE,
+				workspaceRoot);
 		return new WmsWorkspaceWrapper(wmsWorkspace.getWorkspaceInstance());
 	}
 
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/CreateMetadataSubcommand.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/CreateMetadataSubcommand.java
index cddd85f1a0b22caa915e6f024308f6f1e9981d3e..99c411c653950e95d110441d9aa9caf5e16238b2 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/CreateMetadataSubcommand.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/CreateMetadataSubcommand.java
@@ -1,6 +1,6 @@
 package de.latlon.xplanbox.cli.manage;
 
-import de.latlon.xplan.manager.XPlanManager;
+import de.latlon.xplanbox.cli.XPlanCliSubcommand;
 import de.latlon.xplanbox.cli.manage.config.ManageContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -18,7 +18,7 @@ import java.util.List;
 @Component
 @CommandLine.Command(name = "create-metadata", description = "Create metadata",
 		subcommands = { CommandLine.HelpCommand.class })
-public class CreateMetadataSubcommand extends ManagerSubcommand {
+public class CreateMetadataSubcommand extends XPlanCliSubcommand {
 
 	private static final Logger LOG = LoggerFactory.getLogger(CreateMetadataSubcommand.class);
 
@@ -27,8 +27,12 @@ public class CreateMetadataSubcommand extends ManagerSubcommand {
 	private Integer[] ids;
 
 	@Override
-	public Integer callSubcommand(XPlanManager xPlanManager) {
-		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ManageContext.class);
+	protected void register(AnnotationConfigApplicationContext applicationContext) {
+		applicationContext.register(ManageContext.class);
+	}
+
+	@Override
+	protected Integer callSubcommand(ApplicationContext applicationContext) {
 		ServiceMetadataRecordCreator serviceMetadataRecordCreator = applicationContext
 			.getBean(ServiceMetadataRecordCreator.class);
 
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java
index a62390bbf2c0bcf16b659017f7ab7cad04fbd205..ada67b0ff11c671b8e2bb7ff6c7691929e0c96db 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java
@@ -1,31 +1,25 @@
 package de.latlon.xplanbox.cli.manage;
 
 import de.latlon.xplan.manager.XPlanManager;
-import de.latlon.xplan.manager.log.SystemLog;
+import de.latlon.xplanbox.cli.XPlanCliSubcommand;
 import de.latlon.xplanbox.cli.manage.config.ManageContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import picocli.CommandLine;
-
-import java.util.concurrent.Callable;
 
 /**
  * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a>
  */
-public abstract class ManagerSubcommand implements Callable<Integer> {
-
-	@CommandLine.Option(names = { "-v", "--verbose" }, defaultValue = "false")
-	private boolean verbose;
+public abstract class ManagerSubcommand extends XPlanCliSubcommand {
 
-	@Override
-	public Integer call() {
-		if (verbose)
-			SystemLog.log();
-		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ManageContext.class);
+	public Integer callSubcommand(ApplicationContext applicationContext) {
 		XPlanManager xPlanManager = applicationContext.getBean(XPlanManager.class);
 		return callSubcommand(xPlanManager);
 	}
 
+	public void register(AnnotationConfigApplicationContext applicationContext) {
+		applicationContext.register(ManageContext.class);
+	}
+
 	abstract Integer callSubcommand(XPlanManager xPlanManager);
 
 }
diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java
index 3a3bce0d12c106a8616a283b82096b6b486ec926..cfa290c81cc5ed0eb6a06a0fbe8e5ca036db24d7 100644
--- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java
+++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java
@@ -197,14 +197,19 @@ public class ManageContext {
 	}
 
 	@Bean
-	public ManagerWorkspaceWrapper managerWorkspaceWrapper() throws WorkspaceException {
-		DeegreeWorkspace managerWorkspace = instantiateWorkspace(DEFAULT_XPLAN_MANAGER_WORKSPACE);
+	public ManagerWorkspaceWrapper managerWorkspaceWrapper(
+			@Value("${xplanbox.workspace:#{environment.DEEGREE_WORKSPACE_ROOT}}") File workspaceRoot)
+			throws WorkspaceException {
+		DeegreeWorkspace managerWorkspace = instantiateWorkspace(DEFAULT_XPLAN_MANAGER_WORKSPACE, workspaceRoot);
 		return new ManagerWorkspaceWrapper(managerWorkspace);
 	}
 
 	@Bean
-	public WmsWorkspaceWrapper wmsWorkspaceWrapper() throws WorkspaceException {
-		DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE);
+	public WmsWorkspaceWrapper wmsWorkspaceWrapper(
+			@Value("${xplanbox.workspace:#{environment.DEEGREE_WORKSPACE_ROOT}}") File workspaceRoot)
+			throws WorkspaceException {
+		DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE,
+				workspaceRoot);
 		return new WmsWorkspaceWrapper(wmsWorkspace.getWorkspaceInstance());
 	}
 
diff --git a/xplan-cli/xplan-cli-tools/src/main/resources/application.properties b/xplan-cli/xplan-cli-tools/src/main/resources/application.properties
index 46657edce6911fd7bcaa28537821cb7356eadb0f..8580350a3794ac74ebfe5a5480092ea4308a8b5c 100644
--- a/xplan-cli/xplan-cli-tools/src/main/resources/application.properties
+++ b/xplan-cli/xplan-cli-tools/src/main/resources/application.properties
@@ -18,6 +18,5 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 # #L%
 ###
-xplanbox.config=
 spring.main.allow-bean-definition-overriding=true
 spring.batch.job.enabled=false
\ No newline at end of file
diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceUtils.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceUtils.java
index c0742a2e3ec4fbd9ca29253ad4f084a0a3899c2d..f9517adcb543358a36f9864f36d97581ef40dfba 100644
--- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceUtils.java
+++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceUtils.java
@@ -56,7 +56,8 @@ public class WorkspaceUtils {
 	 * @throws Exception - an exception occurred during instantiation or a workspace with
 	 * the given name does not exist
 	 */
-	static DeegreeWorkspace instantiateWorkspace(String workspaceName, File workspaceDir) throws WorkspaceException {
+	public static DeegreeWorkspace instantiateWorkspace(String workspaceName, File workspaceDir)
+			throws WorkspaceException {
 		if (workspaceDir != null && workspaceName != null)
 			return instantiateWorkspaceByNameAndDir(workspaceDir, workspaceName);
 		else if (workspaceDir != null)