Index: db/models/options.py
===================================================================
--- db/models/options.py	(revision 2105)
+++ db/models/options.py	(working copy)
@@ -7,8 +7,8 @@
 from bisect import bisect
 import re
 
-# Calculate the module_name using a poor-man's pluralization.
-get_module_name = lambda class_name: class_name.lower() + 's'
+# Calculate the module_name by converting to lowercase
+get_module_name = lambda class_name: class_name.lower()
 
 # Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces".
 get_verbose_name = lambda class_name: re.sub('([A-Z])', ' \\1', class_name).lower().strip()
Index: core/management.py
===================================================================
--- core/management.py	(revision 2105)
+++ core/management.py	(working copy)
@@ -29,7 +29,7 @@
 def _get_packages_insert(app_label):
     from django.db import backend
     return "INSERT INTO %s (%s, %s) VALUES ('%s', '%s');" % \
-        (backend.quote_name('packages'), backend.quote_name('label'), backend.quote_name('name'),
+        (backend.quote_name('django_package'), backend.quote_name('label'), backend.quote_name('name'),
         app_label, app_label)
 
 def _get_permission_codename(action, opts):
@@ -46,13 +46,13 @@
 def _get_permission_insert(name, codename, opts):
     from django.db import backend
     return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \
-        (backend.quote_name('auth_permissions'), backend.quote_name('name'), backend.quote_name('package'),
+        (backend.quote_name('auth_permission'), backend.quote_name('name'), backend.quote_name('package'),
         backend.quote_name('codename'), name.replace("'", "''"), opts.app_label, codename)
 
 def _get_contenttype_insert(opts):
     from django.db import backend
     return "INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s');" % \
-        (backend.quote_name('content_types'), backend.quote_name('name'), backend.quote_name('package'),
+        (backend.quote_name('django_content_type'), backend.quote_name('name'), backend.quote_name('package'),
         backend.quote_name('python_module_name'), opts.verbose_name, opts.app_label, opts.module_name)
 
 def _is_valid_dir_name(s):
@@ -249,18 +249,18 @@
 
     app_label = app_models[0]._meta.app_label
 
-    # Delete from packages, auth_permissions, content_types.
+    # Delete from django_package, auth_permission, django_content_type.
     output.append("DELETE FROM %s WHERE %s = '%s';" % \
-        (backend.quote_name('packages'), backend.quote_name('label'), app_label))
+        (backend.quote_name('django_package'), backend.quote_name('label'), app_label))
     output.append("DELETE FROM %s WHERE %s = '%s';" % \
-        (backend.quote_name('auth_permissions'), backend.quote_name('package'), app_label))
+        (backend.quote_name('auth_permission'), backend.quote_name('package'), app_label))
     output.append("DELETE FROM %s WHERE %s = '%s';" % \
-        (backend.quote_name('content_types'), backend.quote_name('package'), app_label))
+        (backend.quote_name('django_content_type'), backend.quote_name('package'), app_label))
 
     # Delete from the admin log.
     if cursor is not None:
         cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \
-            (backend.quote_name('id'), backend.quote_name('content_types'),
+            (backend.quote_name('id'), backend.quote_name('django_content_type'),
             backend.quote_name('package')), [app_label])
         if admin_log_exists:
             for row in cursor.fetchall():
@@ -373,7 +373,7 @@
 
     # Check that the package exists in the database.
     cursor.execute("SELECT 1 FROM %s WHERE %s = %%s" % \
-        (backend.quote_name('packages'), backend.quote_name('label')), [app_label])
+        (backend.quote_name('django_package'), backend.quote_name('label')), [app_label])
     if has_no_records(cursor):
 #         sys.stderr.write("The '%s' package isn't installed.\n" % app_label)
         print _get_packages_insert(app_label)
@@ -388,13 +388,13 @@
         contenttypes_seen[opts.module_name] = 1
         for codename, name in perms:
             cursor.execute("SELECT 1 FROM %s WHERE %s = %%s AND %s = %%s" % \
-                (backend.quote_name('auth_permissions'), backend.quote_name('package'),
+                (backend.quote_name('auth_permission'), backend.quote_name('package'),
                 backend.quote_name('codename')), (app_label, codename))
             if has_no_records(cursor):
 #                 sys.stderr.write("The '%s.%s' permission doesn't exist.\n" % (app_label, codename))
                 print _get_permission_insert(name, codename, opts)
         cursor.execute("SELECT 1 FROM %s WHERE %s = %%s AND %s = %%s" % \
-            (backend.quote_name('content_types'), backend.quote_name('package'),
+            (backend.quote_name('django_content_type'), backend.quote_name('package'),
             backend.quote_name('python_module_name')), (app_label, opts.module_name))
         if has_no_records(cursor):
 #             sys.stderr.write("The '%s.%s' content type doesn't exist.\n" % (app_label, opts.module_name))
@@ -403,7 +403,7 @@
     # Check that there aren't any *extra* permissions in the DB that the model
     # doesn't know about.
     cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \
-        (backend.quote_name('codename'), backend.quote_name('auth_permissions'),
+        (backend.quote_name('codename'), backend.quote_name('auth_permission'),
         backend.quote_name('package')), (app_label,))
     for row in cursor.fetchall():
         try:
@@ -411,13 +411,13 @@
         except KeyError:
 #             sys.stderr.write("A permission called '%s.%s' was found in the database but not in the model.\n" % (app_label, row[0]))
             print "DELETE FROM %s WHERE %s='%s' AND %s = '%s';" % \
-                (backend.quote_name('auth_permissions'), backend.quote_name('package'),
+                (backend.quote_name('auth_permission'), backend.quote_name('package'),
                 app_label, backend.quote_name('codename'), row[0])
 
     # Check that there aren't any *extra* content types in the DB that the
     # model doesn't know about.
     cursor.execute("SELECT %s FROM %s WHERE %s = %%s" % \
-        (backend.quote_name('python_module_name'), backend.quote_name('content_types'),
+        (backend.quote_name('python_module_name'), backend.quote_name('django_content_type'),
         backend.quote_name('package')), (app_label,))
     for row in cursor.fetchall():
         try:
@@ -425,7 +425,7 @@
         except KeyError:
 #             sys.stderr.write("A content type called '%s.%s' was found in the database but not in the model.\n" % (app_label, row[0]))
             print "DELETE FROM %s WHERE %s='%s' AND %s = '%s';" % \
-                (backend.quote_name('content_types'), backend.quote_name('package'),
+                (backend.quote_name('django_content_type'), backend.quote_name('package'),
                 app_label, backend.quote_name('python_module_name'), row[0])
 database_check.help_doc = "Checks that everything is installed in the database for the given model module name(s) and prints SQL statements if needed."
 database_check.args = APP_ARGS
Index: contrib/contenttypes/models.py
===================================================================
--- contrib/contenttypes/models.py	(revision 2105)
+++ contrib/contenttypes/models.py	(working copy)
@@ -7,7 +7,7 @@
     class Meta:
         verbose_name = _('package')
         verbose_name_plural = _('packages')
-        db_table = 'packages'
+        db_table = 'django_package'
         ordering = ('name',)
 
     def __repr__(self):
@@ -20,7 +20,7 @@
     class Meta:
         verbose_name = _('content type')
         verbose_name_plural = _('content types')
-        db_table = 'content_types'
+        db_table = 'django_content_type'
         ordering = ('package', 'name')
         unique_together = (('package', 'python_module_name'),)
 
Index: contrib/auth/models.py
===================================================================
--- contrib/auth/models.py	(revision 2105)
+++ contrib/auth/models.py	(working copy)
@@ -132,7 +132,7 @@
             # The SQL below works out to the following, after DB quoting:
             # cursor.execute("""
             #     SELECT p.package, p.codename
-            #     FROM auth_permissions p, auth_groups_permissions gp, auth_users_groups ug
+            #     FROM auth_permission p, auth_group_permissions gp, auth_user_groups ug
             #     WHERE p.id = gp.permission_id
             #         AND gp.group_id = ug.group_id
             #         AND ug.user_id = %s""", [self.id])
@@ -143,7 +143,7 @@
                     AND gp.%s = ug.%s
                     AND ug.%s = %%s""" % (
                 backend.quote_name('package'), backend.quote_name('codename'),
-                backend.quote_name('auth_permissions'), backend.quote_name('auth_groups_permissions'),
+                backend.quote_name('auth_permission'), backend.quote_name('auth_group_permissions'),
                 backend.quote_name('auth_users_groups'), backend.quote_name('id'),
                 backend.quote_name('permission_id'), backend.quote_name('group_id'),
                 backend.quote_name('group_id'), backend.quote_name('user_id'))
Index: contrib/redirects/models.py
===================================================================
--- contrib/redirects/models.py	(revision 2105)
+++ contrib/redirects/models.py	(working copy)
@@ -11,7 +11,7 @@
     class Meta:
         verbose_name = _('redirect')
         verbose_name_plural = _('redirects')
-        db_table = 'django_redirects'
+        db_table = 'django_redirect'
         unique_together=(('site', 'old_path'),)
         ordering = ('old_path',)
     class Admin:
Index: contrib/comments/models.py
===================================================================
--- contrib/comments/models.py	(revision 2105)
+++ contrib/comments/models.py	(working copy)
@@ -86,7 +86,6 @@
     site = models.ForeignKey(Site)
     objects = CommentManager()
     class Meta:
-        db_table = 'comments'
         verbose_name = _('Comment')
         verbose_name_plural = _('Comments')
         ordering = ('-submit_date',)
@@ -173,7 +172,6 @@
     approved = models.BooleanField(_('approved by staff'))
     site = models.ForeignKey(Site)
     class Meta:
-        db_table = 'comments_free'
         verbose_name = _('Free comment')
         verbose_name_plural = _('Free comments')
         ordering = ('-submit_date',)
@@ -266,7 +264,6 @@
     flag_date = models.DateTimeField(_('flag date'), auto_now_add=True)
     objects = UserFlagManager()
     class Meta:
-        db_table = 'comments_user_flags'
         verbose_name = _('User flag')
         verbose_name_plural = _('User flags')
         unique_together = (('user', 'comment'),)
@@ -279,7 +276,6 @@
     comment = models.ForeignKey(Comment)
     deletion_date = models.DateTimeField(_('deletion date'), auto_now_add=True)
     class Meta:
-        db_table = 'comments_moderator_deletions'
         verbose_name = _('Moderator deletion')
         verbose_name_plural = _('Moderator deletions')
         unique_together = (('user', 'comment'),)
Index: contrib/flatpages/models.py
===================================================================
--- contrib/flatpages/models.py	(revision 2105)
+++ contrib/flatpages/models.py	(working copy)
@@ -14,7 +14,7 @@
     registration_required = models.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page."))
     sites = models.ManyToManyField(Site)
     class Meta:
-        db_table = 'django_flatpages'
+        db_table = 'django_flatpage'
         verbose_name = _('flat page')
         verbose_name_plural = _('flat pages')
         ordering = ('url',)
Index: contrib/sessions/models.py
===================================================================
--- contrib/sessions/models.py	(revision 2105)
+++ contrib/sessions/models.py	(working copy)
@@ -37,7 +37,7 @@
     expire_date = models.DateTimeField(_('expire date'))
     objects = SessionManager()
     class Meta:
-        db_table = 'django_sessions'
+        db_table = 'django_session'
         verbose_name = _('session')
         verbose_name_plural = _('sessions')
         module_constants = {
Index: contrib/sites/models.py
===================================================================
--- contrib/sites/models.py	(revision 2105)
+++ contrib/sites/models.py	(working copy)
@@ -11,7 +11,7 @@
     name = models.CharField(_('display name'), maxlength=50)
     objects = SiteManager()
     class Meta:
-        db_table = 'sites'
+        db_table = 'django_site'
         verbose_name = _('site')
         verbose_name_plural = _('sites')
         ordering = ('domain',)
