diff --git a/host-transport-extensions/pldm/common/pldm_utils.cpp b/host-transport-extensions/pldm/common/pldm_utils.cpp
new file mode 100644
index 0000000..7c15929
--- /dev/null
+++ b/host-transport-extensions/pldm/common/pldm_utils.cpp
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#include "pldm_utils.hpp"
+
+#include "dump_utils.hpp"
+#include "xyz/openbmc_project/Common/error.hpp"
+
+#include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/log.hpp>
+
+namespace phosphor
+{
+namespace dump
+{
+namespace pldm
+{
+
+using namespace phosphor::logging;
+using NotAllowed = sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
+using Reason = xyz::openbmc_project::Common::NotAllowed::REASON;
+
+int openPLDM()
+{
+    auto fd = pldm_open();
+    if (fd < 0)
+    {
+        auto e = errno;
+        log<level::ERR>("pldm_open failed", entry("ERRNO=%d", e),
+                        entry("FD=%d\n", fd));
+        elog<NotAllowed>(Reason("Required host dump action via pldm is not "
+                                "allowed due to pldm_open failed"));
+    }
+    return fd;
+}
+
+uint8_t getPLDMInstanceID(uint8_t eid)
+{
+
+    constexpr auto pldmRequester = "xyz.openbmc_project.PLDM.Requester";
+    constexpr auto pldm = "/xyz/openbmc_project/pldm";
+
+    auto bus = sdbusplus::bus::new_default();
+    auto service = phosphor::dump::getService(bus, pldm, pldmRequester);
+
+    auto method = bus.new_method_call(service.c_str(), pldm, pldmRequester,
+                                      "GetInstanceId");
+    method.append(eid);
+    auto reply = bus.call(method);
+
+    uint8_t instanceID = 0;
+    reply.read(instanceID);
+
+    return instanceID;
+}
+
+} // namespace pldm
+} // namespace dump
+} // namespace phosphor
diff --git a/host-transport-extensions/pldm/common/pldm_utils.hpp b/host-transport-extensions/pldm/common/pldm_utils.hpp
new file mode 100644
index 0000000..80a4725
--- /dev/null
+++ b/host-transport-extensions/pldm/common/pldm_utils.hpp
@@ -0,0 +1,34 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#pragma once
+
+#include <libpldm/pldm.h>
+
+namespace phosphor
+{
+namespace dump
+{
+namespace pldm
+{
+
+/**
+ * @brief Opens the PLDM file descriptor
+ *
+ * @return file descriptor on success and throw
+ *         exception (xyz::openbmc_project::Common::Error::NotAllowed) on
+ *         failures.
+ */
+int openPLDM();
+
+/**
+ * @brief Returns the PLDM instance ID to use for PLDM commands
+ *
+ * @param[in] eid - The PLDM EID
+ *
+ * @return uint8_t - The instance ID
+ **/
+uint8_t getPLDMInstanceID(uint8_t eid);
+
+} // namespace pldm
+} // namespace dump
+} // namespace phosphor
diff --git a/host-transport-extensions/pldm/default/meson.build b/host-transport-extensions/pldm/default/meson.build
new file mode 100644
index 0000000..0ddd8b5
--- /dev/null
+++ b/host-transport-extensions/pldm/default/meson.build
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: Apache-2.0
+
+phosphor_dump_manager_sources += [
+    'host-transport-extensions/pldm/default/pldm_interface.cpp'
+]
diff --git a/host-transport-extensions/pldm/default/pldm_interface.cpp b/host-transport-extensions/pldm/default/pldm_interface.cpp
new file mode 100644
index 0000000..57658af
--- /dev/null
+++ b/host-transport-extensions/pldm/default/pldm_interface.cpp
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: Apache-2.0
+
+namespace phosphor
+{
+namespace dump
+{
+namespace host
+{
+/**
+ * @brief Initiate offload of the dump with provided dump source ID
+ *
+ * @param[in] id - The Dump Source ID.
+ *
+ */
+void requestOffload(uint32_t)
+{
+    throw std::runtime_error("PLDM: Hostdump offload method not specified");
+}
+} // namespace host
+} // namespace dump
+} // namespace phosphor
diff --git a/host-transport-extensions/pldm/meson.build b/host-transport-extensions/pldm/meson.build
index d9cedd9..fc4c143 100644
--- a/host-transport-extensions/pldm/meson.build
+++ b/host-transport-extensions/pldm/meson.build
@@ -1,7 +1,13 @@
 # SPDX-License-Identifier: Apache-2.0
 
 phosphor_dump_manager_sources += [
-        'host-transport-extensions/pldm/pldm_interface.cpp'
+        'host-transport-extensions/pldm/common/pldm_utils.cpp'
     ]
 
 phosphor_dump_manager_dependency += [ dependency('libpldm') ]
+
+if get_option('openpower-dumps-extension').enabled()
+    subdir('oem/ibm')
+else
+    subdir('default')
+endif
diff --git a/host-transport-extensions/pldm/oem/ibm/meson.build b/host-transport-extensions/pldm/oem/ibm/meson.build
new file mode 100644
index 0000000..0f79a17
--- /dev/null
+++ b/host-transport-extensions/pldm/oem/ibm/meson.build
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+
+phosphor_dump_manager_sources += [
+    'host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp'
+]
+
+phosphor_dump_manager_incdir += include_directories('../../common')
diff --git a/host-transport-extensions/pldm/pldm_interface.cpp b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
similarity index 79%
rename from host-transport-extensions/pldm/pldm_interface.cpp
rename to host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
index dfff103..be78718 100644
--- a/host-transport-extensions/pldm/pldm_interface.cpp
+++ b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.cpp
@@ -13,9 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "pldm_interface.hpp"
+#include "pldm_oem_cmds.hpp"
 
 #include "dump_utils.hpp"
+#include "pldm_utils.hpp"
 #include "xyz/openbmc_project/Common/error.hpp"
 
 #include <libpldm/base.h>
@@ -92,19 +93,6 @@
     return eid;
 }
 
-int open()
-{
-    auto fd = pldm_open();
-    if (fd < 0)
-    {
-        auto e = errno;
-        log<level::ERR>("pldm_open failed", entry("ERRNO=%d", e),
-                        entry("FD=%d\n", fd));
-        elog<InternalFailure>();
-    }
-    return fd;
-}
-
 void requestOffload(uint32_t id)
 {
     uint16_t effecterId = 0x05; // TODO PhyP temporary Hardcoded value.
@@ -136,7 +124,7 @@
     uint8_t* responseMsg = nullptr;
     size_t responseMsgSize{};
 
-    auto fd = open();
+    auto fd = openPLDM();
 
     rc = pldm_send_recv(eid, fd, requestMsg.data(), requestMsg.size(),
                         &responseMsg, &responseMsgSize);
@@ -156,25 +144,6 @@
     closeFD(fd);
 }
 
-uint8_t getPLDMInstanceID(uint8_t eid)
-{
-
-    constexpr auto pldmRequester = "xyz.openbmc_project.PLDM.Requester";
-    constexpr auto pldm = "/xyz/openbmc_project/pldm";
-
-    auto bus = sdbusplus::bus::new_default();
-    auto service = phosphor::dump::getService(bus, pldm, pldmRequester);
-
-    auto method = bus.new_method_call(service.c_str(), pldm, pldmRequester,
-                                      "GetInstanceId");
-    method.append(eid);
-    auto reply = bus.call(method);
-
-    uint8_t instanceID = 0;
-    reply.read(instanceID);
-
-    return instanceID;
-}
 } // namespace pldm
 } // namespace dump
 } // namespace phosphor
diff --git a/host-transport-extensions/pldm/pldm_interface.hpp b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp
similarity index 72%
rename from host-transport-extensions/pldm/pldm_interface.hpp
rename to host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp
index fffa682..7e652f5 100644
--- a/host-transport-extensions/pldm/pldm_interface.hpp
+++ b/host-transport-extensions/pldm/oem/ibm/pldm_oem_cmds.hpp
@@ -6,6 +6,17 @@
 {
 namespace dump
 {
+namespace host
+{
+/**
+ * @brief Initiate offload of the dump with provided id
+ *
+ * @param[in] id - The Dump Source ID.
+ *
+ */
+void requestOffload(uint32_t id);
+} // namespace host
+
 namespace pldm
 {
 
@@ -33,24 +44,10 @@
 mctp_eid_t readEID();
 
 /**
- * @brief Opens the PLDM file descriptor
- */
-int open();
-
-/**
  * @brief Closes the PLDM file descriptor
  */
 void closeFD(int fd);
 
-/**
- * @brief Returns the PLDM instance ID to use for PLDM commands
- *
- * @param[in] eid - The PLDM EID
- *
- * @return uint8_t - The instance ID
- **/
-uint8_t getPLDMInstanceID(uint8_t eid);
-
 } // namespace pldm
 } // namespace dump
 } // namespace phosphor
