 		Object.defineProperty componentPrototype, field, createDataProperty(i)
 
 	ComponentType = (data) ->
-		if not data and componentPool.length
-			component = componentPool.pop()
-		else
-			component = Object.create componentPrototype
-			initializeData component, fields, data
-			Object.setPrototypeOf component, ComponentType.prototype
+		#
+		component = this
+		unless component instanceof ComponentType
+			component = new ComponentType data
+		initializeData component, fields, data
 		return component
 
-	ComponentType[ bPool ] = componentPool
+	ComponentType.prototype = componentPrototype
+	# ComponentType[ bPool ] = componentPool
 	ComponentType[ symbols.bFields ] = fields
 	ComponentType[ symbols.bName ] = name
 	ComponentType[ symbols.bIdentity ] = identity


	{fields, identity} = parseDefinition definition

	componentPool = []

	# Create prototype object for instances of the component type
	componentPrototype = Object.create basePrototype

{Symbol, Map, Set} = require 'es6'

symbols = require './symbols'
# bPool = Symbol 'pool of disposed components'
bData = Symbol 'data array for the component'

identities = fast.clone(require './primes').reverse()
