diff --git a/live-build/auto/build b/live-build/auto/build
index ddcb7bc3..82f7e01d 100755
--- a/live-build/auto/build
+++ b/live-build/auto/build
@@ -20,8 +20,7 @@ fi
 # Link output files somewhere launchpad-buildd will be able to find them.
 PREFIX="livecd.$PROJECT${SUBARCH:+-$SUBARCH}"
 
-if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ] \
-	|| [ "$PROJECT" = "ubuntu-core-desktop" ]; then
+if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ]; then
 	# Use ubuntu-image instead (or as part) of live-build
 
 	export SNAPPY_STORE_NO_CDN=1
@@ -47,37 +46,6 @@ if [ "${IMAGEFORMAT:-}" = "ubuntu-image" ] \
 
 		# All the builds are finished now, exit
 		exit 0
-	elif [ "$PROJECT" = "ubuntu-core-desktop" ]; then
-		# Ubuntu Core Desktop payload image
-		# Special case for ubuntu-core-desktop - we need to call
-		# ubuntu-image twice, once for the core image payload and
-		# then for the actual image.
-		echo "Building the core image payload"
-		cd config/
-		/snap/bin/ubuntu-image snap $UBUNTU_IMAGE_PAYLOAD_ARGS \
-			-O output ubuntu-core-desktop*.model-assertion
-		mv output/*.img pc.img
-		xz -0 -T4 pc.img
-		rm -rf output/
-
-		# Prepare the source catalogue
-		cat install-sources-in.yaml | sed "s/@SIZE@/$(stat -c%s pc.img.xz)/g" > ../"$PREFIX".install-sources.yaml
-
-		# We need to rename the image file so that it can be pulled
-		# by the builder.
-		mv pc.img.xz ../"$PREFIX".img.xz
-
-		# We need to make sure the autoinstall file is also exported.
-		mv autoinstall.yaml ../"$PREFIX".autoinstall.yaml
-
-		# Useful to have the model-assertion exported as well.
-		mv ubuntu-core-desktop*.model-assertion ../"$PREFIX".model-assertion
-
-		# Important: return to the previous directory
-		cd ../
-
-		# Payload build finished, but now we need to build the rest with the
-		# usual live-build tools.
 	else
 		# Ubuntu classic preinstalled images
 		/snap/bin/ubuntu-image classic --verbose $UBUNTU_IMAGE_ARGS \
diff --git a/live-build/auto/config b/live-build/auto/config
index f9606241..9f70643e 100755
--- a/live-build/auto/config
+++ b/live-build/auto/config
@@ -382,7 +382,7 @@ if [ -z "${IMAGEFORMAT:-}" ]; then
 					;;
 			esac
 			;;
-		ubuntu-server:live|ubuntu-mini-iso:|ubuntu-core-installer:)
+		ubuntu-server:live|ubuntu-mini-iso:|ubuntu-core-installer:*)
 			IMAGEFORMAT=plain
 			;;
 	esac
@@ -422,7 +422,7 @@ case $IMAGEFORMAT in
 		;;
 	plain)
 		case $PROJECT:${SUBPROJECT:-} in
-			ubuntu-server:live|ubuntu-core-installer:)
+			ubuntu-server:live|ubuntu-core-installer:*)
 	                        touch config/universe-enabled
 				;;
 			ubuntu-mini-iso:)
@@ -843,26 +843,6 @@ case $PROJECT in
 		esac
 		;;
 
-	ubuntu-core-desktop)
-		touch config/universe-enabled
-		KERNEL_FLAVOURS='generic-hwe-22.04'
-		PASSES_TO_LAYERS="true"
-
-		# the minimal layer, for minimal installs
-		add_task minimal minimal
-		# the live layer, contains all packages for the live session installer
-		add_snap minimal.live ubuntu-core-desktop-installer/classic core22 snapd
-		add_package minimal.live linux-$KERNEL_FLAVOURS plymouth-theme-spinner squashfs-tools snapd cloud-init gsettings-desktop-schemas yaru-theme-gtk lshw
-
-		echo "Configuring for additional payload preparation"
-		UBUNTU_IMAGE_PAYLOAD_ARGS="--image-size 12G"
-		EXTRA_SNAPS="$EXTRA_SNAPS evince firefox gnome-calculator gnome-characters gnome-clocks gnome-font-viewer gnome-logs gnome-system-monitor gnome-text-editor gnome-weather loupe snapd-desktop-integration snap-store ubuntu-core-desktop-init workshops"
-		for snap in $EXTRA_SNAPS; do
-			UBUNTU_IMAGE_PAYLOAD_ARGS="$UBUNTU_IMAGE_PAYLOAD_ARGS --snap $snap"
-		done
-		echo "UBUNTU_IMAGE_PAYLOAD_ARGS=\"$UBUNTU_IMAGE_PAYLOAD_ARGS\"" >> config/common
-		;;
-
 	ubuntu-oem)
 		HAS_MINIMAL=yes
 		MINIMAL_NAME="Ubuntu Desktop for OEM (minimal)"
@@ -1058,6 +1038,9 @@ case $PROJECT in
 	    # installer but it has a source catalog entry that points to the model
 	    # created in ubuntu-core-installer/hooks/05-prepare-image.binary, which
 	    # subiquity knows how to install.
+	    if [ ${SUBPROJECT} == "desktop" ]; then
+		cp /usr/share/livecd-rootfs/live-build/${PROJECT}/ubuntu-core-desktop-24-amd64.model-assertion config/
+	    fi
 	    OPTS="${OPTS:+$OPTS }--bootstrap-flavour=minimal"
 	    PASSES_TO_LAYERS=true
 	    add_task base server-minimal server
@@ -1443,7 +1426,7 @@ case $PROJECT:${SUBPROJECT:-} in
 	ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled| \
 		ubuntu-wsl:*|ubuntu-mini-iso:*|ubuntu:|ubuntu-oem:*| \
 		ubuntustudio:*|edubuntu:*|ubuntu-budgie:*|ubuntucinnamon:*|xubuntu:*| \
-	        ubuntukylin:*|ubuntu-mate:*|ubuntu-core-desktop:*|ubuntu-core-installer:*)
+	        ubuntukylin:*|ubuntu-mate:*|ubuntu-core-installer:*)
 		# Ensure that most things e.g. includes.chroot are copied as is
 		for entry in /usr/share/livecd-rootfs/live-build/${PROJECT}/*; do
 			case $entry in
diff --git a/live-build/ubuntu-core-desktop/autoinstall.yaml b/live-build/ubuntu-core-desktop/autoinstall.yaml
deleted file mode 100644
index 5f1237fa..00000000
--- a/live-build/ubuntu-core-desktop/autoinstall.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-version: 1
-source:
-  id: ubuntu-core-desktop
-  search_drivers: false
-interactive-sections:
-  - locale
-  - keyboard
-  - storage
-identity:
-  username: ubuntu
-  password: '$1$zB3Qu2ef$TKLhQpQlKRyCZGUdHFFMH/'
-  hostname: ubuntu
\ No newline at end of file
diff --git a/live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early b/live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early
deleted file mode 100755
index 47b82622..00000000
--- a/live-build/ubuntu-core-desktop/hooks/020-ubuntu-live.chroot_early
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /bin/sh
-
-set -eu
-
-case ${PASS:-} in
-    minimal.live)
-        ;;
-    *)
-        exit 0
-        ;;
-esac
-
-mkdir -p "/etc/initramfs-tools/conf.d"
-
-cat <<EOF > /etc/initramfs-tools/conf.d/casperize.conf
-export CASPER_GENERATE_UUID=1
-EOF
-
-cat <<EOF > /etc/initramfs-tools/conf.d/default-layer.conf
-LAYERFS_PATH=${PASS}.squashfs
-EOF
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/cloud/cloud.cfg b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/cloud/cloud.cfg
deleted file mode 100644
index e9571afd..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/cloud/cloud.cfg
+++ /dev/null
@@ -1,117 +0,0 @@
-# The top level settings are used as module
-# and system configuration.
-
-# A set of users which may be applied and/or used by various modules
-# when a 'default' entry is found it will reference the 'default_user'
-# from the distro configuration specified below
-users:
-   - default
-
-# If this is set, 'root' will not be able to ssh in and they
-# will get a message to login instead as the default $user
-disable_root: true
-
-# This will cause the set+update hostname module to not operate (if true)
-preserve_hostname: true
-
-ssh_pwauth: yes
-chpasswd:
-    expire: false
-
-# This is the initial network config.
-# It can be overwritten by cloud-init or subiquity.
-network:
-    version: 2
-    ethernets:
-        zz-all-en:
-            match:
-                name: "en*"
-            dhcp4: true
-        zz-all-eth:
-            match:
-                name: "eth*"
-            dhcp4: true
-
-# We used to have a custom final_message here.  Just use the default instead.
-
-# Example datasource config
-# datasource:
-#    Ec2:
-#      metadata_urls: [ 'blah.com' ]
-#      timeout: 5 # (defaults to 50 seconds)
-#      max_wait: 10 # (defaults to 120 seconds)
-
-# The modules that run in the 'init' stage
-cloud_init_modules:
- - bootcmd
- - write-files
- - ca-certs
- - rsyslog
- - users-groups
- - ssh
-
-# The modules that run in the 'config' stage
-cloud_config_modules:
-# Emit the cloud config ready event
-# this can be used by upstart jobs for 'start on cloud-config'.
- - ssh-import-id
- - set-passwords
- - timezone
- - disable-ec2-metadata
- - runcmd
-
-# The modules that run in the 'final' stage
-cloud_final_modules:
- - scripts-per-once
- - scripts-user
- - ssh-authkey-fingerprints
- - keys-to-console
- - phone-home
- - final-message
-
-# System and/or distro specific settings
-# (not accessible to handlers/transforms)
-system_info:
-   # This will affect which distro class gets used
-   distro: ubuntu
-   # Default user name + that default users groups (if added/used)
-   default_user:
-     name: installer
-     lock_passwd: false
-     gecos: Ubuntu
-     groups: [adm, audio, cdrom, dialout, dip, floppy, lxd, netdev, plugdev, sudo, video]
-     sudo: ["ALL=(ALL) NOPASSWD:ALL"]
-     shell: /usr/bin/subiquity-shell
-   # Automatically discover the best ntp_client
-   ntp_client: auto
-   # Other config here will be given to the distro class and/or path classes
-   paths:
-      cloud_dir: /var/lib/cloud/
-      templates_dir: /etc/cloud/templates/
-      upstart_dir: /etc/init/
-   package_mirrors:
-     - arches: [i386, amd64]
-       failsafe:
-         primary: http://archive.ubuntu.com/ubuntu
-         security: http://security.ubuntu.com/ubuntu
-       search:
-         primary:
-           - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/
-           - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/
-           - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/
-         security: []
-     - arches: [arm64, armel, armhf]
-       failsafe:
-         primary: http://ports.ubuntu.com/ubuntu-ports
-         security: http://ports.ubuntu.com/ubuntu-ports
-       search:
-         primary:
-           - http://%(ec2_region)s.ec2.ports.ubuntu.com/ubuntu-ports/
-           - http://%(availability_zone)s.clouds.ports.ubuntu.com/ubuntu-ports/
-           - http://%(region)s.clouds.ports.ubuntu.com/ubuntu-ports/
-         security: []
-     - arches: [default]
-       failsafe:
-         primary: http://ports.ubuntu.com/ubuntu-ports
-         security: http://ports.ubuntu.com/ubuntu-ports
-   ssh_svcname: ssh
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/cloud/cloud.cfg.d/06_quiet.cfg b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/cloud/cloud.cfg.d/06_quiet.cfg
deleted file mode 100644
index a614e723..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/cloud/cloud.cfg.d/06_quiet.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-output: {all: '>> /var/log/cloud-init-output.log'}
-no_ssh_fingerprints: true
-ssh:
-  emit_keys_to_console: false
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/journald.conf.d/no-rate-limit.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/journald.conf.d/no-rate-limit.conf
deleted file mode 100644
index fbaab956..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/journald.conf.d/no-rate-limit.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Journal]
-RateLimitIntervalSec=0
diff --git "a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf" "b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf"
deleted file mode 100644
index 90ac2590..00000000
--- "a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/dev-disk-by\\x2duuid-00c629d6\\x2d06ab\\x2d4dfd\\x2db21e\\x2dc3186f34105d.device.d/override.conf"
+++ /dev/null
@@ -1,3 +0,0 @@
-[Unit]
-JobRunningTimeoutSec=0s
-Wants=subiquity_config.mount
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf
deleted file mode 100644
index a0701e52..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/systemd-journald.service.d/no-compact.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-# systemd in 23.04+ uses a newer "compact" format by default which is not
-# understood by the systemd libraries from jammy used in the subiquity snap.
-[Service]
-Environment="SYSTEMD_JOURNAL_COMPACT=0"
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf
deleted file mode 100644
index c4262d26..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/etc/systemd/system/systemd-journald.service.d/no-hardening.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-# systemd in 22.04+ uses "hash table hardening" by default which is not
-# understood by the systemd libraries from focal used in the subiquity snap.
-[Service]
-Environment="SYSTEMD_JOURNAL_KEYED_HASH=0"
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/bin/subiquity-shell b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/bin/subiquity-shell
deleted file mode 100755
index d739d86f..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/bin/subiquity-shell
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-exec sudo snap run subiquity
-
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/getty@.service.d/autologin.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/getty@.service.d/autologin.conf
deleted file mode 100644
index a166aab4..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/getty@.service.d/autologin.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[Service]
-ExecStart=
-ExecStart=-/sbin/agetty --noclear -n --autologin ubuntu-server %I $TERM
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/getty@tty1.service b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/getty@tty1.service
deleted file mode 120000
index dc1dc0cd..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/getty@tty1.service
+++ /dev/null
@@ -1 +0,0 @@
-/dev/null
\ No newline at end of file
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount
deleted file mode 120000
index 0a663081..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/local-fs.target.wants/media-filesystem.mount
+++ /dev/null
@@ -1 +0,0 @@
-../media-filesystem.mount
\ No newline at end of file
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf
deleted file mode 100644
index eebf38b4..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/serial-getty@.service.d/subiquity-serial.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=Subiquity, the installer for Ubuntu Server %I
-After=snapd.seeded.service
-StartLimitInterval=0
-
-[Service]
-Environment=SNAP_REEXEC=0
-ExecStart=
-ExecStart=/usr/bin/snap run subiquity.subiquity-service %I
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf
deleted file mode 100644
index 56900a35..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/serial-getty@sclp_line0.service.d/subiquity-serial.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-[Service]
-StandardOutput=tty
-ExecStart=
-ExecStart=/usr/bin/snap run subiquity --ssh
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf
deleted file mode 100644
index c1af5666..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/snap.subiquity.subiquity-service.service.d/subiquity.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-[Unit]
-IgnoreOnIsolate=yes
-After=systemd-user-sessions.service plymouth-quit-wait.service snap.seeded.service
-
-[Service]
-Environment=SNAP_REEXEC=0
-UtmpIdentifier=tty1
-TTYPath=/dev/tty1
-TTYReset=yes
-TTYVHangup=yes
-TTYVTDisallocate=yes
-KillMode=process
-IgnoreSIGPIPE=no
-SendSIGHUP=yes
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf
deleted file mode 100644
index 14a6b477..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/snapd.service.d/no-reexec.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Service]
-Environment=SNAP_REEXEC=0
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/subiquity_config.mount b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/subiquity_config.mount
deleted file mode 100644
index af33494b..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/system/subiquity_config.mount
+++ /dev/null
@@ -1,4 +0,0 @@
-[Mount]
-What=/dev/disk/by-uuid/00c629d6-06ab-4dfd-b21e-c3186f34105d
-Where=/subiquity_config
-Type=ext4
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/systemd-networkd-wait-online b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/systemd-networkd-wait-online
deleted file mode 120000
index 63b10de4..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/usr/lib/systemd/systemd-networkd-wait-online
+++ /dev/null
@@ -1 +0,0 @@
-/bin/true
\ No newline at end of file
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/var/lib/cloud/seed/nocloud/meta-data b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/var/lib/cloud/seed/nocloud/meta-data
deleted file mode 100644
index e69de29b..00000000
diff --git a/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/var/lib/cloud/seed/nocloud/user-data b/live-build/ubuntu-core-desktop/includes.chroot.minimal.live/var/lib/cloud/seed/nocloud/user-data
deleted file mode 100644
index e69de29b..00000000
diff --git a/live-build/ubuntu-core-desktop/includes.chroot/etc/hosts b/live-build/ubuntu-core-desktop/includes.chroot/etc/hosts
deleted file mode 100644
index 81684340..00000000
--- a/live-build/ubuntu-core-desktop/includes.chroot/etc/hosts
+++ /dev/null
@@ -1,9 +0,0 @@
-127.0.0.1	localhost.localdomain	localhost
-::1		localhost6.localdomain6	localhost6
-
-# The following lines are desirable for IPv6 capable hosts
-::1     localhost ip6-localhost ip6-loopback
-fe00::0 ip6-localnet
-ff02::1 ip6-allnodes
-ff02::2 ip6-allrouters
-ff02::3 ip6-allhosts
diff --git a/live-build/ubuntu-core-desktop/install-sources-in.yaml b/live-build/ubuntu-core-desktop/install-sources-in.yaml
deleted file mode 100644
index 9ff1ae04..00000000
--- a/live-build/ubuntu-core-desktop/install-sources-in.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-- default: true
-  description:
-    en: Ubuntu Core Desktop.
-  id: ubuntu-core-desktop
-  locale_support: none
-  name:
-    en: Ubuntu Core Desktop
-  path: filesystem.img.xz
-  type: dd-xz:file
-  size: @SIZE@
-  variant: core 
diff --git a/live-build/ubuntu-core-desktop/ubuntu-core-desktop-22-amd64.model-assertion b/live-build/ubuntu-core-desktop/ubuntu-core-desktop-22-amd64.model-assertion
deleted file mode 100644
index 1f0a7ec6..00000000
--- a/live-build/ubuntu-core-desktop/ubuntu-core-desktop-22-amd64.model-assertion
+++ /dev/null
@@ -1,187 +0,0 @@
-type: model
-authority-id: canonical
-revision: 5
-series: 16
-brand-id: canonical
-model: ubuntu-core-desktop-22-amd64
-architecture: amd64
-base: core22-desktop
-display-name: Ubuntu Core Desktop 22 (amd64)
-grade: signed
-snaps:
-  -
-    default-channel: 22/stable
-    id: mZqHskGgGDECRCKP7h7ef3Rl2wTwyNfy
-    name: pc-desktop
-    type: gadget
-  -
-    default-channel: 23.10/stable
-    id: pYVQrBcKmBa0mZ4CCN7ExT6jH8rY1hza
-    name: pc-kernel
-    type: kernel
-  -
-    default-channel: latest/edge/ubuntu-core-desktop
-    id: PMrrV4ml8uWuEUDBT8dSGnKUYbevVhc4
-    name: snapd
-    type: snapd
-  -
-    default-channel: latest/stable
-    id: qRMmQqNDz8kRUTqFIgqk2RzNNoC7jUZ6
-    name: core22-desktop
-    type: base
-  -
-    default-channel: latest/stable
-    id: LVkazk0JLrL0ivuHRlv3wp3bK1nAgwtN
-    name: ubuntu-desktop-session
-    type: app
-  -
-    default-channel: latest/stable
-    id: amcUKQILKXHHTlmSa7NMdnXSx02dNeeT
-    name: core22
-    type: base
-  -
-    default-channel: 22/stable
-    id: RmBXKl6HO6YOC2DE4G2q1JzWImC04EUy
-    name: network-manager
-    type: app
-  -
-    default-channel: latest/stable
-    id: EISPgh06mRh1vordZY9OZ34QHdd7OrdR
-    name: bare
-    type: base
-  -
-    default-channel: latest/stable
-    id: jZLfBRzf1cYlYysIjD2bwSzNtngY0qit
-    name: gtk-common-themes
-    type: app
-  -
-    default-channel: latest/stable
-    id: lATO8HzwVvrAPrlZRAWpfyrJKlAJrZS3
-    name: gnome-42-2204
-    type: app
-  -
-    default-channel: latest/stable
-    id: m1eQacDdXCthEwWQrESei3Zao3d5gfJF
-    name: cups
-    type: app
-  -
-    default-channel: latest/stable
-    id: WJKWBUuCDufOFw2p24tvkbbw02plGkbd
-    name: ipp-usb
-    type: app
-  -
-    default-channel: 22/stable
-    id: dVK2PZeOLKA7vf1WPCap9F8luxTk9Oll
-    name: avahi
-    type: app
-  -
-    default-channel: 22/stable
-    id: JmzJi9kQvHUWddZ32PDJpBRXUpGRxvNS
-    name: bluez
-    type: app
-  -
-    default-channel: latest/stable
-    id: Si21Q1kjaZpyJ8TfGbAnxJ4y6KMv7FuW
-    name: loupe
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: EDFg87ESUg9sAIlm0Vm5Wmr0LjiEonSm
-    name: evince
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable/ubuntu-23.10
-    id: 3wdHCAVyZEmYsCMFDE9qt92UV8rC8Wdk
-    name: firefox
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: J8OcDPQ0JM8dbvk29HRqpWVI9kBw0atG
-    name: gnome-calculator
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: qJcS3UjpF9AMJKWAiKwA5EWbm0y6Uduw
-    name: gnome-characters
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: 8NtSF2nXW6krsxbXBYydy1j985k6ZsVK
-    name: gnome-clocks
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: BzJuWXmCIpyjUKotXPWU2psnl8gEh4hm
-    name: gnome-font-viewer
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: kIMfmZTJspWa8vtfbgU3W9Nbv4V5Qgmh
-    name: gnome-logs
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: PZj2sEabMQrVUV1HKZmmmXSk3E6wKC9i
-    name: gnome-text-editor
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: LhzK7p8214jufMYx1kz43QkWhFnOKdbr
-    name: gnome-weather
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu
-    name: lxd
-    type: app
-  -
-    default-channel: latest/edge/ubuntu-core-desktop
-    id: IrwRHakqtzhFRHJOOPxKVPU0Kk7Erhcu
-    name: snapd-desktop-integration
-    type: app
-  -
-    default-channel: latest/stable/ubuntu-23.10
-    id: gjf3IPXoRiipCu9K0kVu52f0H56fIksg
-    name: snap-store
-    type: app
-  -
-    default-channel: latest/stable
-    id: JMjaFobGn56fh1HepiaGuCxQgbWYnHc8
-    name: workshops
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: 9BTClmjz31r0UltmbJ5nnGe0Xm1AzfMp
-    name: gnome-system-monitor
-    presence: optional
-    type: app
-  -
-    default-channel: latest/stable
-    id: xODwiAdjx9KGChvI1z9Xx2JWJE7oLFF6
-    name: ubuntu-core-desktop-init
-    type: app
-storage-safety: prefer-encrypted
-timestamp: 2023-10-21T10:19:41+00:00
-sign-key-sha3-384: 9tydnLa6MTJ-jaQTFUXEwHl1yRx7ZS4K5cyFDhYDcPzhS7uyEkDxdUjg9g08BtNn
-
-AcLBXAQAAQoABgUCZTP+wgAKCRDgT5vottzAEia0D/9FyEOb4Qai+sJQ/ilVqZ1L0FicTIwa9/Ae
-khv5xXYGmukSzkIUGNYjvcCJByxgMiDsFOIIzrOYlJPmRFtdFOwm3KGS2JGthIUbQfElVbyPswZh
-cgqYVuGMiRw8udlZHOmy2rWIKxo/uLMEsZzZuk83nC+ZzAoQoHOmcELuRtIc1qz9XAf6n7pd79S2
-10cxG7vuaA1iVbqqtbSlQCAdKTdOCxw2/NHTZ8mIRtAQZGA1LP8IMEyv2Fi3FVpmN2derV78sO3f
-kCf/KdYeD6d1a03WchIDsuPlvTpTOU3TSX07QWj+WrZHMDh9gpQHDdSIWswBCPIHa10R6aDRRUUK
-/5dJDq77/CyY/Q/ivcAuFiTceghKVcx3Zci+VX2WgvLK9qYHYHSilb70nTvsDFUA/bKep57/xqeG
-j03cvUaqHb6li2T2SmyzaQOGV5MF6XxlhcLWY19PHc2/ocLpukL4vxkl18Ur3FoYAOLODwrlxueS
-FDu7u+qf+Ki2+f0ZtN70EPcFAQAJ4C0N6f9j9Z+9BQptTlVwrIzIUxIwxtkp27YvERno6bZPBRYs
-T4YdzVSdPKXsItT/GUiqYwdgPTi61FZXTN/47yIaHZLUwMT9gg/9XgNqIHKIdFHxm6GWVxL0AqOp
-JPIfqrsmVbewevzwV1Rgo1LbPKVVrjqPtW0QQlkS8w==
diff --git a/live-build/ubuntu-core-installer/hooks/05-prepare-image.binary b/live-build/ubuntu-core-installer/hooks/05-prepare-image.binary
index 2e1f3146..d17590b1 100644
--- a/live-build/ubuntu-core-installer/hooks/05-prepare-image.binary
+++ b/live-build/ubuntu-core-installer/hooks/05-prepare-image.binary
@@ -13,15 +13,29 @@ esac
 . config/binary
 . config/functions
 
-env SNAPPY_STORE_NO_CDN=1 snap known --remote model series=16 brand-id=canonical model=ubuntu-core-24-amd64 > config/ubuntu-core-24-amd64.model
+case ${SUBPROJECT} in
+    desktop)
+        env SNAPPY_STORE_NO_CDN=1 snap prepare-image \
+        config/ubuntu-core-desktop-24-amd64.model-assertion --snap firefox chroot
 
-env SNAPPY_STORE_NO_CDN=1 snap prepare-image \
-    config/ubuntu-core-24-amd64.model --snap console-conf chroot
-mv chroot/system-seed/systems/* chroot/system-seed/systems/ubuntu-core-24-amd64
-rsync -av chroot/system-seed/{systems,snaps} chroot/var/lib/snapd/seed
-rm -rf chroot/system-seed
+        cat <<-EOF > config/edge.catalog-in.yaml
+name: "Ubuntu Core Desktop 24"
+description: >-
+  Ubuntu Core Desktop.
+id: ubuntu-core-desktop
+type: null
+variant: core
+locale_support: none
+snapd_system_label: ubuntu-core-desktop-24-amd64
+EOF
+        mv chroot/system-seed/systems/* chroot/system-seed/systems/ubuntu-core-desktop-24-amd64
+        ;;
+    *)
+        env SNAPPY_STORE_NO_CDN=1 snap known --remote model series=16 brand-id=canonical model=ubuntu-core-24-amd64 > config/ubuntu-core-24-amd64.model
+        env SNAPPY_STORE_NO_CDN=1 snap prepare-image \
+            config/ubuntu-core-24-amd64.model --snap console-conf chroot
 
-cat <<-EOF > config/edge.catalog-in.yaml
+        cat <<-EOF > config/edge.catalog-in.yaml
 name: "Ubuntu Core 24"
 description: >-
   Ubuntu Core.
@@ -31,8 +45,15 @@ variant: core
 locale_support: none
 snapd_system_label: ubuntu-core-24-amd64
 EOF
+        mv chroot/system-seed/systems/* chroot/system-seed/systems/ubuntu-core-24-amd64
+        ;;
+esac
+
+rsync -av chroot/system-seed/{systems,snaps} chroot/var/lib/snapd/seed
+rm -rf chroot/system-seed
+
 PROJECT_FULL=$PROJECT${SUBARCH:+-$SUBARCH}
 usc_opts="--output livecd.${PROJECT_FULL}.install-sources.yaml \
-	  --template config/edge.catalog-in.yaml \
-	  --size 0"
+          --template config/edge.catalog-in.yaml \
+          --size 0"
 /usr/share/livecd-rootfs/update-source-catalog $usc_opts
diff --git a/live-build/ubuntu-core-installer/ubuntu-core-desktop-24-amd64.model-assertion b/live-build/ubuntu-core-installer/ubuntu-core-desktop-24-amd64.model-assertion
new file mode 100644
index 00000000..cd89ec87
--- /dev/null
+++ b/live-build/ubuntu-core-installer/ubuntu-core-desktop-24-amd64.model-assertion
@@ -0,0 +1,120 @@
+type: model
+authority-id: canonical
+series: 16
+brand-id: canonical
+model: ubuntu-core-desktop-24-amd64
+architecture: amd64
+base: core24-desktop
+display-name: Ubuntu Core Desktop 24 (amd64)
+grade: signed
+snaps:
+  -
+    default-channel: 24/stable
+    id: mZqHskGgGDECRCKP7h7ef3Rl2wTwyNfy
+    name: pc-desktop
+    type: gadget
+  -
+    default-channel: 24-hwe/stable
+    id: pYVQrBcKmBa0mZ4CCN7ExT6jH8rY1hza
+    name: pc-kernel
+    type: kernel
+  -
+    default-channel: latest/edge/ubuntu-core-desktop
+    id: PMrrV4ml8uWuEUDBT8dSGnKUYbevVhc4
+    name: snapd
+    type: snapd
+  -
+    default-channel: latest/stable
+    id: GY5GohJ4F1ZsWpkosG0joeZyDfHzTZrD
+    name: core24-desktop
+    type: base
+  -
+    default-channel: 24/stable
+    id: LVkazk0JLrL0ivuHRlv3wp3bK1nAgwtN
+    name: ubuntu-desktop-session
+    type: app
+  -
+    default-channel: latest/stable
+    id: amcUKQILKXHHTlmSa7NMdnXSx02dNeeT
+    name: core22
+    type: base
+  -
+    default-channel: latest/stable
+    id: dwTAh7MZZ01zyriOZErqd1JynQLiOGvM
+    name: core24
+    type: base
+  -
+    default-channel: 24/stable
+    id: RmBXKl6HO6YOC2DE4G2q1JzWImC04EUy
+    name: network-manager
+    type: app
+  -
+    default-channel: latest/stable
+    id: EISPgh06mRh1vordZY9OZ34QHdd7OrdR
+    name: bare
+    type: base
+  -
+    default-channel: latest/stable
+    id: jZLfBRzf1cYlYysIjD2bwSzNtngY0qit
+    name: gtk-common-themes
+    type: app
+  -
+    default-channel: latest/stable
+    id: lATO8HzwVvrAPrlZRAWpfyrJKlAJrZS3
+    name: gnome-42-2204
+    type: app
+  -
+    default-channel: latest/stable
+    id: m1eQacDdXCthEwWQrESei3Zao3d5gfJF
+    name: cups
+    type: app
+  -
+    default-channel: latest/stable
+    id: WJKWBUuCDufOFw2p24tvkbbw02plGkbd
+    name: ipp-usb
+    type: app
+  -
+    default-channel: 24/stable
+    id: dVK2PZeOLKA7vf1WPCap9F8luxTk9Oll
+    name: avahi
+    type: app
+  -
+    default-channel: 24/stable
+    id: JmzJi9kQvHUWddZ32PDJpBRXUpGRxvNS
+    name: bluez
+    type: app
+  -
+    default-channel: latest/stable/ubuntu-24.04
+    id: 3wdHCAVyZEmYsCMFDE9qt92UV8rC8Wdk
+    name: firefox
+    presence: optional
+    type: app
+  -
+    default-channel: latest/edge/ubuntu-core-desktop
+    id: IrwRHakqtzhFRHJOOPxKVPU0Kk7Erhcu
+    name: snapd-desktop-integration
+    type: app
+  -
+    default-channel: latest/stable/ubuntu-24.04
+    id: gjf3IPXoRiipCu9K0kVu52f0H56fIksg
+    name: snap-store
+    type: app
+  -
+    default-channel: latest/candidate
+    id: tBdYpKjXcW5farGGJaWiYXrxIwMVMtx5
+    name: ubuntu-desktop-init
+    type: app
+storage-safety: prefer-encrypted
+timestamp: 2024-07-04T10:33:44+08:00
+sign-key-sha3-384: 9tydnLa6MTJ-jaQTFUXEwHl1yRx7ZS4K5cyFDhYDcPzhS7uyEkDxdUjg9g08BtNn
+
+AcLBXAQAAQoABgUCZoYTygAKCRDgT5vottzAEnlLD/4toc4w5IiLm/xmBFL8BVwXXVQsvNNtVYaT
+NGSa+q7OJXeVbPQnnRMK4oH31IbGFngK3IHoc04LK76W2GQzAE4SQxTcV9VTlyPrVc6OeCn9rSWj
+zFX/fOVuD5Wd6OOgNitaHqVHh8CDQFcsdOBICImHG6s0Au1mIDVQvV/DxcnnprJ53yXFCeastuX+
+CnZiB6wOv/dzGHnIbhpUtKg5HV5jZoIkmplWAZr1IXd8gAPvltDzpJYwN6GMHK6SLUD1tgviP4ZB
+gw9IT11DCeB9TOEnsAs7y1YApUdkxMSv4B+Jwew/lkjysncULqFCt6fCD3HEw+OdULb/OrFnYcSV
+4NqPBop/9mi+CB5Fs3ubtlKxK9VnSJbLpXsyBeDvljVKp0MvNBpCTJnlGtRvQE/bHLpaAhRRsP0R
+6cUqd1ieRm4wp/1/v+zMjdp6VL7co0/a6jZgtfptCMnCC6Z0KdLWGQjaXDwxNStqMK3h/Au2YWDc
+ZgZ/+wTxMlDyU4i4gg+rByV2yPHfGeVpN7D7nuY8OWXq1ezESY6K5fsOW77/XEjZJOI3BFOJ6Xnl
+2ATKBs6uSmMPQSZo21sk+E0c2gH8qj6L6mUcAz2qvilur9w4uEM3TRfZcAKPN+8lV44eB8/aZpq7
+GfjsXFa+DpXJzWdC91SP4yIeojoj3OAl4gNwt0c85g==