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 19a5086..9a621e1 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
@@ -24,6 +24,7 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 import org.apache.felix.scrplugin.annotations.AnnotationProcessor;
 import org.apache.felix.scrplugin.description.ClassDescription;
@@ -556,7 +557,7 @@
     private void testProperty(final ClassDescription current,
                     final Map<String, PropertyDescription> allProperties,
                     final PropertyDescription newProperty,
-                    boolean isInspectedClass ) {
+                    final boolean isInspectedClass ) {
         final String propName = newProperty.getName();
 
         if ( !StringUtils.isEmpty(propName) ) {
@@ -570,6 +571,9 @@
             } else {
                 allProperties.put(propName, newProperty);
             }
+        } else {
+            // no name - generate a unique one
+            allProperties.put(UUID.randomUUID().toString(), newProperty);
         }
     }
 
@@ -601,7 +605,7 @@
     private void testReference(final ClassDescription current,
                     final Map<String, ReferenceDescription> allReferences,
                     final ReferenceDescription newReference,
-                    boolean isInspectedClass ) {
+                    final boolean isInspectedClass ) {
         String refName = newReference.getName();
         if ( refName == null) {
             refName = newReference.getInterfaceName();
@@ -618,6 +622,9 @@
             } else {
                 allReferences.put(refName, newReference);
             }
+        } else {
+            // no name - generate a unique one
+            allReferences.put(UUID.randomUUID().toString(), newReference);
         }
     }
 }
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java
index f643b77..4fc6976 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ComponentContainer.java
@@ -40,29 +40,54 @@
  */
 public class ComponentContainer {
 
+    /** The class description. */
     private final ClassDescription classDescription;
 
+    /** The component description. */
     private final ComponentDescription componentDescription;
 
+    /** The service description (optional). */
     private ServiceDescription serviceDescription;
 
+    /** All references. */
     private final Map<String, ReferenceDescription> allReferences = new LinkedHashMap<String, ReferenceDescription>();
+
+    /** All properties. */
     private final Map<String, PropertyDescription> allProperties = new LinkedHashMap<String, PropertyDescription>();
 
+    /**
+     * Create a new component container
+     * @param classDescription     Class description
+     * @param componentDescription Component description
+     */
     public ComponentContainer(final ClassDescription classDescription,
                     final ComponentDescription componentDescription) {
         this.classDescription = classDescription;
         this.componentDescription = componentDescription;
     }
 
+    /**
+     * Get the class description
+     * @return The class description
+     */
     public ClassDescription getClassDescription() {
         return this.classDescription;
     }
 
+    /**
+     * Get the component description
+     * @return The component description
+     */
     public ComponentDescription getComponentDescription() {
         return this.componentDescription;
     }
 
+    /**
+     * Get all references.
+     * The references are put into the map by name.
+     * This map can be modified by clients.
+     * @return The map of references
+     */
     public Map<String, ReferenceDescription> getReferences() {
         return this.allReferences;
     }
