diff --git a/lpc_aspeed.cpp b/lpc_aspeed.cpp
index 25f027a..dabea8a 100644
--- a/lpc_aspeed.cpp
+++ b/lpc_aspeed.cpp
@@ -34,12 +34,13 @@
 const std::string LpcMapperAspeed::lpcControlPath = "/dev/aspeed-lpc-ctrl";
 
 std::unique_ptr<HardwareMapperInterface>
-    LpcMapperAspeed::createAspeedMapper(std::size_t regionSize)
+    LpcMapperAspeed::createAspeedMapper(std::uint32_t regionAddress,
+                                        std::size_t regionSize)
 {
     /* NOTE: considered using a joint factory to create one or the other, for
      * now, separate factories.
      */
-    return std::make_unique<LpcMapperAspeed>(regionSize);
+    return std::make_unique<LpcMapperAspeed>(regionAddress, regionSize);
 }
 
 std::pair<std::uint32_t, std::uint32_t>
diff --git a/lpc_aspeed.hpp b/lpc_aspeed.hpp
index d6a35af..53fe39b 100644
--- a/lpc_aspeed.hpp
+++ b/lpc_aspeed.hpp
@@ -16,12 +16,12 @@
 {
   public:
     static std::unique_ptr<HardwareMapperInterface>
-        createAspeedMapper(std::size_t regionSize);
+        createAspeedMapper(std::uint32_t regionAddress, std::size_t regionSize);
 
-    LpcMapperAspeed(std::size_t regionSize,
+    LpcMapperAspeed(std::uint32_t regionAddress, std::size_t regionSize,
                     const internal::Sys* sys = &internal::sys_impl) :
-        regionSize(regionSize),
-        sys(sys){};
+        regionAddress(regionAddress),
+        regionSize(regionSize), sys(sys){};
 
     std::pair<std::uint32_t, std::uint32_t>
         mapWindow(std::uint32_t address, std::uint32_t length) override;
@@ -30,6 +30,7 @@
 
   private:
     static const std::string lpcControlPath;
+    std::uint32_t regionAddress;
     std::size_t regionSize;
     const internal::Sys* sys;
 };
diff --git a/lpc_handler.hpp b/lpc_handler.hpp
index 3090c68..95917c6 100644
--- a/lpc_handler.hpp
+++ b/lpc_handler.hpp
@@ -29,13 +29,9 @@
     /**
      * Create an LpcDataHandler.
      *
-     * @param[in] regionAddress - BMC address to point the map for the LPC
-     * memory region.
      * @param[in] mapper - pointer to a mapper implementation to use.
      */
-    LpcDataHandler(std::uint32_t regionAddress,
-                   std::unique_ptr<HardwareMapperInterface> mapper) :
-        regionAddress(regionAddress),
+    explicit LpcDataHandler(std::unique_ptr<HardwareMapperInterface> mapper) :
         mapper(std::move(mapper)), initialized(false)
     {
     }
@@ -53,7 +49,6 @@
         return value;
     }
 
-    std::uint32_t regionAddress;
     std::unique_ptr<HardwareMapperInterface> mapper;
     bool initialized;
 };
diff --git a/lpc_nuvoton.cpp b/lpc_nuvoton.cpp
index 80c3245..83b0160 100644
--- a/lpc_nuvoton.cpp
+++ b/lpc_nuvoton.cpp
@@ -34,10 +34,11 @@
 using std::uint32_t;
 using std::uint8_t;
 
-std::unique_ptr<HardwareMapperInterface> LpcMapperNuvoton::createNuvotonMapper()
+std::unique_ptr<HardwareMapperInterface>
+    LpcMapperNuvoton::createNuvotonMapper(std::uint32_t regionAddress)
 {
     /* NOTE: Considered making one factory for both types. */
-    return std::make_unique<LpcMapperNuvoton>();
+    return std::make_unique<LpcMapperNuvoton>(regionAddress);
 }
 
 /*
diff --git a/lpc_nuvoton.hpp b/lpc_nuvoton.hpp
index a4b62df..bf53e29 100644
--- a/lpc_nuvoton.hpp
+++ b/lpc_nuvoton.hpp
@@ -14,15 +14,19 @@
 class LpcMapperNuvoton : public HardwareMapperInterface
 {
   public:
-    static std::unique_ptr<HardwareMapperInterface> createNuvotonMapper();
+    static std::unique_ptr<HardwareMapperInterface>
+        createNuvotonMapper(std::uint32_t regionAddress);
 
     /**
      * Create an LpcMapper for Nuvoton.
      *
+     * @param[in] regionAddress - where to map the window into BMC memory.
      * @param[in] a sys call interface pointer.
      * @todo Needs reserved memory region's physical address and size.
      */
-    explicit LpcMapperNuvoton(const internal::Sys* sys = &internal::sys_impl) :
+    LpcMapperNuvoton(std::uint32_t regionAddress,
+                     const internal::Sys* sys = &internal::sys_impl) :
+        regionAddress(regionAddress),
         sys(sys){};
 
     std::pair<std::uint32_t, std::uint32_t>
@@ -31,6 +35,7 @@
     std::vector<std::uint8_t> copyFrom(std::uint32_t length) override;
 
   private:
+    std::uint32_t regionAddress;
     const internal::Sys* sys;
 };
 
diff --git a/main.cpp b/main.cpp
index 34c6212..e2a3cd2 100644
--- a/main.cpp
+++ b/main.cpp
@@ -42,12 +42,11 @@
 
 #ifdef ENABLE_LPC_BRIDGE
 #if defined(ASPEED_LPC)
-LpcDataHandler
-    lpcDataHandler(MAPPED_ADDRESS,
-                   LpcMapperAspeed::createAspeedMapper(memoryRegionSize));
+LpcDataHandler lpcDataHandler(
+    LpcMapperAspeed::createAspeedMapper(MAPPED_ADDRESS, memoryRegionSize));
 #elif defined(NUVOTON_LPC)
-LpcDataHandler lpcDataHandler(MAPPED_ADDRESS,
-                              LpcMapperNuvoton::createNuvotonMapper());
+LpcDataHandler
+    lpcDataHandler(LpcMapperNuvoton::createNuvotonMapper(MAPPED_ADDRESS));
 #else
 #error "You must specify a hardware implementation."
 #endif
