 
     // MARK: - Subviews
 
-    public var thumbViews: [UIImageView] = []
-    public var valueLabels: [UITextField] = [] // UILabels are a pain to layout, text fields look nice as-is.
-    public var trackView = UIView()
-    public var minimumView = UIImageView()
-    public var maximumView = UIImageView()
+    open var thumbViews: [UIImageView] = []
+    open var valueLabels: [UITextField] = [] // UILabels are a pain to layout, text fields look nice as-is.
+    open var trackView = UIView()
+    open var minimumView = UIImageView()
+    open var maximumView = UIImageView()
 
     // MARK: - Actions
 
-    func didDrag(_ panGesture: UIPanGestureRecognizer) {
+    open func didDrag(_ panGesture: UIPanGestureRecognizer) {
         // determine thumb to drag
         if panGesture.state == .began {
             let location = panGesture.location(in: slideView)

    }

    /// value label shows difference from previous thumb value (true) or absolute value (false = default)
    @IBInspectable public var isValueLabelRelative: Bool = false {
        didSet {
            for i in 0 ..< valueLabels.count {
                updateValueLabel(i)

    }

    /// show value labels next to thumbs. (default: show no label)
    @IBInspectable open var valueLabelPosition: NSLayoutAttribute = .notAnAttribute {
        didSet {
            valueLabels.removeViewsStartingAt(0)
            if valueLabelPosition != .notAnAttribute {
