diff --git a/packages/packages_linux.go b/packages/packages_linux.go
index 2841565..bf8d7a1 100644
--- a/packages/packages_linux.go
+++ b/packages/packages_linux.go
@@ -18,6 +18,7 @@
 	"context"
 	"errors"
 	"fmt"
+	"slices"
 	"strings"
 
 	"github.com/GoogleCloudPlatform/osconfig/agentconfig"
@@ -26,6 +27,12 @@
 	"github.com/package-url/packageurl-go"
 )
 
+var (
+	scalibrLinuxEnabled                = agentconfig.ScalibrLinuxEnabled
+	extendedInventoryEnabled           = agentconfig.ExtendedInventoryEnabled
+	extendedInventoryExtractorsAllowed = agentconfig.ExtendedInventoryExtractorsAllowed
+)
+
 // GetPackageUpdates gets all available package updates from any known
 // installed package manager.
 func (p defaultUpdatesProvider) getPackageUpdates(ctx context.Context) (Packages, error) {
@@ -265,13 +272,21 @@
 
 // NewInstalledPackagesProvider makes provider that uses osv-scalibr as its implementation if enabled by config, otherwise falls back to default legacy implementation.
 func NewInstalledPackagesProvider(osinfoProvider osinfo.Provider) InstalledPackagesProvider {
-	if agentconfig.ScalibrLinuxEnabled() {
-		return scalibrInstalledPackagesProvider{
-			extractors: []string{
-				"os/cos",
-				"os/dpkg",
-				"os/rpm",
-			},
+	if scalibrLinuxEnabled() {
+		extractors := []string{
+			"os/cos",
+			"os/dpkg",
+			"os/rpm",
+		}
+		if extendedInventoryEnabled() {
+			for _, ext := range extendedInventoryExtractorsAllowed() {
+				if !slices.Contains(extractors, ext) {
+					extractors = append(extractors, ext)
+				}
+			}
+		}
+		return &scalibrInstalledPackagesProvider{
+			extractors:     extractors,
 			osinfoProvider: osinfoProvider,
 		}
 	}
diff --git a/packages/packages_linux_test.go b/packages/packages_linux_test.go
index 2e09e13..b2f8673 100644
--- a/packages/packages_linux_test.go
+++ b/packages/packages_linux_test.go
@@ -240,6 +240,60 @@
 		t.Errorf("unexpected error, got: %v, want: <nil>", err)
 	}
 }
+
+// overrideScalibrConfig overrides scalibr configuration flags for the duration of a test.
+func overrideScalibrConfig(t *testing.T, scalibrLinux bool, extendedEnabled bool, allowedExtractors []string) {
+	t.Helper()
+	utiltest.OverrideVariable(t, &scalibrLinuxEnabled, func() bool { return scalibrLinux })
+	utiltest.OverrideVariable(t, &extendedInventoryEnabled, func() bool { return extendedEnabled })
+	utiltest.OverrideVariable(t, &extendedInventoryExtractorsAllowed, func() []string { return allowedExtractors })
+}
+
+// TestNewInstalledPackagesProvider tests the creation of InstalledPackagesProvider based on Scalibr configuration flags.
+func TestNewInstalledPackagesProvider(t *testing.T) {
+	oiProvider := &stubOsInfoProvider{}
+
+	tests := []struct {
+		name                      string
+		scalibrLinuxEnabled       bool
+		extendedInventoryEnabled  bool
+		extendedExtractorsAllowed []string
+		wantExtractors            []string
+	}{
+		{
+			name:                "scalibr disabled, want no extractors",
+			scalibrLinuxEnabled: false,
+			wantExtractors:      nil,
+		},
+		{
+			name:                     "scalibr enabled, extended disabled, want base extractors",
+			scalibrLinuxEnabled:      true,
+			extendedInventoryEnabled: false,
+			wantExtractors:           []string{"os/cos", "os/dpkg", "os/rpm"},
+		},
+		{
+			name:                      "scalibr enabled, extended enabled, want extended extractors without duplicates",
+			scalibrLinuxEnabled:       true,
+			extendedInventoryEnabled:  true,
+			extendedExtractorsAllowed: []string{"python/wheelegg", "os/dpkg", "os/apk"},
+			wantExtractors:            []string{"os/cos", "os/dpkg", "os/rpm", "python/wheelegg", "os/apk"},
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			overrideScalibrConfig(t, tt.scalibrLinuxEnabled, tt.extendedInventoryEnabled, tt.extendedExtractorsAllowed)
+			provider := NewInstalledPackagesProvider(oiProvider)
+			scalibrProvider, ok := provider.(*scalibrInstalledPackagesProvider)
+			if !ok {
+				t.Skip("Scalibr is disabled, defaultInstalledPackagesProvider returned")
+			}
+
+			utiltest.AssertEquals(t, scalibrProvider.extractors, tt.wantExtractors)
+		})
+	}
+}
+
 func Test_getInstalledPackages(t *testing.T) {
 	enableAllInstalledPackages()
 	COSPkgInfoExists = false //explicitly skip for now
