diff --git a/include/dimm.hpp b/include/dimm.hpp
index e848f42..851ef82 100644
--- a/include/dimm.hpp
+++ b/include/dimm.hpp
@@ -42,6 +42,9 @@
 using MemoryTechType =
     sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::MemoryTech;
 
+using FormFactor =
+    sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::FormFactor;
+
 using Json = nlohmann::json;
 
 class Dimm :
@@ -127,6 +130,7 @@
     uint16_t memoryConfiguredSpeedInMhz(uint16_t value) override;
     bool functional(bool value) override;
     EccType ecc(EccType value) override;
+    FormFactor formFactor(FormFactor value) override;
     Json parseConfigFile();
 
   private:
@@ -151,6 +155,7 @@
     void dimmPartNum(const uint8_t positionNum, const uint8_t structLen,
                      uint8_t* dataIn);
     void updateEccType(uint16_t exPhyArrayHandle);
+    void updateFormFactor(const uint8_t formFactorKey);
 };
 
 struct MemoryInfo
@@ -264,6 +269,9 @@
     uint8_t channel;
 };
 
+const std::map<uint8_t, FormFactor> dimmFormFactorMap = {
+    {0x10, FormFactor::Die}};
+
 } // namespace smbios
 
 } // namespace phosphor
diff --git a/src/dimm.cpp b/src/dimm.cpp
index ce63f4f..f6228c9 100644
--- a/src/dimm.cpp
+++ b/src/dimm.cpp
@@ -99,6 +99,7 @@
     dimmType(memoryInfo->memoryType);
     dimmTypeDetail(memoryInfo->typeDetail);
     maxMemorySpeedInMhz(memoryInfo->speed);
+    updateFormFactor(memoryInfo->formFactor);
     dimmManufacturer(memoryInfo->manufacturer, memoryInfo->length, dataIn);
     dimmSerialNum(memoryInfo->serialNum, memoryInfo->length, dataIn);
     dimmPartNum(memoryInfo->partNum, memoryInfo->length, dataIn);
@@ -465,6 +466,22 @@
         OperationalStatus::functional(value);
 }
 
+void Dimm::updateFormFactor(const uint8_t formFactorKey)
+{
+    std::map<uint8_t, FormFactor>::const_iterator it =
+        dimmFormFactorMap.find(formFactorKey);
+    if (it != dimmFormFactorMap.end())
+    {
+        formFactor(it->second);
+    }
+}
+
+FormFactor Dimm::formFactor(FormFactor value)
+{
+    return sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::
+        formFactor(value);
+}
+
 Json Dimm::parseConfigFile()
 {
     std::ifstream memoryLocationFile(filename);
