diff --git a/api-openbis-javascript/src/v3/dss/dto/common/operation/IOperationResult.js b/api-openbis-javascript/src/v3/dss/dto/common/operation/IOperationResult.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/CustomDSSService.js b/api-openbis-javascript/src/v3/dss/dto/service/CustomDSSService.js
new file mode 100644
index 0000000000000000000000000000000000000000..40979dea31ab8bd61367ab5d4bf864734a5452e8
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/CustomDSSService.js
@@ -0,0 +1,44 @@
+define([ "stjs", "util/Exceptions" ], function(stjs, exceptions) {
+	var CustomDSSService = function() {
+	};
+	stjs.extend(CustomDSSService, null, [], function(constructor, prototype) {
+		prototype['@type'] = 'dss.dto.service.CustomDSSService';
+		constructor.serialVersionUID = 1;
+		prototype.fetchOptions = null;
+		prototype.code = null;
+		prototype.label = null;
+		prototype.description = null;
+
+		prototype.getFetchOptions = function() {
+			return this.fetchOptions;
+		};
+		prototype.setFetchOptions = function(fetchOptions) {
+			this.fetchOptions = fetchOptions;
+		};
+		prototype.getCode = function() {
+			return this.code;
+		};
+		prototype.setCode = function(code) {
+			this.code = code;
+		};
+		prototype.getLabel = function() {
+			return this.label;
+		};
+		prototype.setLabel = function(label) {
+			this.label = label;
+		};
+		prototype.getDescription = function() {
+			return this.description;
+		};
+		prototype.setDescription = function(description) {
+			this.description = description;
+		};
+		prototype.toString = function() {
+			return "CustomDSSService " + this.code;
+		};
+	}, {
+		fetchOptions : "CustomDSSServiceFetchOptions",
+		code: "CustomDSSServiceCode"
+	});
+	return CustomDSSService;
+})
\ No newline at end of file
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/CustomDSSServiceExecutionOptions.js b/api-openbis-javascript/src/v3/dss/dto/service/CustomDSSServiceExecutionOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..500559296616b6e4eec03ae35043da0dfd4fcc1f
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/CustomDSSServiceExecutionOptions.js
@@ -0,0 +1,10 @@
+define([ "stjs", "dss/dto/service/execute/AbstractExecutionOptionsWithParameters"], function(stjs, AbstractExecutionOptionsWithParameters) {
+	var CustomDSSServiceExecutionOptions = function() {
+		AbstractExecutionOptionsWithParameters.call(this);
+	};
+	stjs.extend(CustomDSSServiceExecutionOptions, AbstractExecutionOptionsWithParameters, [AbstractExecutionOptionsWithParameters ], function(constructor, prototype) {
+		prototype['@type'] = 'dss.dto.service.CustomDSSServiceExecutionOptions';
+		constructor.serialVersionUID = 1;
+	}, {});
+	return CustomDSSServiceExecutionOptions;
+})
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/execute/AbstractExecutionOptionsWithParameters.js b/api-openbis-javascript/src/v3/dss/dto/service/execute/AbstractExecutionOptionsWithParameters.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c99b1f755b32fdc791571e04fe10cf6034c0c07
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/execute/AbstractExecutionOptionsWithParameters.js
@@ -0,0 +1,23 @@
+define([ "stjs"], function(stjs) {
+	var AbstractExecutionOptionsWithParameters = function() {
+		this.parameters = {};
+	};
+	stjs.extend(AbstractExecutionOptionsWithParameters, null, [ ], function(constructor, prototype) {
+		prototype['@type'] = 'dss.dto.service.execute.AbstractExecutionOptionsWithParameters';
+		constructor.serialVersionUID = 1;
+		prototype.parameters = null;
+		prototype.withParameter = function(parameterName, value) {
+			this.parameters[parameterName] = value;
+			return this;
+		}
+		prototype.getParameters = function() {
+			return this.parameters;
+		}
+	}, {
+		parameters : {
+			name : "Map",
+			arguments : [ null, null ]
+		}
+	});
+	return AbstractExecutionOptionsWithParameters;
+})
\ No newline at end of file
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/execute/ExecuteCustomDSSServiceOperationResult.js b/api-openbis-javascript/src/v3/dss/dto/service/execute/ExecuteCustomDSSServiceOperationResult.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7bee2964c8598f32042c43f61ca5448ccc0ea82
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/execute/ExecuteCustomDSSServiceOperationResult.js
@@ -0,0 +1,20 @@
+/**
+ */
+define([ "stjs", "dss/dto/common/operation/IOperationResult" ], function(stjs, IOperationResult) {
+	var ExecuteCustomDSSServiceOperationResult = function(result) {
+		this.result = result;
+	};
+	stjs.extend(ExecuteCustomDSSServiceOperationResult, null, [ IOperationResult ], function(constructor, prototype) {
+		prototype['@type'] = 'dss.dto.service.execute.ExecuteCustomASServiceOperationResult';
+		prototype.result = null;
+		prototype.getResult = function() {
+			return this.result;
+		};
+		prototype.getMessage = function() {
+			return "ExecuteCustomDSSServiceOperationResult";
+		};
+	}, {
+		result : "Object"
+	});
+	return ExecuteCustomDSSServiceOperationResult;
+})
\ No newline at end of file
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/fetchoptions/CustomDSSServiceFetchOptions.js b/api-openbis-javascript/src/v3/dss/dto/service/fetchoptions/CustomDSSServiceFetchOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..50dd4dc009c080c2880a8910bdfb01489a1601c9
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/fetchoptions/CustomDSSServiceFetchOptions.js
@@ -0,0 +1,22 @@
+define([ "require", "stjs", "as/dto/common/fetchoptions/FetchOptions", "dss/dto/service/fetchoptions/CustomDSSServiceSortOptions" ], function(require, stjs, FetchOptions) {
+  var CustomDSSServiceFetchOptions = function() {
+  };
+  stjs.extend(CustomDSSServiceFetchOptions, FetchOptions, [ FetchOptions ], function(constructor, prototype) {
+    prototype['@type'] = 'dss.dto.service.fetchoptions.CustomDSSServiceFetchOptions';
+    constructor.serialVersionUID = 1;
+    prototype.sort = null;
+    prototype.sortBy = function() {
+      if (this.sort == null) {
+        var CustomDSSServiceSortOptions = require("dss/dto/service/fetchoptions/CustomDSSServiceSortOptions");
+        this.sort = new CustomDSSServiceSortOptions();
+      }
+      return this.sort;
+    };
+    prototype.getSortBy = function() {
+      return this.sort;
+    };
+  }, {
+    sort : "CustomDSSServiceSortOptions"
+  });
+  return CustomDSSServiceFetchOptions;
+})
\ No newline at end of file
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/fetchoptions/CustomDSSServiceSortOptions.js b/api-openbis-javascript/src/v3/dss/dto/service/fetchoptions/CustomDSSServiceSortOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a2a71b7974992ecf0512e3d653bb3fbbbf0898c
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/fetchoptions/CustomDSSServiceSortOptions.js
@@ -0,0 +1,10 @@
+define([ "require", "stjs", "as/dto/common/fetchoptions/SortOptions" ], function(require, stjs, SortOptions) {
+  var CustomDSSServiceSortOptions = function() {
+    SortOptions.call(this);
+  };
+  stjs.extend(CustomDSSServiceSortOptions, SortOptions, [ SortOptions ], function(constructor, prototype) {
+    prototype['@type'] = 'dss.dto.service.fetchoptions.CustomDSSServiceSortOptions';
+    constructor.serialVersionUID = 1;
+  }, {});
+  return CustomDSSServiceSortOptions;
+})
\ No newline at end of file
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/id/CustomDssServiceCode.js b/api-openbis-javascript/src/v3/dss/dto/service/id/CustomDssServiceCode.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c9b6dbb89f02d3cae9104d2732a954912128070
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/id/CustomDssServiceCode.js
@@ -0,0 +1,14 @@
+/**
+ * Custom DSS service code
+ *
+ */
+define([ "stjs", "as/dto/common/id/ObjectPermId", "dss/dto/service/id/ICustomDSSServiceId" ], function(stjs, ObjectPermId, ICustomDSSServiceId) {
+	var CustomDSSServiceCode = function(code) {
+		ObjectPermId.call(this, code);
+	};
+	stjs.extend(CustomDSSServiceCode, ObjectPermId, [ ObjectPermId, ICustomDSSServiceId ], function(constructor, prototype) {
+		prototype['@type'] = 'dss.dto.service.id.CustomDSSServiceCode';
+		constructor.serialVersionUID = 1;
+	}, {});
+	return CustomDSSServiceCode;
+})
\ No newline at end of file
diff --git a/api-openbis-javascript/src/v3/dss/dto/service/id/ICustomDSSServiceId.js b/api-openbis-javascript/src/v3/dss/dto/service/id/ICustomDSSServiceId.js
new file mode 100644
index 0000000000000000000000000000000000000000..cab39877aab95bef69fc437575280aa06ac1a358
--- /dev/null
+++ b/api-openbis-javascript/src/v3/dss/dto/service/id/ICustomDSSServiceId.js
@@ -0,0 +1,10 @@
+/**
+ * Holds information that uniquely identifies a custom dss service in openBIS.
+ *
+ */
+define([ "stjs", "as/dto/common/id/IObjectId" ], function(stjs, IObjectId) {
+	var ICustomDSSServiceId = function() {
+	};
+	stjs.extend(ICustomDSSServiceId, null, [ IObjectId ], null, {});
+	return ICustomDSSServiceId;
+})