diff --git a/other/BUILD b/other/BUILD
index 4ed5735..74c5553 100644
--- a/other/BUILD
+++ b/other/BUILD
@@ -20,6 +20,32 @@
 )
 
 cc_library(
+    name = "riscv_simple_state",
+    srcs = [
+        "riscv_simple_state.cc",
+    ],
+    hdrs = [
+        "riscv_simple_state.h",
+        "riscv_register.h",
+    ],
+    deps = [
+        "@com_google_absl//absl/container:flat_hash_map",
+        "@com_google_absl//absl/functional:any_invocable",
+        "@com_google_absl//absl/log",
+        "@com_google_absl//absl/log:check",
+        "@com_google_absl//absl/status",
+        "@com_google_absl//absl/status:statusor",
+        "@com_google_absl//absl/strings",
+        "@com_google_absl//absl/types:any",
+        "@mpact-sim//mpact/sim/generic:arch_state",
+        "@mpact-sim//mpact/sim/generic:core",
+        "@mpact-sim//mpact/sim/generic:instruction",
+        "@mpact-sim//mpact/sim/generic:type_helpers",
+        "@mpact-sim//mpact/sim/util/memory",
+    ],
+)
+
+cc_library(
     name = "rv32i_top",
     srcs = [
         "rv32i_top.cc",
@@ -28,6 +54,7 @@
         "rv32i_top.h",
     ],
     deps = [
+        ":riscv_simple_state",
         "//riscv_full_decoder/solution:riscv32i_decoder",
         "//riscv_isa_decoder/solution:riscv32i_isa",
         "@com_google_absl//absl/functional:bind_front",
@@ -36,7 +63,6 @@
         "@com_google_absl//absl/strings",
         "@mpact-riscv//riscv:riscv32_htif_semihost",
         "@mpact-riscv//riscv:riscv_breakpoint",
-        "@mpact-riscv//riscv:riscv_state",
         "@mpact-sim//mpact/sim/generic:component",
         "@mpact-sim//mpact/sim/generic:core",
         "@mpact-sim//mpact/sim/generic:core_debug_interface",
@@ -51,7 +77,6 @@
         "rv32i_sim.cc",
     ],
     copts = ["-O3"],
-    args = ["other/hello_rv32i.elf"],
     data = [
         "hello_rv32i.elf",
     ],
@@ -69,3 +94,4 @@
         "@mpact-sim//mpact/sim/util/program_loader:elf_loader",
     ],
 )
+
diff --git a/other/riscv_register.h b/other/riscv_register.h
new file mode 100644
index 0000000..3f47190
--- /dev/null
+++ b/other/riscv_register.h
@@ -0,0 +1,45 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef MPACT_SIM_CODELABS_OTHER_RISCV_REGISTER_H_
+#define MPACT_SIM_CODELABS_OTHER_RISCV_REGISTER_H_
+
+#include <any>
+#include <string>
+#include <vector>
+
+#include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/generic/operand_interface.h"
+#include "mpact/sim/generic/register.h"
+#include "mpact/sim/generic/state_item.h"
+
+// File contains shorthand type definitions for RiscV32G registers.
+
+namespace mpact {
+namespace sim {
+namespace riscv {
+
+class RiscVState;
+
+// The value type of the register must be an unsigned integer type.
+using RV32Register = generic::Register<uint32_t>;
+using RV64Register = generic::Register<uint64_t>;
+
+using RVXRegister = RV32Register;
+
+}  // namespace riscv
+}  // namespace sim
+}  // namespace mpact
+
+#endif // MPACT_SIM_CODELABS_OTHER_RISCV_REGISTER_H_
diff --git a/other/riscv_simple_state.cc b/other/riscv_simple_state.cc
new file mode 100644
index 0000000..3f80efd
--- /dev/null
+++ b/other/riscv_simple_state.cc
@@ -0,0 +1,142 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "other/riscv_simple_state.h"
+
+#include <iostream>
+#include <limits>
+#include <string>
+#include <vector>
+
+#include "absl/log/check.h"
+#include "absl/log/log.h"
+#include "mpact/sim/generic/type_helpers.h"
+#include "mpact/sim/util/memory/flat_demand_memory.h"
+#include "other/riscv_register.h"
+
+namespace mpact {
+namespace sim {
+namespace riscv {
+
+RiscVState::RiscVState(absl::string_view id, RiscVXlen xlen,
+                       util::MemoryInterface *memory,
+                       util::AtomicMemoryOpInterface *atomic_memory)
+    : ArchState(id),
+      xlen_(xlen),
+      memory_(memory),
+      atomic_memory_(atomic_memory) {
+  if (memory_ == nullptr) {
+    memory_ = owned_memory_ = new util::FlatDemandMemory(0);
+  }
+
+  DataBuffer *db = nullptr;
+  switch (xlen_) {
+    case RiscVXlen::RV32: {
+      auto *pc32 = GetRegister<RV32Register>(kPcName).first;
+      pc_src_operand_ = pc32->CreateSourceOperand();
+      pc_dst_operand_ = pc32->CreateDestinationOperand(0);
+      pc_ = pc32;
+      db = db_factory()->Allocate<RV32Register::ValueType>(1);
+      db->Set<uint32_t>(0, 0);
+      break;
+    }
+    default:
+      LOG(ERROR) << "Unsupported xlen";
+      return;
+  }
+
+  set_pc_operand(pc_src_operand_);
+  pc_->SetDataBuffer(db);
+  db->DecRef();
+}
+
+RiscVState::~RiscVState() {
+  delete pc_src_operand_;
+  delete pc_dst_operand_;
+  delete owned_memory_;
+}
+
+void RiscVState::LoadMemory(const Instruction *inst, uint64_t address,
+                            DataBuffer *db, Instruction *child_inst,
+                            ReferenceCount *context) {
+  memory_->Load(address, db, child_inst, context);
+}
+
+void RiscVState::LoadMemory(const Instruction *inst, DataBuffer *address_db,
+                            DataBuffer *mask_db, int el_size, DataBuffer *db,
+                            Instruction *child_inst, ReferenceCount *context) {
+  memory_->Load(address_db, mask_db, el_size, db, child_inst, context);
+}
+
+void RiscVState::StoreMemory(const Instruction *inst, uint64_t address,
+                             DataBuffer *db) {
+  memory_->Store(address, db);
+}
+
+void RiscVState::StoreMemory(const Instruction *inst, DataBuffer *address_db,
+                             DataBuffer *mask_db, int el_size, DataBuffer *db) {
+  memory_->Store(address_db, mask_db, el_size, db);
+}
+
+void RiscVState::Fence(const Instruction *inst, int fm, int predecessor,
+                       int successor) {
+  // TODO: Add fence operation once operations have non-zero latency.
+}
+
+void RiscVState::FenceI(const Instruction *inst) {
+  // TODO: Add instruction fence operation when needed.
+}
+
+void RiscVState::ECall(const Instruction *inst) {
+  if (on_ecall_ != nullptr) {
+    auto res = on_ecall_(inst);
+    if (res) return;
+  }
+  std::string where = (inst != nullptr)
+                          ? absl::StrCat(absl::Hex(inst->address()))
+                          : "unknown location";
+
+  LOG(ERROR) << "ECall called without handler at address: " << where;
+  LOG(ERROR) << "Treating as nop";
+}
+
+void RiscVState::EBreak(const Instruction *inst) {
+  for (auto &handler : on_ebreak_) {
+    bool res = handler(inst);
+    if (res) return;
+  }
+  std::string where = (inst != nullptr)
+                          ? absl::StrCat(absl::Hex(inst->address()))
+                          : "unknown location";
+
+  LOG(ERROR) << "EBreak called without handler at address: " << where;
+  LOG(ERROR) << "Treating as nop";
+}
+
+void RiscVState::WFI(const Instruction *inst) {
+  if (on_wfi_ != nullptr) {
+    bool res = on_wfi_(inst);
+    if (res) return;
+  }
+
+  std::string where = (inst != nullptr)
+                          ? absl::StrCat(absl::Hex(inst->address()))
+                          : "unknown location";
+
+  LOG(INFO) << "No handler for wfi: treating as nop: " << where;
+}
+
+}  // namespace riscv
+}  // namespace sim
+}  // namespace mpact
diff --git a/other/riscv_simple_state.h b/other/riscv_simple_state.h
new file mode 100644
index 0000000..07c94e9
--- /dev/null
+++ b/other/riscv_simple_state.h
@@ -0,0 +1,209 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef MPACT_SIM_CODELABS_OTHER_RISCV_SIMPLE_STATE_H_
+#define MPACT_SIM_CODELABS_OTHER_RISCV_SIMPLE_STATE_H_
+
+#include <cstddef>
+#include <cstdint>
+#include <limits>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/functional/any_invocable.h"
+#include "absl/status/status.h"
+#include "absl/strings/string_view.h"
+#include "mpact/sim/generic/arch_state.h"
+#include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/generic/instruction.h"
+#include "mpact/sim/generic/operand_interface.h"
+#include "mpact/sim/generic/ref_count.h"
+#include "mpact/sim/generic/type_helpers.h"
+#include "mpact/sim/util/memory/flat_demand_memory.h"
+#include "mpact/sim/util/memory/memory_interface.h"
+#include "other/riscv_register.h"
+
+namespace mpact {
+namespace sim {
+namespace riscv {
+
+using ArchState = ::mpact::sim::generic::ArchState;
+using DataBuffer = ::mpact::sim::generic::DataBuffer;
+using Instruction = ::mpact::sim::generic::Instruction;
+using ReferenceCount = ::mpact::sim::generic::ReferenceCount;
+
+// A simple load context class for convenience.
+struct LoadContext : public generic::ReferenceCount {
+  explicit LoadContext(DataBuffer *vdb) : value_db(vdb) {}
+  ~LoadContext() override {
+    if (value_db != nullptr) value_db->DecRef();
+  }
+
+  // Override the base class method so that the data buffer can be DecRef'ed
+  // when the context object is recycled.
+  void OnRefCountIsZero() override {
+    if (value_db != nullptr) value_db->DecRef();
+    value_db = nullptr;
+    // Call the base class method.
+    generic::ReferenceCount::OnRefCountIsZero();
+  }
+  // Data buffers for the value loaded from memory (byte, half, word, etc.).
+  DataBuffer *value_db = nullptr;
+};
+
+// Supported values of Xlen.
+enum class RiscVXlen : uint64_t {
+  RV32 = 0b01,
+  RVUnknown = 4,
+};
+
+// Class that extends ArchState with RiscV specific methods. These methods
+// implement RiscV specific memory operations, memory/IO fencing, system
+// calls and software breakpoints.
+class RiscVState : public ArchState {
+ public:
+  static constexpr char kXregPrefix[] = "x";
+  static constexpr char kVregPrefix[] = "v";
+  static constexpr char kNextPcName[] = "next_pc";
+  static constexpr char kPcName[] = "pc";
+
+  RiscVState(absl::string_view id, RiscVXlen xlen,
+             util::MemoryInterface *memory,
+             util::AtomicMemoryOpInterface *atomic_memory);
+  RiscVState(absl::string_view id, RiscVXlen xlen,
+             util::MemoryInterface *memory)
+      : RiscVState(id, xlen, memory, nullptr) {}
+  RiscVState(absl::string_view id, RiscVXlen xlen)
+      : RiscVState(id, xlen, nullptr, nullptr) {}
+  ~RiscVState() override;
+
+  // Deleted Constructors and operators.
+  RiscVState(const RiscVState &) = delete;
+  RiscVState(RiscVState &&) = delete;
+  RiscVState &operator=(const RiscVState &) = delete;
+  RiscVState &operator=(RiscVState &&) = delete;
+
+  // Return a pair consisting of pointer to the named register and a bool that
+  // is true if the register had to be created, and false if it was found
+  // in the register map (or if nullptr is returned).
+  template <typename RegisterType>
+  std::pair<RegisterType *, bool> GetRegister(absl::string_view name) {
+    // If the register already exists, return a pointer to the register.
+    auto ptr = registers()->find(std::string(name));
+    if (ptr != registers()->end())
+      return std::make_pair(static_cast<RegisterType *>(ptr->second), false);
+    // Create a new register and return a pointer to the object.
+    return std::make_pair(AddRegister<RegisterType>(name), true);
+  }
+
+  // Add register alias.
+  template <typename RegisterType>
+  absl::Status AddRegisterAlias(absl::string_view current_name,
+                                absl::string_view new_name) {
+    auto ptr = registers()->find(std::string(current_name));
+    if (ptr == registers()->end()) {
+      return absl::NotFoundError(
+          absl::StrCat("Register '", current_name, "' does not exist."));
+    }
+    AddRegister(new_name, ptr->second);
+    return absl::OkStatus();
+  }
+
+  // Methods called by instruction semantic functions to load from memory.
+  void LoadMemory(const Instruction *inst, uint64_t address, DataBuffer *db,
+                  Instruction *child_inst, ReferenceCount *context);
+  void LoadMemory(const Instruction *inst, DataBuffer *address_db,
+                  DataBuffer *mask_db, int el_size, DataBuffer *db,
+                  Instruction *child_inst, ReferenceCount *context);
+  // Methods called by instruction semantic functions to store to memory.
+  void StoreMemory(const Instruction *inst, uint64_t address, DataBuffer *db);
+  void StoreMemory(const Instruction *inst, DataBuffer *address_db,
+                   DataBuffer *mask_db, int el_size, DataBuffer *db);
+  // Called by the fence instruction semantic function to signal a fence
+  // operation.
+  void Fence(const Instruction *inst, int fm, int predecessor, int successor);
+  // Synchronize instruction and data streams.
+  void FenceI(const Instruction *inst);
+  // System call.
+  void ECall(const Instruction *inst);
+  // Breakpoint.
+  void EBreak(const Instruction *inst);
+  // WFI
+  void WFI(const Instruction *inst);
+  // Trap.
+  void Trap(bool is_interrupt, uint64_t trap_value, uint64_t exception_code,
+            uint64_t epc, const Instruction *inst);
+  // Add ebreak handler.
+  void AddEbreakHandler(absl::AnyInvocable<bool(const Instruction *)> handler) {
+    on_ebreak_.emplace_back(std::move(handler));
+  }
+
+  // Accessors.
+  void set_memory(util::MemoryInterface *memory) { memory_ = memory; }
+  util::MemoryInterface *memory() const { return memory_; }
+  util::AtomicMemoryOpInterface *atomic_memory() const {
+    return atomic_memory_;
+  }
+
+  // Setters for handlers for ecall, and trap. The handler returns true
+  // if the instruction/event was handled, and false otherwise.
+
+  void set_on_ecall(absl::AnyInvocable<bool(const Instruction *)> callback) {
+    on_ecall_ = std::move(callback);
+  }
+
+  void set_on_wfi(absl::AnyInvocable<bool(const Instruction *)> callback) {
+    on_wfi_ = std::move(callback);
+  }
+
+  void set_on_trap(
+      absl::AnyInvocable<bool(bool /*is_interrupt*/, uint64_t /*trap_value*/,
+                              uint64_t /*exception_code*/, uint64_t /*epc*/,
+                              const Instruction *)>
+          callback) {
+    on_trap_ = std::move(callback);
+  }
+
+  int flen() const { return flen_; }
+  RiscVXlen xlen() const { return xlen_; }
+
+  // Getters for select CSRs.
+
+ private:
+  RiscVXlen xlen_;
+  // Program counter register.
+  generic::RegisterBase *pc_;
+  // Operands used to access pc values generically. Note, the pc value may read
+  // as the address of the next instruction during execution of an instruction,
+  // so the address of the instruction executing should be used instead.
+  generic::SourceOperandInterface *pc_src_operand_ = nullptr;
+  generic::DestinationOperandInterface *pc_dst_operand_ = nullptr;
+  int flen_ = 0;
+  util::FlatDemandMemory *owned_memory_ = nullptr;
+  util::MemoryInterface *memory_ = nullptr;
+  util::AtomicMemoryOpInterface *atomic_memory_ = nullptr;
+  std::vector<absl::AnyInvocable<bool(const Instruction *)>> on_ebreak_;
+  absl::AnyInvocable<bool(const Instruction *)> on_ecall_;
+  absl::AnyInvocable<bool(bool, uint64_t, uint64_t, uint64_t,
+                          const Instruction *)>
+      on_trap_;
+  absl::AnyInvocable<bool(const Instruction *)> on_wfi_;
+};
+
+}  // namespace riscv
+}  // namespace sim
+}  // namespace mpact
+
+#endif // MPACT_SIM_CODELABS_OHTER_RISCV_SIMPLE_STATE_H_
diff --git a/other/rv32i_top.h b/other/rv32i_top.h
index 8db0dbc..641244b 100644
--- a/other/rv32i_top.h
+++ b/other/rv32i_top.h
@@ -27,10 +27,10 @@
 #include "mpact/sim/util/memory/flat_demand_memory.h"
 #include "mpact/sim/util/memory/memory_interface.h"
 #include "mpact/sim/util/memory/memory_watcher.h"
+#include "other/riscv_simple_state.h"
 #include "riscv/riscv32_htif_semihost.h"
 #include "riscv/riscv_breakpoint.h"
 #include "riscv/riscv_register.h"
-#include "riscv/riscv_state.h"
 #include "riscv_full_decoder/solution/riscv32_decoder.h"
 #include "riscv_isa_decoder/solution/riscv32i_enums.h"
 
diff --git a/riscv_full_decoder/BUILD b/riscv_full_decoder/BUILD
index eb61ee6..7a1f1d0 100644
--- a/riscv_full_decoder/BUILD
+++ b/riscv_full_decoder/BUILD
@@ -30,10 +30,10 @@
         "riscv32i_encoding.h",
     ],
     deps = [
+        "//other:riscv_simple_state",
         "//riscv_bin_decoder/solution:riscv32i_bin_fmt",
         "//riscv_isa_decoder/solution:riscv32i_isa",
         "//riscv_semantic_functions/solution:riscv32i",
-        "@mpact-riscv//riscv:riscv_state",
         "@mpact-sim//mpact/sim/generic:arch_state",
         "@mpact-sim//mpact/sim/generic:core",
         "@mpact-sim//mpact/sim/generic:instruction",
diff --git a/riscv_full_decoder/riscv32_decoder.h b/riscv_full_decoder/riscv32_decoder.h
index 410378c..1daa07e 100644
--- a/riscv_full_decoder/riscv32_decoder.h
+++ b/riscv_full_decoder/riscv32_decoder.h
@@ -24,7 +24,7 @@
 #include "mpact/sim/generic/instruction.h"
 #include "mpact/sim/generic/program_error.h"
 #include "mpact/sim/util/memory/memory_interface.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
 #include "riscv_full_decoder/riscv32i_encoding.h"
 #include "riscv_isa_decoder/solution/riscv32i_decoder.h"
 
diff --git a/riscv_full_decoder/riscv32i_encoding.cc b/riscv_full_decoder/riscv32i_encoding.cc
index 1ae6a37..0b7109e 100644
--- a/riscv_full_decoder/riscv32i_encoding.cc
+++ b/riscv_full_decoder/riscv32i_encoding.cc
@@ -21,8 +21,8 @@
 #include "mpact/sim/generic/immediate_operand.h"
 #include "mpact/sim/generic/literal_operand.h"
 #include "mpact/sim/generic/operand_interface.h"
-#include "riscv/riscv_register.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
+#include "other/riscv_register.h"
 
 namespace mpact {
 namespace sim {
diff --git a/riscv_full_decoder/riscv32i_encoding.h b/riscv_full_decoder/riscv32i_encoding.h
index 8d00498..93c7762 100644
--- a/riscv_full_decoder/riscv32i_encoding.h
+++ b/riscv_full_decoder/riscv32i_encoding.h
@@ -22,7 +22,7 @@
 
 #include "absl/functional/any_invocable.h"
 #include "mpact/sim/generic/operand_interface.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
 #include "riscv_isa_decoder/solution/riscv32i_decoder.h"
 #include "riscv_isa_decoder/solution/riscv32i_enums.h"
 
diff --git a/riscv_full_decoder/solution/BUILD b/riscv_full_decoder/solution/BUILD
index cca8c97..1212c0e 100644
--- a/riscv_full_decoder/solution/BUILD
+++ b/riscv_full_decoder/solution/BUILD
@@ -30,6 +30,7 @@
         "riscv32i_encoding.h",
     ],
     deps = [
+        "//other:riscv_simple_state",
         "//riscv_bin_decoder/solution:riscv32i_bin_fmt",
         "//riscv_isa_decoder/solution:riscv32i_isa",
         "//riscv_semantic_functions/solution:riscv32i",
@@ -38,7 +39,6 @@
         "@com_google_absl//absl/functional:bind_front",
         "@com_google_absl//absl/memory",
         "@com_google_absl//absl/strings",
-        "@mpact-riscv//riscv:riscv_state",
         "@mpact-sim//mpact/sim/generic:arch_state",
         "@mpact-sim//mpact/sim/generic:core",
         "@mpact-sim//mpact/sim/generic:instruction",
diff --git a/riscv_full_decoder/solution/riscv32_decoder.h b/riscv_full_decoder/solution/riscv32_decoder.h
index ccae230..725031c 100644
--- a/riscv_full_decoder/solution/riscv32_decoder.h
+++ b/riscv_full_decoder/solution/riscv32_decoder.h
@@ -23,7 +23,7 @@
 #include "mpact/sim/generic/decoder_interface.h"
 #include "mpact/sim/generic/instruction.h"
 #include "mpact/sim/util/memory/memory_interface.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
 #include "riscv_full_decoder/solution/riscv32i_encoding.h"
 #include "riscv_isa_decoder/solution/riscv32i_decoder.h"
 
diff --git a/riscv_full_decoder/solution/riscv32i_encoding.cc b/riscv_full_decoder/solution/riscv32i_encoding.cc
index b0a3ca0..f264b79 100644
--- a/riscv_full_decoder/solution/riscv32i_encoding.cc
+++ b/riscv_full_decoder/solution/riscv32i_encoding.cc
@@ -20,8 +20,8 @@
 #include "mpact/sim/generic/immediate_operand.h"
 #include "mpact/sim/generic/literal_operand.h"
 #include "mpact/sim/generic/operand_interface.h"
-#include "riscv/riscv_register.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_register.h"
+#include "other/riscv_simple_state.h"
 #include "riscv_bin_decoder/solution/riscv32i_bin_decoder.h"
 
 namespace mpact {
@@ -39,16 +39,16 @@
 template <typename RegType>
 inline DestinationOperandInterface *GetRegisterDestinationOp(
     RiscVState *state, const std::string &name, int latency) {
-  auto [reg_ptr, unused] = state->GetRegister<RegType>(name);
-  return reg_ptr->CreateDestinationOperand(latency);
+  auto *reg = state->GetRegister<RegType>(name).first;
+  return reg->CreateDestinationOperand(latency);
 }
 
 template <typename RegType>
 inline DestinationOperandInterface *GetRegisterDestinationOp(
     RiscVState *state, const std::string &name, int latency,
     const std::string &op_name) {
-  auto [reg_ptr, unused] = state->GetRegister<RegType>(name);
-  return reg_ptr->CreateDestinationOperand(latency, op_name);
+  auto *reg = state->GetRegister<RegType>(name).first;
+  return reg->CreateDestinationOperand(latency, op_name);
 }
 
 template <typename RegType>
diff --git a/riscv_full_decoder/solution/riscv32i_encoding.h b/riscv_full_decoder/solution/riscv32i_encoding.h
index 6aaa07c..60e389e 100644
--- a/riscv_full_decoder/solution/riscv32i_encoding.h
+++ b/riscv_full_decoder/solution/riscv32i_encoding.h
@@ -22,7 +22,7 @@
 
 #include "absl/functional/any_invocable.h"
 #include "mpact/sim/generic/operand_interface.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
 #include "riscv_isa_decoder/solution/riscv32i_decoder.h"
 #include "riscv_isa_decoder/solution/riscv32i_enums.h"
 
diff --git a/riscv_isa_decoder/riscv32i.isa b/riscv_isa_decoder/riscv32i.isa
index 56f809f..1ecbd1f 100644
--- a/riscv_isa_decoder/riscv32i.isa
+++ b/riscv_isa_decoder/riscv32i.isa
@@ -7,6 +7,9 @@
   slots { riscv32; }
 }
 
+// First disasm fragment is 15 char wide and left justified.
+disasm widths = {-15};
+
 // The RiscV 'I' instructions.
 slot riscv32i {
   // Include file that contains the declarations of the semantic functions for
@@ -25,17 +28,17 @@
     // Add the instruction definition for the instructions in the codelab
     // at the place holders below.
     //
-    // Note Exercise 1 does not involve adding instructions.
+    // Note "Initial Build" does not involve adding instructions.
 
-    // Exercise 2, Add Register-Register ALU Instructions.
+    // Add Register-Register ALU Instructions.
 
-    // Exercise 3, Add ALU Instructions with Immediates.
+    // Add ALU Instructions with Immediates.
 
-    // Exercise 4, Add Branch and Jump-And-Link Instructions.
+    // Add Branch and Jump-And-Link Instructions.
 
-    // Exercise 5, Add Store Instructions.
+    // Add Store Instructions.
 
-    // Exercise 6, Add Load Instructions.
+    // Add Load Instructions.
 
     // End of Excercises.
     fence{: imm12 : },
diff --git a/riscv_isa_decoder/solution/riscv32i.isa b/riscv_isa_decoder/solution/riscv32i.isa
index 5ce4c9e..708a991 100644
--- a/riscv_isa_decoder/solution/riscv32i.isa
+++ b/riscv_isa_decoder/solution/riscv32i.isa
@@ -5,6 +5,8 @@
   slots { riscv32; }
 }
 
+disasm widths = {-15};
+
 // The RiscV 'I' instructions.
 slot riscv32i {
   // Include file that contains the declarations of the semantic functions for
diff --git a/riscv_semantic_functions/BUILD b/riscv_semantic_functions/BUILD
index 97c914a..73c8cb8 100644
--- a/riscv_semantic_functions/BUILD
+++ b/riscv_semantic_functions/BUILD
@@ -31,7 +31,7 @@
     ],
     copts = ["-O3"],
     deps = [
-        "@mpact-riscv//riscv:riscv_state",
+        "//other:riscv_simple_state",
         "@mpact-sim//mpact/sim/generic:arch_state",
         "@mpact-sim//mpact/sim/generic:core",
         "@mpact-sim//mpact/sim/generic:instruction",
diff --git a/riscv_semantic_functions/rv32i_instructions.cc b/riscv_semantic_functions/rv32i_instructions.cc
index 18a746f..d665404 100644
--- a/riscv_semantic_functions/rv32i_instructions.cc
+++ b/riscv_semantic_functions/rv32i_instructions.cc
@@ -20,7 +20,7 @@
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/instruction_helpers.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
 
 namespace mpact {
 namespace sim {
diff --git a/riscv_semantic_functions/solution/BUILD b/riscv_semantic_functions/solution/BUILD
index 97c914a..73c8cb8 100644
--- a/riscv_semantic_functions/solution/BUILD
+++ b/riscv_semantic_functions/solution/BUILD
@@ -31,7 +31,7 @@
     ],
     copts = ["-O3"],
     deps = [
-        "@mpact-riscv//riscv:riscv_state",
+        "//other:riscv_simple_state",
         "@mpact-sim//mpact/sim/generic:arch_state",
         "@mpact-sim//mpact/sim/generic:core",
         "@mpact-sim//mpact/sim/generic:instruction",
diff --git a/riscv_semantic_functions/solution/rv32i_instructions.cc b/riscv_semantic_functions/solution/rv32i_instructions.cc
index 3be4551..696115d 100644
--- a/riscv_semantic_functions/solution/rv32i_instructions.cc
+++ b/riscv_semantic_functions/solution/rv32i_instructions.cc
@@ -21,7 +21,7 @@
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/instruction_helpers.h"
-#include "riscv/riscv_state.h"
+#include "other/riscv_simple_state.h"
 
 namespace mpact {
 namespace sim {
