diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/search/NumberFieldSearchCriteriaTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/search/NumberFieldSearchCriteriaTranslator.java
index 5796a8dd4b23f26b6acc9f43b8a685d35cf19463..ca77598c10ef927607dee8d9fa137baa9d7414d7 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/search/NumberFieldSearchCriteriaTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/search/NumberFieldSearchCriteriaTranslator.java
@@ -20,7 +20,12 @@ import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.AbstractNumberValue;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.ISearchCriteria;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.NumberEqualToValue;
 import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.NumberFieldSearchCriteria;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.NumberGreaterOrEqualToValue;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.NumberGreaterToValue;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.NumberLessOrEqualToValue;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.search.NumberLessToValue;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CompareType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriterion;
 
 /**
@@ -46,11 +51,27 @@ public class NumberFieldSearchCriteriaTranslator extends AbstractFieldSearchCrit
         NumberFieldSearchCriteria numberCriteria = (NumberFieldSearchCriteria) criteria;
         AbstractNumberValue valueObject = numberCriteria.getFieldValue();
 
-        if (valueObject instanceof NumberEqualToValue)
+        if (valueObject instanceof NumberLessToValue)
+        {
+            NumberLessToValue lessToValue = (NumberLessToValue) valueObject;
+            return new SearchCriteriaTranslationResult(new DetailedSearchCriterion(getDetailedSearchField(context, numberCriteria), CompareType.LESS_THAN, lessToValue.getValue().toString(), null));
+        } else if (valueObject instanceof NumberLessOrEqualToValue)
+        {
+            NumberLessOrEqualToValue lessOrEqualToValue = (NumberLessOrEqualToValue) valueObject;
+            return new SearchCriteriaTranslationResult(new DetailedSearchCriterion(getDetailedSearchField(context, numberCriteria), CompareType.LESS_THAN_OR_EQUAL, lessOrEqualToValue.getValue().toString(), null));
+        } else if (valueObject instanceof NumberEqualToValue)
         {
             NumberEqualToValue equalToValue = (NumberEqualToValue) valueObject;
             return new SearchCriteriaTranslationResult(new DetailedSearchCriterion(getDetailedSearchField(context, numberCriteria), equalToValue.getValue()
                     .toString()));
+        } else if (valueObject instanceof NumberGreaterOrEqualToValue)
+        {
+            NumberGreaterOrEqualToValue greaterOrEqualToValue = (NumberGreaterOrEqualToValue) valueObject;
+            return new SearchCriteriaTranslationResult(new DetailedSearchCriterion(getDetailedSearchField(context, numberCriteria), CompareType.MORE_THAN_OR_EQUAL, greaterOrEqualToValue.getValue().toString(), null));
+        } else if (valueObject instanceof NumberGreaterToValue)
+        {
+            NumberGreaterToValue greaterToValue = (NumberGreaterToValue) valueObject;
+            return new SearchCriteriaTranslationResult(new DetailedSearchCriterion(getDetailedSearchField(context, numberCriteria), CompareType.MORE_THAN, greaterToValue.getValue().toString(), null));
         } else
         {
             throw new IllegalArgumentException("Unknown number field value: " + valueObject);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/detailed/DetailedQueryBuilder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/detailed/DetailedQueryBuilder.java
index 4be87ee392b581b5d5c54213e234d64ad60eafac..32dfc0395d2f1290785fab4a73665b32e96b13b5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/detailed/DetailedQueryBuilder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/detailed/DetailedQueryBuilder.java
@@ -119,9 +119,24 @@ public class DetailedQueryBuilder
                         fieldAnalyzer = new IgnoreCaseAnalyzer();
                     } else
                     {
-                        fieldPattern =
-                                LuceneQueryBuilder.adaptQuery(criterion.getValue(),
-                                        useWildcardSearchMode);
+                        switch(criterion.getType()) {
+                            case LESS_THAN:
+                                fieldPattern = "{*" + " TO " + criterion.getValue() + "}";
+                                break;
+                            case LESS_THAN_OR_EQUAL:
+                                fieldPattern = "[*" + " TO " + criterion.getValue() + "]";
+                                break;
+                            case EQUALS:
+                                fieldPattern = LuceneQueryBuilder.adaptQuery(criterion.getValue(), useWildcardSearchMode);
+                                break;
+                            case MORE_THAN_OR_EQUAL:
+                                fieldPattern = "[" + criterion.getValue() + " TO " + "*]";
+                                break;
+                            case MORE_THAN:
+                                fieldPattern = "{" + criterion.getValue() + " TO " + "*}";
+                                break;
+                        }
+                        
                         fieldAnalyzer = searchAnalyzer;
                     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CompareType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CompareType.java
index 0a4822ede29c32699d41e1380a787792e6d59b73..1dc83931382a55e346da27be2c096af6a1aca165 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CompareType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CompareType.java
@@ -18,5 +18,5 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
 public enum CompareType
 {
-    LESS_THAN_OR_EQUAL, EQUALS, MORE_THAN_OR_EQUAL
+    LESS_THAN, LESS_THAN_OR_EQUAL, EQUALS, MORE_THAN_OR_EQUAL, MORE_THAN
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchSampleTest.java
index bc1b54e22aad650201f786b0e68ed047c02d3f2a..82d75e0d8091b3e5c9b716783b06f9a6251448b0 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/SearchSampleTest.java
@@ -840,6 +840,47 @@ public class SearchSampleTest extends AbstractSampleTest
         v3api.logout(sessionToken);
     }
 
+    
+    @Test
+    public void testSearchNumeric()
+    {
+        //SIZE: 4711 CODE: 3VCP7
+        //SIZE: 123 CODE: CP-TEST-1
+        //SIZE: 321  CODE: CP-TEST-2
+        //SIZE: 666  CODE: CP-TEST-3
+        
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+        SampleFetchOptions sortByCodeFO = new SampleFetchOptions();
+        sortByCodeFO.sortBy().code().asc();
+        
+        //Less
+        SampleSearchCriteria criteriaL = new SampleSearchCriteria();
+        criteriaL.withNumberProperty("SIZE").thatIsLessTo(321);
+        List<Sample> samplesL = search(sessionToken, criteriaL, sortByCodeFO);
+        assertSampleIdentifiersInOrder(samplesL, "/CISD/CP-TEST-1");
+        
+        //Less or Equals
+        SampleSearchCriteria criteriaLOE = new SampleSearchCriteria();
+        criteriaLOE.withNumberProperty("SIZE").thatIsLessOrEqualTo(321);
+        List<Sample> samplesLOE = search(sessionToken, criteriaLOE, sortByCodeFO);
+        assertSampleIdentifiersInOrder(samplesLOE, "/CISD/CP-TEST-1", "/CISD/CP-TEST-2");
+        
+        //Greater or Equals
+        SampleSearchCriteria criteriaGOE = new SampleSearchCriteria();
+        criteriaGOE.withNumberProperty("SIZE").thatIsGreaterOrEqualTo(321);
+        List<Sample> samplesGOE = search(sessionToken, criteriaGOE, sortByCodeFO);
+        assertSampleIdentifiersInOrder(samplesGOE, "/CISD/3VCP7", "/CISD/CP-TEST-2", "/CISD/CP-TEST-3");
+        
+        //Greater
+        SampleSearchCriteria criteriaG = new SampleSearchCriteria();
+        criteriaG.withNumberProperty("SIZE").thatIsGreaterTo(321);
+        List<Sample> samplesG = search(sessionToken, criteriaG, sortByCodeFO);
+        assertSampleIdentifiersInOrder(samplesG, "/CISD/3VCP7", "/CISD/CP-TEST-3");
+        
+        v3api.logout(sessionToken);
+    }
+
+    
     private void testSearch(String user, SampleSearchCriteria criteria, String... expectedIdentifiers)
     {
         String sessionToken = v3api.login(user, PASSWORD);
@@ -855,12 +896,12 @@ public class SearchSampleTest extends AbstractSampleTest
         assertEquals(samples.size(), expectedCount);
         v3api.logout(sessionToken);
     }
-
+    
     private List<Sample> search(String sessionToken, SampleSearchCriteria criteria, SampleFetchOptions fetchOptions)
     {
         SearchResult<Sample> searchResult =
                 v3api.searchSamples(sessionToken, criteria, fetchOptions);
         return searchResult.getObjects();
     }
-
+    
 }
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/AbstractEntitySearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/AbstractEntitySearchCriteria.java
index 8fd07a00e6f05358130b8a5bfd0beda85d93492c..848b0633486d2b2246916ab0362f189670fff6c7 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/AbstractEntitySearchCriteria.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/AbstractEntitySearchCriteria.java
@@ -58,6 +58,11 @@ public class AbstractEntitySearchCriteria<ID extends IObjectId> extends Abstract
         return with(new TagSearchCriteria());
     }
 
+    public NumberPropertySearchCriteria withNumberProperty(String propertyName)
+    {
+        return with(new NumberPropertySearchCriteria(propertyName));
+    }
+    
     public StringPropertySearchCriteria withProperty(String propertyName)
     {
         return with(new StringPropertySearchCriteria(propertyName));
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberFieldSearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberFieldSearchCriteria.java
index 1ddfedd5e0102db5e011ad771a5d74d4135e806f..6a803a9a184f79945e381fae29b86da9db966693 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberFieldSearchCriteria.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberFieldSearchCriteria.java
@@ -33,5 +33,24 @@ public class NumberFieldSearchCriteria extends AbstractFieldSearchCriteria<Abstr
     {
         setFieldValue(new NumberEqualToValue(number));
     }
+    
+    public void thatIsLessTo(Number number)
+    {
+        setFieldValue(new NumberLessToValue(number));
+    }
+    
+    public void thatIsLessOrEqualTo(Number number)
+    {
+        setFieldValue(new NumberLessOrEqualToValue(number));
+    }
 
+    public void thatIsGreaterTo(Number number)
+    {
+        setFieldValue(new NumberGreaterToValue(number));
+    }
+    
+    public void thatIsGreaterOrEqualTo(Number number)
+    {
+        setFieldValue(new NumberGreaterOrEqualToValue(number));
+    }
 }
\ No newline at end of file
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberGreaterOrEqualToValue.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberGreaterOrEqualToValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e0d3dffb8e3b6d7c8dea8a46edbb1dcd04a12b6
--- /dev/null
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberGreaterOrEqualToValue.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2014 ETH Zuerich, CISD
+ *
+ * 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.shared.api.v3.dto.search;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author juanf
+ */
+@JsonObject("dto.search.NumberGreaterOrEqualToValue")
+public class NumberGreaterOrEqualToValue extends AbstractNumberValue
+{
+
+    private static final long serialVersionUID = 1L;
+
+    public NumberGreaterOrEqualToValue(Number number)
+    {
+        super(number);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "greater or equal to '" + getValue() + "'";
+    }
+
+}
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberGreaterToValue.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberGreaterToValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..c03ff6854327fa3dbe5b0a91d1923c9a9c362a39
--- /dev/null
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberGreaterToValue.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2014 ETH Zuerich, CISD
+ *
+ * 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.shared.api.v3.dto.search;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author juanf
+ */
+@JsonObject("dto.search.NumberGreaterToValue")
+public class NumberGreaterToValue extends AbstractNumberValue
+{
+
+    private static final long serialVersionUID = 1L;
+
+    public NumberGreaterToValue(Number number)
+    {
+        super(number);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "greater to '" + getValue() + "'";
+    }
+
+}
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberLessOrEqualToValue.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberLessOrEqualToValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c4cb40f3b5b25b2fa851c25ffc8463ed6d3f9bb
--- /dev/null
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberLessOrEqualToValue.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2014 ETH Zuerich, CISD
+ *
+ * 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.shared.api.v3.dto.search;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author juanf
+ */
+@JsonObject("dto.search.NumberLessOrEqualToValue")
+public class NumberLessOrEqualToValue extends AbstractNumberValue
+{
+
+    private static final long serialVersionUID = 1L;
+
+    public NumberLessOrEqualToValue(Number number)
+    {
+        super(number);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "less or equal to '" + getValue() + "'";
+    }
+
+}
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberLessToValue.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberLessToValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2d593d8dce6c2bbe5ec0594af800220d4d26b61
--- /dev/null
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/shared/api/v3/dto/search/NumberLessToValue.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2014 ETH Zuerich, CISD
+ *
+ * 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.shared.api.v3.dto.search;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author juanf
+ */
+@JsonObject("dto.search.NumberLessToValue")
+public class NumberLessToValue extends AbstractNumberValue
+{
+
+    private static final long serialVersionUID = 1L;
+
+    public NumberLessToValue(Number number)
+    {
+        super(number);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "less to '" + getValue() + "'";
+    }
+
+}