 		# animations
 		@animations.initialize()
 
-		# call `ready` signal
-		setImmediate => @ready()
-
 		Object.seal @
 
 	createBindedSetter = (propName, setFunc) ->
 		(val) ->
 			if typeof val is 'string'
+				# TODO: optimize it
 				setImmediate =>
 					binding = new Binding @, val
 					Impl.setItemBinding @_uid, propName, binding


		utils.defProp @, 'animations', 'e', new Animations @

		# create signals
		Item.SIGNALS.forEach (signalName) =>
			signalFunc = signal.createOnlySignal @, signalName

			# initialize
			handler = (listener) =>
				signalFunc.connected.disconnect handler
				signalToCall = =>
					Function.apply.call signalFunc, @, arguments
				Impl.attachItemSignal uid, signalName, signalToCall

			signalFunc.connected.connect handler

		signal.createOnlySignal @, 'ready'

		utils.mergeDeep @, opts

		# append children
		if children

		expect(val).toBe.any Scope
		utils.defProp @, 'scope', 'e', val

	readyLazySignal = signal.createLazy @::, 'ready'

	readyLazySignal.onInitialized (item) ->
		setImmediate => @ready()

	onLazySignalInitialized = (item, signalName) ->
		Impl.attachItemSignal item._uid, signalName, item[signalName]

	for signalName in Item.SIGNALS
		lazySignal = signal.createLazy @::, signalName
		lazySignal.onInitialized onLazySignalInitialized

	utils.defProp @::, 'parent', 'e', ->
		items[Impl.getItemParent @_uid]
