   }
 
   private func hideErrorIcons() {
-    guard let button = item.button else {
-      return log.error("Could not find button on status item (hide)")
+    image = nil
+    alternateImage = nil
+  }
+
+  private var image: NSImage? {
+    set { Async.main { self.button?.image = newValue } }
+    get { return button?.image }
+  }
+
+  private var alternateImage: NSImage? {
+    set { Async.main { self.button?.alternateImage = newValue } }
+    get { return button?.alternateImage }
+  }
+
+  private var button: NSButton? {
+    if let button = item.button {
+      return button
     }
 
-    button.image = nil
-    button.alternateImage = nil
+    log.error("Could not find button on status item (hide)")
+    return nil
   }
 
   private func style(_ immutable: Immutable) -> Immutable {

    }
  }

  func set(error: Bool) {
    if error {
      showErrorIcons()
      attributedTitle = nil

    if displayed { show() } else { hide() }
  }

  public var attributedTitle: NSAttributedString? {
    get { return item.attributedTitle }
    set { Async.main { self.item.attributedTitle = newValue } }
  }

  public var menu: NSMenu? {
    set { Async.main { self.item.menu = newValue } }
    get { return item.menu }
  }

  /**
   Hides item from menu bar
  */
  public func hide() {
    Async.main { self.item.hide() }
  }

  /**
    Display item in menu bar
  */
  public func show() {
    Async.main { self.item.show() }
  }

  public func on(_ event: MenuEvent) {
    switch event {
    case .didSetError:
      set(error: true)
