             value = segmentedControl
                 .titleForSegmentAtIndex(segmentedControl.selectedSegmentIndex)
         {
-            self.value = value
+            self._value = value
+            self.valueDidChange?(value)
         }
 
         for control in self.segmentedControls {

        control.addObserver(
            self,
            forKeyPath: "selectedSegmentIndex",
            options: NSKeyValueObservingOptions.New,
            context: &self.kvoContext
        )
    }

        self.segmentedControls.removeAll()
    }

    private func changeCurrentIndex() {
        guard let
            value = self.value
        else { return }

        for control in self.segmentedControls {
            for index in 0...control.numberOfSegments - 1 {
                let title = control.titleForSegmentAtIndex(index)
                guard value == title else { continue }

                // yes KVO sucks, but we don't have another
                // way to do this
                removeObserverForSegmentedControl(control)
                control.selectedSegmentIndex = index
                addObserverForSegmentedControl(control)
            } // end for index
        } // end for
    }

    // MARK: KVO
    public override func observeValueForKeyPath(
        keyPath: String?,
