diff --git a/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
index 0676efd..a2ded08 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
@@ -657,13 +657,11 @@
         }
         else if ( m_namespaceCode < XmlHandler.DS_VERSION_1_1 )
         {
-            logger.log( LogService.LOG_WARNING, "Ignoring configuration policy, DS 1.1 or later namespace required",
-                this, null );
-            m_configurationPolicy = CONFIGURATION_POLICY_OPTIONAL;
+            throw validationFailure( "configuration-policy declaration requires DS 1.1 or later namespace " );
         }
         else if ( !CONFIGURATION_POLICY_VALID.contains( m_configurationPolicy ) )
         {
-            throw validationFailure( "Configuration policy must be one of " + CONFIGURATION_POLICY_VALID );
+            throw validationFailure( "configuration-policy must be one of " + CONFIGURATION_POLICY_VALID );
         }
 
         // 112.5.8 activate can be specified (since DS 1.1)
@@ -674,11 +672,7 @@
         }
         else if ( m_namespaceCode < XmlHandler.DS_VERSION_1_1 )
         {
-            // DS 1.0 cannot declare the activate method, assume default and undeclared
-            logger.log( LogService.LOG_WARNING,
-                "Ignoring activate method declaration, DS 1.1 or later namespace required", this, null );
-            m_activate = "activate";
-            m_activateDeclared = false;
+            throw validationFailure( "activate method declaration requires DS 1.1 or later namespace " );
         }
 
         // 112.5.12 deactivate can be specified (since DS 1.1)
@@ -689,20 +683,13 @@
         }
         else if ( m_namespaceCode < XmlHandler.DS_VERSION_1_1 )
         {
-            // DS 1.0 cannot declare the deactivate method, assume default and undeclared
-            logger.log( LogService.LOG_WARNING,
-                "Ignoring deactivate method declaration, DS 1.1 or later namespace required", this, null );
-            m_deactivate = "deactivate";
-            m_deactivateDeclared = false;
+            throw validationFailure( "deactivate method declaration requires DS 1.1 or later namespace " );
         }
 
         // 112.??.?? modified can be specified (since DS 1.1)
         if ( m_modified != null && m_namespaceCode < XmlHandler.DS_VERSION_1_1 )
         {
-            // require new namespace if modified is specified
-            logger.log( LogService.LOG_WARNING,
-                "Ignoring modified method declaration, DS 1.1 or later namespace required", this, null );
-            m_modified = null;
+            throw validationFailure( "modified method declaration requires DS 1.1 or later namespace " );
         }
 
         // Next check if the properties are valid (and extract property values)
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
index ea86bd3..f708538 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
@@ -279,9 +279,7 @@
 
         final ComponentMetadata cm2 = createComponentMetadata( Boolean.TRUE, null );
         cm2.setActivate( "someMethod" );
-        cm2.validate( logger );
-        assertEquals( "Activate method name", "activate", cm2.getActivate() );
-        assertFalse( "Activate method expected to not be declared", cm2.isActivateDeclared() );
+        failDS10Validation( cm2, "activate", logger );
     }
 
 
@@ -309,9 +307,7 @@
 
         final ComponentMetadata cm2 = createComponentMetadata( Boolean.TRUE, null );
         cm2.setDeactivate( "someMethod" );
-        cm2.validate( logger );
-        assertEquals( "Deactivate method name", "deactivate", cm2.getDeactivate() );
-        assertFalse( "Deactivate method expected to not be declared", cm2.isDeactivateDeclared() );
+        failDS10Validation( cm2, "deactivate", logger );
     }
 
 
@@ -338,8 +334,7 @@
 
         final ComponentMetadata cm2 = createComponentMetadata( Boolean.TRUE, null );
         cm2.setModified( "someName" );
-        cm2.validate( logger );
-        assertNull( "Modified method name", cm2.getModified() );
+        failDS10Validation( cm2, "modified", logger );
     }
 
 
@@ -365,27 +360,19 @@
 
         final ComponentMetadata cm2 = createComponentMetadata( Boolean.TRUE, null );
         cm2.setConfigurationPolicy( ComponentMetadata.CONFIGURATION_POLICY_IGNORE );
-        cm2.validate( logger );
-        assertEquals( "Configuration policy", ComponentMetadata.CONFIGURATION_POLICY_OPTIONAL, cm2
-            .getConfigurationPolicy() );
+        failDS10Validation( cm2, "configuration-policy", logger );
 
         final ComponentMetadata cm3 = createComponentMetadata( Boolean.TRUE, null );
         cm3.setConfigurationPolicy( ComponentMetadata.CONFIGURATION_POLICY_OPTIONAL );
-        cm3.validate( logger );
-        assertEquals( "Configuration policy", ComponentMetadata.CONFIGURATION_POLICY_OPTIONAL, cm3
-            .getConfigurationPolicy() );
+        failDS10Validation( cm3, "configuration-policy", logger );
 
         final ComponentMetadata cm4 = createComponentMetadata( Boolean.TRUE, null );
         cm4.setConfigurationPolicy( ComponentMetadata.CONFIGURATION_POLICY_REQUIRE );
-        cm4.validate( logger );
-        assertEquals( "Configuration policy", ComponentMetadata.CONFIGURATION_POLICY_OPTIONAL, cm4
-            .getConfigurationPolicy() );
+        failDS10Validation( cm4, "configuration-policy", logger );
 
         final ComponentMetadata cm5 = createComponentMetadata( Boolean.TRUE, null );
         cm5.setConfigurationPolicy( "undefined" );
-        cm5.validate( logger );
-        assertEquals( "Configuration policy", ComponentMetadata.CONFIGURATION_POLICY_OPTIONAL, cm5
-            .getConfigurationPolicy() );
+        failDS10Validation( cm5, "configuration-policy", logger );
     }
 
 
@@ -681,6 +668,23 @@
 
     //---------- Helper methods
 
+    // method also used by XmlHandlerTest
+    static void failDS10Validation( final ComponentMetadata metadata, final String expectedValidationReason,
+        final MockLogger logger )
+    {
+        try
+        {
+            metadata.validate( logger );
+            fail( "Expected validation failure for Component " + metadata.getName() + " containing '"
+                + expectedValidationReason + "'" );
+        }
+        catch ( ComponentException ce )
+        {
+            assertTrue( "Expected validation reason to contain '" + expectedValidationReason + "': actual: "
+                + ce.getMessage(), ce.getMessage().indexOf( expectedValidationReason ) >= 0 );
+        }
+    }
+
     // Creates Component Metadata for the given namespace
     private ComponentMetadata createComponentMetadata( int nameSpaceCode, Boolean immediate, String factory )
     {
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
index 8a06123..1647a9e 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
@@ -60,19 +60,12 @@
     public void test_component_attributes_11() throws Exception
     {
         final List metadataList10 = readMetadata( "/components_activate_10.xml" );
-        assertEquals( "Component Descriptors", 1, metadataList10.size() );
-
-        final ComponentMetadata cm10 = ( ComponentMetadata ) metadataList10.get( 0 );
-        cm10.validate( logger );
-        assertEquals( "DS Version 1.0", XmlHandler.DS_VERSION_1_0, cm10.getNamespaceCode() );
-        assertFalse( "DS Version 1.0", cm10.isDS11() );
-        assertEquals( "Expected Activate Method not set", "activate", cm10.getActivate() );
-        assertFalse( "Activate method expected to not be declared", cm10.isActivateDeclared() );
-        assertEquals( "Expected Deactivate Method not set", "deactivate", cm10.getDeactivate() );
-        assertFalse( "Deactivate method expected to not be declared", cm10.isDeactivateDeclared() );
-        assertNull( "Expected Modified Method not set", cm10.getModified() );
-        assertEquals( "Expected Configuration Policy not set", ComponentMetadata.CONFIGURATION_POLICY_OPTIONAL, cm10
-            .getConfigurationPolicy() );
+        assertEquals( "Component Descriptors", 4, metadataList10.size() );
+        ComponentMetadataTest.failDS10Validation( ( ComponentMetadata ) metadataList10.get( 0 ), "activate", logger );
+        ComponentMetadataTest.failDS10Validation( ( ComponentMetadata ) metadataList10.get( 1 ), "deactivate", logger );
+        ComponentMetadataTest.failDS10Validation( ( ComponentMetadata ) metadataList10.get( 2 ), "modified", logger );
+        ComponentMetadataTest.failDS10Validation( ( ComponentMetadata ) metadataList10.get( 3 ),
+            "configuration-policy", logger );
 
         final List metadataList11 = readMetadata( "/components_activate_11.xml" );
         assertEquals( "Component Descriptors", 1, metadataList11.size() );
diff --git a/scr/src/test/resources/components_activate_10.xml b/scr/src/test/resources/components_activate_10.xml
index 3da1344..864204a 100644
--- a/scr/src/test/resources/components_activate_10.xml
+++ b/scr/src/test/resources/components_activate_10.xml
@@ -1,26 +1,39 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-    
-        http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
+    <!--
+        Licensed to the Apache Software Foundation (ASF) under one or
+        more contributor license agreements. See the NOTICE file
+        distributed with this work for additional information regarding
+        copyright ownership. The ASF licenses this file to you under the
+        Apache License, Version 2.0 (the "License"); you may not use
+        this file except in compliance with the License. You may obtain
+        a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+        applicable law or agreed to in writing, software distributed
+        under the License is distributed on an "AS IS" BASIS, WITHOUT
+        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        See the License for the specific language governing permissions
+        and limitations under the License.
+    -->
 <components>
-    <scr:component name="components.activate.10"
-        activate="myactivate" deactivate="mydeactivate" modified="mymodified"
-        configuration-policy="ignore" xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0">
+    <scr:component name="components.activate.10" activate="myactivate"
+        xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0"
+    >
+        <implementation class="components.activate.10" />
+    </scr:component>
+    <scr:component name="components.deactivate.10"
+        deactivate="mydeactivate" xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0"
+    >
+        <implementation class="components.activate.10" />
+    </scr:component>
+    <scr:component name="components.modified.10" modified="mymodified"
+        xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0"
+    >
+        <implementation class="components.activate.10" />
+    </scr:component>
+    <scr:component name="components.configuration.policy.10"
+        configuration-policy="ignore" xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0"
+    >
         <implementation class="components.activate.10" />
     </scr:component>
 </components>
