diff --git a/Makefile.am b/Makefile.am
index 5862009..41daebb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -17,6 +17,7 @@
 lib_LTLIBRARIES = libwritefrudata.la
 libwritefrudata_la_SOURCES = frup.cpp \
 	fru-gen.cpp \
+	fru_area.cpp \
 	writefrudata.cpp \
 	extra-properties-gen.cpp
 libwritefrudata_la_LDFLAGS = $(SYSTEMD_LIBS) \
diff --git a/fru_area.cpp b/fru_area.cpp
new file mode 100644
index 0000000..1f90064
--- /dev/null
+++ b/fru_area.cpp
@@ -0,0 +1,83 @@
+#include "fru_area.hpp"
+
+#include "frup.hpp"
+
+#include <cstdint>
+#include <cstring>
+#include <phosphor-logging/log.hpp>
+
+using namespace phosphor::logging;
+
+//----------------------------------------------------------------
+// Constructor
+//----------------------------------------------------------------
+IPMIFruArea::IPMIFruArea(const uint8_t fruid, const ipmi_fru_area_type type,
+                         bool bmc_fru)
+{
+    iv_fruid = fruid;
+    iv_type = type;
+    iv_bmc_fru = bmc_fru;
+    iv_valid = false;
+    iv_data = NULL;
+    iv_present = false;
+
+    if (iv_type == IPMI_FRU_AREA_INTERNAL_USE)
+    {
+        iv_name = "INTERNAL_";
+    }
+    else if (iv_type == IPMI_FRU_AREA_CHASSIS_INFO)
+    {
+        iv_name = "CHASSIS_";
+    }
+    else if (iv_type == IPMI_FRU_AREA_BOARD_INFO)
+    {
+        iv_name = "BOARD_";
+    }
+    else if (iv_type == IPMI_FRU_AREA_PRODUCT_INFO)
+    {
+        iv_name = "PRODUCT_";
+    }
+    else if (iv_type == IPMI_FRU_AREA_MULTI_RECORD)
+    {
+        iv_name = "MULTI_";
+    }
+    else
+    {
+        iv_name = IPMI_FRU_AREA_TYPE_MAX;
+        log<level::ERR>("Invalid Area", entry("TYPE=%d", iv_type));
+    }
+}
+
+//-----------------------------------------------------
+// For a FRU area type, accepts the data and updates
+// area specific data.
+//-----------------------------------------------------
+void IPMIFruArea::set_data(const uint8_t* data, const size_t len)
+{
+    iv_len = len;
+    iv_data = new uint8_t[len];
+    std::memcpy(iv_data, data, len);
+}
+
+//-----------------------------------------------------
+// Sets the dbus parameters
+//-----------------------------------------------------
+void IPMIFruArea::update_dbus_paths(const char* bus_name, const char* obj_path,
+                                    const char* intf_name)
+{
+    iv_bus_name = bus_name;
+    iv_obj_path = obj_path;
+    iv_intf_name = intf_name;
+}
+
+//-------------------
+// Destructor
+//-------------------
+IPMIFruArea::~IPMIFruArea()
+{
+    if (iv_data != NULL)
+    {
+        delete[] iv_data;
+        iv_data = NULL;
+    }
+}
diff --git a/writefrudata.cpp b/writefrudata.cpp
index 1cbf210..978f2b1 100644
--- a/writefrudata.cpp
+++ b/writefrudata.cpp
@@ -276,80 +276,6 @@
 
 } // namespace
 
-//----------------------------------------------------------------
-// Constructor
-//----------------------------------------------------------------
-IPMIFruArea::IPMIFruArea(const uint8_t fruid, const ipmi_fru_area_type type,
-                         bool bmc_fru)
-{
-    iv_fruid = fruid;
-    iv_type = type;
-    iv_bmc_fru = bmc_fru;
-    iv_valid = false;
-    iv_data = NULL;
-    iv_present = false;
-
-    if (iv_type == IPMI_FRU_AREA_INTERNAL_USE)
-    {
-        iv_name = "INTERNAL_";
-    }
-    else if (iv_type == IPMI_FRU_AREA_CHASSIS_INFO)
-    {
-        iv_name = "CHASSIS_";
-    }
-    else if (iv_type == IPMI_FRU_AREA_BOARD_INFO)
-    {
-        iv_name = "BOARD_";
-    }
-    else if (iv_type == IPMI_FRU_AREA_PRODUCT_INFO)
-    {
-        iv_name = "PRODUCT_";
-    }
-    else if (iv_type == IPMI_FRU_AREA_MULTI_RECORD)
-    {
-        iv_name = "MULTI_";
-    }
-    else
-    {
-        iv_name = IPMI_FRU_AREA_TYPE_MAX;
-        log<level::ERR>("Invalid Area", entry("TYPE=%d", iv_type));
-    }
-}
-
-//-----------------------------------------------------
-// For a FRU area type, accepts the data and updates
-// area specific data.
-//-----------------------------------------------------
-void IPMIFruArea::set_data(const uint8_t* data, const size_t len)
-{
-    iv_len = len;
-    iv_data = new uint8_t[len];
-    std::memcpy(iv_data, data, len);
-}
-
-//-----------------------------------------------------
-// Sets the dbus parameters
-//-----------------------------------------------------
-void IPMIFruArea::update_dbus_paths(const char* bus_name, const char* obj_path,
-                                    const char* intf_name)
-{
-    iv_bus_name = bus_name;
-    iv_obj_path = obj_path;
-    iv_intf_name = intf_name;
-}
-
-//-------------------
-// Destructor
-//-------------------
-IPMIFruArea::~IPMIFruArea()
-{
-    if (iv_data != NULL)
-    {
-        delete[] iv_data;
-        iv_data = NULL;
-    }
-}
-
 //------------------------------------------------
 // Takes the pointer to stream of bytes and length
 // and returns the 8 bit checksum
