diff --git a/django/contrib/admin/media/js/prepopulate.js b/django/contrib/admin/media/js/prepopulate.js
index 24f24f9..6d8c817 100644
--- a/django/contrib/admin/media/js/prepopulate.js
+++ b/django/contrib/admin/media/js/prepopulate.js
@@ -25,7 +25,10 @@
                       values.push($(field).val());
                   }
                 })
-                field.val(URLify(values.join(' '), maxLength));
+
+                var newval = values.join(' ');
+                if (field.hasClass('vSlugField')) newval = URLify(newval, maxLength)
+                field.val(newval);
             };
 
             $(dependencies.join(',')).keyup(populate).change(populate).focus(populate);
diff --git a/django/contrib/admin/media/js/prepopulate.min.js b/django/contrib/admin/media/js/prepopulate.min.js
index aa94937..0c442f8 100644
--- a/django/contrib/admin/media/js/prepopulate.min.js
+++ b/django/contrib/admin/media/js/prepopulate.min.js
@@ -1 +1 @@
-(function(a){a.fn.prepopulate=function(d,g){return this.each(function(){var b=a(this);b.data("_changed",false);b.change(function(){b.data("_changed",true)});var c=function(){if(b.data("_changed")!=true){var e=[];a.each(d,function(h,f){a(f).val().length>0&&e.push(a(f).val())});b.val(URLify(e.join(" "),g))}};a(d.join(",")).keyup(c).change(c).focus(c)})}})(django.jQuery);
+(function(b){b.fn.prepopulate=function(e,f){return this.each(function(){var a=b(this);a.data("_changed",!1);a.change(function(){a.data("_changed",!0)});var d=function(){if(a.data("_changed")!=!0){var d=[];b.each(e,function(a,c){b(c).val().length>0&&d.push(b(c).val())});var c=d.join(" ");a.hasClass("vSlugField")&&(c=URLify(c,f));a.val(c)}};b(e.join(",")).keyup(d).change(d).focus(d)})}})(django.jQuery);
\ No newline at end of file
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index e9064bb..c83f56e 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -50,6 +50,7 @@ FORMFIELD_FOR_DBFIELD_DEFAULTS = {
     models.CharField:       {'widget': widgets.AdminTextInputWidget},
     models.ImageField:      {'widget': widgets.AdminFileWidget},
     models.FileField:       {'widget': widgets.AdminFileWidget},
+    models.SlugField:       {'widget': widgets.AdminSlugFieldWidget},
 }
 
 csrf_protect_m = method_decorator(csrf_protect)
diff --git a/django/contrib/admin/templates/admin/prepopulated_fields_js.html b/django/contrib/admin/templates/admin/prepopulated_fields_js.html
index 43ef5ba..5a4ef06 100644
--- a/django/contrib/admin/templates/admin/prepopulated_fields_js.html
+++ b/django/contrib/admin/templates/admin/prepopulated_fields_js.html
@@ -7,7 +7,7 @@
         id: '#{{ field.field.auto_id }}',
         dependency_ids: [],
         dependency_list: [],
-        maxLength: {{ field.field.field.max_length|default_if_none:"50" }}
+        maxLength: {{ field.field.field.max_length|default:'null' }}
     };
 
     {% for dependency in field.dependencies %}
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 957f94f..a7f449b 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -293,3 +293,10 @@ class AdminCommaSeparatedIntegerFieldWidget(forms.TextInput):
         if attrs is not None:
             final_attrs.update(attrs)
         super(AdminCommaSeparatedIntegerFieldWidget, self).__init__(attrs=final_attrs)
+
+class AdminSlugFieldWidget(forms.TextInput):
+    def __init__(self, attrs=None):
+        final_attrs = {'class': 'vSlugField'}
+        if attrs is not None:
+            final_attrs.update(attrs)
+        super(AdminSlugFieldWidget, self).__init__(attrs=final_attrs)
diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
index c187584..ca8c349 100644
--- a/tests/regressiontests/admin_widgets/models.py
+++ b/tests/regressiontests/admin_widgets/models.py
@@ -15,6 +15,7 @@ class Member(models.Model):
 
 class Band(models.Model):
     name = models.CharField(max_length=100)
+    slug = models.SlugField() # max_length is omitted to make sure SlugField.__init__() will set it to 50
     members = models.ManyToManyField(Member)
 
     def __unicode__(self):
diff --git a/tests/regressiontests/admin_widgets/tests.py b/tests/regressiontests/admin_widgets/tests.py
index 8f7a36c..f7f1622 100644
--- a/tests/regressiontests/admin_widgets/tests.py
+++ b/tests/regressiontests/admin_widgets/tests.py
@@ -119,6 +119,8 @@ class AdminFormfieldForDBFieldTests(TestCase):
     def testInheritance(self):
         self.assertFormfield(models.Album, 'backside_art', widgets.AdminFileWidget)
 
+    def testSlugField(self):
+        self.assertFormfield(models.Band, 'slug', widgets.AdminSlugFieldWidget)
 
 class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
     fixtures = ["admin-widgets-users.xml"]
@@ -328,3 +330,21 @@ class RelatedFieldWidgetWrapperTests(DjangoTestCase):
         # Used to fail with a name error.
         w = RelatedFieldWidgetWrapper(w, rel, admin.site)
         self.assertFalse(w.can_add_related)
+
+class AdminSlugWidgetPrepopulate(DjangoTestCase):
+    fixtures = ["admin-widgets-users.xml"]
+    admin_root = '/widget_admin'
+
+    def setUp(self):
+        self.client.login(username="super", password="secret")
+
+    def tearDown(self):
+        self.client.logout()
+
+    def test_prepopulated_slug_field_existence_and_js(self):
+        from django.db.models.fields import SlugField
+        max_length = SlugField().max_length
+        response = self.client.get('%s/admin_widgets/band/add/' % self.admin_root)
+        self.assertTrue('<input id="id_slug" type="text" class="vSlugField" name="slug" maxlength="%d" />' % max_length in response.content)
+        self.assertTrue('maxLength: %d' % max_length in response.content)
+        self.assertTrue("$('.empty-form .slug').addClass('prepopulated_field');" in response.content)
diff --git a/tests/regressiontests/admin_widgets/widgetadmin.py b/tests/regressiontests/admin_widgets/widgetadmin.py
index 6f15d92..e527f43 100644
--- a/tests/regressiontests/admin_widgets/widgetadmin.py
+++ b/tests/regressiontests/admin_widgets/widgetadmin.py
@@ -8,6 +8,9 @@ import models
 class WidgetAdmin(admin.AdminSite):
     pass
 
+class BandAdmin(admin.ModelAdmin):
+    prepopulated_fields = {'slug': ['name']}
+
 class CarAdmin(admin.ModelAdmin):
     list_display = ['make', 'model', 'owner']
     list_editable = ['owner']
@@ -25,6 +28,7 @@ class EventAdmin(admin.ModelAdmin):
 site = WidgetAdmin(name='widget-admin')
 
 site.register(models.User)
+site.register(models.Band, BandAdmin)
 site.register(models.Car, CarAdmin)
 site.register(models.CarTire, CarTireAdmin)
 site.register(models.Event, EventAdmin)
