diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 27644fba57621b94271327bd3ee3d5ccafc26d7e..0290623d2e5e21fa279bf5aeb075b3382bfea6d4 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -933,10 +933,16 @@ sub bz_drop_index {
     my $index_exists = $self->bz_index_info($table, $name);
 
     if ($index_exists) {
+        # We cannot delete an index used by a FK.
+        foreach my $column (@{$index_exists->{FIELDS}}) {
+            $self->bz_drop_related_fks($table, $column);
+        }
         $self->bz_drop_index_raw($table, $name);
         $self->_bz_real_schema->delete_index($table, $name);
         $self->_bz_store_real_schema;        
     }
+
+    return $index_exists ? 1 : 0;
 }
 
 # bz_drop_index_raw($table, $name, $silent)
diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm
index 7b7e4e9b94e191844f1e6135eafae9fcffd410f8..6fd75b79f905da7845357be7c5078deadd278cf6 100644
--- a/Bugzilla/DB/Mysql.pm
+++ b/Bugzilla/DB/Mysql.pm
@@ -765,6 +765,22 @@ sub bz_setup_database {
     }
 
      $self->_fix_defaults();
+
+    # Bug 451735 highlighted a bug in bz_drop_index() which didn't
+    # check for FKs before trying to delete an index. Consequently,
+    # the series_creator_idx index was considered to be deleted
+    # despite it was still present in the DB. That's why we have to
+    # force the deletion, bypassing the DB schema.
+    if (!$self->bz_index_info('series', 'series_category_idx')) {
+        if (!$self->bz_drop_index('series', 'series_creator_idx')
+            && $self->bz_index_info_real('series', 'series_creator_idx'))
+        {
+            foreach my $column (qw(creator category subcategory name)) {
+                $self->bz_drop_related_fks('series', $column);
+            }
+            $self->bz_drop_index_raw('series', 'series_creator_idx');
+        }
+    }
 }
 
 # When you import a MySQL 3/4 mysqldump into MySQL 5, columns that