diff --git a/benchmark.go b/benchmark.go
index 58fc41a..dcd426f 100644
--- a/benchmark.go
+++ b/benchmark.go
@@ -6,8 +6,6 @@
 
 import (
 	"fmt"
-	"reflect"
-	"runtime"
 	"time"
 )
 
@@ -136,41 +134,3 @@
 	}
 	return 10 * base
 }
-
-// benchmarkN runs a single benchmark for the specified number of iterations.
-func benchmarkN(c *C, n int) {
-	// Try to get a comparable environment for each run
-	// by clearing garbage from previous runs.
-	runtime.GC()
-	c.N = n
-	c.ResetTimer()
-	c.StartTimer()
-	c.method.Call([]reflect.Value{reflect.ValueOf(c)})
-	c.StopTimer()
-}
-
-// benchmark runs the benchmark function.  It gradually increases the number
-// of benchmark iterations until the benchmark runs for a second in order
-// to get a reasonable measurement.
-func benchmark(c *C) {
-	// Run the benchmark for a single iteration in case it's expensive.
-	n := 1
-	benchmarkN(c, n)
-	// Run the benchmark for at least the specified amount of time.
-	for c.status == succeededSt && c.duration < c.benchTime && n < 1e9 {
-		last := n
-		// Predict iterations/sec.
-		if c.nsPerOp() == 0 {
-			n = 1e9
-		} else {
-			n = int(c.benchTime.Nanoseconds() / c.nsPerOp())
-		}
-		// Run more iterations than we think we'll need for a second (1.5x).
-		// Don't grow too fast in case we had timing errors previously.
-		// Be sure to run at least one more than last time.
-		n = max(min(n+n/2, 100*last), last+1)
-		// Round up to something easy to read.
-		n = roundUp(n)
-		benchmarkN(c, n)
-	}
-}
diff --git a/benchmark_test.go b/benchmark_test.go
index 6d2b009..7e96ae7 100644
--- a/benchmark_test.go
+++ b/benchmark_test.go
@@ -36,8 +36,6 @@
 	c.Assert(output.value, Matches, expected)
 }
 
-// Quite unfortunate that these two tests alone account for most of the 
-
 func (s *BenchmarkS) TestBenchmark(c *C) {
 	helper := FixtureHelper{sleep: 100000}
 	output := String{}
@@ -48,6 +46,14 @@
 		Filter: "Benchmark1",
 	}
 	Run(&helper, &runConf)
+	c.Check(helper.calls[0], Equals, "SetUpSuite")
+	c.Check(helper.calls[1], Equals, "SetUpTest")
+	c.Check(helper.calls[2], Equals, "Benchmark1")
+	c.Check(helper.calls[3], Equals, "TearDownTest")
+	c.Check(helper.calls[4], Equals, "SetUpTest")
+	c.Check(helper.calls[5], Equals, "Benchmark1")
+	c.Check(helper.calls[6], Equals, "TearDownTest")
+	// ... and more.
 
 	expected := "PASS: gocheck_test\\.go:[0-9]+: FixtureHelper\\.Benchmark1\t *100\t *[12][0-9]{5} ns/op\n"
 	c.Assert(output.value, Matches, expected)
diff --git a/fixture_test.go b/fixture_test.go
index cd66118..63f392e 100644
--- a/fixture_test.go
+++ b/fixture_test.go
@@ -31,7 +31,7 @@
 	c.Check(helper.calls[5], Equals, "Test2")
 	c.Check(helper.calls[6], Equals, "TearDownTest")
 	c.Check(helper.calls[7], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 8)
+	c.Check(len(helper.calls), Equals, 8)
 }
 
 // -----------------------------------------------------------------------
@@ -49,7 +49,7 @@
 	c.Check(helper.calls[5], Equals, "Test2")
 	c.Check(helper.calls[6], Equals, "TearDownTest")
 	c.Check(helper.calls[7], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 8)
+	c.Check(len(helper.calls), Equals, 8)
 
 	expected := "^\n-+\n" +
 		"PANIC: gocheck_test\\.go:[0-9]+: FixtureHelper.Test1\n\n" +
@@ -72,7 +72,7 @@
 	c.Check(helper.calls[1], Equals, "SetUpTest")
 	c.Check(helper.calls[2], Equals, "TearDownTest")
 	c.Check(helper.calls[3], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 4)
+	c.Check(len(helper.calls), Equals, 4)
 
 	expected := "^\n-+\n" +
 		"PANIC: gocheck_test\\.go:[0-9]+: " +
@@ -102,7 +102,7 @@
 	c.Check(helper.calls[2], Equals, "Test1")
 	c.Check(helper.calls[3], Equals, "TearDownTest")
 	c.Check(helper.calls[4], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 5)
+	c.Check(len(helper.calls), Equals, 5)
 
 	expected := "^\n-+\n" +
 		"PANIC: gocheck_test\\.go:[0-9]+: " +
@@ -129,7 +129,7 @@
 	Run(&helper, &RunConf{Output: &output})
 	c.Check(helper.calls[0], Equals, "SetUpSuite")
 	c.Check(helper.calls[1], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 2)
+	c.Check(len(helper.calls), Equals, 2)
 
 	expected := "^\n-+\n" +
 		"PANIC: gocheck_test\\.go:[0-9]+: " +
@@ -157,7 +157,7 @@
 	c.Check(helper.calls[5], Equals, "Test2")
 	c.Check(helper.calls[6], Equals, "TearDownTest")
 	c.Check(helper.calls[7], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 8)
+	c.Check(len(helper.calls), Equals, 8)
 
 	expected := "^\n-+\n" +
 		"PANIC: gocheck_test\\.go:[0-9]+: " +
@@ -187,7 +187,7 @@
 	c.Check(helper.calls[4], Equals, "Test2")
 	c.Check(helper.calls[5], Equals, "TearDownTest")
 	c.Check(helper.calls[6], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 7)
+	c.Check(len(helper.calls), Equals, 7)
 
 	expected := "^\n-+\n" +
 		"PANIC: fixture_test\\.go:[0-9]+: " +
@@ -202,7 +202,7 @@
 	helper := WrongSetUpTestArgHelper{}
 	output := String{}
 	Run(&helper, &RunConf{Output: &output})
-	c.Check(helper.n, Equals, 0)
+	c.Check(len(helper.calls), Equals, 0)
 
 	expected :=
 		"^\n-+\n" +
@@ -218,7 +218,7 @@
 	helper := WrongSetUpSuiteArgHelper{}
 	output := String{}
 	Run(&helper, &RunConf{Output: &output})
-	c.Check(helper.n, Equals, 0)
+	c.Check(len(helper.calls), Equals, 0)
 
 	expected :=
 		"^\n-+\n" +
@@ -244,7 +244,7 @@
 	c.Check(helper.calls[4], Equals, "Test2")
 	c.Check(helper.calls[5], Equals, "TearDownTest")
 	c.Check(helper.calls[6], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 7)
+	c.Check(len(helper.calls), Equals, 7)
 
 	expected := "^\n-+\n" +
 		"PANIC: fixture_test\\.go:[0-9]+: " +
@@ -259,7 +259,7 @@
 	helper := WrongSetUpTestArgCountHelper{}
 	output := String{}
 	Run(&helper, &RunConf{Output: &output})
-	c.Check(helper.n, Equals, 0)
+	c.Check(len(helper.calls), Equals, 0)
 
 	expected :=
 		"^\n-+\n" +
@@ -275,7 +275,7 @@
 	helper := WrongSetUpSuiteArgCountHelper{}
 	output := String{}
 	Run(&helper, &RunConf{Output: &output})
-	c.Check(helper.n, Equals, 0)
+	c.Check(len(helper.calls), Equals, 0)
 
 	expected :=
 		"^\n-+\n" +
@@ -460,7 +460,7 @@
 	c.Assert(output.value, Equals, "")
 	c.Assert(helper.calls[0], Equals, "SetUpSuite")
 	c.Assert(helper.calls[1], Equals, "TearDownSuite")
-	c.Assert(helper.n, Equals, 2)
+	c.Assert(len(helper.calls), Equals, 2)
 	c.Assert(result.Skipped, Equals, 2)
 }
 
@@ -474,6 +474,6 @@
 	c.Assert(helper.calls[3], Equals, "Test2")
 	c.Assert(helper.calls[4], Equals, "TearDownTest")
 	c.Assert(helper.calls[5], Equals, "TearDownSuite")
-	c.Assert(helper.n, Equals, 6)
+	c.Assert(len(helper.calls), Equals, 6)
 	c.Assert(result.Skipped, Equals, 1)
 }
diff --git a/gocheck.go b/gocheck.go
index a037c95..50af42e 100644
--- a/gocheck.go
+++ b/gocheck.go
@@ -691,12 +691,14 @@
 // in case the fixture method panics.  This makes it easier to track the
 // fixture panic together with other call panics within forkTest().
 func (runner *suiteRunner) runFixtureWithPanic(method *methodType, logb *logger, skipped *bool) *C {
-	if *skipped {
+	if skipped != nil && *skipped {
 		return nil
 	}
 	c := runner.runFixture(method, logb)
 	if c != nil && c.status != succeededSt {
-		*skipped = c.status == skippedSt
+		if skipped != nil {
+			*skipped = c.status == skippedSt
+		}
 		panic(&fixturePanic{c.status, method})
 	}
 	return c
@@ -713,27 +715,53 @@
 	return runner.forkCall(method, testKd, nil, func(c *C) {
 		var skipped bool
 		defer runner.runFixtureWithPanic(runner.tearDownTest, nil, &skipped)
-		runner.runFixtureWithPanic(runner.setUpTest, c.logb, &skipped)
-		mt := c.method.Type()
-		if mt.NumIn() != 1 || mt.In(0) != reflect.TypeOf(c) {
-			// Rather than a plain panic, provide a more helpful message when
-			// the argument type is incorrect.
-			c.status = panickedSt
-			c.logArgPanic(c.method, "*gocheck.C")
-			return
-		}
-		if strings.HasPrefix(c.method.Info.Name, "Test") {
+		defer c.StopTimer()
+		benchN := 1
+		for {
+			runner.runFixtureWithPanic(runner.setUpTest, c.logb, &skipped)
+			mt := c.method.Type()
+			if mt.NumIn() != 1 || mt.In(0) != reflect.TypeOf(c) {
+				// Rather than a plain panic, provide a more helpful message when
+				// the argument type is incorrect.
+				c.status = panickedSt
+				c.logArgPanic(c.method, "*gocheck.C")
+				return
+			}
+			if strings.HasPrefix(c.method.Info.Name, "Test") {
+				c.ResetTimer()
+				c.StartTimer()
+				c.method.Call([]reflect.Value{reflect.ValueOf(c)})
+				return
+			}
+			if !strings.HasPrefix(c.method.Info.Name, "Benchmark") {
+				panic("unexpected method prefix: " + c.method.Info.Name)
+			}
+
+			runtime.GC()
+			c.N = benchN
 			c.ResetTimer()
 			c.StartTimer()
-			defer c.StopTimer()
 			c.method.Call([]reflect.Value{reflect.ValueOf(c)})
-			return
+			c.StopTimer()
+			if c.status != succeededSt || c.duration >= c.benchTime || benchN >= 1e9 {
+				return
+			}
+			perOpN := int(1e9)
+			if c.nsPerOp() != 0 {
+				perOpN = int(c.benchTime.Nanoseconds() / c.nsPerOp())
+			}
+
+			// Logic taken from the stock testing package:
+			// - Run more iterations than we think we'll need for a second (1.5x).
+			// - Don't grow too fast in case we had timing errors previously.
+			// - Be sure to run at least one more than last time.
+			benchN = max(min(perOpN+perOpN/2, 100*benchN), benchN+1)
+			benchN = roundUp(benchN)
+
+			skipped = true // Don't run the deferred one if this panics.
+			runner.runFixtureWithPanic(runner.tearDownTest, nil, nil)
+			skipped = false
 		}
-		if strings.HasPrefix(c.method.Info.Name, "Benchmark") {
-			benchmark(c)
-			return
-		}
-		panic("unexpected method prefix: " + c.method.Info.Name)
 	})
 }
 
diff --git a/gocheck_test.go b/gocheck_test.go
index aad261a..7575df4 100644
--- a/gocheck_test.go
+++ b/gocheck_test.go
@@ -94,8 +94,7 @@
 // Helper suite for testing ordering and behavior of fixture.
 
 type FixtureHelper struct {
-	calls    [64]string
-	n        int
+	calls    []string
 	panicOn  string
 	skip     bool
 	skipOnN  int
@@ -105,16 +104,14 @@
 }
 
 func (s *FixtureHelper) trace(name string, c *gocheck.C) {
-	n := s.n
-	s.calls[n] = name
-	s.n += 1
+	s.calls = append(s.calls, name)
 	if name == s.panicOn {
 		panic(name)
 	}
 	if s.sleep > 0 && s.sleepOn == name {
 		time.Sleep(s.sleep)
 	}
-	if s.skip && s.skipOnN == n {
+	if s.skip && s.skipOnN == len(s.calls)-1 {
 		c.Skip("skipOnN == n")
 	}
 }
diff --git a/run_test.go b/run_test.go
index 3700ac7..6793e4c 100644
--- a/run_test.go
+++ b/run_test.go
@@ -206,7 +206,7 @@
 	c.Check(helper.calls[2], Equals, "Test1")
 	c.Check(helper.calls[3], Equals, "TearDownTest")
 	c.Check(helper.calls[4], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 5)
+	c.Check(len(helper.calls), Equals, 5)
 }
 
 func (s *RunS) TestFilterTestNameWithAll(c *C) {
@@ -222,7 +222,7 @@
 	c.Check(helper.calls[5], Equals, "Test2")
 	c.Check(helper.calls[6], Equals, "TearDownTest")
 	c.Check(helper.calls[7], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 8)
+	c.Check(len(helper.calls), Equals, 8)
 }
 
 func (s *RunS) TestFilterSuiteName(c *C) {
@@ -238,7 +238,7 @@
 	c.Check(helper.calls[5], Equals, "Test2")
 	c.Check(helper.calls[6], Equals, "TearDownTest")
 	c.Check(helper.calls[7], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 8)
+	c.Check(len(helper.calls), Equals, 8)
 }
 
 func (s *RunS) TestFilterSuiteNameAndTestName(c *C) {
@@ -251,7 +251,7 @@
 	c.Check(helper.calls[2], Equals, "Test2")
 	c.Check(helper.calls[3], Equals, "TearDownTest")
 	c.Check(helper.calls[4], Equals, "TearDownSuite")
-	c.Check(helper.n, Equals, 5)
+	c.Check(len(helper.calls), Equals, 5)
 }
 
 func (s *RunS) TestFilterAllOut(c *C) {
@@ -259,7 +259,7 @@
 	output := String{}
 	runConf := RunConf{Output: &output, Filter: "NotFound"}
 	Run(&helper, &runConf)
-	c.Check(helper.n, Equals, 0)
+	c.Check(len(helper.calls), Equals, 0)
 }
 
 func (s *RunS) TestRequirePartialMatch(c *C) {
@@ -267,7 +267,7 @@
 	output := String{}
 	runConf := RunConf{Output: &output, Filter: "est"}
 	Run(&helper, &runConf)
-	c.Check(helper.n, Equals, 8)
+	c.Check(len(helper.calls), Equals, 8)
 }
 
 func (s *RunS) TestFilterError(c *C) {
@@ -277,7 +277,7 @@
 	result := Run(&helper, &runConf)
 	c.Check(result.String(), Equals,
 		"ERROR: Bad filter expression: error parsing regexp: missing closing ]: `[`")
-	c.Check(helper.n, Equals, 0)
+	c.Check(len(helper.calls), Equals, 0)
 }
 
 // -----------------------------------------------------------------------
