diff --git a/mpact/sim/util/memory/tagged_flat_demand_memory.cc b/mpact/sim/util/memory/tagged_flat_demand_memory.cc
index 2537544..4a89b59 100644
--- a/mpact/sim/util/memory/tagged_flat_demand_memory.cc
+++ b/mpact/sim/util/memory/tagged_flat_demand_memory.cc
@@ -78,8 +78,10 @@
 void TaggedFlatDemandMemory::Store(uint64_t address, DataBuffer* db,
                                    DataBuffer* tags) {
   if (!CheckRequest(address, db, tags)) return;
-  // Store data and tags.
-  data_memory_->Store(address, db);
+  // Store data and tags. If db is null, this is just a store of tag bits.
+  if (db != nullptr) {
+    data_memory_->Store(address, db);
+  }
   tag_memory_->Store(address >> tag_granule_shift_, tags);
 }
 
diff --git a/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc b/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
index 4e6d912..d934fb2 100644
--- a/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
+++ b/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
@@ -431,4 +431,43 @@
   absl::RemoveLogSink(&log_sink);
 }
 
+TEST_F(TaggedFlatDemandMemoryTest, TagOnlyStoreAndLoad) {
+  for (unsigned granule : {8u, 16u}) {
+    auto mem = std::make_unique<TaggedFlatDemandMemory>(granule);
+    DataBuffer* st_data_db =
+        arch_state_->db_factory()->Allocate<uint8_t>(granule * 4);
+    DataBuffer* ld_data_db =
+        arch_state_->db_factory()->Allocate<uint8_t>(granule * 4);
+    DataBuffer* st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(4);
+    DataBuffer* ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(4);
+    ld_data_db->set_latency(0);
+    ld_tag_db->set_latency(0);
+
+    for (int i = 0; i < st_data_db->size<uint8_t>(); i++) {
+      st_data_db->Set<uint8_t>(i, static_cast<uint8_t>(0xa0 + i));
+    }
+    mem->Store(0x1000, st_data_db);
+
+    for (int i = 0; i < 4; i++) {
+      st_tag_db->Set<uint8_t>(i, i & 1);
+    }
+    mem->Store(0x1000, nullptr, st_tag_db);
+    mem->Load(0x1000, nullptr, ld_tag_db, nullptr, nullptr);
+    for (int i = 0; i < 4; i++) {
+      EXPECT_EQ(ld_tag_db->Get<uint8_t>(i), i & 1)
+          << "granule=" << granule << " i=" << i;
+    }
+
+    // Verify underlying data was not modified by the tag-only store.
+    mem->Load(0x1000, ld_data_db, nullptr, nullptr);
+    EXPECT_THAT(ld_data_db->Get<uint8_t>(),
+                testing::ElementsAreArray(st_data_db->Get<uint8_t>()));
+
+    st_data_db->DecRef();
+    ld_data_db->DecRef();
+    st_tag_db->DecRef();
+    ld_tag_db->DecRef();
+  }
+}
+
 }  // namespace
