diff --git a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/mxml/TooManyStatesInMxmlRule.java b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/mxml/TooManyStatesInMxmlRule.java
index d0ac6c5..025e7e0 100644
--- a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/mxml/TooManyStatesInMxmlRule.java
+++ b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/mxml/TooManyStatesInMxmlRule.java
@@ -17,14 +17,12 @@
 package com.adobe.ac.pmd.rules.mxml;
 
 import java.util.List;
-import java.util.Map;
 
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 
 import net.sourceforge.pmd.PropertyDescriptor;
-
 import org.w3c.dom.Document;
 
 import com.adobe.ac.pmd.IFlexViolation;
@@ -68,7 +66,7 @@
     */
    public int getThreshold()
    {
-      return getIntProperty( propertyDescriptorFor( getThresholdName() ) );
+       return getProperty( (PropertyDescriptor<Integer>) getPropertyDescriptor( getThresholdName() ) );
    }
 
    /*
@@ -146,14 +144,4 @@
                        String.valueOf( getActualValueForTheCurrentViolation() ) );
       }
    }
-
-   /*
-    * (non-Javadoc)
-    * @see net.sourceforge.pmd.CommonAbstractRule#propertiesByName()
-    */
-   @Override
-   protected final Map< String, PropertyDescriptor > propertiesByName()
-   {
-      return getThresholdedRuleProperties( this );
-   }
 }
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/naming/TooShortVariableRule.java b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/naming/TooShortVariableRule.java
index 6536e90..6c30631 100644
--- a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/naming/TooShortVariableRule.java
+++ b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/naming/TooShortVariableRule.java
@@ -16,14 +16,12 @@
  */
 package com.adobe.ac.pmd.rules.naming;
 
-import java.util.Map;
 import java.util.regex.Matcher;
 
-import net.sourceforge.pmd.PropertyDescriptor;
-
 import com.adobe.ac.pmd.rules.core.AbstractRegexpBasedRule;
 import com.adobe.ac.pmd.rules.core.ViolationPriority;
 import com.adobe.ac.pmd.rules.core.thresholded.IThresholdedRule;
+import net.sourceforge.pmd.PropertyDescriptor;
 
 /**
  * @author xagnetti
@@ -61,7 +59,7 @@
     */
    public final int getThreshold()
    {
-      return getIntProperty( propertyDescriptorFor( getThresholdName() ) );
+       return getProperty( (PropertyDescriptor<Integer>) getPropertyDescriptor( getThresholdName() ) );
    }
 
    /*
@@ -138,14 +136,4 @@
       }
       return result;
    }
-
-   /*
-    * (non-Javadoc)
-    * @see net.sourceforge.pmd.CommonAbstractRule#propertiesByName()
-    */
-   @Override
-   protected final Map< String, PropertyDescriptor > propertiesByName()
-   {
-      return getThresholdedRuleProperties( this );
-   }
 }
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/switchrules/TooFewBrancheInSwitchStatementRule.java b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/switchrules/TooFewBrancheInSwitchStatementRule.java
index 2f4aae9..b896f49 100644
--- a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/switchrules/TooFewBrancheInSwitchStatementRule.java
+++ b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/main/java/com/adobe/ac/pmd/rules/switchrules/TooFewBrancheInSwitchStatementRule.java
@@ -61,7 +61,7 @@
     */
    public final int getThreshold()
    {
-      return getIntProperty( propertyDescriptorFor( getThresholdName() ) );
+       return getProperty( (PropertyDescriptor<Integer>) getPropertyDescriptor( getThresholdName() ) );
    }
 
    /*
@@ -87,16 +87,6 @@
 
    /*
     * (non-Javadoc)
-    * @see net.sourceforge.pmd.CommonAbstractRule#propertiesByName()
-    */
-   @Override
-   protected final Map< String, PropertyDescriptor > propertiesByName()
-   {
-      return getThresholdedRuleProperties( this );
-   }
-
-   /*
-    * (non-Javadoc)
     * @see
     * com.adobe.ac.pmd.rules.core.AbstractAstFlexRule#visitSwitch(com.adobe.
     * ac.pmd.parser.IParserNode)
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/test/java/com/adobe/ac/pmd/rules/parameterized/ParameterizedRegExpBasedRuleTest.java b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/test/java/com/adobe/ac/pmd/rules/parameterized/ParameterizedRegExpBasedRuleTest.java
index 09d15d4..0fac7e7 100644
--- a/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/test/java/com/adobe/ac/pmd/rules/parameterized/ParameterizedRegExpBasedRuleTest.java
+++ b/FlexPMD/flex-pmd-java/flex-pmd-ruleset/src/test/java/com/adobe/ac/pmd/rules/parameterized/ParameterizedRegExpBasedRuleTest.java
@@ -33,7 +33,8 @@
    {
       final ParameterizedRegExpBasedRule rule = new ParameterizedRegExpBasedRule();
 
-      rule.setProperty( rule.propertyDescriptorFor( ParameterizedRegExpBasedRule.PROPERTY_NAME ),
+
+      rule.setProperty( ParameterizedRegExpBasedRule.VIOLATION_SUPPRESS_REGEX_DESCRIPTOR,
                         ".*\\s+Alert.show\\(.*" );
       rule.compilePattern();
       return rule;
