         if position == 'last'
             jasmine.Spec.prototype.removeAllSpies.apply(context)
 
-      param.apply(context, args)
+      exception = null
+
+      try
+        param.apply(context, args)
+      catch exception
 
       if position == 'last'
         jasmine.GWT.runHook('After', context)
+
+      throw(exception) if exception
 
   @runFailure: (type, name, args) ->
     it "#{type} #{name}", ->


          for [ match, code ] in (jasmine.GWT.Steps[type] || [])
            if result = name.match(match)
              codeRunner(code, result[1..-1].concat(args))
              found = true

              break

          jasmine.GWT.Scenario.runFailure(type, name, args) if !found

          position = (if (index + 2) == _statements.length then 'last' else 'middle')

    jasmine.GWT.currentScenario_ = null



        position = 'first'

        calcPosition = (index) ->
          if (index + 2) == _statements.length then 'last' else 'middle'

        for index in [ 0..._statements.length ]
          [ type, name, param ] = _statements[index]
          [ _this._type, _this._name ] = [ type, name ]

          args = []

          codeRunner = (thing, pos, args = []) ->
            jasmine.GWT.Scenario.runCode(type, name, thing, pos, _this, args)

          if param?
            if typeof param == "function"
              codeRunner(param, position)
              position = calcPosition(index)

              continue
            else
