diff --git a/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
index c1e7d7c..e2c847d 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
@@ -199,41 +199,66 @@
         {
             throw componentMetadata.validationFailure( "Property name attribute is mandatory" );
         }
+
+        // check character type name
+        if ( componentMetadata.isDS11() && m_type.equals( "Char" ) )
+        {
+            throw componentMetadata
+                .validationFailure( "Illegal property type 'Char' used for DS 1.1 descriptor, use 'Character' instead" );
+        }
+        else if ( !componentMetadata.isDS11() && m_type.equals( "Character" ) )
+        {
+            throw componentMetadata
+                .validationFailure( "Illegal property type 'Character' used for DS 1.0 descriptor, use 'Char' instead" );
+        }
     }
 
-    private Object toType(String value) {
+
+    private Object toType( String value )
+    {
         // 112.4.5 Parsing of the value is done by the valueOf(String) method (P. 291)
         // Should the type accept lowercase too?
-        if(m_type.equals("String")) {
-            return String.valueOf(value);
+        if ( m_type.equals( "String" ) )
+        {
+            return String.valueOf( value );
         }
-        else if(m_type.equals("Long")) {
-            return Long.valueOf(value);
+        else if ( m_type.equals( "Long" ) )
+        {
+            return Long.valueOf( value );
         }
-        else if(m_type.equals("Double")) {
-            return Double.valueOf(value);
+        else if ( m_type.equals( "Double" ) )
+        {
+            return Double.valueOf( value );
         }
-        else if(m_type.equals("Float")) {
-            return Float.valueOf(value);
+        else if ( m_type.equals( "Float" ) )
+        {
+            return Float.valueOf( value );
         }
-        else if(m_type.equals("Integer")) {
-            return Integer.valueOf(value);
+        else if ( m_type.equals( "Integer" ) )
+        {
+            return Integer.valueOf( value );
         }
-        else if(m_type.equals("Byte")) {
-            return Byte.valueOf(value);
+        else if ( m_type.equals( "Byte" ) )
+        {
+            return Byte.valueOf( value );
         }
-        else if(m_type.equals("Char")) {
+        else if ( m_type.equals( "Char" ) || m_type.equals( "Character" ) )
+        {
+            // DS 1.1 changes the "Char" type to "Character", here we support both
             char c = ( value.length() > 0 ) ? value.charAt( 0 ) : 0;
             return new Character( c );
         }
-        else if(m_type.equals("Boolean")) {
-            return Boolean.valueOf(value);
+        else if ( m_type.equals( "Boolean" ) )
+        {
+            return Boolean.valueOf( value );
         }
-        else if(m_type.equals("Short")) {
-            return Short.valueOf(value);
+        else if ( m_type.equals( "Short" ) )
+        {
+            return Short.valueOf( value );
         }
-        else {
-            throw new IllegalArgumentException("Undefined property type '"+m_type+"'");
+        else
+        {
+            throw new IllegalArgumentException( "Undefined property type '" + m_type + "'" );
         }
     }
 }
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 5a1dd86..1c51f68 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
@@ -548,6 +548,92 @@
     }
 
 
+    public void test_property_no_name_ds10()
+    {
+        final ComponentMetadata cm = createComponentMetadata( null, null );
+        cm.addProperty( createPropertyMetadata( null, null, "" ) );
+        try
+        {
+            cm.validate( logger );
+            fail( "Expect validation failure for missing property name" );
+        }
+        catch ( ComponentException ce )
+        {
+            // expected
+        }
+    }
+
+
+    public void test_property_no_name_ds11()
+    {
+        final ComponentMetadata cm = createComponentMetadata11( null, null );
+        cm.addProperty( createPropertyMetadata( null, null, "" ) );
+        try
+        {
+            cm.validate( logger );
+            fail( "Expect validation failure for missing property name" );
+        }
+        catch ( ComponentException ce )
+        {
+            // expected
+        }
+    }
+
+
+    public void test_property_char_ds10() throws ComponentException
+    {
+        final ComponentMetadata cm = createComponentMetadata( null, null );
+        PropertyMetadata prop = createPropertyMetadata( "x", "Char", "x" );
+        cm.addProperty( prop );
+        cm.validate( logger );
+        assertTrue( prop.getValue() instanceof Character );
+        assertEquals( new Character( 'x' ), prop.getValue() );
+    }
+
+
+    public void test_property_char_ds11()
+    {
+        final ComponentMetadata cm = createComponentMetadata11( null, null );
+        cm.addProperty( createPropertyMetadata( "x", "Char", "x" ) );
+        try
+        {
+            cm.validate( logger );
+            fail( "Expect validation failure for illegal property type Char" );
+        }
+        catch ( ComponentException ce )
+        {
+            // expected
+        }
+    }
+
+
+    public void test_property_character_ds10()
+    {
+        final ComponentMetadata cm = createComponentMetadata( null, null );
+        cm.addProperty( createPropertyMetadata( "x", "Character", "x" ) );
+        try
+        {
+            cm.validate( logger );
+            fail( "Expect validation failure for illegal property type Character" );
+        }
+        catch ( ComponentException ce )
+        {
+            // expected
+        }
+    }
+
+
+    public void test_property_character_ds11() throws ComponentException
+    {
+        final ComponentMetadata cm = createComponentMetadata11( null, null );
+        PropertyMetadata prop = createPropertyMetadata( "x", "Character", "x" );
+        cm.addProperty( prop );
+        cm.validate( logger );
+        assertTrue( prop.getValue() instanceof Character );
+        assertEquals( new Character( 'x' ), prop.getValue() );
+    }
+
+
     //---------- Helper methods
 
     // Creates DS 1.0 Component Metadata
@@ -605,4 +691,23 @@
         meta.setInterface( "place.holder" );
         return meta;
     }
+
+
+    private PropertyMetadata createPropertyMetadata( String propertyName, String type, String value )
+    {
+        PropertyMetadata meta = new PropertyMetadata();
+        if ( propertyName != null )
+        {
+            meta.setName( propertyName );
+        }
+        if ( type != null )
+        {
+            meta.setType( type );
+        }
+        if ( value != null )
+        {
+            meta.setValue( value );
+        }
+        return meta;
+    }
 }
