 					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)
+					duration durval: Double) -> CNNativeValue {
+		let scanum = NSNumber(value: scaval)
+		let alnum  = NSNumber(value: alval)
+		let rotnum = NSNumber(value: rotval)
+		let durnum = NSNumber(value: durval)
+		let params: Dictionary<String, CNNativeValue> = [
+			ImageFileItem:		.stringValue(ifile),
+			ScaleItem:		.numberValue(scanum),
+			AlphaItem:		.numberValue(alnum),
+			PositionItem:		.pointValue(posval),
+			RotationItem:		.numberValue(rotnum),
+			DurationItem:		.numberValue(durnum)
 		]
-		return CNValue(dictionaryValue: params)
-	}
-
-	public override func create(identifier ident: String, value val: CNValue) -> Bool {
+		return .dictionaryValue(params)
+	}
+
+	public override func create(identifier ident: String, value val: CNNativeValue) -> Bool {
 		/* Get property */
-		guard let imgfile = stringElement(inValue: val, member: KCSpriteViewDatabase.ImageFileItem) else {
+		guard let imgfile = val.stringElement(identifier: KCSpriteViewDatabase.ImageFileItem) else {
 			NSLog("No imageFile property in \(#function)")
 			return false
 		}

		super.commit()
	}

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

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

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

		guard let duration = doubleElement(inValue: val, member: KCSpriteViewDatabase.DurationItem) else {
			NSLog("No duration property at \(#function)")
			return []
		}
		guard let alpha = doubleElement(inValue: val, member: KCSpriteViewDatabase.AlphaItem) else {
			NSLog("No alpha property at \(#function)")
			return []
		}
		guard let position = pointElement(inValue: val, member: KCSpriteViewDatabase.PositionItem) else {
			NSLog("No position property at \(#function)")
			return []
		}
		guard let scale = doubleElement(inValue: val, member: KCSpriteViewDatabase.ScaleItem) else {
			NSLog("No scale property at \(#function)")
			return []
		}
		guard let rotation = doubleElement(inValue: val, member: KCSpriteViewDatabase.RotationItem) else {
			NSLog("No rotation property at \(#function)")
			return []
		}

		if node.position != position {
			let act = SKAction.move(to: position, duration: duration)
			actions.append(act)

		return super.create(identifier: ident, value: val)
	}

	public override func read(identifier ident: String) -> CNNativeValue? {
		return super.read(identifier: ident)
	}

	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)
