diff --git a/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java b/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java
index 9c41ea7..7a2d97b 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java
@@ -243,8 +243,11 @@
 
     private Filter convertToFilter()
     {
-        StringBuffer sb = new StringBuffer("(&");
-
+        StringBuffer sb = new StringBuffer();
+        if ((m_attributes != null) && (m_attributes.length > 1))
+        {
+            sb.append("(&");
+        }
         for (int i = 0; (m_attributes != null) && (i < m_attributes.length); i++)
         {
             // If this is a package import, then convert wild-carded
@@ -265,13 +268,17 @@
                 VersionRange vr = (VersionRange) m_attributes[i].getValue();
                 if (vr.isLowInclusive())
                 {
-                    sb.append("(version>=");
+                    sb.append("(");
+                    sb.append(m_attributes[i].getName());
+                    sb.append(">=");
                     sb.append(vr.getLow().toString());
                     sb.append(")");
                 }
                 else
                 {
-                    sb.append("(!(version<=");
+                    sb.append("(!(");
+                    sb.append(m_attributes[i].getName());
+                    sb.append("<=");
                     sb.append(vr.getLow().toString());
                     sb.append("))");
                 }
@@ -280,13 +287,17 @@
                 {
                     if (vr.isHighInclusive())
                     {
-                        sb.append("(version<=");
+                        sb.append("(");
+                        sb.append(m_attributes[i].getName());
+                        sb.append("<=");
                         sb.append(vr.getHigh().toString());
                         sb.append(")");
                     }
                     else
                     {
-                        sb.append("(!(version>=");
+                        sb.append("(!(");
+                        sb.append(m_attributes[i].getName());
+                        sb.append(">=");
                         sb.append(vr.getHigh().toString());
                         sb.append("))");
                     }
@@ -302,7 +313,10 @@
             }
         }
 
-        sb.append(")");
+        if ((m_attributes != null) && (m_attributes.length > 1))
+        {
+            sb.append(")");
+        }
 
         try
         {
@@ -320,4 +334,4 @@
     {
         return getNamespace() + "; " + getFilter().toString();
     }
-}
\ No newline at end of file
+}
