 
     if animated {
       CATransaction.begin()
-      CATransaction.setCompletionBlock({ completion?() })
+      CATransaction.setCompletionBlock(presented)
 
       let animation = CABasicAnimation(keyPath: "transform.translation.y")
       animation.duration = 0.25

  public func presentView(view: UIView, duration: NSTimeInterval? = 5, position: NoticePosition = .Top, animated: Bool = true, completion: (() -> Void)? = nil) {

    if currentNotice != nil {
      pendingNotice = (view, position)

      dismissCurrentNotice(animated) {[weak self] in
        if let (pendingView, pendingPosition) = self?.pendingNotice {
          self?.showView(pendingView, duration: duration, position: pendingPosition, animated: animated, dismissOnTouch: true, completion: completion)
          self?.pendingNotice = nil
        }
      }

    } else {
      showView(view, duration: duration, position: position, animated: animated, dismissOnTouch: true, completion: completion)
    }
  }

  private func showView(view: UIView, duration: NSTimeInterval?, position: NoticePosition, animated: Bool, dismissOnTouch: Bool, completion: (() -> Void)? = nil) {

    if dismissOnTouch {
      view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "noticeTouched"))
    }

    currentNotice = (view, position)
    addSubview(view)

    view.translatesAutoresizingMaskIntoConstraints = false

      view.layer.addAnimation(animation, forKey: "slide in")
      CATransaction.commit()
    } else {
      presented()
    }
  }

  public func dismissCurrentNotice(animated: Bool = true, dismissed: (() -> Void)? = nil) {
    if let (noticeView, position, _) = self.currentNotice
      where noticeView.layer.animationForKey("slide out") == nil
    {
      dismissNotice(noticeView, position: position, animated: animated, dismissed: { dismissed?() })
    }
  }

  public func dismissNotice(noticeView: UIView, position: NoticePosition, animated: Bool = true, dismissed: () -> Void) {

    let complete: () -> () = { [weak self] in
      if let (currentView, _, completion) = self?.currentNotice where currentView == noticeView {
        currentView.removeFromSuperview()
        self?.currentNotice = nil
        completion()
      }

      dismissed()
    }

    if animated {
