diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
index 3e4dfe9..c6131f7 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
@@ -18,15 +18,9 @@
  */
 package org.apache.felix.scrplugin.tags.annotation.defaulttag;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.PropertyOption;
-import org.apache.felix.scr.annotations.PropertyUnbounded;
+import org.apache.felix.scr.annotations.*;
 import org.apache.felix.scrplugin.Constants;
 import org.apache.felix.scrplugin.tags.JavaClassDescription;
 import org.apache.felix.scrplugin.tags.JavaField;
@@ -254,7 +248,13 @@
                 map.put(Constants.PROPERTY_CARDINALITY, "-");
             }
         } else if (this.annotation.cardinality() != 0) {
-            map.put(Constants.PROPERTY_CARDINALITY, String.valueOf(this.annotation.cardinality()));
+            if ( this.annotation.cardinality() == Integer.MAX_VALUE ) {
+                map.put(Constants.PROPERTY_CARDINALITY, "+");
+            } else if ( this.annotation.cardinality() == Integer.MIN_VALUE ) {
+                map.put(Constants.PROPERTY_CARDINALITY, "-");
+            } else {
+                map.put(Constants.PROPERTY_CARDINALITY, String.valueOf(this.annotation.cardinality()));
+            }
         }
 
         map.put(Constants.PROPERTY_PRIVATE, String.valueOf(this.annotation.propertyPrivate()));
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java
index a9aa41c..df15404 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java
@@ -55,12 +55,16 @@
     public static int getIntValue(Annotation annotation, String name, final Class<?> clazz) {
         final Object obj = annotation.getNamedParameter(name);
         if ( obj != null ) {
-            if ( obj instanceof String ) {
-                return Integer.valueOf((String)obj);
-            } else if ( obj instanceof Number ) {
+            if ( obj instanceof Number ) {
                 return ((Number)obj).intValue();
             }
-            return Integer.valueOf(obj.toString());
+            final String value = obj.toString();
+            if ( value.equals("Integer.MAX_VALUE") ) {
+                return Integer.MAX_VALUE;
+            } else if ( value.equals("Integer.MIN_VALUE") ) {
+                return Integer.MIN_VALUE;
+            }
+            return Integer.valueOf(value);
         }
         try {
             return (Integer) clazz.getMethod(name).getDefaultValue();
