diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java
index 9510360361f6329492a6b89d012f24af2b38e6cc..7de5bed2c77677506ab2360c6de8768eb4e007f9 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java
@@ -72,6 +72,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.update.SampleUpdate;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.Space;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.create.SpaceCreation;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.delete.SpaceDeletionOptions;
@@ -594,16 +595,16 @@ public class ApplicationServerApi extends AbstractServer<IApplicationServerApi>
 
     @Override
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
-    @Capability("LIST_SERVICES")
-    public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions)
+    @Capability("SEARCH_SERVICES")
+    public SearchResult<Service> searchServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions)
     {
-        return serviceMethodsExecutor.listServices(sessionToken, fetchOptions);
+        return serviceMethodsExecutor.listServices(sessionToken, searchCriteria, fetchOptions);
     }
 
     @Override
     @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("EXECUTE_SERVICE")
-    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters)
+    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters)
     {
         return serviceMethodsExecutor.executeService(sessionToken, serviceId, parameters);
     }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java
index 9b4557319371d45f75db74d68c2ec321b4c37fbf..899273b421ac38ce9a4fb196907860b124c14c53 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java
@@ -68,6 +68,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.update.SampleUpdate;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.Space;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.create.SpaceCreation;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.delete.SpaceDeletionOptions;
@@ -347,14 +348,14 @@ public class ApplicationServerApiLogger extends AbstractServerLogger implements
     }
 
     @Override
-    public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions)
+    public SearchResult<Service> searchServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions)
     {
-        logAccess(sessionToken, "list-services", "FETCH_OPTIONS(%s)", fetchOptions);
+        logAccess(sessionToken, "search-services", "SEARCH_CRITERIA(%s) FETCH_OPTIONS(%s)", searchCriteria, fetchOptions);
         return null;
     }
 
     @Override
-    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters)
+    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters)
     {
         logAccess(sessionToken, "execute-service", "SERVICE_ID(%s) PARAMETERS(%s)", serviceId, parameters);
         return null;
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java
index f2d5c228e3c8263bc6b7db28662c5f9a70e67e86..e8631cc69a593e888b867449b07cc055970c4f8a 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java
@@ -17,12 +17,13 @@
 package ch.ethz.sis.openbis.generic.server.api.v3.executor.method;
 
 import java.io.Serializable;
-import java.util.List;
 import java.util.Map;
 
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.SearchResult;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria;
 
 /**
  * 
@@ -31,8 +32,8 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
  */
 public interface IServiceMethodsExecutor
 {
-    public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions);
+    public SearchResult<Service> listServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions);
     
-    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters);
+    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters);
 
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java
index 157793c5ed74fb3c27ad893b01d43e26f4b2d26e..98e135382bb97486a2a5ecc15557bef4e6ab11b6 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java
@@ -29,10 +29,12 @@ import javax.annotation.Resource;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.stereotype.Component;
 
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.SearchResult;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
-import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServicePermId;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServiceCode;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria;
 import ch.ethz.sis.openbis.generic.as.api.v3.exceptions.ObjectNotFoundException;
 import ch.ethz.sis.openbis.generic.as.api.v3.exceptions.UnsupportedObjectIdException;
 import ch.ethz.sis.openbis.generic.as.api.v3.plugin.IServiceExecutor;
@@ -75,7 +77,7 @@ public class ServiceMethodsExecutor extends AbstractMethodExecutor implements IS
             Properties properties = sectionProperties.getProperties();
             String className = PropertyUtils.getMandatoryProperty(properties, CLASS_KEY);
             Service service = new Service();
-            service.setCode(code);
+            service.setCode(new ServiceCode(code));
             service.setLabel(properties.getProperty(LABEL_KEY, code));
             service.setDescription(properties.getProperty(DESCRIPTION_KEY, ""));
             IServiceExecutor serviceExecutor = ClassUtils.create(IServiceExecutor.class, className, properties);
@@ -85,19 +87,21 @@ public class ServiceMethodsExecutor extends AbstractMethodExecutor implements IS
     }
     
     @Override
-    public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions)
+    public SearchResult<Service> listServices(String sessionToken, ServiceSearchCriteria searchCriteria, 
+            ServiceFetchOptions fetchOptions)
     {
-        return Collections.unmodifiableList(services);
+        // TODO filter by searchCriteria
+        return new SearchResult<>(Collections.unmodifiableList(services), services.size());
     }
 
     @Override
-    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters)
+    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters)
     {
-        if (serviceId instanceof ServicePermId == false)
+        if (serviceId instanceof ServiceCode == false)
         {
             throw new UnsupportedObjectIdException(serviceId);
         }
-        ServicePermId servicePermId = (ServicePermId) serviceId;
+        ServiceCode servicePermId = (ServiceCode) serviceId;
         IServiceExecutor serviceExecutor = executors.get(servicePermId.getPermId());
         if (serviceExecutor == null)
         {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java
index eea0560157228cc108671e143771550162cb2776..ef11dc9ff30531bcb6a7bdcdee68425cb46893cc 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java
@@ -60,6 +60,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.fetchoptions.SampleTypeF
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.id.SampleIdentifier;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.id.SamplePermId;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServiceCode;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.fetchoptions.SpaceFetchOptions;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.id.SpacePermId;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.tag.fetchoptions.TagFetchOptions;
@@ -546,7 +547,7 @@ public class Generator extends AbstractGenerator
     private static DtoGenerator createServiceGenerator()
     {
         DtoGenerator gen = new DtoGenerator("service", "Service", ServiceFetchOptions.class);
-        addCode(gen);
+        gen.addSimpleField(ServiceCode.class, "code");
         gen.addStringField("label");
         gen.addStringField("description");
         
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java
index 74c6032e9e91e820879c81cc0ffe10a920117a99..42560c141506e0058d9e26c0fcece5cd0012ec3c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java
@@ -26,5 +26,5 @@ import java.util.Map;
  */
 public interface IServiceScriptRunner
 {
-    public Serializable process(Map<String, String> parameters);
+    public Serializable process(Map<String, Serializable> parameters);
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java
index 6ecdbe9d225ef4b1b474a08dd95aea3f01deb51e..b233a6707c5efe31a0ef11c827f2ef50421707e0 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java
@@ -48,7 +48,7 @@ public class JythonBasedServiceExecutor implements IServiceExecutor
     }
 
     @Override
-    public Serializable executeService(Map<String, String> parameters, ServiceContext context)
+    public Serializable executeService(Map<String, Serializable> parameters, ServiceContext context)
     {
         return factory.createServiceRunner(context).process(parameters);
     }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java
index e259c17b920beedc067fa90d6ca33872d5c1fb71..b56cf07faf5b1deb175a72d78b830c50475a42eb 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java
@@ -84,7 +84,7 @@ class ScriptRunnerFactory implements IScriptRunnerFactory
         }
 
         @Override
-        public Serializable process(Map<String, String> parameters)
+        public Serializable process(Map<String, Serializable> parameters)
         {
             Object result = evaluator.evalFunction(PROCESS_FUNCTION_NAME, parameters);
             if (result == null || result instanceof Serializable)
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java
index 0645b6805f7bf8beb6db9986d0aa940434e1d6f1..29dff898981bd85754af755d9be0fbec475f8b8d 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java
@@ -67,6 +67,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.update.SampleUpdate;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.Space;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.create.SpaceCreation;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.delete.SpaceDeletionOptions;
@@ -154,6 +155,8 @@ public interface IApplicationServerApi extends IRpcService
 
     public SearchResult<Material> searchMaterials(String sessionToken, MaterialSearchCriteria searchCriteria, MaterialFetchOptions fetchOptions);
 
+    public SearchResult<Service> searchServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions);
+
     public void deleteSpaces(String sessionToken, List<? extends ISpaceId> spaceIds, SpaceDeletionOptions deletionOptions);
 
     public void deleteProjects(String sessionToken, List<? extends IProjectId> projectIds, ProjectDeletionOptions deletionOptions);
@@ -172,8 +175,6 @@ public interface IApplicationServerApi extends IRpcService
 
     public void confirmDeletions(String sessionToken, List<? extends IDeletionId> deletionIds);
     
-    public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions);
-    
-    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters);
+    public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters);
 
 }
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java
index 7da8d84ebb264fa0bab8f9871020ed3cbb4506c2..2ebc71ef332933b9a633d1bf2c4dbd34d219d3a4 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java
@@ -15,8 +15,8 @@
  */
 package ch.ethz.sis.openbis.generic.as.api.v3.dto.service;
 
-import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.interfaces.ICodeHolder;
 import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServiceCode;
 import ch.ethz.sis.openbis.generic.as.api.v3.exceptions.NotFetchedException;
 import ch.systemsx.cisd.base.annotation.JsonObject;
 import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -27,7 +27,7 @@ import java.io.Serializable;
  * Class automatically generated with DtoGenerator
  */
 @JsonObject("dto.service.Service")
-public class Service implements Serializable, ICodeHolder
+public class Service implements Serializable
 {
     private static final long serialVersionUID = 1L;
 
@@ -35,7 +35,7 @@ public class Service implements Serializable, ICodeHolder
     private ServiceFetchOptions fetchOptions;
 
     @JsonProperty
-    private String code;
+    private ServiceCode code;
 
     @JsonProperty
     private String label;
@@ -58,14 +58,13 @@ public class Service implements Serializable, ICodeHolder
 
     // Method automatically generated with DtoGenerator
     @JsonIgnore
-    @Override
-    public String getCode()
+    public ServiceCode getCode()
     {
         return code;
     }
 
     // Method automatically generated with DtoGenerator
-    public void setCode(String code)
+    public void setCode(ServiceCode code)
     {
         this.code = code;
     }
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServicePermId.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServiceCode.java
similarity index 83%
rename from openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServicePermId.java
rename to openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServiceCode.java
index e9b9a115ea5c9b2343e2d139ec06ff880ef7bb98..8e48b23e5368e8580b118910fda0092d792b678a 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServicePermId.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServiceCode.java
@@ -24,21 +24,21 @@ import ch.systemsx.cisd.base.annotation.JsonObject;
  *
  * @author Franz-Josef Elmer
  */
-@JsonObject("dto.service.id.ServicePermId")
-public class ServicePermId extends ObjectPermId implements IServiceId
+@JsonObject("dto.service.id.ServiceCode")
+public class ServiceCode extends ObjectPermId implements IServiceId
 {
     private static final long serialVersionUID = 1L;
 
-    public ServicePermId(String permId)
+    public ServiceCode(String code)
     {
-        super(permId);
+        super(code);
     }
     //
     // JSON-RPC
     //
 
     @SuppressWarnings("unused")
-    private ServicePermId()
+    private ServiceCode()
     {
     }
 }
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/search/ServiceSearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/search/ServiceSearchCriteria.java
new file mode 100644
index 0000000000000000000000000000000000000000..3461345998c6cf4848f8b53c33d316a9a9f00cc4
--- /dev/null
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/search/ServiceSearchCriteria.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2015 ETH Zuerich, SIS
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search;
+
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.AbstractObjectSearchCriteria;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.CodeSearchCriteria;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.SearchCriteriaToStringBuilder;
+import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId;
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+@JsonObject("dto.service.search.ServiceSearchCriteria")
+public class ServiceSearchCriteria extends AbstractObjectSearchCriteria<IServiceId>
+{
+    private static final long serialVersionUID = 1L;
+
+    public ServiceSearchCriteria()
+    {
+    }
+    
+    public CodeSearchCriteria withCode()
+    {
+        return with(new CodeSearchCriteria());
+    }
+
+    @Override
+    protected SearchCriteriaToStringBuilder createBuilder()
+    {
+        SearchCriteriaToStringBuilder builder = super.createBuilder();
+        builder.setName("SERVICE");
+        return builder;
+    }
+}
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java
index d9e30af0b75f878a77cf0c8b536c7677e3a5cfe5..a4e6cd8c0c8c23ce3181c1b283cc329df42296f0 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java
@@ -29,5 +29,5 @@ import ch.ethz.sis.openbis.generic.as.api.v3.plugin.context.ServiceContext;
  */
 public interface IServiceExecutor
 {
-    public Serializable executeService(Map<String, String> parameters, ServiceContext context);
+    public Serializable executeService(Map<String, Serializable> parameters, ServiceContext context);
 }