diff --git a/apps/basic_demos/app_single_cam/app_single_cam_common.h b/apps/basic_demos/app_single_cam/app_single_cam_common.h
index ec9ecb4..5b161ff 100755
--- a/apps/basic_demos/app_single_cam/app_single_cam_common.h
+++ b/apps/basic_demos/app_single_cam/app_single_cam_common.h
@@ -65,6 +65,7 @@
 #include <TI/j7_imaging_aewb.h>
 #include <TI/hwa_vpac_ldc.h>
 #include <TI/video_io_display.h>
+#include <TI/video_io_display_m2m.h>
 #include <tivx_utils_graph_perf.h>
 #include <stdio.h>
 #include <stdint.h>
@@ -122,7 +123,9 @@ typedef struct {
     vx_node  node_viss;
     vx_node  node_aewb;
     tivx_display_params_t display_params;
+    tivx_display_m2m_params_t display_m2m_params;
     vx_node displayNode;
+    vx_node displaym2mNode;
     #ifdef VPAC3
     /* Display params and node for MV */
     tivx_display_params_t display_params_MV;
@@ -148,6 +151,7 @@ typedef struct {
     vx_user_data_object dcc_param_2a;
     vx_user_data_object dcc_param_ldc;
     vx_user_data_object display_param_obj;
+    vx_user_data_object display_m2m_param_obj;
     #ifdef VPAC3
     /* Display params object for MV */
     vx_user_data_object display_param_MV_obj;
@@ -155,6 +159,8 @@ typedef struct {
 
     vx_object_array cap_frames[MAX_NUM_BUF];
     vx_image display_image;
+    vx_image display_m2m_image;
+    vx_image display_m2m_output_image;
     #ifdef VPAC3
     /* Display image for MV */
     vx_image display_image_MV;
diff --git a/apps/basic_demos/app_single_cam/app_single_cam_main.c b/apps/basic_demos/app_single_cam/app_single_cam_main.c
index 8c3e4cb..d036e63 100755
--- a/apps/basic_demos/app_single_cam/app_single_cam_main.c
+++ b/apps/basic_demos/app_single_cam/app_single_cam_main.c
@@ -361,6 +361,7 @@ vx_status app_create_graph(AppObj *obj)
     obj->s8_b8_c4 = NULL;
     obj->histogram = NULL;
     obj->h3a_aew_af = NULL;
+    obj->display_m2m_image = NULL;
 #ifdef VPAC3
     obj->display_image = NULL;
     obj->display_image_MV = NULL;
@@ -728,11 +729,11 @@ Sensor driver does not support metadata yet.
         }
 #endif
             obj->display_params.outWidth = scaler_out_w;
-            obj->display_image = obj->scaler_out_img;
+            obj->display_m2m_image = obj->scaler_out_img;
         }else /*No resize needed*/
         {
             obj->scaler_enable = vx_false_e;
-            obj->display_image = obj->ldc_out;
+            obj->display_m2m_image = obj->ldc_out;
 
             /* MSC can only downsize. If ldc resolution is lower,
                display resolution must be set accordingly
@@ -788,11 +789,11 @@ Sensor driver does not support metadata yet.
             }
 #endif
             obj->display_params.outWidth = scaler_out_w;
-            obj->display_image = obj->scaler_out_img;
+            obj->display_m2m_image = obj->scaler_out_img;
         }
         else
         {
-            obj->display_image = ldc_in_image;
+            obj->display_m2m_image = ldc_in_image;
         }
     }
 #ifdef VPAC3
@@ -803,6 +804,23 @@ Sensor driver does not support metadata yet.
             }
 #endif
 
+        /* DSS M2M initialization */
+    tivx_display_m2m_params_init(&obj->display_m2m_params);
+    obj->display_m2m_params.instId     = 0;
+    obj->display_m2m_params.numPipe    = 1;
+    obj->display_m2m_params.pipeId[0U] = 3;
+    obj->display_m2m_params.overlayId  = 3;
+
+    obj->display_m2m_output_image = vxCreateImage(obj->context, obj->display_params.outWidth, obj->display_params.outHeight, TIVX_DF_IMAGE_RGB565);
+    obj->display_m2m_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_m2m_params_t", sizeof(tivx_display_m2m_params_t), &obj->display_m2m_params);
+    obj->displaym2mNode = tivxDisplayM2MNode(obj->graph, obj->display_m2m_param_obj, obj->display_m2m_image, obj->display_m2m_output_image);
+    if(status == VX_SUCCESS)
+    {
+        status = vxSetNodeTarget(obj->displaym2mNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY_M2M1);
+        obj->display_image = obj->display_m2m_output_image;
+    }
+
+
     if(NULL == obj->display_image)
     {
         printf("Error : Display input is uninitialized \n");
@@ -975,6 +993,12 @@ vx_status app_delete_graph(AppObj *obj)
         APP_PRINTF("releasing displayNode\n");
         status |= vxReleaseNode(&obj->displayNode);
     }
+
+    if(NULL != obj->displaym2mNode)
+    {
+        APP_PRINTF("releasing displaym2mNode\n");
+        status |= vxReleaseNode(&obj->displaym2mNode);
+    }
 #ifdef VPAC3
     /* Releasing MV display node */
     if (obj->vpac3_dual_fcp_enable == 1U)
@@ -1045,6 +1069,12 @@ vx_status app_delete_graph(AppObj *obj)
         status |= vxReleaseImage(&obj->uv8_g8_c3);
     }
 
+    if(NULL != obj->display_m2m_output_image)
+    {
+        APP_PRINTF("releasing display_m2m_output_image\n");
+        status |= vxReleaseImage(&obj->display_m2m_output_image);
+    }
+
     if(NULL != obj->histogram)
     {
         APP_PRINTF("releasing histogram\n");
@@ -1087,6 +1117,12 @@ vx_status app_delete_graph(AppObj *obj)
         APP_PRINTF("releasing Display Param Data Object\n");
         status |= vxReleaseUserDataObject(&obj->display_param_obj);
     }
+
+    if(NULL != obj->display_m2m_param_obj)
+    {
+        APP_PRINTF("releasing Display Param Data Object\n");
+        status |= vxReleaseUserDataObject(&obj->display_m2m_param_obj);
+    }
 #ifdef VPAC3
     /* Releasing MV params object */
     if (obj->vpac3_dual_fcp_enable == 1U)
