Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 8837)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 8838)
@@ -33,4 +33,5 @@
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
+import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Predicate;
@@ -613,9 +614,17 @@
         private final String key;
         private final String referenceValue;
+        private final Double referenceNumber;
         private final int compareMode;
+        private static final Pattern ISO8601 = Pattern.compile("\\d+-\\d+-\\d+");
 
         public ValueComparison(String key, String referenceValue, int compareMode) {
             this.key = key;
             this.referenceValue = referenceValue;
+            Double v = null;
+            try {
+                v = Double.parseDouble(referenceValue);
+            } catch (NumberFormatException ignore) {
+            }
+            this.referenceNumber = v;
             this.compareMode = compareMode;
         }
@@ -623,14 +632,18 @@
         @Override
         public boolean match(OsmPrimitive osm) {
-            int compareResult;
-            String currentValue = osm.get(key);
-            if (currentValue == null) return false;
-            try {
-                compareResult = Double.compare(
-                        Double.parseDouble(currentValue),
-                        Double.parseDouble(referenceValue)
-                );
-            } catch (NumberFormatException ignore) {
-                compareResult = osm.get(key).compareTo(referenceValue);
+            final String currentValue = osm.get(key);
+            final int compareResult;
+            if (currentValue == null) {
+                return false;
+            } else if (ISO8601.matcher(currentValue).matches() || ISO8601.matcher(referenceValue).matches()) {
+                compareResult = currentValue.compareTo(referenceValue);
+            } else if (referenceNumber != null) {
+                try {
+                    compareResult = Double.compare(Double.parseDouble(currentValue), referenceNumber);
+                } catch (NumberFormatException ignore) {
+                    return false;
+                }
+            } else {
+                compareResult = AlphanumComparator.getInstance().compare(currentValue, referenceValue);
             }
             return compareMode < 0 ? compareResult < 0 : compareMode > 0 ? compareResult > 0 : compareResult == 0;
Index: /trunk/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java	(revision 8837)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java	(revision 8838)
@@ -54,4 +54,5 @@
         Assert.assertFalse(c1.match(newPrimitive("start_date", "1000")));
         Assert.assertTrue(c1.match(newPrimitive("start_date", "101010")));
+
         final SearchCompiler.Match c2 = SearchCompiler.compile("start_date<1960");
         Assert.assertTrue(c2.match(newPrimitive("start_date", "1950-01-01")));
@@ -60,11 +61,23 @@
         Assert.assertTrue(c2.match(newPrimitive("start_date", "1000")));
         Assert.assertTrue(c2.match(newPrimitive("start_date", "200")));
+
         final SearchCompiler.Match c3 = SearchCompiler.compile("name<I");
         Assert.assertTrue(c3.match(newPrimitive("name", "Alpha")));
         Assert.assertFalse(c3.match(newPrimitive("name", "Sigma")));
+
         final SearchCompiler.Match c4 = SearchCompiler.compile("\"start_date\"<1960");
         Assert.assertTrue(c4.match(newPrimitive("start_date", "1950-01-01")));
         Assert.assertFalse(c4.match(newPrimitive("start_date", "2000")));
 
+        final SearchCompiler.Match c5 = SearchCompiler.compile("height>180");
+        Assert.assertTrue(c5.match(newPrimitive("height", "200")));
+        Assert.assertTrue(c5.match(newPrimitive("height", "99999")));
+        Assert.assertFalse(c5.match(newPrimitive("height", "50")));
+        Assert.assertFalse(c5.match(newPrimitive("height", "-9999")));
+        Assert.assertFalse(c5.match(newPrimitive("height", "fixme")));
+
+        final SearchCompiler.Match c6 = SearchCompiler.compile("name>C");
+        Assert.assertTrue(c6.match(newPrimitive("name", "Delta")));
+        Assert.assertFalse(c6.match(newPrimitive("name", "Alpha")));
     }
 
