 			@_impl.innerElemStyle.fontFamily = @_impl.innerElemStyle.fontFamily
 		return
 
+	sizeUpdatePending = false
+
+	updateSize = do ->
+		windowLoadQueue = []
+
+		textImpl.onFontReady ->
+			while elem = windowLoadQueue.pop()
+				updateSize elem
+			return
+
+		(item) ->
+			data = item._impl
+			{innerElem} = data
+
+			if not data.autoWidth and not data.autoHeight
+				return
+
+			if not isFontReady
+				windowLoadQueue.push item
+
+			sizeUpdatePending = true
+
+			if data.autoWidth
+				item.width = innerElem.offsetWidth
+			if data.autoHeight
+				item.height = innerElem.offsetHeight
+
+			sizeUpdatePending = false
+
+			if innerElem.parentNode is hatchery
+				implUtils.prependElement data.elem, innerElem
+			else
+				if item._height is 0
+					hatchery.appendChild data.innerElem
+					updateSize item
+			return
+
 	updateContent = do ->
+		pending = false
 		queue = []
-		pending = false
-
-		updateItems = ->
+
+		updateItem = (item) ->
+			data = item._impl
+			if data.containsHTML
+				data.innerElem.innerHTML = item._text
+			else
+				data.innerElem.textContent = item._text
+			updateSize item
+			return
+
+		updateAll = ->
+			while item = queue.pop()
+				item._impl.contentUpdatePending = false
+				updateItem item
 			pending = false
-
-			# update
-			for item in queue
-				val = item._text
-				if val.indexOf('<') isnt -1 or val.indexOf('&#x') isnt -1
-					item._impl.innerElem.innerHTML = val
-				else
-					item._impl.innerElem.textContent = val
-
-			while queue.length
-				item = queue.pop()
-				item._impl.pendingContent = false
-				updateSize item
-
 			return
 
 		(item) ->
-			if item._impl.pendingContent
+			data = item._impl
+			if data.contentUpdatePending
 				return
 
-			item._impl.pendingContent = true
 			queue.push item
+			data.contentUpdatePending = true
 
 			unless pending
-				setImmediate updateItems
-				pending = true
+				setImmediate updateAll
+				pending = false
 			return
 
 	onWidthChange = ->

		else
			val = "'#{val}'"
		@_impl.innerElemStyle.fontFamily = val
		updateSize @
		return

	setTextFontPixelSize: (val) ->
		val = round val
		@_impl.innerElemStyle.fontSize = "#{val}px"
		updateSize @
		return

	setTextFontWeight: (val) ->
		@_impl.innerElemStyle.fontWeight = implUtils.getFontWeight val
		updateSize @
		return

	setTextFontWordSpacing: (val) ->
		@_impl.innerElemStyle.wordSpacing = "#{val}px"
		updateSize @
		return

	setTextFontLetterSpacing: (val) ->
		@_impl.innerElemStyle.letterSpacing = "#{val}px"
		updateSize @
		return

	setTextFontItalic: (val) ->


	setTextLineHeight: (val) ->
		@_impl.innerElemStyle.lineHeight = val
		updateContent @
		return

	setTextFontFamily: (val) ->
