diff --git a/android/fixture.go b/android/fixture.go
index 1eb53a2..303c95c 100644
--- a/android/fixture.go
+++ b/android/fixture.go
@@ -455,7 +455,7 @@
 	Extend(preparers ...FixturePreparer) FixturePreparer
 
 	// Create a Fixture.
-	Fixture(t *testing.T, preparers ...FixturePreparer) Fixture
+	Fixture(t *testing.T) Fixture
 
 	// ExtendWithErrorHandler creates a new FixturePreparer that will use the supplied error handler
 	// to check the errors (may be 0) reported by the test.
@@ -706,13 +706,11 @@
 	NinjaDeps []string
 }
 
-func createFixture(t *testing.T, buildDir string, base []*simpleFixturePreparer, extra []FixturePreparer) Fixture {
-	all := dedupAndFlattenPreparers(base, extra)
-
+func createFixture(t *testing.T, buildDir string, preparers []*simpleFixturePreparer) Fixture {
 	config := TestConfig(buildDir, nil, "", nil)
 	ctx := NewTestContext(config)
 	fixture := &fixture{
-		preparers: all,
+		preparers: preparers,
 		t:         t,
 		config:    config,
 		ctx:       ctx,
@@ -721,7 +719,7 @@
 		errorHandler: FixtureExpectsNoErrors,
 	}
 
-	for _, preparer := range all {
+	for _, preparer := range preparers {
 		preparer.function(fixture)
 	}
 
@@ -741,8 +739,8 @@
 	return newFixturePreparer(all)
 }
 
-func (b *baseFixturePreparer) Fixture(t *testing.T, preparers ...FixturePreparer) Fixture {
-	return createFixture(t, t.TempDir(), b.self.list(), preparers)
+func (b *baseFixturePreparer) Fixture(t *testing.T) Fixture {
+	return createFixture(t, t.TempDir(), b.self.list())
 }
 
 func (b *baseFixturePreparer) ExtendWithErrorHandler(errorHandler FixtureErrorHandler) FixturePreparer {
@@ -812,16 +810,16 @@
 	return extendedFactory
 }
 
-func (f *fixtureFactory) Fixture(t *testing.T, preparers ...FixturePreparer) Fixture {
+func (f *fixtureFactory) Fixture(t *testing.T) Fixture {
 	// If there is no buildDirSupplier then just use the default implementation.
 	if f.buildDirSupplier == nil {
-		return f.baseFixturePreparer.Fixture(t, preparers...)
+		return f.baseFixturePreparer.Fixture(t)
 	}
 
 	// Retrieve the buildDir from the supplier.
 	buildDir := *f.buildDirSupplier
 
-	return createFixture(t, buildDir, f.preparers, preparers)
+	return createFixture(t, buildDir, f.preparers)
 }
 
 type fixture struct {
