diff --git a/0017-nvme-additional-rpms-for-dracut.patch b/0017-nvme-additional-rpms-for-dracut.patch
new file mode 100644
index 0000000..ace8d84
--- /dev/null
+++ b/0017-nvme-additional-rpms-for-dracut.patch
@@ -0,0 +1,26 @@
+From 9dcd32dd85f7f45c3fe6c8d7b1de3b4c322c6807 Mon Sep 17 00:00:00 2001
+From: Tomas Bzatek <tbzatek@redhat.com>
+Date: Mon, 11 Sep 2023 13:50:24 +0200
+Subject: [PATCH] nvme: Require additional rpms for dracut
+
+The '95nvmf' dracut module needs a couple more packages
+for the NBFT (NVMe over TCP) to work - such as networking.
+Local PCIe NVMe devices have no special needs.
+---
+ blivet/devices/disk.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/blivet/devices/disk.py b/blivet/devices/disk.py
+index 2b49ef685..5053f7bb8 100644
+--- a/blivet/devices/disk.py
++++ b/blivet/devices/disk.py
+@@ -725,7 +725,8 @@ class NVMeFabricsNamespaceDevice(NVMeNamespaceDevice, NetworkStorageDevice):
+ 
+     """ NVMe fabrics namespace """
+     _type = "nvme-fabrics"
+-    _packages = ["nvme-cli"]
++    # dracut '95nvmf' module dependencies
++    _packages = ["nvme-cli", "dracut-network"]
+ 
+     def __init__(self, device, **kwargs):
+         """
diff --git a/0018-nvme-TP4126-fixes-1.patch b/0018-nvme-TP4126-fixes-1.patch
new file mode 100644
index 0000000..1614696
--- /dev/null
+++ b/0018-nvme-TP4126-fixes-1.patch
@@ -0,0 +1,107 @@
+From 06597099906be55b106c234b3bf0c87ec7d90a07 Mon Sep 17 00:00:00 2001
+From: Tomas Bzatek <tbzatek@redhat.com>
+Date: Thu, 17 Aug 2023 14:45:18 +0200
+Subject: [PATCH] nvme: Align HostNQN and HostID format to TP4126
+
+Also don't overwrite existing files during startup() since they
+might have been supplied by early boot stages.
+---
+ blivet/nvme.py | 62 +++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 39 insertions(+), 23 deletions(-)
+
+diff --git a/blivet/nvme.py b/blivet/nvme.py
+index 17bead15e..5ac41cffa 100644
+--- a/blivet/nvme.py
++++ b/blivet/nvme.py
+@@ -18,16 +18,20 @@
+ #
+ 
+ import os
+-import shutil
+ 
+ from . import errors
+-from . import util
++
++import gi
++gi.require_version("BlockDev", "3.0")
++
++from gi.repository import BlockDev as blockdev
+ 
+ import logging
+ log = logging.getLogger("blivet")
+ 
+-HOSTNQN_FILE = "/etc/nvme/hostnqn"
+-HOSTID_FILE = "/etc/nvme/hostid"
++ETC_NVME_PATH = "/etc/nvme/"
++HOSTNQN_FILE = ETC_NVME_PATH + "hostnqn"
++HOSTID_FILE = ETC_NVME_PATH + "hostid"
+ 
+ 
+ class NVMe(object):
+@@ -40,6 +44,8 @@ class NVMe(object):
+ 
+     def __init__(self):
+         self.started = False
++        self._hostnqn = None
++        self._hostid = None
+ 
+     # So that users can write nvme() to get the singleton instance
+     def __call__(self):
+@@ -52,28 +58,38 @@ def startup(self):
+         if self.started:
+             return
+ 
+-        rc, nqn = util.run_program_and_capture_output(["nvme", "gen-hostnqn"])
+-        if rc != 0:
+-            raise errors.NVMeError("Failed to generate hostnqn")
+-
+-        with open(HOSTNQN_FILE, "w") as f:
+-            f.write(nqn)
+-
+-        rc, hid = util.run_program_and_capture_output(["dmidecode", "-s", "system-uuid"])
+-        if rc != 0:
+-            raise errors.NVMeError("Failed to generate host ID")
+-
+-        with open(HOSTID_FILE, "w") as f:
+-            f.write(hid)
++        self._hostnqn = blockdev.nvme_get_host_nqn()
++        self._hostid = blockdev.nvme_get_host_id()
++        if not self._hostnqn:
++            self._hostnqn = blockdev.nvme_generate_host_nqn()
++        if not self._hostnqn:
++            raise errors.NVMeError("Failed to generate HostNQN")
++        if not self._hostid:
++            if 'uuid:' not in self._hostnqn:
++                raise errors.NVMeError("Missing UUID part in the HostNQN string '%s'" % self._hostnqn)
++            # derive HostID from HostNQN's UUID part
++            self._hostid = self._hostnqn.split('uuid:')[1]
++
++        # do not overwrite existing files, taken e.g. from initramfs
++        self.write("/", overwrite=False)
+ 
+         self.started = True
+ 
+-    def write(self, root):  # pylint: disable=unused-argument
+-        # copy the hostnqn and hostid files
+-        if not os.path.isdir(root + "/etc/nvme"):
+-            os.makedirs(root + "/etc/nvme", 0o755)
+-        shutil.copyfile(HOSTNQN_FILE, root + HOSTNQN_FILE)
+-        shutil.copyfile(HOSTID_FILE, root + HOSTID_FILE)
++    def write(self, root, overwrite=True):  # pylint: disable=unused-argument
++        # write down the hostnqn and hostid files
++        p = root + ETC_NVME_PATH
++        if not os.path.isdir(p):
++            os.makedirs(p, 0o755)
++        p = root + HOSTNQN_FILE
++        if overwrite or not os.path.isfile(p):
++            with open(p, "w") as f:
++                f.write(self._hostnqn)
++                f.write("\n")
++        p = root + HOSTID_FILE
++        if overwrite or not os.path.isfile(p):
++            with open(p, "w") as f:
++                f.write(self._hostid)
++                f.write("\n")
+ 
+ 
+ # Create nvme singleton
diff --git a/python-blivet.spec b/python-blivet.spec
index edceacd..93dbee0 100644
--- a/python-blivet.spec
+++ b/python-blivet.spec
@@ -23,7 +23,7 @@ Version: 3.6.0
 
 #%%global prerelease .b2
 # prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2
-Release: 9%{?prerelease}%{?dist}
+Release: 10%{?prerelease}%{?dist}
 Epoch: 1
 License: LGPLv2+
 %global realname blivet
@@ -46,6 +46,8 @@ Patch12: 0013-Fix-setting-kickstart-data.patch
 Patch13: 0014-Do-not-set-memory-limit-for-LUKS2-when-running-in-FI.patch
 Patch14: 0015-Add-support-for-filesystem-online-resize.patch
 Patch15: 0016-Backport-iSCSI-initiator-name-related-fixes.patch
+Patch16: 0017-nvme-additional-rpms-for-dracut.patch
+Patch17: 0018-nvme-TP4126-fixes-1.patch
 
 # Versions of required components (done so we make sure the buildrequires
 # match the requires versions of things).
@@ -210,6 +212,12 @@ configuration.
 
 %changelog
 
+* Tue Sep 26 2023 Tomas Bzatek <tbzatek@redhat.com> - 3.6.0-10
+- nvme: Require additional rpms for dracut
+  Resolves: RHEL-2855
+- nvme: Align HostNQN and HostID format to TP-4126
+  Resolves: RHEL-1254
+
 * Mon Jul 24 2023 Jan Pokorny <japokorn@redhat.com> - 3.6.0-9
   Backport iSCSI initiator name related fixes:
 - Allow changing iSCSI initiator name after setting it