Index: test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java
===================================================================
--- test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java	(revision 1144053)
+++ test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java	(working copy)
@@ -39,13 +39,13 @@
         RequirementFilter twoeqd = new CompareFilter("2", Operator.EQUALS, "d");
         checkParse(twoeqd, "(2=d)");
         RequirementFilter foodorbarge0dot0 = new CompareFilter("foo.bar",
-                Operator.GREATER_OR_EQUAL, "0.0");
-        checkParse(foodorbarge0dot0, "(foo.bar>=0.0)");
+                Operator.GREATER_THAN, "0.0");
+        checkParse(foodorbarge0dot0, "(foo.bar>0.0)");
         RequirementFilter and = new AndFilter(new RequirementFilter[] {foodorbarge0dot0});
-        checkParse(and, "(&(foo.bar>=0.0))");
+        checkParse(and, "(&(foo.bar>0.0))");
         RequirementFilter and2 = new AndFilter(new RequirementFilter[] {cgt2, twoeqd,
                 foodorbarge0dot0});
-        checkParse(and2, "(&(c>2)(2=d)(foo.bar>=0.0))");
+        checkParse(and2, "(&(c>2)(2=d)(foo.bar>0.0))");
         RequirementFilter spaceAfterAnd = new AndFilter(new RequirementFilter[] {twoeqd});
         checkParse(spaceAfterAnd, "(& (2=d))");
     }
Index: src/java/org/apache/ivy/osgi/obr/xml/OBRXMLWriter.java
===================================================================
--- src/java/org/apache/ivy/osgi/obr/xml/OBRXMLWriter.java	(revision 1144053)
+++ src/java/org/apache/ivy/osgi/obr/xml/OBRXMLWriter.java	(working copy)
@@ -225,21 +225,29 @@
         filter.append("(&");
         Version start = v.getStartVersion();
         if (start != null) {
-            filter.append("(version>");
             if (!v.isStartExclusive()) {
-                filter.append('=');
+                filter.append("(version>=");
+                filter.append(start.toString());
+                filter.append(')');
+            } else {
+                filter.append("(!");
+                filter.append("(version<=");
+                filter.append(start.toString());
+                filter.append("))");
             }
-            filter.append(start.toString());
-            filter.append(')');
         }
         Version end = v.getEndVersion();
         if (end != null) {
-            filter.append("(version<");
             if (!v.isEndExclusive()) {
-                filter.append('=');
+                filter.append("(version<=");
+                filter.append(end.toString());
+                filter.append(')');
+            } else {
+                filter.append("(!");
+                filter.append("(version>=");
+                filter.append(end.toString());
+                filter.append("))");
             }
-            filter.append(end.toString());
-            filter.append(')');
         }
     }
 
Index: src/java/org/apache/ivy/osgi/obr/xml/RequirementAdapter.java
===================================================================
--- src/java/org/apache/ivy/osgi/obr/xml/RequirementAdapter.java	(revision 1144053)
+++ src/java/org/apache/ivy/osgi/obr/xml/RequirementAdapter.java	(working copy)
@@ -121,14 +121,12 @@
                 if (operator == Operator.EQUALS) {
                     throw new UnsupportedFilterException(
                             "Not filter on equals comparaison is not supported");
-                } else if (operator == Operator.GREATER_OR_EQUAL) {
-                    operator = Operator.LOWER_THAN;
                 } else if (operator == Operator.GREATER_THAN) {
-                    operator = Operator.LOWER_OR_EQUAL;
-                } else if (operator == Operator.LOWER_OR_EQUAL) {
-                    operator = Operator.GREATER_THAN;
+                    operator = Operator.LOWER_THAN;
+                    endExclusive = true;
                 } else if (operator == Operator.LOWER_THAN) {
-                    operator = Operator.GREATER_OR_EQUAL;
+                    operator = Operator.GREATER_THAN;
+                    startExclusive = true;
                 }
             }
             if (operator == Operator.EQUALS) {
@@ -140,13 +138,6 @@
                 startExclusive = false;
                 endVersion = new Version(v);
                 endExclusive = false;
-            } else if (operator == Operator.GREATER_OR_EQUAL) {
-                if (startVersion != null) {
-                    throw new UnsupportedFilterException(
-                            "Multiple version matching is not supported");
-                }
-                startVersion = new Version(v);
-                startExclusive = false;
             } else if (operator == Operator.GREATER_THAN) {
                 if (startVersion != null) {
                     throw new UnsupportedFilterException(
@@ -154,13 +145,6 @@
                 }
                 startVersion = new Version(v);
                 startExclusive = true;
-            } else if (operator == Operator.LOWER_OR_EQUAL) {
-                if (endVersion != null) {
-                    throw new UnsupportedFilterException(
-                            "Multiple version matching is not supported");
-                }
-                endVersion = new Version(v);
-                endExclusive = false;
             } else if (operator == Operator.LOWER_THAN) {
                 if (endVersion != null) {
                     throw new UnsupportedFilterException(
Index: src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java
===================================================================
--- src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java	(revision 1144053)
+++ src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java	(working copy)
@@ -140,21 +140,13 @@
                 case '=':
                     return Operator.EQUALS;
                 case '>':
-                    if (readNext() == '=') {
-                        return Operator.GREATER_OR_EQUAL;
-                    }
-                    unread();
                     return Operator.GREATER_THAN;
                 case '<':
-                    if (readNext() == '=') {
-                        return Operator.LOWER_OR_EQUAL;
-                    }
-                    unread();
                     return Operator.LOWER_THAN;
                 default:
                     break;
             }
-            throw new ParseException("Expecting an operator: =, <, <=, > or >=", pos);
+            throw new ParseException("Expecting an operator: =, <, >", pos);
         }
 
         private RequirementFilter parseAnd() throws ParseException {
Index: src/java/org/apache/ivy/osgi/obr/filter/CompareFilter.java
===================================================================
--- src/java/org/apache/ivy/osgi/obr/filter/CompareFilter.java	(revision 1144053)
+++ src/java/org/apache/ivy/osgi/obr/filter/CompareFilter.java	(working copy)
@@ -28,23 +28,15 @@
 
         public static Operator LOWER_THAN = new Operator();
 
-        public static Operator LOWER_OR_EQUAL = new Operator();
-
         public static Operator GREATER_THAN = new Operator();
 
-        public static Operator GREATER_OR_EQUAL = new Operator();
-
         public String toString() {
             if (this == EQUALS)
                 return "=";
             if (this == GREATER_THAN)
                 return ">";
-            if (this == GREATER_OR_EQUAL)
-                return ">=";
             if (this == LOWER_THAN)
                 return "<";
-            if (this == LOWER_OR_EQUAL)
-                return "<=";
             return super.toString();
         }
     }
