diff --git a/debian/control.common b/debian/control.common
new file mode 100644
index 000000000000..e93b8c2dba89
--- /dev/null
+++ b/debian/control.common
@@ -0,0 +1,19 @@
+Source: LRM_SOURCE
+Section: utils
+Priority: optional
+Maintainer: Canonical Kernel Team <kernel-team@lists.ubuntu.com>
+Build-Depends:
+ debhelper (>= 9),
+ lsb-release,
+ python3,
+ python3-apt,
+ cpio,
+ dkms,
+ wget,
+ gawk,
+ linux-headers-ABI-generic (>= VERSION),
+ linux-buildinfo-ABI-generic (>= VERSION),
+ linux-headers-ABI-lowlatency (>= VERSION),
+ linux-buildinfo-ABI-lowlatency (>= VERSION),
+Standards-Version: 3.9.4
+Vcs-Git: git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux-restricted-modules/+git/@SERIES@
diff --git a/debian/control.d/meta-nvidia b/debian/control.d/meta-nvidia
new file mode 100644
index 000000000000..d090f08fcebf
--- /dev/null
+++ b/debian/control.d/meta-nvidia
@@ -0,0 +1,31 @@
+Package: linux-modules-nvidia-390-generic
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Depends: ${misc:Depends}, linux-modules-nvidia-390-ABI-generic (= ${binary:Version})
+Description: Extra drivers for nvidia-390 for the generic flavour
+ Install extra signed nvidia-390 modules compatible with the generic flavour.
+
+Package: linux-modules-nvidia-390-lowlatency
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Depends: ${misc:Depends}, linux-modules-nvidia-390-ABI-lowlatency (= ${binary:Version})
+Description: Extra drivers for nvidia-390 for the lowlatency flavour
+ Install extra signed nvidia-390 modules compatible with the lowlatency flavour.
+
+Package: linux-modules-nvidia-440-generic
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Depends: ${misc:Depends}, linux-modules-nvidia-440-ABI-generic (= ${binary:Version})
+Description: Extra drivers for nvidia-440 for the generic flavour
+ Install extra signed nvidia-440 modules compatible with the generic flavour.
+
+Package: linux-modules-nvidia-440-lowlatency
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Depends: ${misc:Depends}, linux-modules-nvidia-440-ABI-lowlatency (= ${binary:Version})
+Description: Extra drivers for nvidia-440 for the lowlatency flavour
+ Install extra signed nvidia-440 modules compatible with the lowlatency flavour.
diff --git a/debian/control.d/nvidia b/debian/control.d/nvidia
new file mode 100644
index 000000000000..875e09ea8f87
--- /dev/null
+++ b/debian/control.d/nvidia
@@ -0,0 +1,55 @@
+Package: linux-modules-nvidia-390-ABI-generic
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Priority: optional
+Built-Using: ${linux:BuiltUsing}
+Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-generic | linux-image-unsigned-ABI-generic, nvidia-kernel-common-390
+Description: Linux kernel nvidia modules for version ABI
+ This package contains the Linux kernel nvidia modules for version ABI.
+ .
+ You likely do not want to install this package directly. Instead, install the
+ linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
+ correctly, and that supporting packages are also installed.
+
+Package: linux-modules-nvidia-390-ABI-lowlatency
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Priority: optional
+Built-Using: ${linux:BuiltUsing}
+Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-lowlatency | linux-image-unsigned-ABI-lowlatency, nvidia-kernel-common-390
+Description: Linux kernel nvidia modules for version ABI
+ This package contains the Linux kernel nvidia modules for version ABI.
+ .
+ You likely do not want to install this package directly. Instead, install the
+ linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
+ correctly, and that supporting packages are also installed.
+
+Package: linux-modules-nvidia-440-ABI-generic
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Priority: optional
+Built-Using: ${linux:BuiltUsing}
+Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-generic | linux-image-unsigned-ABI-generic, nvidia-kernel-common-440
+Description: Linux kernel nvidia modules for version ABI
+ This package contains the Linux kernel nvidia modules for version ABI.
+ .
+ You likely do not want to install this package directly. Instead, install the
+ linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
+ correctly, and that supporting packages are also installed.
+
+Package: linux-modules-nvidia-440-ABI-lowlatency
+Build-Profiles: <!stage1>
+Architecture: amd64
+Section: kernel
+Priority: optional
+Built-Using: ${linux:BuiltUsing}
+Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-lowlatency | linux-image-unsigned-ABI-lowlatency, nvidia-kernel-common-440
+Description: Linux kernel nvidia modules for version ABI
+ This package contains the Linux kernel nvidia modules for version ABI.
+ .
+ You likely do not want to install this package directly. Instead, install the
+ linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
+ correctly, and that supporting packages are also installed.
diff --git a/debian/control.d/transitionals-nvidia-430 b/debian/control.d/transitionals-nvidia-430
new file mode 100644
index 000000000000..6f73305f4bd3
--- /dev/null
+++ b/debian/control.d/transitionals-nvidia-430
@@ -0,0 +1,13 @@
+Package: linux-modules-nvidia-430-generic
+Architecture: amd64
+Section: oldlibs
+Depends: linux-modules-nvidia-440-generic
+Description: Extra drivers for nvidia-430 for the generic flavour (dummy transitional package)
+ Transitional package for upgrades of -430 to -440.
+
+Package: linux-modules-nvidia-430-lowlatency
+Architecture: amd64
+Section: oldlibs
+Depends: linux-modules-nvidia-440-lowlatency
+Description: Extra drivers for nvidia-430 for the generic flavour (dummy transitional package)
+ Transitional package for upgrades of -430 to -440.
diff --git a/debian/control.d/transitionals-oem b/debian/control.d/transitionals-oem
new file mode 100644
index 000000000000..ceef586052cf
--- /dev/null
+++ b/debian/control.d/transitionals-oem
@@ -0,0 +1,15 @@
+Package: linux-modules-nvidia-390-oem
+Architecture: amd64
+Section: oldlibs
+Priority: optional
+Depends: linux-modules-nvidia-390-generic
+Description: Extra drivers for nvidia-390 for the generic flavour (dummy transitional package)
+ Transitional package for upgrades from linux-oem to generic
+
+Package: linux-modules-nvidia-418-oem
+Architecture: amd64
+Section: oldlibs
+Priority: optional
+Depends: linux-modules-nvidia-440-generic
+Description: Extra drivers for nvidia-418 for the generic flavour (dummy transitional package)
+ Transitional package for upgrades from linux-oem to generic
diff --git a/debian/control.d/transitionals-oem-osp1 b/debian/control.d/transitionals-oem-osp1
new file mode 100644
index 000000000000..ec090fe4d767
--- /dev/null
+++ b/debian/control.d/transitionals-oem-osp1
@@ -0,0 +1,15 @@
+Package: linux-modules-nvidia-390-oem-osp1
+Architecture: amd64
+Section: oldlibs
+Priority: optional
+Depends: linux-modules-nvidia-390-generic
+Description: Extra drivers for nvidia-390 for the generic flavour (dummy transitional package)
+ Transitional package for upgrades from linux-oem-osp1 to generic
+
+Package: linux-modules-nvidia-418-oem-osp1
+Architecture: amd64
+Section: oldlibs
+Priority: optional
+Depends: linux-modules-nvidia-440-generic
+Description: Extra drivers for nvidia-418 for the generic flavour (dummy transitional package)
+ Transitional package for upgrades from linux-oem-osp1 to generic
diff --git a/debian/control.stub b/debian/control.stub
deleted file mode 100644
index b8f26eb6d409..000000000000
--- a/debian/control.stub
+++ /dev/null
@@ -1,153 +0,0 @@
-Source: LRM_SOURCE
-Section: utils
-Priority: optional
-Maintainer: Canonical Kernel Team <kernel-team@lists.ubuntu.com>
-Build-Depends:
- debhelper (>= 9),
- lsb-release,
- python3,
- python3-apt,
- cpio,
- dkms,
- wget,
- gawk,
- linux-headers-ABI-generic (>= VERSION),
- linux-buildinfo-ABI-generic (>= VERSION),
- linux-headers-ABI-lowlatency (>= VERSION),
- linux-buildinfo-ABI-lowlatency (>= VERSION),
-Standards-Version: 3.9.4
-Vcs-Git: git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux-restricted-modules/+git/@SERIES@
-
-Package: linux-modules-nvidia-390-ABI-generic
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Priority: optional
-Built-Using: ${linux:BuiltUsing}
-Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-generic | linux-image-unsigned-ABI-generic, nvidia-kernel-common-390
-Description: Linux kernel nvidia modules for version ABI
- This package contains the Linux kernel nvidia modules for version ABI.
- .
- You likely do not want to install this package directly. Instead, install the
- linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
- correctly, and that supporting packages are also installed.
-
-Package: linux-modules-nvidia-390-ABI-lowlatency
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Priority: optional
-Built-Using: ${linux:BuiltUsing}
-Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-lowlatency | linux-image-unsigned-ABI-lowlatency, nvidia-kernel-common-390
-Description: Linux kernel nvidia modules for version ABI
- This package contains the Linux kernel nvidia modules for version ABI.
- .
- You likely do not want to install this package directly. Instead, install the
- linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
- correctly, and that supporting packages are also installed.
-
-Package: linux-modules-nvidia-390-generic
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Depends: ${misc:Depends}, linux-modules-nvidia-390-ABI-generic (= ${binary:Version})
-Description: Extra drivers for nvidia-390 for the generic flavour
- Install extra signed nvidia-390 modules compatible with the generic flavour.
-
-Package: linux-modules-nvidia-390-lowlatency
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Depends: ${misc:Depends}, linux-modules-nvidia-390-ABI-lowlatency (= ${binary:Version})
-Description: Extra drivers for nvidia-390 for the lowlatency flavour
- Install extra signed nvidia-390 modules compatible with the lowlatency flavour.
-
-Package: linux-modules-nvidia-440-ABI-generic
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Priority: optional
-Built-Using: ${linux:BuiltUsing}
-Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-generic | linux-image-unsigned-ABI-generic, nvidia-kernel-common-440
-Description: Linux kernel nvidia modules for version ABI
- This package contains the Linux kernel nvidia modules for version ABI.
- .
- You likely do not want to install this package directly. Instead, install the
- linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
- correctly, and that supporting packages are also installed.
-
-Package: linux-modules-nvidia-440-ABI-lowlatency
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Priority: optional
-Built-Using: ${linux:BuiltUsing}
-Depends: ${misc:Depends}, ${shlibs:Depends}, binutils, linux-image-ABI-lowlatency | linux-image-unsigned-ABI-lowlatency, nvidia-kernel-common-440
-Description: Linux kernel nvidia modules for version ABI
- This package contains the Linux kernel nvidia modules for version ABI.
- .
- You likely do not want to install this package directly. Instead, install the
- linux-image-nvidia-FLAVOUR meta-package, which will ensure that upgrades work
- correctly, and that supporting packages are also installed.
-
-Package: linux-modules-nvidia-440-generic
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Depends: ${misc:Depends}, linux-modules-nvidia-440-ABI-generic (= ${binary:Version})
-Description: Extra drivers for nvidia-440 for the generic flavour
- Install extra signed nvidia-440 modules compatible with the generic flavour.
-
-Package: linux-modules-nvidia-440-lowlatency
-Build-Profiles: <!stage1>
-Architecture: amd64
-Section: kernel
-Depends: ${misc:Depends}, linux-modules-nvidia-440-ABI-lowlatency (= ${binary:Version})
-Description: Extra drivers for nvidia-440 for the lowlatency flavour
- Install extra signed nvidia-440 modules compatible with the lowlatency flavour.
-
-Package: linux-modules-nvidia-430-generic
-Architecture: amd64
-Section: oldlibs
-Depends: linux-modules-nvidia-440-generic
-Description: Extra drivers for nvidia-430 for the generic flavour (dummy transitional package)
- Transitional package for upgrades of -430 to -440.
-
-Package: linux-modules-nvidia-430-lowlatency
-Architecture: amd64
-Section: oldlibs
-Depends: linux-modules-nvidia-440-lowlatency
-Description: Extra drivers for nvidia-430 for the generic flavour (dummy transitional package)
- Transitional package for upgrades of -430 to -440.
-
-Package: linux-modules-nvidia-390-oem
-Architecture: amd64
-Section: oldlibs
-Priority: optional
-Depends: linux-modules-nvidia-390-generic
-Description: Extra drivers for nvidia-390 for the generic flavour (dummy transitional package)
- Transitional package for upgrades from linux-oem to generic
-
-Package: linux-modules-nvidia-390-oem-osp1
-Architecture: amd64
-Section: oldlibs
-Priority: optional
-Depends: linux-modules-nvidia-390-generic
-Description: Extra drivers for nvidia-390 for the generic flavour (dummy transitional package)
- Transitional package for upgrades from linux-oem-osp1 to generic
-
-Package: linux-modules-nvidia-418-oem
-Architecture: amd64
-Section: oldlibs
-Priority: optional
-Depends: linux-modules-nvidia-440-generic
-Description: Extra drivers for nvidia-418 for the generic flavour (dummy transitional package)
- Transitional package for upgrades from linux-oem to generic
-
-Package: linux-modules-nvidia-418-oem-osp1
-Architecture: amd64
-Section: oldlibs
-Priority: optional
-Depends: linux-modules-nvidia-440-generic
-Description: Extra drivers for nvidia-418 for the generic flavour (dummy transitional package)
- Transitional package for upgrades from linux-oem-osp1 to generic
diff --git a/debian/rules b/debian/rules
index 84a306ef10b2..1e611e68ece8 100755
--- a/debian/rules
+++ b/debian/rules
@@ -17,17 +17,27 @@ series = $(shell dpkg-parsechangelog | sed -ne 's/^Distribution: *//p' | sed -e
 dkms_nvidia_390_version=$(shell gawk '/^nvidia-graphics-drivers-390/ { print $$2; }' debian/dkms-versions)
 dkms_nvidia_440_version=$(shell gawk '/^nvidia-graphics-drivers-440/ { print $$2; }' debian/dkms-versions)
 
+control_files := debian/control.common
+control_files += $(filter-out $(primary_control_files),$(shell LC_ALL=C ls -d debian/control.d/*))
+
 test:
 	echo "$(src_fullversion) $(src_version)"
 
 # We build our control file.  This has to be done before dh runs otherwise
 # we have no binary files and we will not run the appropriate targets.
-pre-clean:
-	sed <debian/control.stub >debian/control			\
-		-e 's/LRM_SOURCE/$(src_package)/g'			\
-		-e "s/ABI/$(src_abi)/g"					\
-		-e "s/VERSION/$(src_version)/g"				\
-		-e "s/@SERIES@/$(series)/g"
+pre-clean: $(control_files)
+	rm -f debian/control.tmp
+	for i in $^; do \
+		sed							\
+			-e 's/LRM_SOURCE/$(src_package)/g'		\
+			-e "s/ABI/$(src_abi)/g"				\
+			-e "s/VERSION/$(src_version)/g"			\
+			-e "s/@SERIES@/$(series)/g"			\
+			$$i >>debian/control.tmp;			\
+		echo "" >>debian/control.tmp;				\
+	done
+	rm -f $@
+	mv debian/control.tmp debian/control
 	rm -rf ./$(src_version) UNSIGNED SIGNED
 	rm -f 	debian/linux-modules-*.install				\
 		debian/linux-modules-*.preinst 				\
