diff --git a/django/contrib/formtools/tests/wizard/__init__.py b/django/contrib/formtools/tests/wizard/__init__.py
index 732c02f..a2a9692 100644
--- a/django/contrib/formtools/tests/wizard/__init__.py
+++ b/django/contrib/formtools/tests/wizard/__init__.py
@@ -15,4 +15,5 @@ from django.contrib.formtools.tests.wizard.wizardtests.tests import (
     CookieWizardTests,
     WizardTestKwargs,
     WizardTestGenericViewInterface,
+    WizardFormKwargsOverrideTests,
 )
diff --git a/django/contrib/formtools/tests/wizard/wizardtests/forms.py b/django/contrib/formtools/tests/wizard/wizardtests/forms.py
index 9013e89..6a81329 100644
--- a/django/contrib/formtools/tests/wizard/wizardtests/forms.py
+++ b/django/contrib/formtools/tests/wizard/wizardtests/forms.py
@@ -2,8 +2,10 @@ import os
 import tempfile
 
 from django import forms
+from django.contrib.auth.models import User
 from django.core.files.storage import FileSystemStorage
 from django.forms.formsets import formset_factory
+from django.forms.models import modelformset_factory
 from django.http import HttpResponse
 from django.template import Template, Context
 
@@ -50,6 +52,13 @@ class ContactWizard(WizardView):
             context.update({'another_var': True})
         return context
 
+class UserForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = ('username', 'email')
+
+UserFormSet = modelformset_factory(User, form=UserForm)
+
 class SessionContactWizard(ContactWizard):
     storage_name = 'django.contrib.formtools.wizard.storage.session.SessionStorage'
 
diff --git a/django/contrib/formtools/tests/wizard/wizardtests/tests.py b/django/contrib/formtools/tests/wizard/wizardtests/tests.py
index 592065e..862ef3d 100644
--- a/django/contrib/formtools/tests/wizard/wizardtests/tests.py
+++ b/django/contrib/formtools/tests/wizard/wizardtests/tests.py
@@ -7,6 +7,7 @@ from django.test.client import RequestFactory
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.formtools.wizard.views import CookieWizardView
+from django.contrib.formtools.tests.wizard.forms import UserForm, UserFormSet
 
 
 class WizardTests(object):
@@ -331,3 +332,46 @@ class WizardTestGenericViewInterface(TestCase):
         response = view(factory.get('/'))
         self.assertEquals(response.context_data['test_key'], 'test_value')
         self.assertEquals(response.context_data['another_key'], 'another_value')
+
+
+class WizardFormKwargsOverrideTests(TestCase):
+    def setUp(self):
+        super(WizardFormKwargsOverrideTests, self).setUp()
+
+        # Create two users so we can filter by is_staff when handing our
+        # wizard a queryset keyword argument.
+        User.objects.create(username='test1', email='test1@example.com')
+        User.objects.create(username='test2', email='test2@example.com',
+            is_staff=True)
+
+    def test_instance_is_maintained(self):
+        class InstanceOverrideWizard(CookieWizardView):
+            def get_form_kwargs(self, step):
+                return {'instance': User.objects.get(is_staff=True)}
+
+        factory = RequestFactory()
+
+        view = InstanceOverrideWizard.as_view([UserForm])
+        response = view(factory.get('/'))
+
+        form = response.context_data['wizard']['form']
+
+        self.assertNotEqual(form.instance.pk, None)
+        self.assertEqual('test2@example.com', form.initial.get('email', None))
+
+    def test_queryset_is_maintained(self):
+        class QuerySetOverrideWizard(CookieWizardView):
+            def get_form_kwargs(self, step):
+                return {'queryset': User.objects.filter(is_staff=True)}
+
+        factory = RequestFactory()
+
+        view = QuerySetOverrideWizard.as_view([UserFormSet])
+        response = view(factory.get('/'))
+
+        formset = response.context_data['wizard']['form']
+
+        self.assertNotEqual(formset.queryset, None)
+        self.assertEqual(1, formset.initial_form_count())
+        self.assertEqual(['test2@example.com'],
+            list(formset.queryset.values_list('email', flat=True)))
diff --git a/django/contrib/formtools/wizard/views.py b/django/contrib/formtools/wizard/views.py
index 06a0398..4372c8a 100644
--- a/django/contrib/formtools/wizard/views.py
+++ b/django/contrib/formtools/wizard/views.py
@@ -385,11 +385,13 @@ class WizardView(TemplateView):
             'initial': self.get_form_initial(step),
         })
         if issubclass(self.form_list[step], forms.ModelForm):
-            # If the form is based on ModelForm, add instance if available.
-            kwargs.update({'instance': self.get_form_instance(step)})
+            # If the form is based on ModelForm, add instance if available
+            # and not previously set.
+            kwargs.setdefault('instance', self.get_form_instance(step))
         elif issubclass(self.form_list[step], forms.models.BaseModelFormSet):
-            # If the form is based on ModelFormSet, add queryset if available.
-            kwargs.update({'queryset': self.get_form_instance(step)})
+            # If the form is based on ModelFormSet, add queryset if available
+            # and not previous set.
+            kwargs.setdefault('queryset', self.get_form_instance(step))
         return self.form_list[step](**kwargs)
 
     def process_step(self, form):
