diff --git a/main.c b/main.c
index 9a3bd6a..04dc84a 100644
--- a/main.c
+++ b/main.c
@@ -50,6 +50,7 @@
 
 #include "nrf_drv_gpiote.h"
 #include "boards.h"
+#include "app_timer.h"
 
 #include "nrf_log.h"
 #include "nrf_log_ctrl.h"
@@ -95,6 +96,7 @@ typedef struct light_switch_ctx_s
   light_switch_button_t      button;
 } light_switch_ctx_t;
 
+APP_TIMER_DEF(m_toggle_timer); /**< APP timer that is responsible for sending a Zigbee toggle command. */
 
 static zb_void_t find_light_bulb_timeout(zb_uint8_t param);
 
@@ -166,6 +168,32 @@ static zb_void_t light_switch_send_on_off(zb_uint8_t param, zb_uint16_t on_off)
                            NULL);
 }
 
+/**@brief Function for sending ON/OFF toggle request to the light bulb.
+ *
+ * @param[in]   param    Non-zero reference to ZigBee stack buffer that will be used to construct on/off request.
+ */
+static zb_void_t light_switch_send_toggle(zb_uint8_t param)
+{
+    zb_buf_t           * p_buf = ZB_BUF_FROM_REF(param);
+
+    NRF_LOG_INFO("Send toggle command");
+
+    ZB_ZCL_ON_OFF_SEND_REQ(p_buf,
+                           m_device_ctx.bulb_params.short_addr,
+                           ZB_APS_ADDR_MODE_16_ENDP_PRESENT,
+                           m_device_ctx.bulb_params.endpoint,
+                           LIGHT_SWITCH_ENDPOINT,
+                           ZB_AF_HA_PROFILE_ID,
+                           ZB_ZCL_DISABLE_DEFAULT_RESPONSE,
+                           ZB_ZCL_CMD_ON_OFF_TOGGLE_ID,
+                           NULL);
+}
+
+static void light_switch_schedule_toggle(void * p_context)
+{
+    (void) ZB_GET_OUT_BUF_DELAYED(light_switch_send_toggle);
+}
+
 /**@brief Function for sending step requests to the light bulb.
  *
  * @param[in]   param        Non-zero reference to ZigBee stack buffer that will be used to construct step request.
@@ -274,6 +302,7 @@ static zb_void_t find_light_bulb_cb(zb_uint8_t param)
     zb_apsde_data_indication_t * p_ind  = ZB_GET_BUF_PARAM(p_buf, zb_apsde_data_indication_t); // Get the pointer to the parameters buffer, which stores APS layer response
     zb_uint8_t                 * p_match_ep;
     zb_ret_t                     zb_err_code;
+	ret_code_t                   err_code;
 
     if ((p_resp->status == ZB_ZDP_STATUS_SUCCESS) && (p_resp->match_len > 0) && (!m_device_ctx.bulb_params.short_addr))
     {
@@ -290,6 +319,14 @@ static zb_void_t find_light_bulb_cb(zb_uint8_t param)
         ZB_ERROR_CHECK(zb_err_code);
 
         bsp_board_led_on(BULB_FOUND_LED);
+		
+		/* Cancel previous delayed toggle command. */
+		err_code = app_timer_stop(m_toggle_timer);
+		APP_ERROR_CHECK(err_code);
+		
+		/* Start toggle timer. */
+		err_code = app_timer_start(m_toggle_timer, APP_TIMER_TICKS(50L), NULL);
+		APP_ERROR_CHECK(err_code);
     }
 
     if (param)
@@ -466,6 +503,18 @@ static zb_void_t leds_buttons_init(void)
     nrf_drv_gpiote_in_event_enable(bsp_board_button_idx_to_pin(LIGHT_SWITCH_BUTTON_OFF), true);
 }
 
+/**@brief Function for initializing the application timer.
+ */
+static void timer_init(void)
+{
+    uint32_t error_code = NRF_SUCCESS;
+    error_code          = app_timer_init();
+    APP_ERROR_CHECK(error_code);
+
+    error_code = app_timer_create(&m_toggle_timer, APP_TIMER_MODE_REPEATED, light_switch_schedule_toggle);
+    APP_ERROR_CHECK(error_code);
+}
+
 /**@brief ZigBee stack event handler.
  *
  * @param[in]   param   Reference to ZigBee stack buffer used to pass arguments (signal).
@@ -552,6 +601,7 @@ int main(void)
 
     /* Initialize loging system and GPIOs. */
     log_init();
+	timer_init();
     leds_buttons_init();
 
     /* Set ZigBee stack logging level and traffic dump subsystem. */
diff --git a/pca10056/blank/armgcc/Makefile b/pca10056/blank/armgcc/Makefile
index 7a51060..17215c4 100644
--- a/pca10056/blank/armgcc/Makefile
+++ b/pca10056/blank/armgcc/Makefile
@@ -60,6 +60,7 @@ SRC_FILES += \
   $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \
   $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \
   $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \
+  $(SDK_ROOT)/components/libraries/timer/app_timer.c \
 
 # Include folders common to all targets
 INC_FOLDERS += \
@@ -95,6 +96,7 @@ INC_FOLDERS += \
   $(SDK_ROOT)/components/toolchain/cmsis/include \
   $(SDK_ROOT)/external/zboss/include \
   $(SDK_ROOT)/components/libraries/fstorage \
+  $(SDK_ROOT)/components/libraries/timer \
 
 # Libraries common to all targets
 LIB_FILES += \
diff --git a/pca10056/blank/config/sdk_config.h b/pca10056/blank/config/sdk_config.h
index 1ab527c..ca54a08 100644
--- a/pca10056/blank/config/sdk_config.h
+++ b/pca10056/blank/config/sdk_config.h
@@ -1246,6 +1246,85 @@
 #endif
 
 // </h> 
+// <e> APP_TIMER_ENABLED - app_timer - Application timer functionality
+//==========================================================
+#ifndef APP_TIMER_ENABLED
+#define APP_TIMER_ENABLED 1
+#endif
+// <o> APP_TIMER_CONFIG_RTC_FREQUENCY  - Configure RTC prescaler.
+ 
+// <0=> 32768 Hz 
+// <1=> 16384 Hz 
+// <3=> 8192 Hz 
+// <7=> 4096 Hz 
+// <15=> 2048 Hz 
+// <31=> 1024 Hz 
+
+#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY
+#define APP_TIMER_CONFIG_RTC_FREQUENCY 0
+#endif
+
+// <o> APP_TIMER_CONFIG_IRQ_PRIORITY  - Interrupt priority
+ 
+
+// <i> Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice
+// <0=> 0 (highest) 
+// <1=> 1 
+// <2=> 2 
+// <3=> 3 
+// <4=> 4 
+// <5=> 5 
+// <6=> 6 
+// <7=> 7 
+
+#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY
+#define APP_TIMER_CONFIG_IRQ_PRIORITY 7
+#endif
+
+// <o> APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. 
+// <i> Size of the queue depends on how many timers are used
+// <i> in the system, how often timers are started and overall
+// <i> system latency. If queue size is too small app_timer calls
+// <i> will fail.
+
+#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE
+#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10
+#endif
+
+// <q> APP_TIMER_CONFIG_USE_SCHEDULER  - Enable scheduling app_timer events to app_scheduler
+ 
+
+#ifndef APP_TIMER_CONFIG_USE_SCHEDULER
+#define APP_TIMER_CONFIG_USE_SCHEDULER 0
+#endif
+
+// <q> APP_TIMER_WITH_PROFILER  - Enable app_timer profiling
+ 
+
+#ifndef APP_TIMER_WITH_PROFILER
+#define APP_TIMER_WITH_PROFILER 0
+#endif
+
+// <q> APP_TIMER_KEEPS_RTC_ACTIVE  - Enable RTC always on
+ 
+
+// <i> If option is enabled RTC is kept running even if there is no active timers.
+// <i> This option can be used when app_timer is used for timestamping.
+
+#ifndef APP_TIMER_KEEPS_RTC_ACTIVE
+#define APP_TIMER_KEEPS_RTC_ACTIVE 0
+#endif
+
+// <o> APP_TIMER_CONFIG_SWI_NUMBER  - Configure SWI instance used.
+ 
+// <0=> 0 
+// <1=> 1 
+
+#ifndef APP_TIMER_CONFIG_SWI_NUMBER
+#define APP_TIMER_CONFIG_SWI_NUMBER 0
+#endif
+
+// </e>
 //==========================================================
 
 // <h> nRF_Log 
