 
 		if original?
 			assert.instanceOf original, Component
+
+			while original.parent
+				original = original.parent
 
 		@id = original?.id or utils.uid()
 		@item = null


		return

	endComponentCloning = (comp, components) ->
		# clone no children objects (e.g. links)
		for id, obj of comp.parent.objects
			unless comp.objects[id]
				newObj = cloneObject obj, components, comp

		# initialize component
		comp.init()
		return

	cloneObject = (item, components, parentComponent) ->
		# get cloned item component
		needsNewComp = false
		itemCompId = item._component.id

		components[component.id] = component
		if parentComponent
			components[parentComponent.id] = parentComponent
		createdComponents = [component]

		item = cloneItem @item, components, createdComponents, component

		for comp in createdComponents
			unless comp.item
				comp.item = item
				comp.setObject item, comp.itemId
		`//<development>`
		Object.freeze createdComponents
		`//</development>`
		if itemOpts
			itemUtils.Object.setOpts component.item, parentComponent, itemOpts
		for comp in createdComponents
			components[comp.id] = comp
			endComponentCloning comp, components, createdComponents
		if component.mirror
			for comp in createdComponents
				assert.ok comp.ready
				comp.initObjects()


		component

