diff --git a/host-bmc/dbus_to_event_handler.cpp b/host-bmc/dbus_to_event_handler.cpp
index 3eef16a..6149050 100644
--- a/host-bmc/dbus_to_event_handler.cpp
+++ b/host-bmc/dbus_to_event_handler.cpp
@@ -31,7 +31,7 @@
     std::vector<uint8_t> requestMsg(
         sizeof(pldm_msg_hdr) + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
         eventDataVec.size());
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
 
     auto rc = encode_platform_event_message_req(
         instanceId, 1 /*formatVersion*/, TERMINUS_ID /*tId*/, eventType,
@@ -97,8 +97,7 @@
     {
         std::vector<uint8_t> sensorEventDataVec{};
         sensorEventDataVec.resize(sensorEventSize);
-        auto eventData = reinterpret_cast<struct pldm_sensor_event_data*>(
-            sensorEventDataVec.data());
+        auto eventData = new (sensorEventDataVec.data()) pldm_sensor_event_data;
         eventData->sensor_id = sensorId;
         eventData->sensor_event_class_type = PLDM_STATE_SENSOR_STATE;
         eventData->event_class[0] = static_cast<uint8_t>(offset);
@@ -150,9 +149,8 @@
 
                     if (findValue)
                     {
-                        auto eventData =
-                            reinterpret_cast<struct pldm_sensor_event_data*>(
-                                sensorEventDataVec.data());
+                        auto eventData = new (sensorEventDataVec.data())
+                            pldm_sensor_event_data;
                         eventData->event_class[1] = itr.first;
                         if (sensorCacheMap.contains(sensorId) &&
                             sensorCacheMap[sensorId][offset] !=
@@ -206,7 +204,7 @@
         auto pdrRecord = sensorPDRs.getFirstRecord(pdrEntry);
         while (pdrRecord)
         {
-            pdr = reinterpret_cast<pldm_state_sensor_pdr*>(pdrEntry.data);
+            pdr = new (pdrEntry.data) pldm_state_sensor_pdr;
             SensorId sensorId = LE16TOH(pdr->sensor_id);
             if (sensorHandlers.contains(pdrType))
             {
diff --git a/host-bmc/dbus_to_terminus_effecters.cpp b/host-bmc/dbus_to_terminus_effecters.cpp
index 54eb71f..5c2e0ee 100644
--- a/host-bmc/dbus_to_terminus_effecters.cpp
+++ b/host-bmc/dbus_to_terminus_effecters.cpp
@@ -484,7 +484,7 @@
     size_t payload_length = PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES - 1 +
                             getEffecterDataSize(dataSize);
     requestMsg.resize(sizeof(pldm_msg_hdr) + payload_length);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     switch (dataSize)
     {
         case PLDM_EFFECTER_DATA_SIZE_UINT8:
@@ -605,7 +605,7 @@
         sizeof(pldm_msg_hdr) + sizeof(effecterId) + sizeof(compEffCnt) +
             sizeof(set_effecter_state_field) * compEffCnt,
         0);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     auto rc = encode_set_state_effecter_states_req(
         instanceId, effecterId, compEffCnt, stateField.data(), request);
 
diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index 8da01a7..052e7e2 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -172,7 +172,7 @@
 
     std::vector<uint8_t> requestMsg(
         sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     uint32_t recordHandle{};
     if (!nextRecordHandle && (!modifiedPDRRecordHandles.empty()) &&
         isHostPdrModified)
@@ -234,8 +234,8 @@
     size_t numEntities{};
     pldm_entity* entities = nullptr;
     bool merged = false;
-    auto entityPdr = reinterpret_cast<pldm_pdr_entity_association*>(
-        const_cast<uint8_t*>(pdr.data()) + sizeof(pldm_pdr_hdr));
+    auto entityPdr = new (const_cast<uint8_t*>(pdr.data()) +
+                          sizeof(pldm_pdr_hdr)) pldm_pdr_entity_association;
 
     if (oemPlatformHandler &&
         oemPlatformHandler->checkRecordHandleInRange(record_handle))
@@ -372,9 +372,8 @@
                      changeEntries[0].size() * sizeof(uint32_t);
     std::vector<uint8_t> eventDataVec{};
     eventDataVec.resize(maxSize);
-    auto eventData =
-        reinterpret_cast<struct pldm_pdr_repository_chg_event_data*>(
-            eventDataVec.data());
+    auto eventData = new (eventDataVec.data())
+        pldm_pdr_repository_chg_event_data;
     size_t actualSize{};
     auto firstEntry = changeEntries[0].data();
     auto rc = encode_pldm_pdr_repository_chg_event_data(
@@ -391,7 +390,7 @@
     std::vector<uint8_t> requestMsg(
         sizeof(pldm_msg_hdr) + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
         actualSize);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     rc = encode_platform_event_message_req(
         instanceId, 1, TERMINUS_ID, PLDM_PDR_REPOSITORY_CHG_EVENT,
         eventDataVec.data(), actualSize, request,
@@ -531,7 +530,7 @@
                 rh = nextRecordHandle - 1;
             }
 
-            auto pdrHdr = reinterpret_cast<pldm_pdr_hdr*>(pdr.data());
+            auto pdrHdr = new (pdr.data()) pldm_pdr_hdr;
             if (!rh)
             {
                 rh = pdrHdr->record_handle;
@@ -717,7 +716,7 @@
     auto instanceId = instanceIdDb.next(mctp_eid);
     std::vector<uint8_t> requestMsg(
         sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     auto rc = encode_get_version_req(instanceId, 0, PLDM_GET_FIRSTPART,
                                      PLDM_BASE, request);
     if (rc != PLDM_SUCCESS)
@@ -790,7 +789,7 @@
                 std::vector<uint8_t> requestMsg(
                     sizeof(pldm_msg_hdr) +
                     PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES);
-                auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+                auto request = new (requestMsg.data()) pldm_msg;
                 auto rc = encode_get_state_sensor_readings_req(
                     instanceId, sensorId, sensorRearm, 0, request);
 
@@ -933,7 +932,7 @@
         sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES);
 
     // GetFruRecordTableMetadata
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     auto rc = encode_get_fru_record_table_metadata_req(
         instanceId, request, requestMsg.size() - sizeof(pldm_msg_hdr));
     if (rc != PLDM_SUCCESS)
@@ -1011,7 +1010,7 @@
         sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES);
 
     // send the getFruRecordTable command
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     auto rc = encode_get_fru_record_table_req(
         instanceId, 0, PLDM_GET_FIRSTPART, request,
         requestMsg.size() - sizeof(pldm_msg_hdr));
