         }
         for (name, expression) in _viewExpressions {
             let value = try expression.evaluate()
+            guard _valueHasChanged[name]!() else {
+                continue
+            }
             if animated {
                 try _view?.setAnimatedValue(value, forExpression: name)
             } else {

        _viewControllerExpressions.removeAll()
        _viewExpressions.removeAll()
        _valueClearers.removeAll()
        for child in children {
            child.cleanUp()
        }

    private var _viewControllerExpressions = [String: LayoutExpression]()
    private var _viewExpressions = [String: LayoutExpression]()
    private var _valueClearers = [() -> Void]()
    private var _valueHasChanged = [String: () -> Bool]()

    private lazy var viewControllerConstructorArgumentTypes: [String: RuntimeType]? = self.viewControllerClass?.parameterTypes
    private lazy var viewConstructorArgumentTypes: [String: RuntimeType] = self.viewClass.parameterTypes
