Index: tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml
===================================================================
--- tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml	(revision 7045)
+++ tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml	(working copy)
@@ -16,11 +16,12 @@
       joinColumn:
         name: address_id
         referencedColumnName: id
+      cascade: [ remove ]
   oneToMany:
     phonenumbers:
       targetEntity: Phonenumber
       mappedBy: user
-      cascade: cascadePersist
+      cascade: [ persist ]
   manyToMany:
     groups:
       targetEntity: Group
@@ -32,6 +33,8 @@
         inverseJoinColumns:
           group_id:
             referencedColumnName: id
+      cascade:
+        - all
   lifecycleCallbacks:
     doStuffOnPrePersist: prePersist
     doStuffOnPostPersist: postPersist
\ No newline at end of file
Index: tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml
===================================================================
--- tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml	(revision 7045)
+++ tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml	(working copy)
@@ -20,6 +20,9 @@
         
         <one-to-one field="address" target-entity="Address">
             <join-column name="address_id" referenced-column-name="id"/>
+			<cascade>
+				<cascade-remove />
+			</cascade>
         </one-to-one>
         
         <one-to-many field="phonenumbers" target-entity="Phonenumber" mapped-by="user">
@@ -37,8 +40,11 @@
                     <join-column name="group_id" referenced-column-name="id"/>
                 </inverse-join-columns>
             </join-table>
+			<cascade>
+				<cascade-all/>
+			</cascade>
         </many-to-many>
         
     </entity>
 
-</doctrine-mapping>
\ No newline at end of file
+</doctrine-mapping>
Index: tests/Doctrine/Tests/ORM/Mapping/MappingDriverTest.php
===================================================================
--- tests/Doctrine/Tests/ORM/Mapping/MappingDriverTest.php	(revision 7045)
+++ tests/Doctrine/Tests/ORM/Mapping/MappingDriverTest.php	(working copy)
@@ -67,6 +67,12 @@
         $this->assertTrue($class->associationMappings['address'] instanceof \Doctrine\ORM\Mapping\OneToOneMapping);
         $this->assertTrue(isset($class->associationMappings['address']));
         $this->assertTrue($class->associationMappings['address']->isOwningSide);
+        // Check cascading
+        $this->assertTrue($class->associationMappings['address']->isCascadeRemove);
+        $this->assertFalse($class->associationMappings['address']->isCascadePersist);
+        $this->assertFalse($class->associationMappings['address']->isCascadeRefresh);
+        $this->assertFalse($class->associationMappings['address']->isCascadeDetach);
+        $this->assertFalse($class->associationMappings['address']->isCascadeMerge);
         
         $this->assertTrue($class->associationMappings['phonenumbers'] instanceof \Doctrine\ORM\Mapping\OneToManyMapping);
         $this->assertTrue(isset($class->associationMappings['phonenumbers']));
@@ -80,6 +86,12 @@
         $this->assertEquals(count($class->lifecycleCallbacks), 2);
         $this->assertEquals($class->lifecycleCallbacks['prePersist'][0], 'doStuffOnPrePersist');
         $this->assertEquals($class->lifecycleCallbacks['postPersist'][0], 'doStuffOnPostPersist');
+        // Make sure that cascade-all works as expected
+        $this->assertTrue($class->associationMappings['groups']->isCascadeRemove);
+        $this->assertTrue($class->associationMappings['groups']->isCascadePersist);
+        $this->assertTrue($class->associationMappings['groups']->isCascadeRefresh);
+        $this->assertTrue($class->associationMappings['groups']->isCascadeDetach);
+        $this->assertTrue($class->associationMappings['groups']->isCascadeMerge);
     }
 }
 
Index: lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php
===================================================================
--- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php	(revision 7045)
+++ lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php	(working copy)
@@ -232,7 +232,7 @@
                 if (isset($oneToOneElement->cascade)) {
                     $mapping['cascade'] = $this->_getCascadeMappings($oneToOneElement->cascade);
                 }
-                
+
                 if (isset($oneToOneElement->{'orphan-removal'})) {
                     $mapping['orphanRemoval'] = (bool)$oneToOneElement->{'orphan-removal'};
                 }
@@ -433,24 +433,15 @@
      */
     private function _getCascadeMappings($cascadeElement)
     {
-        $cascades = array();
-        
-        if (isset($cascadeElement->{'cascade-persist'})) {
-            $cascades[] = 'persist';
-        }
-        
-        if (isset($cascadeElement->{'cascade-remove'})) {
-            $cascades[] = 'remove';
-        }
-        
-        if (isset($cascadeElement->{'cascade-merge'})) {
-            $cascades[] = 'merge';
+    	$cascades = array();
+       foreach ($cascadeElement->children() as $action) {
+        	// According to the JPA specifications, XML uses "cascade-persist"
+        	// instead of "persist". Here, both variations
+        	// are supported because both YAML and Annotation use "persist"
+        	// and we want to make sure that this driver doesn't need to know
+        	// anything about the supported cascading actions
+            $cascades[] = str_replace('cascade-', '', $action->getName());
         }
-        
-        if (isset($cascadeElement->{'cascade-refresh'})) {
-            $cascades[] = 'refresh';
-        }
-        
         return $cascades;
     }
 }
\ No newline at end of file
Index: lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php
===================================================================
--- lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php	(revision 7045)
+++ lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php	(working copy)
@@ -247,7 +247,7 @@
                 }
 
                 if (isset($oneToOneElement['cascade'])) {
-                    $mapping['cascade'] = $this->_getCascadeMappings($oneToOneElement['cascade']);
+                    $mapping['cascade'] = $oneToOneElement['cascade'];
                 }
 
                 $metadata->mapOneToOne($mapping);
@@ -268,7 +268,7 @@
                 }
                 
                 if (isset($oneToManyElement['cascade'])) {
-                    $mapping['cascade'] = $this->_getCascadeMappings($oneToManyElement['cascade']);
+                    $mapping['cascade'] = $oneToManyElement['cascade'];
                 }
                 
                 $metadata->mapOneToMany($mapping);
@@ -306,7 +306,7 @@
                 $mapping['joinColumns'] = $joinColumns;
                 
                 if (isset($manyToOneElement['cascade'])) {
-                    $mapping['cascade'] = $this->_getCascadeMappings($manyToOneElement['cascade']);
+                    $mapping['cascade'] = $manyToOneElement['cascade'];
                 }
                 
                 $metadata->mapManyToOne($mapping);
@@ -359,7 +359,7 @@
                 }
                 
                 if (isset($manyToManyElement['cascade'])) {
-                    $mapping['cascade'] = $this->_getCascadeMappings($manyToManyElement['cascade']);
+                    $mapping['cascade'] = $manyToManyElement['cascade'];
                 }
 
                 $metadata->mapManyToMany($mapping);
@@ -412,35 +412,6 @@
     }
     
     /**
-     * Gathers a list of cascade options found in the given cascade element.
-     * 
-     * @param $cascadeElement The cascade element.
-     * @return array The list of cascade options.
-     */
-    private function _getCascadeMappings($cascadeElement)
-    {
-        $cascades = array();
-        
-        if (isset($cascadeElement['cascadePersist'])) {
-            $cascades[] = 'persist';
-        }
-        
-        if (isset($cascadeElement['cascadeRemove'])) {
-            $cascades[] = 'remove';
-        }
-        
-        if (isset($cascadeElement['cascadeMerge'])) {
-            $cascades[] = 'merge';
-        }
-        
-        if (isset($cascadeElement['cascadeRefresh'])) {
-            $cascades[] = 'refresh';
-        }
-        
-        return $cascades;
-    }
-
-    /**
      * Loads a mapping file with the given name and returns a map
      * from class/entity names to their corresponding elements.
      * 
Index: lib/Doctrine/ORM/Mapping/AssociationMapping.php
===================================================================
--- lib/Doctrine/ORM/Mapping/AssociationMapping.php	(revision 7045)
+++ lib/Doctrine/ORM/Mapping/AssociationMapping.php	(working copy)
@@ -167,11 +167,22 @@
         $this->fetchMode = isset($mapping['fetch']) ?
                 $mapping['fetch'] : self::FETCH_LAZY;
         $cascades = isset($mapping['cascade']) ? $mapping['cascade'] : array();
-        $this->isCascadeRemove = in_array('remove', $cascades);
+        
+        if (in_array('all', $cascades)) {
+            $cascades = array(
+               'remove',
+               'persist',
+               'refresh',
+               'merge',
+               'detach'
+            );
+        }
+        
+        $this->isCascadeRemove  = in_array('remove',  $cascades);
         $this->isCascadePersist = in_array('persist', $cascades);
         $this->isCascadeRefresh = in_array('refresh', $cascades);
-        $this->isCascadeMerge = in_array('merge', $cascades);
-        $this->isCascadeDetach = in_array('detach', $cascades);
+        $this->isCascadeMerge   = in_array('merge',   $cascades);
+        $this->isCascadeDetach  = in_array('detach',  $cascades);
     }
     
     /**
