diff --git a/vm_tools/concierge/service.cc b/vm_tools/concierge/service.cc
index 3989dc3..d6c0aa3 100644
--- a/vm_tools/concierge/service.cc
+++ b/vm_tools/concierge/service.cc
@@ -1081,11 +1081,10 @@
   }
 
   // Track the next available virtio-blk device name.
-  // Assume that the rootfs filesystem was assigned /dev/pmem0 if
-  // USE_PMEM_DEVICE_FOR_ROOTFS is set, /dev/vda otherwise.
-  // Assume every subsequent image was assigned a letter in alphabetical order
+  // Assume that the rootfs filesystem was assigned /dev/vda and that
+  // every subsequent image was assigned a letter in alphabetical order
   // starting from 'b'.
-  unsigned char disk_letter = USE_PMEM_DEVICE_FOR_ROOTFS ? 'a' : 'b';
+  unsigned char disk_letter = 'b';
 
   // In newer components, the /opt/google/cros-containers directory
   // is split into its own disk image(vm_tools.img).  Detect whether it exists
@@ -1963,7 +1962,8 @@
       base::StringPrintf("%s/%zu", dst_addr.c_str(), prefix_length);
 
   string error;
-  if (!vm->StartTermina(std::move(container_subnet_cidr), &error)) {
+  if (!vm->StartTermina(std::move(container_subnet_cidr), vm->StatefulDevice(),
+                        &error)) {
     failure_reason->assign(error);
     return false;
   }
diff --git a/vm_tools/concierge/termina_vm.cc b/vm_tools/concierge/termina_vm.cc
index d40e2ac..2a3231e 100644
--- a/vm_tools/concierge/termina_vm.cc
+++ b/vm_tools/concierge/termina_vm.cc
@@ -137,6 +137,7 @@
       kCrosvmBin,       "run",
       "--cpus",         std::to_string(base::SysInfo::NumberOfProcessors()),
       "--mem",          GetVmMemoryMiB(),
+      "--root",         rootfs.value(),
       "--tap-fd",       std::to_string(tap_fd.get()),
       "--cid",          std::to_string(vsock_cid_),
       "--socket",       GetVmSocketPath(),
@@ -146,16 +147,6 @@
   };
   // clang-format on
 
-  if (USE_PMEM_DEVICE_FOR_ROOTFS) {
-    args.emplace_back("--pmem-device");
-    args.emplace_back(rootfs.value());
-    args.emplace_back("--params");
-    args.emplace_back("root=/dev/pmem0 ro rootflags=dax");
-  } else {
-    args.emplace_back("--root");
-    args.emplace_back(rootfs.value());
-  }
-
   if (USE_CROSVM_WL_DMABUF)
     args.emplace_back("--wayland-dmabuf");
 
@@ -364,6 +355,7 @@
 }
 
 bool TerminaVm::StartTermina(std::string lxd_subnet,
+                             std::string stateful_device,
                              std::string* out_error) {
   // We record the kernel version early to ensure that no container has
   // been started and the VM can still be trusted.
@@ -374,7 +366,7 @@
 
   request.set_tremplin_ipv4_address(GatewayAddress());
   request.mutable_lxd_ipv4_subnet()->swap(lxd_subnet);
-  request.set_stateful_device(StatefulDevice());
+  request.mutable_stateful_device()->swap(stateful_device);
 
   grpc::ClientContext ctx;
   ctx.set_deadline(gpr_time_add(
diff --git a/vm_tools/concierge/termina_vm.h b/vm_tools/concierge/termina_vm.h
index 37c7c3f..e8844cf 100644
--- a/vm_tools/concierge/termina_vm.h
+++ b/vm_tools/concierge/termina_vm.h
@@ -89,6 +89,7 @@
 
   // Starts Termina-specific services in the guest.
   bool StartTermina(std::string lxd_subnet,
+                    std::string stateful_device,
                     std::string* out_error);
 
   // Mount a 9p file system inside the VM.  The guest VM connects to a server
diff --git a/vm_tools/host/BUILD.gn b/vm_tools/host/BUILD.gn
index 5ded761..aba0f32 100644
--- a/vm_tools/host/BUILD.gn
+++ b/vm_tools/host/BUILD.gn
@@ -35,10 +35,7 @@
 
 config("host_target_defaults") {
   configs = [ ":host_target_defaults_pkgs" ]
-  defines = [
-    "USE_CROSVM_WL_DMABUF=${use.crosvm_wl_dmabuf}",
-    "USE_PMEM_DEVICE_FOR_ROOTFS=${use.amd64}",
-  ]
+  defines = [ "USE_CROSVM_WL_DMABUF=${use.crosvm_wl_dmabuf}" ]
 }
 
 executable("maitred_client") {
diff --git a/vm_tools/maitred/service_impl.cc b/vm_tools/maitred/service_impl.cc
index e199136..a90f1d6 100644
--- a/vm_tools/maitred/service_impl.cc
+++ b/vm_tools/maitred/service_impl.cc
@@ -466,9 +466,8 @@
   if (ret != 0) {
     int saved_errno = errno;
     PLOG(ERROR) << "Failed to mount stateful disk";
-    return grpc::Status(grpc::INTERNAL, string("failed to mount stateful (") +
-                                            stateful_device +
-                                            "): " + strerror(saved_errno));
+    return grpc::Status(grpc::INTERNAL, string("failed to mount stateful: ") +
+                                            strerror(saved_errno));
   }
 
   // Resize the stateful filesystem to fill the block device in case
