diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js
new file mode 100644
index 0000000000000000000000000000000000000000..e290949753b61c303b7a283adab7a5b38bbb906d
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 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.
+ */
+
+define([ "stjs", "as/dto/common/search/AbstractFieldSearchCriteria", "as/dto/common/search/SearchFieldType" ],
+	function(stjs, AbstractFieldSearchCriteria, SearchFieldType) {
+	var ControlledVocabularyPropertySearchCriteria = function(propertyName) {
+		AbstractFieldSearchCriteria.call(this, propertyName, SearchFieldType.PROPERTY);
+	};
+	stjs.extend(ControlledVocabularyPropertySearchCriteria, AbstractFieldSearchCriteria, [ AbstractFieldSearchCriteria ],
+		function(constructor, prototype) {
+		prototype['@type'] = 'as.dto.common.search.ControlledVocabularyPropertySearchCriteria';
+		constructor.serialVersionUID = 1;
+
+		prototype.thatEquals = function (value) {
+			this.setFieldValue(value);
+		}
+	}, {
+		fieldType : {
+			name : "Enum",
+			arguments : [ "SearchFieldType" ]
+		}
+	});
+	return ControlledVocabularyPropertySearchCriteria;
+})
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js
new file mode 100644
index 0000000000000000000000000000000000000000..7dd731f1a9a4022c2a30b3de5a4c8231b0abc984
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 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.
+ */
+
+define([ "stjs", "as/dto/common/search/AbstractFieldSearchCriteria", "as/dto/common/search/SearchFieldType" ],
+	function(stjs, AbstractFieldSearchCriteria, SearchFieldType) {
+	var SamplePropertySearchCriteria = function(propertyName) {
+		AbstractFieldSearchCriteria.call(this, propertyName, SearchFieldType.PROPERTY);
+	};
+	stjs.extend(SamplePropertySearchCriteria, AbstractFieldSearchCriteria, [ AbstractFieldSearchCriteria ],
+		function(constructor, prototype) {
+		prototype['@type'] = 'as.dto.common.search.SamplePropertySearchCriteria';
+		constructor.serialVersionUID = 1;
+
+		prototype.thatEquals = function (value) {
+			this.setFieldValue(value);
+		}
+	}, {
+		fieldType : {
+			name : "Enum",
+			arguments : [ "SearchFieldType" ]
+		}
+	});
+	return SamplePropertySearchCriteria;
+})
\ No newline at end of file
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/ControlledVocabularyPropertySearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/ControlledVocabularyPropertySearchCriteria.java
index 2b6a8495ae1abfe58e98f7ccb24d846f342ed1f1..ea420c813b9dd037b0b7bcc1b3e544b5a6522b1d 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/ControlledVocabularyPropertySearchCriteria.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/ControlledVocabularyPropertySearchCriteria.java
@@ -18,7 +18,6 @@ package ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search;
 
 import ch.systemsx.cisd.base.annotation.JsonObject;
 
-// TODO: add JS criteria!
 @JsonObject("as.dto.common.search.ControlledVocabularyPropertySearchCriteria")
 public class ControlledVocabularyPropertySearchCriteria extends AbstractFieldSearchCriteria<String>
 {
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/SamplePropertySearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/SamplePropertySearchCriteria.java
index e6d2627e3aaa9a473a1ee809f619f469eba9acf7..76d8fab3bf4859dc2df4adca8d7347d67ce05152 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/SamplePropertySearchCriteria.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/common/search/SamplePropertySearchCriteria.java
@@ -18,7 +18,6 @@ package ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search;
 
 import ch.systemsx.cisd.base.annotation.JsonObject;
 
-// TODO: add JS criteria
 @JsonObject("as.dto.common.search.SamplePropertySearchCriteria")
 public class SamplePropertySearchCriteria extends AbstractFieldSearchCriteria<String>
 {