diff --git a/boot/cypress/MCUBootApp/main.c b/boot/cypress/MCUBootApp/main.c
index 6fcc81f..eb0ee11 100644
--- a/boot/cypress/MCUBootApp/main.c
+++ b/boot/cypress/MCUBootApp/main.c
@@ -41,6 +41,55 @@
 #define CYBSP_UART_HW SCB5
 #define CYBSP_UART_IRQ scb_5_interrupt_IRQn
 
+#ifdef CY_BOOT_USE_EXTERNAL_FLASH
+/* Choose SMIF slot number (slave select).
+ * Acceptable values are:
+ * 0 - SMIF disabled (no external memory);
+ * 1, 2, 3 or 4 - slave select line memory module is connected to.
+ */
+uint32_t smif_id = 1; /* Assume SlaveSelect_0 is used for External Memory */
+#endif
+
+extern cy_stc_scb_uart_context_t CYBSP_UART_context;
+
+/* Parameter structures for callback function */
+static cy_stc_syspm_callback_params_t deep_sleep_clbk_params = 
+{
+    CYBSP_UART_HW,
+    &CYBSP_UART_context
+};
+
+static cy_stc_syspm_callback_params_t deep_sleep_sysclk_pm_clbk_param =
+{
+    NULL,
+    NULL
+};
+
+/* Callback structure */
+cy_stc_syspm_callback_t uart_deep_sleep = 
+{
+    &Cy_SCB_UART_DeepSleepCallback, 
+    CY_SYSPM_DEEPSLEEP,
+    CY_SYSPM_SKIP_BEFORE_TRANSITION ,
+    &deep_sleep_clbk_params,
+    NULL,
+    NULL,
+    0
+};
+
+cy_stc_syspm_callback_t clk_deep_sleep = 
+{
+    &Cy_SysClk_DeepSleepCallback, 
+    CY_SYSPM_DEEPSLEEP,
+    CY_SYSPM_SKIP_BEFORE_TRANSITION ,
+    &deep_sleep_sysclk_pm_clbk_param,
+    NULL,
+    NULL,
+    0
+};
+
+void hw_deinit(void);
+
 static void do_boot(struct boot_rsp *rsp)
 {
     uint32_t app_addr = 0;
@@ -51,26 +100,36 @@
     BOOT_LOG_INF("Start Address: 0x%08lx", app_addr);
     Cy_SysLib_Delay(100);
 
-    Cy_SysEnableCM4(app_addr);
+    hw_deinit();
 
-    while (1)
-    {
-        __WFI() ;
-    }
+    Cy_SysEnableCM4(app_addr);
 }
 
 int main(void)
 {
     struct boot_rsp rsp;
+    cy_rslt_t result = CY_RSLT_TYPE_ERROR;
 
     init_cycfg_clocks();
     init_cycfg_peripherals();
     init_cycfg_pins();
+
+    /* register callback funtions that manage peripherals before going to deep sleep */
+    if (!Cy_SysPm_RegisterCallback(&uart_deep_sleep) || 
+        !Cy_SysPm_RegisterCallback(&clk_deep_sleep))
+    {
+        CY_ASSERT(0);
+    }
     /* enable interrupts */
     __enable_irq();
 
     /* Initialize retarget-io to use the debug UART port (CYBSP_UART_HW) */
-    cy_retarget_io_pdl_init(115200u);
+    result = cy_retarget_io_pdl_init(115200u);
+
+    if (result != CY_RSLT_SUCCESS)
+    {
+        CY_ASSERT(0);
+    }
 
     BOOT_LOG_INF("MCUBoot Bootloader Started");
 
@@ -82,13 +141,8 @@
      * available on PSoC062-2M in case of external
      * memory usage */
     #define MCUBOOT_MAX_IMG_SECTORS 4096
-    int smif_id = 1; /* Assume SlaveSelect_0 is used for External Memory */
-    /* Acceptable values are:
-    * 0 - SMIF disabled (no external memory);
-    * 1, 2, 3 or 4 - slave select line memory module is connected to.
-    */
     rc = qspi_init_sfdp(smif_id);
-    if(rc == CY_SMIF_SUCCESS)
+    if (rc == CY_SMIF_SUCCESS)
     {
         BOOT_LOG_INF("External Memory initialized w/ SFDP.");
     }
@@ -96,14 +150,35 @@
     {
         BOOT_LOG_ERR("External Memory initialization w/ SFDP FAILED: 0x%02x", (int)rc);
     }
-    if(0 == rc)
+    if (0 == rc)
 #endif
     {
-        if (boot_go(&rsp) == 0) {
+        if (boot_go(&rsp) == 0)
+        {
             BOOT_LOG_INF("User Application validated successfully");
             do_boot(&rsp);
-        } else
-            BOOT_LOG_INF("MCUBoot Bootloader found none of bootable images") ;
+        }
+        else
+        {
+            BOOT_LOG_INF("MCUBoot Bootloader found none of bootable images");
+        }
     }
+
+    while (1)
+    {
+        Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
+    }
+
     return 0;
 }
+
+void hw_deinit(void)
+{
+    cy_retarget_io_pdl_deinit();
+    Cy_GPIO_Port_Deinit(CYBSP_UART_RX_PORT);
+    Cy_GPIO_Port_Deinit(CYBSP_UART_TX_PORT);
+
+#ifdef CY_BOOT_USE_EXTERNAL_FLASH
+    qspi_deinit(smif_id);
+#endif
+}
