diff --git a/haas-imagej-client/pom.xml b/haas-imagej-client/pom.xml
index e941ae61120f9fd8f3989e18cd29ac6b0920e406..ff4bd828ba6c0f3c66e013ddc707ccd7abe0d198 100644
--- a/haas-imagej-client/pom.xml
+++ b/haas-imagej-client/pom.xml
@@ -74,7 +74,7 @@
 		<dependency>
 			<groupId>cz.it4i.fiji</groupId>
 			<artifactId>haas-java-client</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
+			<version>0.0.6-SNAPSHOT</version>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
 		<dependency>
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
index 1c4bd03428ad11d3a65be3c4924bd6d3a923b3a1..be2e402207a2bc1e75f961dad4f275ee0f9f580b 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
@@ -27,6 +27,7 @@ import cz.it4i.fiji.haas.data_transfer.Synchronization;
 import cz.it4i.fiji.haas_java_client.HaaSClient;
 import cz.it4i.fiji.haas_java_client.HaaSFileTransfer;
 import cz.it4i.fiji.haas_java_client.JobInfo;
+import cz.it4i.fiji.haas_java_client.JobSettings;
 import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_java_client.ProgressNotifier;
 import cz.it4i.fiji.haas_java_client.TransferFileProgressForHaaSClient;
@@ -94,17 +95,17 @@ public class Job {
 
 	
 
-	public Job(JobManager4Job jobManager, String name, Path basePath, Supplier<HaaSClient> haasClientSupplier,
+	public Job(JobManager4Job jobManager, JobSettings jobSettings, Path basePath, Supplier<HaaSClient> haasClientSupplier,
 			Function<Path, Path> inputDirectoryProvider, Function<Path, Path> outputDirectoryProvider)
 			throws IOException {
 		this(jobManager, haasClientSupplier);
 		HaaSClient client = getHaaSClient();
-		long id = client.createJob(name, Collections.emptyList());
+		long id = client.createJob(jobSettings, Collections.emptyList());
 		setJobDirectory(basePath.resolve("" + id), inputDirectoryProvider, outputDirectoryProvider);
 		propertyHolder = new PropertyHolder(jobDir.resolve(JOB_INFO_FILENAME));
 		Files.createDirectory(this.jobDir);
 		storeInputOutputDirectory();
-		setName(name);
+		setName(jobSettings.getJobName());
 
 	}
 
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
index 902780ceb5812c3d3f42d58cf3140c662ae47357..510863d9f78c40a8f59b3e92a196c41eca887fb0 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
@@ -14,7 +14,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import cz.it4i.fiji.haas_java_client.HaaSClient;
-import cz.it4i.fiji.haas_java_client.Settings;
+import cz.it4i.fiji.haas_java_client.HaaSClientSettings;
+import cz.it4i.fiji.haas_java_client.JobSettings;
 import cz.it4i.fiji.haas_java_client.SynchronizableFileType;
 
 public class JobManager implements Closeable {
@@ -35,7 +36,7 @@ public class JobManager implements Closeable {
 
 	private HaaSClient haasClient;
 
-	private final Settings settings;
+	private final HaaSClientSettings settings;
 
 	private BiPredicate<Job, Path> uploadFilter = DUMMY_UPLOAD_FILTER;
 
@@ -53,16 +54,16 @@ public class JobManager implements Closeable {
 		}
 	};
 
-	public JobManager(Path workDirectory, Settings settings) {
+	public JobManager(Path workDirectory, HaaSClientSettings settings) {
 		this.workDirectory = workDirectory;
 		this.settings = settings;
 	}
 
-	public Job createJob(Function<Path, Path> inputDirectoryProvider, Function<Path, Path> outputDirectoryProvider)
+	public Job createJob(JobSettings jobSettings ,Function<Path, Path> inputDirectoryProvider, Function<Path, Path> outputDirectoryProvider)
 			throws IOException {
 		Job result;
 		initJobsIfNecessary();
-		jobs.add(result = new Job(remover, settings.getJobName(), workDirectory, this::getHaasClient,
+		jobs.add(result = new Job(remover, jobSettings, workDirectory, this::getHaasClient,
 				inputDirectoryProvider, outputDirectoryProvider));
 		return result;
 	}
diff --git a/haas-java-client/.classpath b/haas-java-client/.classpath
index 955c606a0989fb4e90f9328fb8acce451cb97dff..1f60731f5242e289ee11185b478d5d412200497e 100644
--- a/haas-java-client/.classpath
+++ b/haas-java-client/.classpath
@@ -10,6 +10,7 @@
 		<attributes>
 			<attribute name="optional" value="true"/>
 			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
@@ -25,6 +26,7 @@
 	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
diff --git a/haas-java-client/.project b/haas-java-client/.project
index b0574ede93f66b4c88e9776b78ee53b5aa561e2a..aec024726f3ed82cc5a15d8d25c36916b16f8e29 100644
--- a/haas-java-client/.project
+++ b/haas-java-client/.project
@@ -17,7 +17,6 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 	</natures>
diff --git a/haas-java-client/.settings/org.eclipse.jdt.core.prefs b/haas-java-client/.settings/org.eclipse.jdt.core.prefs
index 714351aec195a9a572640e6844dcafd51565a2a5..b8947ec6fc0a929c7ba04e493e77a2663a75b64e 100644
--- a/haas-java-client/.settings/org.eclipse.jdt.core.prefs
+++ b/haas-java-client/.settings/org.eclipse.jdt.core.prefs
@@ -2,4 +2,5 @@ eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/haas-java-client/pom.xml b/haas-java-client/pom.xml
index 6a008745cb00c2964913994cf91004ea4e625d2b..26f9896cbba6a02a7a887a900eb4d4e86bd45b60 100644
--- a/haas-java-client/pom.xml
+++ b/haas-java-client/pom.xml
@@ -4,7 +4,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>cz.it4i.fiji</groupId>
 	<artifactId>haas-java-client</artifactId>
-	<version>0.0.5-SNAPSHOT</version>
+	<version>0.0.6-SNAPSHOT</version>
 	<name>HaaS library for Java</name>
 	<packaging>jar</packaging>
 	<properties>
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
index 1ba4e3b25c370a829cad91bcda07305ec2ed3636..f7b060405bb6adde5cfdfcfae8ea16868fd7a789 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
@@ -188,41 +188,27 @@ public class HaaSClient {
 
 	private FileTransferWsSoap fileTransfer;
 
-	private final Integer timeOut;
-
-	private final Long templateId;
-
-	private final Long clusterNodeType;
-
 	private final String projectId;
 
 	private final Map<Long, P_FileTransferPool> filetransferPoolMap = new HashMap<>();
 
-	private final Settings settings;
+	private final HaaSClientSettings settings;
 
-	private final int numberOfCoresPerNodes;
+	
 
-	public HaaSClient(Settings settings) {
+	public HaaSClient(HaaSClientSettings settings) {
 		this.settings = settings;
-		this.templateId = settings.getTemplateId();
-		this.timeOut = settings.getTimeout();
-		this.clusterNodeType = settings.getClusterNodeType();
 		this.projectId = settings.getProjectId();
-		this.numberOfCoresPerNodes = settings.getNumberOfCoresPerNode();
 	}
 
-	public long createJob(String name, int numberOfNodes, Collection<Entry<String, String>> templateParameters) {
+	public long createJob(JobSettings settings, Collection<Entry<String, String>> templateParameters) {
 		try {
-			return doCreateJob(name, numberOfNodes, templateParameters);
+			return doCreateJob(settings, templateParameters);
 		} catch (RemoteException | ServiceException e) {
 			throw new RuntimeException(e);
 		}
 	}
 
-	public long createJob(String name, Collection<Entry<String, String>> templateParameters) {
-		return createJob(name, 1, templateParameters);
-	}
-
 	public HaaSFileTransfer startFileTransfer(long jobId, TransferFileProgress notifier) {
 		try {
 			return getFileTransferMethod(jobId, notifier);
@@ -234,7 +220,7 @@ public class HaaSClient {
 	public HaaSFileTransfer startFileTransfer(long jobId) {
 		return startFileTransfer(jobId, DUMMY_TRANSFER_FILE_PROGRESS);
 	}
-	
+
 	public TunnelToNode openTunnel(long jobId, String nodeIP, int localPort, int remotePort) {
 		MidlewareTunnel tunnel;
 		try {
@@ -273,11 +259,12 @@ public class HaaSClient {
 	public JobInfo obtainJobInfo(long jobId) {
 		try {
 			final SubmittedJobInfoExt info = getJobManagement().getCurrentInfoForJob(jobId, getSessionID());
-			
+
 			final Collection<Long> tasksId = info.getTasks().getSubmittedTaskInfoExt().stream().map(ti -> ti.getId())
 					.collect(Collectors.toList());
 			return new JobInfo() {
 				private List<String> ips;
+
 				@Override
 				public Collection<Long> getTasks() {
 					return tasksId;
@@ -302,12 +289,13 @@ public class HaaSClient {
 				public Calendar getCreationTime() {
 					return toGregorian(info.getCreationTime());
 				};
-				
+
 				@Override
 				public List<String> getNodesIPs() {
-					if(ips == null) {
+					if (ips == null) {
 						try {
-							ips = getJobManagement().getAllocatedNodesIPs(jobId, getSessionID()).getString().stream().collect(Collectors.toList());
+							ips = getJobManagement().getAllocatedNodesIPs(jobId, getSessionID()).getString().stream()
+									.collect(Collectors.toList());
 						} catch (RemoteException | ServiceException e) {
 							log.error(e.getMessage(), e);
 						}
@@ -382,11 +370,11 @@ public class HaaSClient {
 		getJobManagement().submitJob(jobId, getSessionID());
 	}
 
-	private long doCreateJob(String name, int numberOfNodes, Collection<Entry<String, String>> templateParameters)
+	private long doCreateJob(JobSettings jobSettings, Collection<Entry<String, String>> templateParameters)
 			throws RemoteException, ServiceException {
 		Collection<TaskSpecificationExt> taskSpec = Arrays
-				.asList(createTaskSpecification(name + "-task", templateId, numberOfNodes, templateParameters));
-		JobSpecificationExt jobSpecification = createJobSpecification(name, numberOfNodes, taskSpec);
+				.asList(createTaskSpecification(jobSettings, templateParameters));
+		JobSpecificationExt jobSpecification = createJobSpecification(jobSettings, taskSpec);
 		SubmittedJobInfoExt job = getJobManagement().createJob(jobSpecification, getSessionID());
 		return job.getId();
 	}
@@ -397,35 +385,35 @@ public class HaaSClient {
 		return new ScpClient(fileTransfer.getServerHostname(), fileTransfer.getCredentials().getUsername(), pvtKey);
 	}
 
-	private JobSpecificationExt createJobSpecification(String name, int numberOfNodes,
+	private JobSpecificationExt createJobSpecification(JobSettings jobSettings,
 			Collection<TaskSpecificationExt> tasks) {
 		JobSpecificationExt testJob = new JobSpecificationExt();
-		testJob.setName(name);
-		testJob.setMinCores(numberOfCoresPerNodes * numberOfNodes);
-		testJob.setMaxCores(numberOfCoresPerNodes * numberOfNodes);
+		testJob.setName(jobSettings.getJobName());
+		testJob.setMinCores(jobSettings.getNumberOfCoresPerNode() * jobSettings.getNumberOfNodes());
+		testJob.setMaxCores(jobSettings.getNumberOfCoresPerNode() * jobSettings.getNumberOfNodes());
 		testJob.setPriority(JobPriorityExt.AVERAGE);
 		testJob.setProject(projectId);
 		testJob.setWaitingLimit(null);
-		testJob.setWalltimeLimit(timeOut);
+		testJob.setWalltimeLimit(jobSettings.getWalltimeLimit());
 		testJob.setNotificationEmail(settings.getEmail());
 		testJob.setPhoneNumber(settings.getPhone());
 		testJob.setNotifyOnAbort(false);
 		testJob.setNotifyOnFinish(false);
 		testJob.setNotifyOnStart(false);
-		testJob.setClusterNodeTypeId(clusterNodeType);
-		testJob.setEnvironmentVariables( new ArrayOfEnvironmentVariableExt());
+		testJob.setClusterNodeTypeId(jobSettings.getClusterNodeType());
+		testJob.setEnvironmentVariables(new ArrayOfEnvironmentVariableExt());
 		testJob.setTasks(getAndFill(new ArrayOfTaskSpecificationExt(), a -> a.getTaskSpecificationExt().addAll(tasks)));
 		return testJob;
 	}
 
-	private TaskSpecificationExt createTaskSpecification(String name, long templateId, int numberOfNodes,
+	private TaskSpecificationExt createTaskSpecification(JobSettings jobSettings,
 			Collection<Entry<String, String>> templateParameters) {
 
 		TaskSpecificationExt testTask = new TaskSpecificationExt();
-		testTask.setName(name);
-		testTask.setMinCores(numberOfCoresPerNodes * numberOfNodes);
-		testTask.setMaxCores(numberOfCoresPerNodes * numberOfNodes);
-		testTask.setWalltimeLimit(timeOut);
+		testTask.setName(jobSettings.getJobName() + "-task");
+		testTask.setMinCores(jobSettings.getNumberOfCoresPerNode() * jobSettings.getNumberOfNodes());
+		testTask.setMaxCores(jobSettings.getNumberOfCoresPerNode() * jobSettings.getNumberOfNodes());
+		testTask.setWalltimeLimit(jobSettings.getWalltimeLimit());
 		testTask.setRequiredNodes(null);
 		testTask.setIsExclusive(false);
 		testTask.setIsRerunnable(false);
@@ -435,7 +423,7 @@ public class HaaSClient {
 		testTask.setProgressFile("console_Stdprog");
 		testTask.setLogFile("console_Stdlog");
 		testTask.setClusterTaskSubdirectory(null);
-		testTask.setCommandTemplateId(templateId); // commandTemplateID
+		testTask.setCommandTemplateId(jobSettings.getTemplateId());
 		testTask.setEnvironmentVariables(new ArrayOfEnvironmentVariableExt());
 		testTask.setDependsOn(null);
 		testTask.setTemplateParameterValues(getAndFill(new ArrayOfCommandTemplateParameterValueExt(),
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/Settings.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClientSettings.java
similarity index 50%
rename from haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/Settings.java
rename to haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClientSettings.java
index 18c4b1a75fbada843e59041dcab225d1d49e4a96..0b4d7b0269e0e62f6646b1235939e02a40cccb1e 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/Settings.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClientSettings.java
@@ -1,14 +1,9 @@
 package cz.it4i.fiji.haas_java_client;
 
-public interface Settings {
+public interface HaaSClientSettings {
 	String getUserName();
 	String getPassword();
 	String getEmail();
 	String getPhone();
-	long getTemplateId();
-	int getTimeout();
-	long getClusterNodeType();
 	String getProjectId();
-	String getJobName();
-	int getNumberOfCoresPerNode();
 }
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobSettings.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..ddafdbd7a55bfab1121965c20e9bd39167dc8d70
--- /dev/null
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobSettings.java
@@ -0,0 +1,10 @@
+package cz.it4i.fiji.haas_java_client;
+
+public interface JobSettings {
+	long getTemplateId();
+	int getWalltimeLimit();
+	long getClusterNodeType();
+	String getJobName();
+	int getNumberOfNodes();
+	int getNumberOfCoresPerNode();
+}
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobSettingsBuilder.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobSettingsBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..869e74483784ffaa9f9f4a6aed560b5fd0514ba9
--- /dev/null
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobSettingsBuilder.java
@@ -0,0 +1,94 @@
+package cz.it4i.fiji.haas_java_client;
+
+public class JobSettingsBuilder {
+
+	private static final long DEFAULT_TEMPLATE = 1l;
+
+
+	private static final int DEFAULT_WALLTIME = 600;
+
+
+	private static final long DEFAULT_CLUSTER_NODE_TYPE = 7L;
+
+
+	private static final String DEFAULT_JOB_NAME = "DefaultHEAppEJob";
+
+
+	private static final int DEFAULT_NUMBER_OF_NODES = 1;
+
+
+	private static final int DEFAULT_NUMBER_OF_CORES_PER_NODE = 24;
+	
+	
+	private long templateId = DEFAULT_TEMPLATE;
+	private int walltimeLimit = DEFAULT_WALLTIME;
+	private long clusterNodeType = DEFAULT_CLUSTER_NODE_TYPE;
+	private String jobName = DEFAULT_JOB_NAME;
+	private int numberOfNodes = DEFAULT_NUMBER_OF_NODES;
+	private int numberOfCoresPerNode = DEFAULT_NUMBER_OF_CORES_PER_NODE;
+	
+
+	public JobSettingsBuilder setTemplateId(long templateId) {
+		this.templateId = templateId;
+		return this;
+	}
+	
+	public JobSettingsBuilder setWalltimeLimit(int walltimeLimit) {
+		this.walltimeLimit = walltimeLimit;
+		return this;
+	}
+	
+	public JobSettingsBuilder setClusterNodeType(long clusterNodeType) {
+		this.clusterNodeType = clusterNodeType;
+		return this;
+	}
+	public JobSettingsBuilder setJobName(String jobName) {
+		this.jobName = jobName;
+		return this;
+	}
+	
+	public JobSettingsBuilder setNumberOfNodes(int numberOfNodes) {
+		this.numberOfNodes = numberOfNodes;
+		return this;
+	}
+	
+	public JobSettingsBuilder setNumberOfCoresPerNode(int numberOfCoresPerNode) {
+		this.numberOfCoresPerNode = numberOfCoresPerNode;
+		return this;
+	}
+	
+	public JobSettings build() {
+		return new JobSettings() {
+			
+			@Override
+			public int getWalltimeLimit() {
+				return walltimeLimit;
+			}
+			
+			@Override
+			public long getTemplateId() {
+				return templateId;
+			}
+			
+			@Override
+			public int getNumberOfNodes() {
+				return numberOfNodes;
+			}
+			
+			@Override
+			public String getJobName() {
+				return jobName;
+			}
+			
+			@Override
+			public long getClusterNodeType() {
+				return clusterNodeType;
+			}
+
+			@Override
+			public int getNumberOfCoresPerNode() {
+				return numberOfCoresPerNode;
+			}
+		};
+	}
+}
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/SettingsProvider.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/SettingsProvider.java
index 4871542561dd4caf9e687134b6cb95d22c079c7f..efd860ee1f947f27847d4cd821d6c134e5c58fbc 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/SettingsProvider.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/SettingsProvider.java
@@ -2,13 +2,10 @@ package cz.it4i.fiji.haas_java_client;
 
 public interface SettingsProvider {
 	
-	static Settings getSettings(long templateId, int timeOut, long clusterNodeType, String projectId, String configFileName) {
-		return getSettings(templateId, timeOut, clusterNodeType, projectId, 1, configFileName);
-	}
 	
-	static Settings getSettings(long templateId, int timeOut, long clusterNodeType, String projectId, int numberOfCores,String configFileName) {
+	static HaaSClientSettings getSettings(String projectId, String configFileName) {
 		Constants constants = new Constants(configFileName);
-		return new Settings() {
+		return new HaaSClientSettings() {
 			
 			@Override
 			public String getUserName() {
@@ -30,35 +27,13 @@ public interface SettingsProvider {
 				return constants.getEmail();
 			}
 
-			@Override
-			public long getTemplateId() {
-				return templateId;
-			}
-			
-			@Override
-			public int getTimeout() {
-				return timeOut;
-			}
-			
-			@Override
-			public long getClusterNodeType() {
-				return clusterNodeType;
-			}
-
+		
 			@Override
 			public String getProjectId() {
 				return projectId;
 			}
 
-			@Override
-			public String getJobName() {
-				return "TestOutRedirect";
-			}
-
-			@Override
-			public int getNumberOfCoresPerNode() {
-				return numberOfCores;
-			}
+			
 		};
 	}
 	
diff --git a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/GetJobInfo.java b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/GetJobInfo.java
index 084b332bb94a5d59ea3623823bf2bf6d8c57da58..93ba8727af7637a38bb14cd68a1732671574c4bf 100644
--- a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/GetJobInfo.java
+++ b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/GetJobInfo.java
@@ -19,7 +19,7 @@ public class GetJobInfo {
 	public static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_java_client.GetJobInfo.class);
 
 	public static void main(String[] args) throws ServiceException, IOException {
-		Settings settings = SettingsProvider.getSettings(1l, 600, 7l, "OPEN-12-20", TestingConstants.CONFIGURATION_FILE_NAME);
+		HaaSClientSettings settings = SettingsProvider.getSettings("OPEN-12-20", TestingConstants.CONFIGURATION_FILE_NAME);
 		HaaSClient client = new HaaSClient(settings);
 		JobInfo ji = client.obtainJobInfo(334);
 		System.out.println("created: " + ji.getCreationTime());
diff --git a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestCommunicationWithNodes.java b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestCommunicationWithNodes.java
index dea3763225c21dc7a688c77d96fc15ed33d53366..9409bd33a8fae9aa38ade3bdba8170def8339d2d 100644
--- a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestCommunicationWithNodes.java
+++ b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestCommunicationWithNodes.java
@@ -30,7 +30,7 @@ public class TestCommunicationWithNodes {
 				"Accept: */*\r\n" + //
 				"\r\n";
 		
-		Settings settings = SettingsProvider.getSettings(6l, 3600, 7l, "OPEN-12-20",
+		HaaSClientSettings settings = SettingsProvider.getSettings("OPEN-12-20",
 				TestingConstants.CONFIGURATION_FILE_NAME);
 		HaaSClient client = new HaaSClient(settings);
 		long id = 376;//client.createJob("New job", Collections.emptyList());
diff --git a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestConcurentAccessToHaaSFileTransfer.java b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestConcurentAccessToHaaSFileTransfer.java
index 68546f9ae7f3540722a6dd7557c98f046e1adbd3..4eaafa5dd9e257a8d49780c0ad209c63245ef28b 100644
--- a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestConcurentAccessToHaaSFileTransfer.java
+++ b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestConcurentAccessToHaaSFileTransfer.java
@@ -13,7 +13,7 @@ public class TestConcurentAccessToHaaSFileTransfer {
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_java_client.TestConcurentAccessToHaaSFileTransfer.class);
 
 	public static void main(String[] args) throws ServiceException, IOException {
-		HaaSClient client = new HaaSClient(SettingsProvider.getSettings(1l, 600, 7l, "OPEN-12-20",TestingConstants.CONFIGURATION_FILE_NAME));
+		HaaSClient client = new HaaSClient(SettingsProvider.getSettings("OPEN-12-20",TestingConstants.CONFIGURATION_FILE_NAME));
 		HaaSFileTransfer tr1 = client.startFileTransfer(250, HaaSClient.DUMMY_TRANSFER_FILE_PROGRESS);
 		HaaSFileTransfer tr2 = client.startFileTransfer(249, HaaSClient.DUMMY_TRANSFER_FILE_PROGRESS);
 		log.info("config.yaml - size:" + tr1.obtainSize(Arrays.asList("config.yaml")));
diff --git a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java
index d19be89ffd1cacd215bf4096042bb8b418caafeb..399893e97fc8d3a8101112da43fd4bc87c172567 100644
--- a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java
+++ b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java
@@ -25,11 +25,9 @@ public class TestHaaSJavaClient {
 		Map<String, String> params = new HashMap<>();
 		params.put("inputParam", "someStringParam");
 		Path baseDir = Paths.get("/home/koz01/aaa");
-		HaaSClient client = new HaaSClient(SettingsProvider.getSettings(1l, 600, 7l, "DD-17-31", TestingConstants.CONFIGURATION_FILE_NAME));
-		long jobId = client.createJob("TestOutRedirect", params.entrySet());
-		try (HaaSFileTransfer tr = client.startFileTransfer(jobId, HaaSClient.DUMMY_TRANSFER_FILE_PROGRESS)) {
-			tr.upload(new UploadingFileImpl(Paths.get("/home/koz01/aaa/vecmath.jar")));
-		}
+		HaaSClient client = new HaaSClient(SettingsProvider.getSettings( "DD-17-31", TestingConstants.CONFIGURATION_FILE_NAME));
+		long jobId = client.createJob(new JobSettingsBuilder().setJobName("TestOutRedirect").setTemplateId(1l)
+				.setWalltimeLimit(600).setClusterNodeType(7l).build(), params.entrySet());
 		client.submitJob(jobId);
 		Path workDir = baseDir.resolve("" + jobId);
 		if (!Files.isDirectory(workDir)) {
diff --git a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClientWithSPIM.java b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClientWithSPIM.java
index 585d93ea852f986ec9d54f2978622424ed610eb6..675e32f6314b440675993ef1a103daf1a16a882b 100644
--- a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClientWithSPIM.java
+++ b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClientWithSPIM.java
@@ -21,10 +21,11 @@ public class TestHaaSJavaClientWithSPIM {
 	private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas_java_client.TestHaaSJavaClientWithSPIM.class);
 
 	public static void main(String[] args) throws ServiceException, IOException {
-		HaaSClient client = new HaaSClient(SettingsProvider.getSettings(2, 9600, 6l, "DD-17-31", TestingConstants.CONFIGURATION_FILE_NAME));
+		HaaSClient client = new HaaSClient(SettingsProvider.getSettings("DD-17-31", TestingConstants.CONFIGURATION_FILE_NAME));
 		Path baseDir = Paths.get("/home/koz01/Work/vyzkumnik/fiji/work/aaa");
 
-		long jobId = client.createJob("TestOutRedirect", Collections.emptyList());
+		long jobId = client.createJob(new JobSettingsBuilder().setJobName("TestOutRedirect").setTemplateId(2)
+				.setWalltimeLimit(9600).setClusterNodeType(6).build(), Collections.emptyList());
 
 		try (HaaSFileTransfer tr = client.startFileTransfer(jobId, HaaSClient.DUMMY_TRANSFER_FILE_PROGRESS)) {
 			StreamSupport.stream(getAllFiles(baseDir.resolve("spim-data")).spliterator(), false)
diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java
index 26c2f77126cdf4fc248dfc3b937ef27bd13c20cd..42ce325bf816eeefe44eb68cac5d2f2df15e9d9c 100644
--- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java
+++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java
@@ -55,7 +55,9 @@ import cz.it4i.fiji.haas.Job;
 import cz.it4i.fiji.haas.JobManager;
 import cz.it4i.fiji.haas_java_client.JobState;
 import cz.it4i.fiji.haas_java_client.ProgressNotifier;
-import cz.it4i.fiji.haas_java_client.Settings;
+import cz.it4i.fiji.haas_java_client.HaaSClientSettings;
+import cz.it4i.fiji.haas_java_client.JobSettings;
+import cz.it4i.fiji.haas_java_client.JobSettingsBuilder;
 import cz.it4i.fiji.haas_java_client.SynchronizableFileType;
 import cz.it4i.fiji.haas_java_client.UploadingFile;
 import net.imagej.updater.util.Progress;
@@ -102,7 +104,7 @@ public class BenchmarkJobManager implements Closeable {
 		public synchronized void startJob(Progress progress) throws IOException {
 			job.uploadFile(Constants.CONFIG_YAML, new ProgressNotifierAdapter(progress));
 			LoadedYAML yaml = new LoadedYAML(job.openLocalFile(Constants.CONFIG_YAML));
-			
+
 			verifiedState = null;
 			verifiedStateProcessed = false;
 			running = null;
@@ -408,8 +410,9 @@ public class BenchmarkJobManager implements Closeable {
 
 		private void startDownloadResults(CompletableFuture<?> result) throws IOException {
 			String mainFile = job.getProperty(SPIM_OUTPUT_FILENAME_PATTERN) + ".xml";
-			final ProgressNotifierTemporarySwitchOff notifierSwitch = new ProgressNotifierTemporarySwitchOff(downloadNotifier, job);
-			
+			final ProgressNotifierTemporarySwitchOff notifierSwitch = new ProgressNotifierTemporarySwitchOff(
+					downloadNotifier, job);
+
 			job.startDownload(downloadFileNameExtractDecorator(fileName -> fileName.equals(mainFile)))
 					.whenComplete((X, E) -> {
 						notifierSwitch.switchOn();
@@ -429,19 +432,20 @@ public class BenchmarkJobManager implements Closeable {
 						result.complete(null);
 					});
 		}
-		
+
 		private Set<String> extractNames(Path resolve) {
 			Set<String> result = new HashSet<>();
-			try(InputStream fileIS = Files.newInputStream(resolve)) {
+			try (InputStream fileIS = Files.newInputStream(resolve)) {
 				DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
 				DocumentBuilder builder = builderFactory.newDocumentBuilder();
 				Document xmlDocument = builder.parse(fileIS);
 				XPath xPath = XPathFactory.newInstance().newXPath();
-				Node imageLoader = ((NodeList) xPath.evaluate("/SpimData/SequenceDescription/ImageLoader", xmlDocument, XPathConstants.NODESET)).item(0);
+				Node imageLoader = ((NodeList) xPath.evaluate("/SpimData/SequenceDescription/ImageLoader", xmlDocument,
+						XPathConstants.NODESET)).item(0);
 				Node hdf5 = ((NodeList) xPath.evaluate("hdf5", imageLoader, XPathConstants.NODESET)).item(0);
 				result.add(hdf5.getTextContent());
 				NodeList nl = (NodeList) xPath.evaluate("partition/path", imageLoader, XPathConstants.NODESET);
-				for(int i = 0; i < nl.getLength(); i++) {
+				for (int i = 0; i < nl.getLength(); i++) {
 					result.add(nl.item(i).getTextContent());
 				}
 			} catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException e) {
@@ -531,7 +535,7 @@ public class BenchmarkJobManager implements Closeable {
 
 	public BenchmarkJob createJob(Function<Path, Path> inputDirectoryProvider,
 			Function<Path, Path> outputDirectoryProvider) throws IOException {
-		Job job = jobManager.createJob(inputDirectoryProvider, outputDirectoryProvider);
+		Job job = jobManager.createJob( getJobSettings(),inputDirectoryProvider, outputDirectoryProvider);
 		return convertJob(job);
 	}
 
@@ -653,6 +657,12 @@ public class BenchmarkJobManager implements Closeable {
 		return new BenchmarkJob(job);
 	}
 
+	private static JobSettings getJobSettings() {
+		return new JobSettingsBuilder().setJobName(Constants.HAAS_JOB_NAME)
+				.setClusterNodeType(Constants.HAAS_CLUSTER_NODE_TYPE).setTemplateId(Constants.HAAS_TEMPLATE_ID)
+				.setWalltimeLimit(Constants.HAAS_TIMEOUT).setNumberOfCoresPerNode(Constants.CORES_PER_NODE).build();
+	}
+
 	private static Predicate<String> downloadFileNameExtractDecorator(Predicate<String> decorated) {
 		return name -> {
 			Path path = getPathSafely(name);
@@ -683,24 +693,14 @@ public class BenchmarkJobManager implements Closeable {
 		}
 	}
 
-	private static Settings constructSettingsFromParams(BenchmarkSPIMParameters params) {
-		return new Settings() {
+	private static HaaSClientSettings constructSettingsFromParams(BenchmarkSPIMParameters params) {
+		return new HaaSClientSettings() {
 
 			@Override
 			public String getUserName() {
 				return params.username();
 			}
 
-			@Override
-			public int getTimeout() {
-				return Constants.HAAS_TIMEOUT;
-			}
-
-			@Override
-			public long getTemplateId() {
-				return Constants.HAAS_TEMPLATE_ID;
-			}
-
 			@Override
 			public String getProjectId() {
 				return Constants.HAAS_PROJECT_ID;
@@ -716,25 +716,11 @@ public class BenchmarkJobManager implements Closeable {
 				return params.password();
 			}
 
-			@Override
-			public String getJobName() {
-				return Constants.HAAS_JOB_NAME;
-			}
-
 			@Override
 			public String getEmail() {
 				return params.email();
 			}
 
-			@Override
-			public long getClusterNodeType() {
-				return Constants.HAAS_CLUSTER_NODE_TYPE;
-			}
-
-			@Override
-			public int getNumberOfCoresPerNode() {
-				return Constants.CORES_PER_NODE;
-			}
 		};
 	}
 
diff --git a/java-scpclient/.classpath b/java-scpclient/.classpath
index af1430be15836d78425a795565a49fcd23d562b4..5e8a55fefbd916a028d5a67f0b8db3fcb3262258 100644
--- a/java-scpclient/.classpath
+++ b/java-scpclient/.classpath
@@ -10,6 +10,7 @@
 		<attributes>
 			<attribute name="optional" value="true"/>
 			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
diff --git a/java-scpclient/.settings/org.eclipse.jdt.core.prefs b/java-scpclient/.settings/org.eclipse.jdt.core.prefs
index 714351aec195a9a572640e6844dcafd51565a2a5..b8947ec6fc0a929c7ba04e493e77a2663a75b64e 100644
--- a/java-scpclient/.settings/org.eclipse.jdt.core.prefs
+++ b/java-scpclient/.settings/org.eclipse.jdt.core.prefs
@@ -2,4 +2,5 @@ eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8