diff --git a/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java b/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
index 85aa0dc..fac81e1 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
@@ -316,7 +316,8 @@
                     if (getNamespaceVersion() < 13 && ocd.getAttributeDefinitions() == null)
                     {
                         // Need at least one AD in versions 1.0, 1.1 & 1.2...
-                        throw missingElement("AD");
+                        logMissingElement("AD");
+                        ocd = null;
                     }
                     break;
                 }
@@ -377,7 +378,8 @@
                     if (designate.getObject() == null)
                     {
                         // Exactly 1 Object is allowed...
-                        throw missingElement("Object");
+                        logMissingElement("Object");
+                        designate = null;
                     }
                     break;
                 }
@@ -405,7 +407,7 @@
 
         readOptionalAttributes(ad, AD_ATTRIBUTES);
 
-        Map options = new LinkedHashMap();
+        Map<String, String> options = new LinkedHashMap<String, String>();
         int eventType = this.parser.next();
         while (eventType != XmlPullParser.END_DOCUMENT)
         {
@@ -439,7 +441,7 @@
 
         ad.setOptions(options);
 
-        // set value as late as possible to force an options check (FELIX-3884, FELIX-4665)... 
+        // set value as late as possible to force an options check (FELIX-3884, FELIX-4665)...
         if (dfltValue != null)
         {
             ad.setDefaultValue(dfltValue);
@@ -635,10 +637,10 @@
         return new XmlPullParserException(message, this.parser, null);
     }
 
-    private XmlPullParserException missingElement(String elementName)
+    private void logMissingElement(String elementName)
     {
         String message = "Missing element " + elementName + " in element " + this.parser.getName();
-        return new XmlPullParserException(message, this.parser, null);
+        Activator.log(LogService.LOG_ERROR, message);
     }
 
     private XmlPullParserException unexpectedElement(String elementName)
diff --git a/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java b/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
index e224857..bde7c76 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
@@ -21,10 +21,16 @@
 
 import java.io.PrintStream;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.Date;
+import java.util.Dictionary;
+import java.util.Hashtable;
 
 import org.apache.felix.metatype.internal.l10n.BundleResources;
-import org.osgi.framework.*;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.MetaTypeService;
 import org.osgi.util.tracker.ServiceTracker;
@@ -126,7 +132,7 @@
 
     public static void log( int level, String message )
     {
-        LogService log = ( LogService ) INSTANCE.logService.getService();
+        final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
         if ( log == null )
         {
             _log( null, level, message, null );
@@ -140,7 +146,7 @@
 
     public static void log( int level, String message, Throwable exception )
     {
-        LogService log = ( LogService ) INSTANCE.logService.getService();
+        final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
         if ( log == null )
         {
             _log( null, level, message, exception );
@@ -154,7 +160,7 @@
 
     public static void log( ServiceReference sr, int level, String message )
     {
-        LogService log = ( LogService ) INSTANCE.logService.getService();
+        final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
         if ( log == null )
         {
             _log( sr, level, message, null );
@@ -168,7 +174,7 @@
 
     public static void log( ServiceReference sr, int level, String message, Throwable exception )
     {
-        LogService log = ( LogService ) INSTANCE.logService.getService();
+        final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
         if ( log == null )
         {
             _log( sr, level, message, exception );
diff --git a/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java b/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
index 074d224..975e4b5 100644
--- a/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
+++ b/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
@@ -24,11 +24,11 @@
 import java.util.Arrays;
 import java.util.List;
 
-import junit.framework.TestCase;
-
 import org.osgi.service.metatype.AttributeDefinition;
 import org.xmlpull.v1.XmlPullParserException;
 
+import junit.framework.TestCase;
+
 /**
  * The <code>MetaDataReaderTest</code> class tests the
  * <code>MetaDataReader</code> class.
@@ -39,6 +39,7 @@
 {
     private MetaDataReader reader;
 
+    @Override
     protected void setUp() throws Exception
     {
         super.setUp();
@@ -46,6 +47,7 @@
         reader = new MetaDataReader();
     }
 
+    @Override
     protected void tearDown() throws Exception
     {
         reader = null;
@@ -184,7 +186,7 @@
     }
 
     /**
-     * FELIX-4665 - Default values can be empty. 
+     * FELIX-4665 - Default values can be empty.
      */
     public void testAttributeWithDefaultValueOk() throws IOException, XmlPullParserException
     {
@@ -221,7 +223,7 @@
     }
 
     /**
-     * FELIX-4644 - Enforce that we can only have one Object in a Designate element. 
+     * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
      */
     public void testOCDWithoutADFail() throws IOException, XmlPullParserException
     {
@@ -231,15 +233,8 @@
 
         String xml = "<MetaData><OCD id=\"" + ocdId + "\" name=\"" + ocdName + "\" description=\"" + ocdDescription + "\" /></MetaData>";
 
-        try
-        {
-            read(xml); // should fail!
-            fail("IOException expected!");
-        }
-        catch (IOException e)
-        {
-            assertTrue(e.getMessage().contains("Missing element AD"));
-        }
+        final MetaData md = read(xml);
+        assertNull(md.getObjectClassDefinitions());
     }
 
     /**
@@ -269,7 +264,7 @@
     }
 
     /**
-     * FELIX-4644 - Enforce that we can only have one Object in a Designate element. 
+     * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
      */
     public void testDesignateWithoutObjectFail() throws IOException, XmlPullParserException
     {
@@ -281,19 +276,13 @@
         String xml = "<MetaData><OCD id=\"" + ocdId + "\" name=\"" + ocdName + "\" description=\"" + ocdDescription + "\"><AD id=\"attr\" type=\"String\" required=\"false\" /></OCD><Designate pid=\""
             + pid + "\" bundle=\"*\"></Designate></MetaData>";
 
-        try
-        {
-            read(xml); // should fail!
-            fail("IOException expected!");
-        }
-        catch (IOException e)
-        {
-            assertTrue(e.getMessage().contains("Missing element Object"));
-        }
+        final MetaData md = read(xml);
+        assertNull(md.getDesignates());
+        assertEquals(1, md.getObjectClassDefinitions().size());
     }
 
     /**
-     * FELIX-4644 - Enforce that we can only have one Object in a Designate element. 
+     * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
      */
     public void testDesignateWithObjectOk() throws IOException, XmlPullParserException
     {
@@ -326,7 +315,7 @@
     }
 
     /**
-     * FELIX-4644 - Enforce that we can only have one Object in a Designate element. 
+     * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
      */
     public void testDesignateWithTwoObjectsFail() throws IOException, XmlPullParserException
     {
@@ -350,7 +339,7 @@
     }
 
     /**
-     * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration. 
+     * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration.
      */
     public void testMultipleFactoryDesignatesWithSamePidOk() throws IOException, XmlPullParserException
     {
@@ -366,7 +355,7 @@
     }
 
     /**
-     * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration. 
+     * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration.
      */
     public void testMultipleFactoryDesignatesWithDifferentPidsOk() throws IOException, XmlPullParserException
     {
