diff --git a/surround_view/service-impl/SurroundView3dSession.cpp b/surround_view/service-impl/SurroundView3dSession.cpp
index f2d7c2e..2c7861d 100644
--- a/surround_view/service-impl/SurroundView3dSession.cpp
+++ b/surround_view/service-impl/SurroundView3dSession.cpp
@@ -460,7 +460,10 @@
     return {};
 }
 
-bool VerifyOverlayData(const OverlaysData& overlaysData) {
+bool VerifyAndGetOverlays(const OverlaysData& overlaysData, std::vector<Overlay>* svCoreOverlays) {
+    // Clear the overlays.
+    svCoreOverlays->clear();
+
     // Check size of shared memory matches overlaysMemoryDesc.
     const int kVertexSize = 16;
     const int kIdSize = 2;
@@ -468,8 +471,8 @@
     for (auto& overlayMemDesc : overlaysData.overlaysMemoryDesc) {
         memDescSize += kIdSize + kVertexSize * overlayMemDesc.verticesCount;
     }
-    if (memDescSize != overlaysData.overlaysMemory.size()) {
-        LOG(ERROR) << "shared memory and overlaysMemoryDesc size mismatch.";
+    if (overlaysData.overlaysMemory.size() < memDescSize) {
+        LOG(ERROR) << "Allocated shared memory size is less than overlaysMemoryDesc size.";
         return false;
     }
 
@@ -494,12 +497,14 @@
 
         if (overlayIdSet.find(overlayMemDesc.id) != overlayIdSet.end()) {
             LOG(ERROR) << "Duplicate id within memory descriptor.";
+            svCoreOverlays->clear();
             return false;
         }
         overlayIdSet.insert(overlayMemDesc.id);
 
         if(overlayMemDesc.verticesCount < 3) {
             LOG(ERROR) << "Less than 3 vertices.";
+            svCoreOverlays->clear();
             return false;
         }
 
@@ -507,34 +512,43 @@
                 overlayMemDesc.verticesCount % 3 != 0) {
             LOG(ERROR) << "Triangles primitive does not have vertices "
                        << "multiple of 3.";
+            svCoreOverlays->clear();
             return false;
         }
 
         const uint16_t overlayId = *((uint16_t*)(pData + idOffset));
 
         if (overlayId != overlayMemDesc.id) {
-            LOG(ERROR) << "Overlay id mismatch "
-                       << overlayId
-                       << ", "
-                       << overlayMemDesc.id;
+            LOG(ERROR) << "Overlay id mismatch " << overlayId << ", " << overlayMemDesc.id;
+            svCoreOverlays->clear();
             return false;
         }
 
+        // Copy over shared memory data to sv core overlays.
+        Overlay svCoreOverlay;
+        svCoreOverlay.id = overlayMemDesc.id;
+        svCoreOverlay.vertices.resize(overlayMemDesc.verticesCount);
+        uint8_t* verticesDataPtr = pData + idOffset + kIdSize;
+        memcpy(svCoreOverlay.vertices.data(), verticesDataPtr,
+                kVertexSize * overlayMemDesc.verticesCount);
+        svCoreOverlays->push_back(svCoreOverlay);
+
         idOffset += kIdSize + (kVertexSize * overlayMemDesc.verticesCount);
     }
 
     return true;
 }
 
-// TODO(b/150412555): the overlay related methods are incomplete.
-Return<SvResult>  SurroundView3dSession::updateOverlays(
-        const OverlaysData& overlaysData) {
+Return<SvResult>  SurroundView3dSession::updateOverlays(const OverlaysData& overlaysData) {
+    LOG(DEBUG) << __FUNCTION__;
 
-    if(!VerifyOverlayData(overlaysData)) {
-        LOG(ERROR) << "VerifyOverlayData failed.";
+    scoped_lock <mutex> lock(mAccessLock);
+    if(!VerifyAndGetOverlays(overlaysData, &mOverlays)) {
+        LOG(ERROR) << "VerifyAndGetOverlays failed.";
         return SvResult::INVALID_ARG;
     }
 
+    mOverlayIsUpdated = true;
     return SvResult::OK;
 }
 
@@ -566,8 +580,9 @@
         Point3dFloat point3d = {false, 0.0, 0.0, 0.0};
 
         // Verify if camera point is within the camera resolution bounds.
-        point3d.isValid = (cameraPoint.x >= 0 && cameraPoint.x < mConfig.width &&
-                           cameraPoint.y >= 0 && cameraPoint.y < mConfig.height);
+        const Size2dInteger cameraSize = mCameraParams[cameraIndex].size;
+        point3d.isValid = (cameraPoint.x >= 0 && cameraPoint.x < cameraSize.width &&
+                           cameraPoint.y >= 0 && cameraPoint.y < cameraSize.height);
         if (!point3d.isValid) {
             LOG(WARNING) << "Camera point (" << cameraPoint.x << ", " << cameraPoint.y
                          << ") is out of camera resolution bounds.";
@@ -650,6 +665,17 @@
         }
     }
 
+    // Set 3d overlays.
+    {
+        scoped_lock<mutex> lock(mAccessLock);
+        if (mOverlayIsUpdated) {
+            if (!mSurroundView->Set3dOverlay(mOverlays)) {
+                LOG(ERROR) << "Set 3d overlays failed.";
+            }
+            mOverlayIsUpdated = false;
+        }
+    }
+
     // TODO(b/150412555): do not use the setViews for frames generation
     // since there is a discrepancy between the HIDL APIs and core lib APIs.
     array<array<float, 4>, 4> matrix;
diff --git a/surround_view/service-impl/SurroundView3dSession.h b/surround_view/service-impl/SurroundView3dSession.h
index 2c3626a..6c2b8ce 100644
--- a/surround_view/service-impl/SurroundView3dSession.h
+++ b/surround_view/service-impl/SurroundView3dSession.h
@@ -180,6 +180,9 @@
     AnimationModule* mAnimationModule;
     IOModuleConfig* mIOModuleConfig;
 
+    std::vector<Overlay> mOverlays GUARDED_BY(mAccessLock);
+    bool mOverlayIsUpdated GUARDED_BY(mAccessLock) = false;
+
     std::vector<VehiclePropValue> mPropertyValues;
 };
 
