diff --git a/api-openbis-java/build.gradle b/api-openbis-java/build.gradle
index 690fdc1c482bcfdc0cb743adf0e5d1c7d6f03966..65d444cc040cf09a07455dce5f9b50d253ed96eb 100644
--- a/api-openbis-java/build.gradle
+++ b/api-openbis-java/build.gradle
@@ -82,8 +82,9 @@ generateTypeScript {
             "ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.ExternalDmsSearchCriteria:DSExternalDmsSearchCriteria"
     ]
     extensionsWithConfiguration = [
-            new ConfiguredExtension(className: 'ch.empa.tsprocessor.MethodExtension', configuration: ['asyncClasses': "[\"ch.ethz.sis.openbis.generic.OpenBIS\"]"]),
-            new ConfiguredExtension(className: 'ch.empa.tsprocessor.OpenBISModuleExtension')
+            new ConfiguredExtension(className: 'ch.empa.tsprocessor.AddMethodsExtension', configuration: ['asyncClasses': "[\"ch.ethz.sis.openbis.generic.OpenBIS\"]"]),
+            new ConfiguredExtension(className: 'ch.empa.tsprocessor.RemovePropertiesExtension'),
+            new ConfiguredExtension(className: 'ch.empa.tsprocessor.AddOpenBISModuleExtension')
     ]
     jackson2ModuleDiscovery = true
     outputFile = file('../api-openbis-javascript/src/v3/openbis.d.ts')
diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/MethodExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddMethodsExtension.java
similarity index 95%
rename from lib-typescriptprocessor/source/java/ch/empa/tsprocessor/MethodExtension.java
rename to lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddMethodsExtension.java
index 3a5cbfa91772b1df003d17e7fe24dc336804114a..2c5aa557545c39c027808e7506c09967181e4472 100644
--- a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/MethodExtension.java
+++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddMethodsExtension.java
@@ -77,7 +77,7 @@ class ProcessingContext {
  *
  * @author Simone Baffelli
  */
-public class MethodExtension extends Extension {
+public class AddMethodsExtension extends Extension {
 
     //Classes whose methods should return a promise instead of a value. This is useful for methods that are called through a REST API/RPC
     //Perhaps an alternative would be to use an annotation to mark the methods that should return a promise
@@ -88,7 +88,7 @@ public class MethodExtension extends Extension {
 
     private List<String> asnycClasses = new ArrayList<>();
 
-    public MethodExtension() {
+    public AddMethodsExtension() {
     }
 
     /**
@@ -96,7 +96,7 @@ public class MethodExtension extends Extension {
      *
      * @param asyncClasses a json string with the list of classes whose methods should return a promise
      */
-    public MethodExtension(List<String> asyncClasses) {
+    public AddMethodsExtension(List<String> asyncClasses) {
         this.asnycClasses = asyncClasses;
     }
 
@@ -178,10 +178,10 @@ public class MethodExtension extends Extension {
 
     private static TsBeanModel addFunctions(TsBeanModel bean, TsModel model, ProcessingContext processingContext, MethodProcessor processor) {
         Class<?> origin = bean.getOrigin();
-        Stream<TsMethodModel> params = Arrays.stream(origin.getMethods()).filter(MethodExtension::filterMethods).map(method -> propertyModelToMethodModel(processor.makeFunction(method, model, processingContext))).flatMap(it -> it.map(Stream::of).orElse(Stream.empty()));
+        Stream<TsMethodModel> params = Arrays.stream(origin.getMethods()).filter(AddMethodsExtension::filterMethods).map(method -> propertyModelToMethodModel(processor.makeFunction(method, model, processingContext))).flatMap(it -> it.map(Stream::of).orElse(Stream.empty()));
         Stream<TsMethodModel> constructors = Arrays.stream(origin.getDeclaredConstructors()).map(constructor -> makeConstructor(constructor, bean, model, processingContext));
         List<TsMethodModel> allMethods = Stream.of(params, constructors).flatMap(it -> it).collect(Collectors.toList());
-        return bean.withProperties(bean.getProperties()).withMethods(allMethods);
+        return bean.withProperties(Collections.emptyList()).withMethods(allMethods);
     }
 
 
@@ -222,9 +222,9 @@ public class MethodExtension extends Extension {
             //Add table of mapped types
             Stream<TsBeanModel> processedBeans = model.getBeans().stream().map(bean -> {
                 if (asnycClasses.contains(bean.getOrigin().getName())) {
-                    return addFunctions(bean, model, processingContext, MethodExtension::makePromiseReturningFunction);
+                    return addFunctions(bean, model, processingContext, AddMethodsExtension::makePromiseReturningFunction);
                 } else {
-                    return addFunctions(bean, model, processingContext, MethodExtension::makeFunction);
+                    return addFunctions(bean, model, processingContext, AddMethodsExtension::makeFunction);
                 }
             });
             return model.withBeans(processedBeans.collect(Collectors.toList()));
diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddOpenBISModuleExtension.java
similarity index 97%
rename from lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java
rename to lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddOpenBISModuleExtension.java
index df4c9e48313401c46c6de68bcd1731626922e503..9bf4ac382aa01af9e5cf09a11bc6d255674b8b8f 100644
--- a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java
+++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddOpenBISModuleExtension.java
@@ -15,7 +15,7 @@ import cz.habarta.typescript.generator.emitter.TsBeanModel;
 import cz.habarta.typescript.generator.emitter.TsModel;
 import cz.habarta.typescript.generator.emitter.TsPropertyModel;
 
-public class OpenBISModuleExtension extends Extension
+public class AddOpenBISModuleExtension extends Extension
 {
     @Override public EmitterExtensionFeatures getFeatures()
     {
diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/RemovePropertiesExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/RemovePropertiesExtension.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a6672518c527b11c7df4a2ef8eb1e4816d0442f
--- /dev/null
+++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/RemovePropertiesExtension.java
@@ -0,0 +1,39 @@
+package ch.empa.tsprocessor;
+
+import java.util.Collections;
+import java.util.List;
+
+import cz.habarta.typescript.generator.Extension;
+import cz.habarta.typescript.generator.compiler.ModelCompiler;
+import cz.habarta.typescript.generator.compiler.TsModelTransformer;
+import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures;
+import cz.habarta.typescript.generator.emitter.TsBeanModel;
+
+public class RemovePropertiesExtension extends Extension
+{
+    @Override public EmitterExtensionFeatures getFeatures()
+    {
+        final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
+        features.generatesRuntimeCode = false;
+        features.generatesModuleCode = true;
+        features.worksWithPackagesMappedToNamespaces = true;
+        features.generatesJaxrsApplicationClient = false;
+        return features;
+    }
+
+    @Override public List<TransformerDefinition> getTransformers()
+    {
+        return List.of(new TransformerDefinition(ModelCompiler.TransformationPhase.AfterDeclarationSorting, (TsModelTransformer) (context, model) ->
+        {
+            List<TsBeanModel> beans = model.getBeans();
+
+            for (TsBeanModel bean : beans)
+            {
+                bean.withProperties(Collections.emptyList());
+            }
+
+            return model.withBeans(beans);
+        }));
+    }
+
+}
diff --git a/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/MethodExtensionTest.java b/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/AddMethodsExtensionTest.java
similarity index 95%
rename from lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/MethodExtensionTest.java
rename to lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/AddMethodsExtensionTest.java
index 3917ed9b17af335f2321b0200ed93e3cc6d42806..36910e8e92db73389bd8193961c3d272ce1eabad 100644
--- a/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/MethodExtensionTest.java
+++ b/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/AddMethodsExtensionTest.java
@@ -25,7 +25,8 @@ import org.testng.annotations.Test;
 import java.util.List;
 
 
-public class MethodExtensionTest {
+public class AddMethodsExtensionTest
+{
 
     interface GenericTestClass<A> {
         A get();
@@ -58,7 +59,7 @@ public class MethodExtensionTest {
     public void setSettings(){
         settings.outputKind = (TypeScriptOutputKind.module);
         settings.jsonLibrary = JsonLibrary.jackson2;
-        settings.extensions = List.of(new MethodExtension());
+        settings.extensions = List.of(new AddMethodsExtension());
     }