 		return realizedElement
 	}
 
-	private func update() {
-		updateWithRootRealizedElement(rootRealizedElement)
-	}
-
-	private func updateWithRootRealizedElement(realizedElement: RealizedElement?) {
+	private func render() -> Element {
+		return renderWithRootRealizedElement(rootRealizedElement)
+	}
+
+	private func renderWithRootRealizedElement(realizedElement: RealizedElement?) -> Element {
 		let newRoot = render(state)
-		rootElement = newRoot
-
 		if let realizedElement = realizedElement {
 			// If we can diff then apply it. Otherwise we just swap out the
 			// entire hierarchy.

			}
		}

		componentDidUpdate()
	}

	/// Update the component without changing any state.
	public func forceUpdate() {
		enqueueRender()
	}
	

	/// Called when the component has been derealized.
	public func componentDidDerealize() {}
	
	/// Called after the component has been rendered and diff applied.
	public func componentDidRender() {}
	
	/// Called when the state has changed but before the component is 
	/// re-rendered. This gives the component the chance to decide whether it 
	/// *should* based on the new state.
	///
	/// The default implementation always returns true.
	public func componentShouldRender(previousState: S, newState: S) -> Bool {
		return true
	}
	
