anchor.diff:          |> filterExamples cfg.Include
           |> ExampleGroup.filterGroups (cfg.Exclude >> not)
   
  -    let fromConfig cfg =
  +    let fromConfigWrapped cfg =
           fun reporter topLevelGroups ->
               let filteredGroups = 
                   topLevelGroups
                   |> filterGroupsFromConfig cfg
  -            let fold r = List.fold (fun r g -> doRun g reporter r) r filteredGroups
  -            reporter.BeginTestRun ()
  -            |> fold
  -            |> reporter.EndTestRun
  +            let fold r = List.fold (fun r g -> doRun g r) r filteredGroups
  +            let r = 
  +                reporter.BeginTestRun ()
  +                |> fold
  +            r.EndTestRun()
  +
  +    let fromConfig<'T> cfg =
  +        fun (reporter : Reporter<'T>) topLevelGroups ->
  +            let f = fromConfigWrapped cfg
  +            let wrapper = ReporterWrapper.createWrapper reporter
  +            let result = f wrapper topLevelGroups 
  +            result :?> 'T
               
       /// Runs a collection of top level group specs, using a specific
       /// reporter to report progress. The generated report is returned
       /// to the caller.
  -    let run reporter topLevelGroups =
  -        let runner = defaultConfig |> fromConfig
  +    let runWithWrapper reporter topLevelGroups =
  +        let runner = defaultConfig |> fromConfigWrapped
           topLevelGroups |> runner reporter
  +
  +    let run<'T> (reporter:Reporter<'T>) topLevelGroups : 'T =
  +        let wrapper = ReporterWrapper.createWrapper reporter
  +        let result : obj = runWithWrapper wrapper topLevelGroups
  +        result :?> 'T
positive.code:             Exclude = fun x -> false
          }
  
  module Runner =
      open Configuration
  
      type SingleExample = {
          Example : Example.T
  
negative.code:         | AssertionError(e) -> Failure e
          | ex -> Error ex
  
      let doRun exampleGroup =
          let rec run groupStack reporter =
              let runExample (example:Example.T) reporter =
                  { Example = example;
                    ContainingGroups = groupStack }
                  |> execExample
                  |> reporter.ReportExample (example |> Example.getDescriptor)
  
              let grp = groupStack |> List.head
              reporter.BeginGroup (grp |> ExampleGroup.getDescriptor)
              |> ExampleGroup.foldExamples (fun rep ex -> runExample ex rep) grp
              |> ExampleGroup.foldChildGroups (fun rep grp -> run (grp::groupStack) rep) grp
              |> fun x -> x.EndGroup()
          run [exampleGroup]
  
      let filterGroupsFromConfig cfg topLevelGroups =
          let filterExamples f groups =
  