diff --git a/VERSION b/VERSION
index 1d0ba9e..8f0916f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.4.0
+0.5.0
diff --git a/src/cord_workflow_controller_client/workflow_run.py b/src/cord_workflow_controller_client/workflow_run.py
index ac6f3a8..157ecff 100644
--- a/src/cord_workflow_controller_client/workflow_run.py
+++ b/src/cord_workflow_controller_client/workflow_run.py
@@ -30,7 +30,6 @@
 WAIT_TIMEOUT = 10  # 10 seconds
 
 GREETING = 'cord.workflow.ctlsvc.greeting'
-WORKFLOW_RUN_UPDATE_STATUS = 'cord.workflow.ctlsvc.workflow.run.status'
 WORKFLOW_RUN_COUNT_EVENTS = 'cord.workflow.ctlsvc.workflow.run.count'
 WORKFLOW_RUN_FETCH_EVENT = 'cord.workflow.ctlsvc.workflow.run.fetch'
 WORKFLOW_RUN_NOTIFY_EVENT = 'cord.workflow.ctlsvc.workflow.run.notify'
@@ -59,7 +58,6 @@
         self.sio.on('connect', self.__on_sio_connect)
         self.sio.on('disconnect', self.__on_sio_disconnect)
         self.sio.on(GREETING, self.__on_greeting_message)
-        self.sio.on(WORKFLOW_RUN_UPDATE_STATUS, self.__on_update_status_message)
         self.sio.on(WORKFLOW_RUN_COUNT_EVENTS, self.__on_count_events_message)
         self.sio.on(WORKFLOW_RUN_FETCH_EVENT, self.__on_fetch_event_message)
         self.sio.on(WORKFLOW_RUN_NOTIFY_EVENT, self.__on_notify_event_message)
@@ -125,9 +123,6 @@
                 self.logger.info('calling a notify event handler - %s' % handler)
                 handler(self.workflow_id, self.workflow_run_id, topic)
 
-    def __on_update_status_message(self, data):
-        self.__on_response(WORKFLOW_RUN_UPDATE_STATUS, data)
-
     def __on_count_events_message(self, data):
         self.__on_response(WORKFLOW_RUN_COUNT_EVENTS, data)
 
@@ -281,38 +276,6 @@
                 (api, json.dumps(result))
             )
 
-    def update_status(self, task_id, status):
-        """
-        Update status of a workflow run.
-        """
-        if task_id and status:
-            result = self.__request(WORKFLOW_RUN_UPDATE_STATUS, {
-                'workflow_id': self.workflow_id,
-                'workflow_run_id': self.workflow_run_id,
-                'task_id': task_id,
-                'status': status
-            })
-            if result['error']:
-                self.logger.error(
-                    'request (%s) failed with an error - %s' %
-                    (result['req_id'], result['message'])
-                )
-                raise ClientResponseError(
-                    'request (%s) failed with an error - %s' %
-                    (result['req_id'], result['message'])
-                )
-            else:
-                return result['result']
-        else:
-            self.logger.error(
-                'invalid arguments task_id (%s) and status (%s)' %
-                (task_id, status)
-            )
-            raise ClientInputError(
-                'invalid arguments task_id (%s) and status (%s)' %
-                (task_id, status)
-            )
-
     def count_events(self):
         """
         Count events.
diff --git a/test/dummy_server.py b/test/dummy_server.py
index d127cbd..ccbad36 100644
--- a/test/dummy_server.py
+++ b/test/dummy_server.py
@@ -29,8 +29,7 @@
             WORKFLOW_REGISTER, WORKFLOW_REGISTER_ESSENCE, WORKFLOW_LIST, WORKFLOW_LIST_RUN,
             WORKFLOW_CHECK, WORKFLOW_REMOVE, WORKFLOW_REMOVE_RUN, WORKFLOW_REPORT_NEW_RUN)
 from cord_workflow_controller_client.workflow_run \
-    import (WORKFLOW_RUN_NOTIFY_EVENT,
-            WORKFLOW_RUN_UPDATE_STATUS, WORKFLOW_RUN_COUNT_EVENTS, WORKFLOW_RUN_FETCH_EVENT)
+    import (WORKFLOW_RUN_NOTIFY_EVENT, WORKFLOW_RUN_COUNT_EVENTS, WORKFLOW_RUN_FETCH_EVENT)
 
 
 """
@@ -433,40 +432,6 @@
     )
 
 
-def _handle_event_workflow_run_update_status(sid, body):
-    data = {
-        'req_id': _get_req_id(body)
-    }
-
-    if 'workflow_id' in body and 'workflow_run_id' in body and 'task_id' in body and 'status' in body:
-        # workflow_id = body['workflow_id']
-        workflow_run_id = body['workflow_run_id']
-        task_id = body['task_id']
-        status = body['status']
-
-        if workflow_run_id in workflow_runs:
-            workflow_run = workflow_runs[workflow_run_id]
-            workflow_run[task_id] = status
-
-            data['error'] = False
-            data['result'] = True
-        else:
-            data['error'] = True
-            data['result'] = False
-            data['message'] = 'cannot find workflow run'
-    else:
-        data['error'] = True
-        data['result'] = False
-        data['message'] = 'workflow_id, workflow_run_id, task_id or status is not in the message body'
-
-    log.info('returning a result for workflow run update status event to sid %s' % sid)
-    sio.emit(
-        event=WORKFLOW_RUN_UPDATE_STATUS,
-        data=data,
-        room=sid
-    )
-
-
 def _handle_event_workflow_run_count_events(sid, body):
     data = {
         'req_id': _get_req_id(body)
@@ -605,8 +570,6 @@
             _handle_event_workflow_run_remove(sid, args[1])
 
         # workflow run
-        elif event == WORKFLOW_RUN_UPDATE_STATUS:
-            _handle_event_workflow_run_update_status(sid, args[1])
         elif event == WORKFLOW_RUN_COUNT_EVENTS:
             _handle_event_workflow_run_count_events(sid, args[1])
         elif event == WORKFLOW_RUN_FETCH_EVENT:
