     
     //MARK: PropertyAccess Support
     
-    func raiseError() {
-        //#warning writing exception key
-        //[NSException raise:NSInvalidArchiveOperationException format:@"Property for key not found"];
-    }
-    
     func propertyForKey(keyNode:Node) -> Property? {
         
         return propertiesDictionary[keyNode.uid]
     }
     
-    func deleteProperty(property:Property) {
-        
-    }
-
-    func createPropertyForKeyNode(keyNode:Node) -> Property {
+    // PreConditions: Element is in a context
+    public func ensurePropertyforKey(keyNode:Node) -> Property {
+        var property = propertyForKey(keyNode)
+    
+        if (property == nil) {
+            property = createPropertyForKeyNode(keyNode)
+        }
+    
+        return property!
+    }
+    
+    // Create a new property and add it to this element
+    // This methode update
+    //   - the new property (twice, 1. create 2. update)
+    //   - (optional) the lastProperty -> the property was appended directly
+    //   - (optional) the element  -> the property was appended
+    // PreConditions: Element is in a context
+    public func createPropertyForKeyNode(keyNode:Node) -> Property {
         assert(context != nil, "No GraphContext available")
         
         var property = Property(graphElement: self, keyNode: keyNode)

    }
    
    func addToPropertyCollections(property:Property) {
        _propertiesArray!.append(property)
        _propertiesDictionary![property.keyNodeID] = property
    }

    
    func deleteValueForKey(keyNode:Node) {
        if (context != nil) {

        return property
    }

    func addProperty(property:Property) {
        //assert(context != nil, "No GraphContext available")
        
