diff --git a/dlls/msi/classes.c b/dlls/msi/classes.c
index b2b640bca1ae8e52d3d27abff0b405a5475b23e6..b94e1f6d16b8ec7baea8b8423e013818382c210d 100644
--- a/dlls/msi/classes.c
+++ b/dlls/msi/classes.c
@@ -240,6 +240,8 @@ static MSICLASS *load_class( MSIPACKAGE* package, MSIRECORD *row )
     if (!cls)
         return NULL;
 
+    list_add_tail( &package->classes, &cls->entry );
+
     sz = IDENTIFIER_SIZE;
     MSI_RecordGetStringW(row, 1, cls->CLSID, &sz);
     TRACE("loading class %s\n",debugstr_w(cls->CLSID));
@@ -435,6 +437,10 @@ static MSIEXTENSION *load_extension( MSIPACKAGE* package, MSIRECORD *row )
     /* fill in the data */
 
     ext = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MSIEXTENSION) );
+    if (!ext)
+        return NULL;
+
+    list_add_tail( &package->extensions, &ext->entry );
 
     sz = 256;
     MSI_RecordGetStringW( row, 1, ext->Extension, &sz );
@@ -452,8 +458,6 @@ static MSIEXTENSION *load_extension( MSIPACKAGE* package, MSIRECORD *row )
     buffer = MSI_RecordGetString(row,5);
     ext->Feature = get_loaded_feature( package, buffer );
 
-    list_add_tail( &package->extensions, &ext->entry );
-
     return ext;
 }