         imageSelectedOverlay.frame = CGRect.at(x: imageSelectedButton.frame.width / 2, y: imageSelectedButton.frame.height / 2).grow(all: imageSelectedOverlay.layer.cornerRadius)
         imageSelectedOverlay.autoresizingMask = .FlexibleBottomMargin | .FlexibleTopMargin | .FlexibleLeftMargin | .FlexibleRightMargin
         imageSelectedButton.addSubview(imageSelectedOverlay)
-
-        cancelButton = UIButton()
+    }
+    // buttons that make up the "toolbar"
+    private func setupButtons() {
+        cameraButton.setImage(ElloDrawable.imageOfCameraIcon, forState: .Normal)
+        cameraButton.addTarget(self, action: Selector("addImageAction"), forControlEvents: .TouchUpInside)
+
         cancelButton.setImage(ElloDrawable.imageOfCancelIcon, forState: .Normal)
-
-        submitButton = UIButton()
+        cancelButton.addTarget(self, action: Selector("cancelEditingAction"), forControlEvents: .TouchUpInside)
+
         submitButton.setImage(ElloDrawable.imageOfSubmitIcon, forState: .Normal)
-
-        textView = UITextView()
+        submitButton.addTarget(self, action: Selector("submitAction"), forControlEvents: .TouchUpInside)
+    }
+    // The textContainer is the outetr gray background.  The text view is
+    // configured to fill that container (only the container and the text view
+    // insets are modified in layoutSubviews)
+    private func setupTextViews() {
+        textContainer.backgroundColor = UIColor.greyE5()
         textView.editable = true
         textView.allowsEditingTextAttributes = false  // TEMP
         textView.selectable = true


    weak var delegate : OmnibarScreenDelegate?

    var avatarView : UIImageView!
    var cameraButton : UIButton!
    var imageSelectedButton : UIButton!
    var imageSelectedOverlay : UIImageView!
    var cancelButton : UIButton!
    var submitButton : UIButton!
    var buttonContainer : ElloEquallySpacedLayout!

    var sayElloOverlay : UIControl!
    var sayElloLabel : UILabel!

    var textContainer : UIView!
    var textView : UITextView!

    private var currentText : NSAttributedString?
    private var currentImage : UIImage?

        textView.font = UIFont.typewriterFont(12)
        textView.textContainer.lineFragmentPadding = 0
        textView.backgroundColor = UIColor.greyE5()
        textView.delegate = self
        textView.autoresizingMask = .FlexibleHeight | .FlexibleWidth
    }
    private func setupViewHierarchy() {
        for view in [avatarView, buttonContainer, textContainer, sayElloOverlay] as [UIView] {
            self.addSubview(view)
        }
        for view in [cameraButton, cancelButton, submitButton] as [UIView] {
            buttonContainer.addSubview(view)
        }
        sayElloOverlay.addSubview(sayElloLabel)
        textContainer.addSubview(textView)
    }

// MARK: Public interface

    // Removes the undo state, and updates the text view, including the overlay
    // and first responder state.  This method is meant to be used during
