diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
index e9b8aac..f3a7a2b 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
@@ -370,6 +370,8 @@
                 index += 2;
             }
 
+            final boolean hasName = ad.getStringValue("name", null) != null;
+
             if (values != null) {
                 prop.setType(PropertyType.valueOf(type));
                 if (values.length == 1) {
@@ -378,40 +380,47 @@
                     prop.setMultiValue(values);
                 }
             } else if (fieldAnnotation != null) {
-
                 // Detect values from field
-                final Object value = fieldAnnotation.getAnnotatedFieldValue();
-                if (value != null) {
-                    if (value.getClass().isArray()) {
-                        values = new String[Array.getLength(value)];
-                        for (int i = 0; i < values.length; i++) {
-                            values[i] = Array.get(value, i).toString();
-                        }
-                        prop.setMultiValue(values);
-                        prop.setType(PropertyType.from(Array.get(value, 0).getClass()));
-                    } else {
-                        prop.setType(PropertyType.from(value.getClass()));
-                        prop.setValue(value.toString());
-                    }
-                }
-            }
-
-            final String defaultName;
-            if (fieldAnnotation != null) {
-                if (values == null) {
-                    defaultName = fieldAnnotation.getAnnotatedField().getName();
-                } else {
+                if ( hasName ) {
                     final Object value = fieldAnnotation.getAnnotatedFieldValue();
                     if (value != null) {
-                        defaultName = value.toString();
-                    } else {
-                        defaultName = null;
+                        if (value.getClass().isArray()) {
+                            final String[] newValues = new String[Array.getLength(value)];
+                            for (int i = 0; i < newValues.length; i++) {
+                                newValues[i] = Array.get(value, i).toString();
+                            }
+                            prop.setMultiValue(newValues);
+                            prop.setType(PropertyType.from(Array.get(value, 0).getClass()));
+                        } else {
+                            prop.setType(PropertyType.from(value.getClass()));
+                            prop.setValue(value.toString());
+                        }
                     }
+                } else {
+                    prop.setType(PropertyType.String);
+                    prop.setValue(fieldAnnotation.getAnnotatedField().getName());
+                }
+            }
+
+            final String name;
+            if ( hasName ) {
+                name = ad.getStringValue("name", null);
+            } else if (fieldAnnotation != null) {
+                if (values == null) {
+                    final Object value = fieldAnnotation.getAnnotatedFieldValue();
+                    if (value != null) {
+                        name = value.toString();
+                    } else {
+                        name = null;
+                    }
+                } else {
+                    name = fieldAnnotation.getAnnotatedField().getName();
                 }
             } else {
-                defaultName = null;
+                name = null;
             }
-            prop.setName(ad.getStringValue("name", defaultName));
+
+            prop.setName(name);
             prop.setLabel(ad.getStringValue("label", null));
             prop.setDescription(ad.getStringValue("description", null));
 
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
index 0b01981..3a14ffd 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
@@ -438,6 +438,7 @@
             final PropertyDescription pid = new PropertyDescription(null);
             pid.setName( org.osgi.framework.Constants.SERVICE_PID );
             pid.setValue( componentDesc.getName() );
+            pid.setType(PropertyType.String);
 
             container.getProperties().put(org.osgi.framework.Constants.SERVICE_PID, pid);
         }
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java
index a722bea..1b1b1ad 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java
@@ -496,7 +496,8 @@
                     try {
                         cl = this.classLoader.loadClass(className);
                     } catch (final Throwable e) {
-                        iLog.addWarning("Unable to load class " + className + " from dependencies.", this.location);
+                        // this doesn't have an effect as the classes we processed are loaded
+                        // anyway.
                     }
                     this.currentClass = new ClassDescription(cl, "classpath:" + className);
                     this.currentClass.add(this.currentComponent);
diff --git a/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java b/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
index f3fd5f8..8a2c22b 100644
--- a/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
+++ b/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
@@ -24,9 +24,9 @@
 import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -149,7 +149,7 @@
      *
      * @parameter
      */
-    private Map<String, String> properties = new HashMap<String, String>();
+    private Map<String, String> properties = new LinkedHashMap<String, String>();
 
     /**
      * The version of the DS spec this plugin generates a descriptor for. By
