             console.log "3 returnedContext.throwing: " + returnedContext.throwing
 
           # where we detect an exception being thrown
-          if returnedContext.throwing
+          if theContext.throwing or returnedContext.throwing
             console.log "throw escape"
             theContext.returned = receiver
             restOfMessage.exhaust()

          if returnedContext.exhaustPreviousContextMessage == true
            restOfMessage.exhaust()

          if returnedContext.findAnotherReceiver and !returnedContext.throwing and !restOfMessage.isEmpty()
            returnedContext.findAnotherReceiver = false
            returnedContext = returnedContext.previousContext
            findAnotherReceiver = true
            console.log "finding next receiver from:  " + restOfMessage.flToString()

          if findAnotherReceiver
            findAnotherReceiver = false

      [returnedContext, returnedMessage] = @partialEvalAsMessage theContext
      if !returnedMessage.isEmpty()
        console.log "list couldn't be fully evaluated: " + @flToString() + " unexecutable: " + returnedMessage.flToString()
        theContext.returned = FLException.createNew "message was not understood: " + returnedMessage.flToString()
        theContext.throwing = true
        return [theContext, returnedMessage]
      return [returnedContext, returnedMessage]

    # this eval doesn't require that the whole list is consumed,
