diff --git a/src/Media.cpp b/src/Media.cpp
index 82b25425711ce2351105edea01cb072fc393b88c..e82721d64b114a8dcfa629baa6b02230cfd44ee1 100644
--- a/src/Media.cpp
+++ b/src/Media.cpp
@@ -1453,6 +1453,9 @@ void Media::createIndexes( sqlite::Connection* connection )
     sqlite::Tools::executeRequest( connection,
                                    index( Indexes::FileName,
                                           Settings::DbModelVersion ) );
+    sqlite::Tools::executeRequest( connection,
+                                   index( Indexes::GenreId,
+                                          Settings::DbModelVersion ) );
 }
 
 std::string Media::schema( const std::string& tableName, uint32_t dbModel )
@@ -1951,6 +1954,10 @@ std::string Media::index( Indexes index, uint32_t dbModel )
             assert( dbModel >= 34 );
             return "CREATE INDEX " + indexName( index, dbModel ) +
                     " ON " + Table::Name + "(filename)";
+        case Indexes::GenreId:
+            assert( dbModel >= 34 );
+            return "CREATE INDEX " + indexName( index, dbModel ) +
+                    " ON " + Table::Name + "(genre_id)";
         default:
             assert( !"Invalid index provided" );
     }
@@ -2003,6 +2010,9 @@ std::string Media::indexName( Indexes index, uint32_t dbModel )
         case Indexes::FileName:
             assert( dbModel >= 34 );
             return "media_filename_idx";
+        case Indexes::GenreId:
+            assert( dbModel >= 34 );
+            return "media_genre_id_idx";
         default:
             assert( !"Invalid index provided" );
     }
@@ -2050,7 +2060,8 @@ bool Media::checkDbModel( MediaLibraryPtr ml )
             checkIndex( ml->getConn(), Indexes::ReleaseDate ) &&
             checkIndex( ml->getConn(), Indexes::PlayCount ) &&
             checkIndex( ml->getConn(), Indexes::Title ) &&
-            checkIndex( ml->getConn(), Indexes::FileName );
+            checkIndex( ml->getConn(), Indexes::FileName ) &&
+            checkIndex( ml->getConn(), Indexes::GenreId );
 }
 
 bool Media::addLabel( LabelPtr label )
diff --git a/src/Media.h b/src/Media.h
index aebf5ba5ffe7f4e5d0701fbf4ae73fa74653b198..da0b964f71ff110947a9e01380e681fdb688b0fc 100644
--- a/src/Media.h
+++ b/src/Media.h
@@ -96,6 +96,7 @@ class Media : public IMedia,
             PlayCount,
             Title,
             FileName,
+            GenreId,
         };
 
         // Those should be private, however the standard states that the expression
diff --git a/src/database/migrations/migration33-34.sql b/src/database/migrations/migration33-34.sql
index f948a0c29083f9061f2f8d4f4ea170e847a78a67..8409c7af64075594e2825dce5c20ff193cffff9a 100644
--- a/src/database/migrations/migration33-34.sql
+++ b/src/database/migrations/migration33-34.sql
@@ -53,6 +53,7 @@ Media::index( Media::Indexes::ReleaseDate, 34 ),
 Media::index( Media::Indexes::PlayCount, 34 ),
 Media::index( Media::Indexes::Title, 34 ),
 Media::index( Media::Indexes::FileName, 34 ),
+Media::index( Media::Indexes::GenreId, 34 ),
 Album::trigger( Album::Triggers::IsPresent, 34 ),
 Artist::trigger( Artist::Triggers::HasTrackPresent, 34 ),
 Thumbnail::trigger( Thumbnail::Triggers::AutoDeleteMedia, 34 ),
diff --git a/test/unittest/DbModelTests.cpp b/test/unittest/DbModelTests.cpp
index faa397e0ddf20a6a793e851b5b18451a87f790d9..f9ff6b09b0700016146e49825a1933d99e8e3efc 100644
--- a/test/unittest/DbModelTests.cpp
+++ b/test/unittest/DbModelTests.cpp
@@ -115,6 +115,7 @@ namespace
         "media_duration_idx",
         "media_filename_idx",
         "media_folder_id_idx",
+        "media_genre_id_idx",
         "media_group_creation_date",
         "media_group_duration",
         "media_group_forced_singleton",