     }
     
     fileprivate func initialize() {
-        let button = makeButton()
-        button.container = self
-        customView = button
-    }
-
-    fileprivate func makeButton() -> DropDownButton {
-        return DropDownButton()
-    }
-    
+        innerButton.outerButton = self
+        customView = innerButton
+    }
+
+    private let _innerButton = DropDownButton()
+    fileprivate var innerButton: DropDownButton { return _innerButton }
 }
 
 public class DropDownListBarButton: DropDownBarButton {
     
-    fileprivate override func makeButton() -> DropDownButton {
-        return DropDownListButton()
-    }
-
-    public func setList(items: [CustomStringConvertible]) -> Bool {
-        return (customView as! DropDownListButton).setList(items: items)
-    }
+    public func setList(items: [CustomStringConvertible]) -> Self? {
+        return innerButton.setList(items: items) == nil ? nil : self
+    }
+
+    private let _innerButton = DropDownListButton()
+    fileprivate override var innerButton: DropDownListButton { return _innerButton }
 }
 
 public class DropDownMenuBarButton: DropDownBarButton {
     
-    fileprivate override func makeButton() -> DropDownButton {
-        return DropDownMenuButton()
-    }
-    
-    public func setMenu(items: [CustomStringConvertible], initialSelection: Int, selectionHandler: @escaping ((CustomStringConvertible) -> Void)) -> Bool {
-        return (customView as! DropDownMenuButton).setMenu(items: items, initialSelection: initialSelection, selectionHandler: selectionHandler)
-    }
-}
-
+    public func setMenu(items: [CustomStringConvertible], initialSelection: Int, selectionHandler: @escaping ((CustomStringConvertible) -> Void)) -> Self? {
+        return innerButton.setMenu(items: items, initialSelection: initialSelection, selectionHandler: selectionHandler) == nil ? nil : self
+    }
+
+    private let _innerButton = DropDownMenuButton()
+    fileprivate override var innerButton: DropDownMenuButton { return _innerButton }
+}
+

        sizeToFit()
    }
    
    public var collapsed: Bool {
        return imageView?.transform == CGAffineTransform.identity
    }

        viewController.preferredContentSize = CGSize(width: 225, height: 250) // TODO: Calculate the preferred size from the actual content.
        let presentationController = viewController.popoverPresentationController!
        presentationController.delegate = self
        if let barButton = outerButton { presentationController.barButtonItem = barButton } else { presentationController.sourceView = self.imageView }
        self.viewController?.present(viewController, animated: true, completion: nil)
    }

