diff --git a/enforcer-api/pom.xml b/enforcer-api/pom.xml
index a0b56ac..c267368 100644
--- a/enforcer-api/pom.xml
+++ b/enforcer-api/pom.xml
@@ -24,11 +24,11 @@
   <parent>
     <groupId>org.apache.maven.enforcer</groupId>
     <artifactId>enforcer</artifactId>
-    <version>2-SNAPSHOT</version>
+    <version>1.0-beta-1</version>
   </parent>
 
   <artifactId>enforcer-api</artifactId>
-  <version>1.0-alpha-5-SNAPSHOT</version>
+  <version>1.0-beta-1</version>
   <packaging>jar</packaging>
 
   <name>Enforcer API</name>
diff --git a/enforcer-api/src/custom-rule-sample/pom.xml b/enforcer-api/src/custom-rule-sample/pom.xml
index 9940ba9..6e0e814 100644
--- a/enforcer-api/src/custom-rule-sample/pom.xml
+++ b/enforcer-api/src/custom-rule-sample/pom.xml
@@ -8,7 +8,7 @@
 	<name>My Custom Rule</name>
 	<description>This is my custom rule.</description>
 	<properties>
-	  <api.version>1.0-alpha-4</api.version>
+	  <api.version>1.0-beta-1</api.version>
 	  <maven.version>2.0.9</maven.version>
 	</properties>
 	<build>	
diff --git a/enforcer-api/src/custom-rule-sample/usage-pom.xml b/enforcer-api/src/custom-rule-sample/usage-pom.xml
index db70b90..fbb27dd 100644
--- a/enforcer-api/src/custom-rule-sample/usage-pom.xml
+++ b/enforcer-api/src/custom-rule-sample/usage-pom.xml
@@ -9,7 +9,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-enforcer-plugin</artifactId>
-                <version>1.0-alpha-4</version>
+                <version>1.0-beta-1</version>
                 <dependencies>
                     <dependency>
                         <groupId>custom-rule</groupId>
diff --git a/enforcer-api/src/site/apt/writing-a-custom-rule.apt b/enforcer-api/src/site/apt/writing-a-custom-rule.apt
index fee48cd..936f5c0 100644
--- a/enforcer-api/src/site/apt/writing-a-custom-rule.apt
+++ b/enforcer-api/src/site/apt/writing-a-custom-rule.apt
@@ -43,7 +43,7 @@
   <name>My Custom Rule</name>
   <description>This is my custom rule.</description>
   <properties>
-    <api.version>1.0-alpha-4</api.version>
+    <api.version>1.0-beta-1</api.version>
     <maven.version>2.0.9</maven.version>
   </properties>
   <build>
@@ -95,7 +95,7 @@
    
    There are several methods that must be implemented related to caching.
    
-   Here's a sample class that shows how to access the helper methods and retreive components by class name from the helper:
+   Here's a sample class that shows how to access the helper methods and retrieve components by class name from the helper:
    
 +---+
 package org.apache.maven.enforcer.rule;
@@ -135,7 +135,7 @@
             String target = (String) helper.evaluate( "${project.build.directory}" );
             String artifactId = (String) helper.evaluate( "${project.artifactId}" );
 
-            // retreive any component out of the session directly
+            // retrieveany component out of the session directly
             ArtifactResolver resolver = (ArtifactResolver) helper.getComponent( ArtifactResolver.class );
             RuntimeInformation rti = (RuntimeInformation) helper.getComponent( RuntimeInformation.class );
 
@@ -253,7 +253,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.0-alpha-4</version>
+        <version>1.0-beta-1</version>
         <dependencies>
           <dependency>
             <groupId>custom-rule</groupId>
diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml
index 7caeedd..6e06dc6 100644
--- a/enforcer-rules/pom.xml
+++ b/enforcer-rules/pom.xml
@@ -24,11 +24,11 @@
   <parent>
     <groupId>org.apache.maven.enforcer</groupId>
     <artifactId>enforcer</artifactId>
-    <version>2-SNAPSHOT</version>
+    <version>1.0-beta-1</version>
   </parent>
 
   <artifactId>enforcer-rules</artifactId>
-  <version>1.0-alpha-5-SNAPSHOT</version>
+  <version>1.0-beta-1</version>
   <packaging>jar</packaging>
 
   <name>Enforcer Rules</name>
diff --git a/enforcer-rules/src/it/requirePluginsUnchecked/pom.xml b/enforcer-rules/src/it/requirePluginsUnchecked/pom.xml
index a63ecf1..0d20c16 100644
--- a/enforcer-rules/src/it/requirePluginsUnchecked/pom.xml
+++ b/enforcer-rules/src/it/requirePluginsUnchecked/pom.xml
@@ -13,7 +13,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>2.0-beta-6</version>
+          
         </plugin>
       </plugins>
     </pluginManagement>
@@ -21,7 +21,7 @@
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.0-SNAPSHOT</version>
+        <version>1.0-beta-1-SNAPSHOT</version>
         <executions>
           <execution>
             <goals>
@@ -32,8 +32,9 @@
                 <requirePluginVersions>
                   <phases>site</phases>
                   <unCheckedPlugins>
-                    <unCheckedPlugin>org.apache.maven.plugins:maven-enforcer-plugin</unCheckedPlugin>
+                    <unCheckedPlugin>org.apache.maven.plugins:maven-site-plugin</unCheckedPlugin>
                   </unCheckedPlugins>
+                 <unCheckedPluginList>org.apache.maven.plugins : maven-enforcer-plugin</unCheckedPluginList>
                 </requirePluginVersions>
               </rules>
             </configuration>
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
index 4f5dd99..4a50c8c 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
@@ -21,6 +21,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -66,6 +67,7 @@
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.CollectionUtils;
 import org.codehaus.plexus.util.ReflectionUtils;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -108,9 +110,16 @@
 
     /**
      * Plugins to skip for version enforcement. The plugins should be specified in the form:
-     * <code>group:artifactId</code>.
+     * <code>group:artifactId</code>. NOTE: This is deprecated, use unCheckedPluginList instead.
+     * @deprecated
      */
     public List unCheckedPlugins;
+    
+    /**
+     * Same as unCheckedPlugins but as a comma list to better support properties. Sample form:
+     * <code>group:artifactId,group2:artifactId2</code>
+     */
+    public String unCheckedPluginList;
 
     /** The plugin manager. */
     private PluginManager pluginManager;
@@ -191,8 +200,9 @@
             allPlugins = addAdditionalPlugins( allPlugins, additionalPlugins );
             allPlugins.addAll( getProfilePlugins( project ) );
 
+            
             // pull out any we should skip
-            allPlugins = (Set) removeUncheckedPlugins( unCheckedPlugins, allPlugins );
+            allPlugins = (Set) removeUncheckedPlugins( combineUncheckedPlugins( unCheckedPlugins, unCheckedPluginList ), allPlugins );
 
             // there's nothing to do here
             if ( allPlugins.isEmpty() )
@@ -351,6 +361,32 @@
     }
 
     /**
+     * Combines the old Collection with the new comma separated list.
+     * @param uncheckedPlugins
+     * @param uncheckedPluginsList
+     * @return
+     */
+    public Collection combineUncheckedPlugins( Collection uncheckedPlugins, String uncheckedPluginsList )
+    {
+        //if the comma list is empty, then there's nothing to do here.
+        if ( StringUtils.isNotEmpty( uncheckedPluginsList ) )
+        {
+            //make sure there is a collection to add to.
+            if ( uncheckedPlugins == null )
+            {
+                uncheckedPlugins = new HashSet();
+            }
+            else if (!uncheckedPlugins.isEmpty() && log != null)
+            {
+                log.warn( "The parameter 'unCheckedPlugins' is deprecated. Use 'unCheckedPluginList' instead" );
+            }
+
+            uncheckedPlugins.addAll( Arrays.asList( uncheckedPluginsList.split( "," ) ) );
+        }
+        return uncheckedPlugins;
+    }
+    
+    /**
      * Add the additional plugins if they don't exist yet.
      * 
      * @param existing the existing
@@ -399,8 +435,8 @@
             if ( pluginStrings.length == 2 )
             {
                 Plugin plugin = new Plugin();
-                plugin.setGroupId( pluginStrings[0] );
-                plugin.setArtifactId( pluginStrings[1] );
+                plugin.setGroupId( StringUtils.strip( pluginStrings[0] ) );
+                plugin.setArtifactId( StringUtils.strip( pluginStrings[1] ) );
 
                 return plugin;
             }
diff --git a/enforcer-rules/src/site/apt/requireJavaVersion.apt b/enforcer-rules/src/site/apt/requireJavaVersion.apt
index 30b4737..5817695 100644
--- a/enforcer-rules/src/site/apt/requireJavaVersion.apt
+++ b/enforcer-rules/src/site/apt/requireJavaVersion.apt
@@ -58,7 +58,7 @@
 JDK Version: 1.5.0_11 normalized as: 1.5.0-11
 OS Info: Arch: x86 Family: windows Name: windows xp Version: 5.1
 +---+
-  
+ 
    Sample Plugin Configuration:
    
 +---+
@@ -91,4 +91,5 @@
   [...]
 </project>
 +---+
-  
\ No newline at end of file
+  
+  If you would like to enforce a certain vendor string for the JDK, you would use the {{{./requireProperty.html}RequireProperty}} rule, and check the java.vendor property with a regular expression.
\ No newline at end of file
diff --git a/enforcer-rules/src/site/apt/requirePluginVersions.apt b/enforcer-rules/src/site/apt/requirePluginVersions.apt
index 81fa7a1..78e27d9 100644
--- a/enforcer-rules/src/site/apt/requirePluginVersions.apt
+++ b/enforcer-rules/src/site/apt/requirePluginVersions.apt
@@ -46,7 +46,7 @@
      are plugins that may not be in the poms but are used anyway, like help, eclipse etc.
      The plugins should be specified in the form: group:artifactId.
 
-   * unCheckedPlugins - A list of plugins to skip version checking. Ie allow no version, or snapshots, etc. The plugins should be specified in the form: group:artifactId.
+   * unCheckedPluginsList - A comma separated list of plugins to skip version checking. Ie allow no version, or snapshots, etc. The plugins should be specified in the form: group:artifactId.
 
 
    []
@@ -78,9 +78,10 @@
                    <phases>clean,deploy,site</phases>
                    <additionalPlugins>
                      <additionalPlugin>org.apache.maven.plugins:maven-eclipse-plugin</additionalPlugin>
-                     <additionalPlugin>org.apache.maven.plugins:maven-ide-plugin</additionalPlugin>
+                     <additionalPlugin>org.apache.maven.plugins:maven-reactor-plugin</additionalPlugin>
                    </additionalPlugins>
                 </requirePluginVersions>
+                <unCheckedPluginsList>org.apache.maven.plugins:maven-enforcer-plugin,org.apache.maven.plugins:maven-idea-plugin</unCheckedPluginsList>
               </rules>
             </configuration>
           </execution>
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
index 4449e1a..0997e3c 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
@@ -341,7 +341,8 @@
         plugins.add( EnforcerTestUtils.newPlugin( "group", "foo2", "" ) );
 
         List unchecked = new ArrayList();
-        unchecked.add( "group:a-artifact" );
+        //intentionally inserting spaces to make sure they are handled correctly.
+        unchecked.add( "group : a-artifact" );
 
         Collection results = rule.removeUncheckedPlugins( unchecked, plugins );
         
@@ -351,11 +352,132 @@
         assertEquals( 2, results.size() );
         assertContainsPlugin( "group", "foo", results );
         assertContainsPlugin( "group", "foo2", results );
-        assertNotContainPlugin( "group", "a-artifact", plugins );
+        assertNotContainPlugin( "group", "a-artifact", results );
 
     }
     
     /**
+     * Test combining values from both lists
+     */
+    public void testCombinePlugins()
+    {
+        RequirePluginVersions rule = new RequirePluginVersions();
+
+        Set plugins = new HashSet();
+        plugins.add( "group:a-artifact" );
+        plugins.add( "group:foo" );
+        plugins.add( "group:foo2" );
+
+        Collection results = rule.combineUncheckedPlugins( plugins, "group2:a,group3:b" ); 
+
+        // make sure only one new plugin has been added
+        assertNotNull( results );
+        assertEquals( 5, results.size() );
+        assertTrue( results.contains( "group:foo") );
+        assertTrue( results.contains( "group:foo2") );
+        assertTrue( results.contains( "group:a-artifact") );
+        assertTrue( results.contains( "group2:a") );
+        assertTrue( results.contains( "group3:b") );
+    }
+    
+    /**
+     * Test combining with an empty list
+     */
+    public void testCombinePlugins1()
+    {
+        RequirePluginVersions rule = new RequirePluginVersions();
+
+        Set plugins = new HashSet();
+        Collection results = rule.combineUncheckedPlugins( plugins, "group2:a,group3:b" ); 
+        
+
+        // make sure only one new plugin has been added
+        assertNotNull( results );
+        assertEquals( 2, results.size() );
+        assertTrue( results.contains( "group2:a") );
+        assertTrue( results.contains( "group3:b") );
+    }
+
+    /**
+     * Test combining with a null list
+     */
+    public void testCombinePlugins2()
+    {
+        RequirePluginVersions rule = new RequirePluginVersions();
+
+        Collection results = rule.combineUncheckedPlugins( null, "group2:a,group3:b" ); 
+        
+
+        // make sure only one new plugin has been added
+        assertNotNull( results );
+        assertEquals( 2, results.size() );
+        assertTrue( results.contains( "group2:a") );
+        assertTrue( results.contains( "group3:b") );
+    }
+
+    /**
+     * Test combining with an empty string
+     */
+    public void testCombinePlugins3()
+    {
+        RequirePluginVersions rule = new RequirePluginVersions();
+
+        Set plugins = new HashSet();
+        plugins.add( "group:a-artifact" );
+        plugins.add( "group:foo" );
+        plugins.add( "group:foo2" );
+                     
+        Collection results = rule.combineUncheckedPlugins( plugins, "" ); 
+        assertNotNull( results );
+        assertEquals( 3, results.size() );
+        assertTrue( results.contains( "group:foo") );
+        assertTrue( results.contains( "group:foo2") );
+        assertTrue( results.contains( "group:a-artifact") );
+    }
+
+    /**
+     * Test combining with a null string
+     */
+    public void testCombinePlugins4()
+    {
+        RequirePluginVersions rule = new RequirePluginVersions();
+
+        Set plugins = new HashSet();
+        plugins.add( "group:a-artifact" );
+        plugins.add( "group:foo" );
+        plugins.add( "group:foo2" );
+                     
+        Collection results = rule.combineUncheckedPlugins( plugins, null ); 
+        assertNotNull( results );
+        assertEquals( 3, results.size() );   
+        assertTrue( results.contains( "group:foo") );
+        assertTrue( results.contains( "group:foo2") );
+        assertTrue( results.contains( "group:a-artifact") );
+    } 
+
+    /**
+     * Test combining with an invalid plugin string
+     */
+    public void testCombinePlugins5()
+    {
+        RequirePluginVersions rule = new RequirePluginVersions();
+
+        Set plugins = new HashSet();
+        plugins.add( "group:a-artifact" );
+        plugins.add( "group:foo" );
+        plugins.add( "group:foo2" );
+        
+        Collection results = rule.combineUncheckedPlugins( plugins, "a" ); 
+        assertNotNull( results );
+        assertEquals( 4, results.size() ); 
+        assertTrue( results.contains( "group:foo") );
+        assertTrue( results.contains( "group:foo2") );
+        //this should be here, the checking of a valid plugin string happens in another method.
+        assertTrue( results.contains( "a") );
+    }
+
+    
+    /**
      * Assert contains plugin.
      * 
      * @param group the group
diff --git a/maven-enforcer-plugin/pom.xml b/maven-enforcer-plugin/pom.xml
index 0530fef..5d556ed 100644
--- a/maven-enforcer-plugin/pom.xml
+++ b/maven-enforcer-plugin/pom.xml
@@ -20,16 +20,17 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
+  <inceptionYear>2007</inceptionYear>
 
   <parent>
     <groupId>org.apache.maven.enforcer</groupId>
     <artifactId>enforcer</artifactId>
-    <version>2-SNAPSHOT</version>
+    <version>1.0-beta-1</version>
   </parent>
 
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-enforcer-plugin</artifactId>
-  <version>1.0-alpha-5-SNAPSHOT</version>
+  <version>1.0-beta-1</version>
   <packaging>maven-plugin</packaging>
 
   <name>Maven Enforcer Plugin</name>
diff --git a/pom.xml b/pom.xml
index 0643c46..83a8589 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
   <groupId>org.apache.maven.enforcer</groupId>
   <artifactId>enforcer</artifactId>
-  <version>2-SNAPSHOT</version>
+  <version>1.0-beta-1</version>
   <packaging>pom</packaging>
 
   <name>Enforcer</name>
@@ -133,9 +133,9 @@
   </modules>
 
   <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/enforcer/trunk/</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/enforcer/trunk/</developerConnection>
-    <url>http://svn.apache.org/viewcvs.cgi/maven/enforcer/trunk</url>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/enforcer/tags/enforcer-1.0-beta-1</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/enforcer/tags/enforcer-1.0-beta-1</developerConnection>
+    <url>http://svn.apache.org/viewcvs.cgi/maven/enforcer/tags/enforcer-1.0-beta-1</url>
   </scm>
   <issueManagement>
     <system>jira</system>
@@ -149,8 +149,6 @@
   </distributionManagement>
 
   <properties>
-    <api.version>1.0-alpha-4-SNAPSHOT</api.version>
-    <rules.version>1.0-alpha-4-SNAPSHOT</rules.version>
     <maven.version>2.0.9</maven.version>
     <maven.plugin.plugin.version>2.4.3</maven.plugin.plugin.version>
     <site.deploy.url>scp://people.apache.org/www/maven.apache.org</site.deploy.url>
@@ -161,17 +159,17 @@
       <dependency>
         <groupId>org.apache.maven.enforcer</groupId>
         <artifactId>enforcer-api</artifactId>
-        <version>1.0-alpha-5-SNAPSHOT</version>
+        <version>${project.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.maven.enforcer</groupId>
         <artifactId>enforcer-rules</artifactId>
-        <version>1.0-alpha-5-SNAPSHOT</version>
+        <version>${project.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.maven.enforcer</groupId>
         <artifactId>enforcer-rules</artifactId>
-        <version>1.0-alpha-5-SNAPSHOT</version>
+        <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
@@ -198,7 +196,7 @@
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-utils</artifactId>
-        <version>1.5.1</version>
+        <version>1.5.8</version>
       </dependency>
       <dependency>
         <groupId>junit</groupId>
