 		return super.create(identifier: ident, value: val)
 	}
 
-	public override func read(identifier ident: String) -> CNValue? {
+	public override func read(identifier ident: String) -> CNNativeValue? {
 		return super.read(identifier: ident)
 	}
 
-	public override func write(identifier ident: String, value val: CNValue) -> Bool {
+	public override func write(identifier ident: String, value val: CNNativeValue) -> Bool {
 		if super.write(identifier: ident, value: val) {
 			if let node = mAllNodes[ident] {
 				let actions = allocateActions(forNode: node, value: val)

					alpha alval: Double,
					position posval: CGPoint,
					rotation rotval: Double,
					duration durval: Double) -> CNValue {
		let params: Dictionary<String, CNValue> = [
			ImageFileItem:		CNValue(stringValue: ifile),
			ScaleItem:		CNValue(doubleValue: scaval),
			AlphaItem:		CNValue(doubleValue: alval),
			PositionItem:		CNValue(pointValue: posval),
			RotationItem:		CNValue(doubleValue: rotval),
			DurationItem:		CNValue(doubleValue: durval)
		]
		return CNValue(dictionaryValue: params)
	}

	public override func create(identifier ident: String, value val: CNValue) -> Bool {
		/* Get property */
		guard let imgfile = stringElement(inValue: val, member: KCSpriteViewDatabase.ImageFileItem) else {
			NSLog("No imageFile property in \(#function)")
			return false
		}

		super.commit()
	}

	private func assignNodeProperty(node nod: SKNode, value val: CNNativeValue) -> Bool {
		guard let alpha = val.numberElement(identifier: KCSpriteViewDatabase.AlphaItem) else {
			NSLog("No alpha property in \(#function)")
			return false
		}
		guard let position = val.pointElement(identifier: KCSpriteViewDatabase.PositionItem) else {
			NSLog("No position property in \(#function)")
			return false
		}
		guard let scale = val.numberElement(identifier: KCSpriteViewDatabase.ScaleItem) else {
			NSLog("No scale property in \(#function)")
			return false
		}
		guard let rotation = val.numberElement(identifier: KCSpriteViewDatabase.RotationItem) else {
			NSLog("No rotation property in \(#function)")
			return false
		}

		nod.alpha	= CGFloat(alpha.doubleValue)
		nod.position 	= position
		nod.xScale	= CGFloat(scale.doubleValue)
		nod.yScale	= CGFloat(scale.doubleValue)
		nod.zRotation	= CGFloat(rotation.doubleValue)
		
		return true
	}

	private func allocateActions(forNode node: SKNode, value val: CNNativeValue) -> Array<SKAction> {
		var actions: Array<SKAction> = []

		guard let durationnum = val.numberElement(identifier: KCSpriteViewDatabase.DurationItem) else {
			NSLog("No duration property at \(#function)")
			return []
		}
		guard let alphanum = val.numberElement(identifier: KCSpriteViewDatabase.AlphaItem) else {
			NSLog("No alpha property at \(#function)")
			return []
		}
		guard let position = val.pointElement(identifier: KCSpriteViewDatabase.PositionItem) else {
			NSLog("No position property at \(#function)")
			return []
		}
		guard let scalenum = val.numberElement(identifier: KCSpriteViewDatabase.ScaleItem) else {
			NSLog("No scale property at \(#function)")
			return []
		}
		guard let rotationnum = val.numberElement(identifier: KCSpriteViewDatabase.RotationItem) else {
			NSLog("No rotation property at \(#function)")
			return []
		}

		let duration = durationnum.doubleValue
		let alpha    = alphanum.doubleValue
		let scale    = scalenum.doubleValue
		let rotation = rotationnum.doubleValue
		
		if node.position != position {
			let act = SKAction.move(to: position, duration: duration)
			actions.append(act)
