(define (make-account balance passwd)
  (define (withdraw amount)
    (if (>= balance amount)
        (set! balance (- balance amount))
        "insufficient funds"))
  (define (deposit amount)
    (set! balance (+ balance amount)))
  (define (status) balance)
  (define (foreign-deposit amount value)
    (set! balance (+ balance (* amount value))))
  (define incorrect
    (lambda x "incorrect password"))
  (define (dispatch pass m)
    (cond ((not (eq? pass passwd)) incorrect)
          ((eq? m 'withdraw) withdraw)
          ((eq? m 'deposit) deposit)
          ((eq? m 'status) status)
          ((eq? m 'foreign-deposit) foreign-deposit)
          (else (error "Unkown request --MAKE-ACCOUNT" m))))
  dispatch)