diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java
index 6d0f0fb..4b54cf3 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java
@@ -21,6 +21,7 @@
 import org.onosproject.store.service.Versioned;
 
 import java.util.Map;
+import java.util.Set;
 
 /**
  *  WorkflowContext Event Map Store.
@@ -30,36 +31,43 @@
     /**
      * Registers workflow context event mapping.
      * @param eventType the class name of event
-     * @param eventHint event hint string value of the event
+     * @param eventHintSet Set of event hint string value of the event
      * @param contextName workflow context name
      * @param programCounterString the program counter of workflow
      * @throws WorkflowException workflow exception
      */
-    void registerEventMap(String eventType, String eventHint,
+    void registerEventMap(String eventType, Set<String> eventHintSet,
                           String contextName, String programCounterString) throws WorkflowException;
 
     /**
      * Unregisters workflow context event mapping.
      * @param eventType the class name of event
-     * @param eventHint event hint string value of the event
      * @param contextName workflow context name
      * @throws WorkflowException workflow exception
      */
-    void unregisterEventMap(String eventType, String eventHint,
+    void unregisterEventMap(String eventType,
                             String contextName) throws WorkflowException;
 
     /**
      * Returns workflow context event mapping.
      * @param eventType the class name of event
-     * @param eventHint event hint string value of the event
-     * @return workflow context event mapping
+     * @param eventHint vent hint string value of the event
+     * @return Map of workflow context and value (program counter)
      * @throws WorkflowException workflow exception
      */
-    Map<String, String> getEventMap(String eventType, String eventHint) throws WorkflowException;
+    Map<String, String> getEventMapByHint(String eventType,
+                                          String eventHint) throws WorkflowException;
+
+    /**
+     * Returns true or false depending on existence of eventMap of given context.
+     * @param contextName name of workflow context
+     * @return Boolean true or false depending on existence of eventMap of given context
+     */
+    boolean isEventMapPresent(String contextName);
 
     /**
      * Returns child nodes on document tree path.
-     * @param path document tree path
+     * @param path document tree path including eventType and Hint
      * @return children under document tree path
      * @throws WorkflowException workflow exception
      */
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java
index 05c564a..8f5d3c7 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java
@@ -21,6 +21,8 @@
 import org.onosproject.event.Event;
 
 import java.net.URI;
+import java.util.HashSet;
+import java.util.Set;
 
 import static org.onosproject.workflow.api.CheckCondition.check;
 
@@ -60,9 +62,9 @@
     private transient Class<? extends Event> completionEventType;
 
     /**
-     * Completion event hint.
+     * Completion event hint Set.
      */
-    private transient String completionEventHint;
+    private transient Set<String> completionEventHintSet;
 
     /**
      * Completion event generator method reference.
@@ -170,7 +172,18 @@
     public void waitCompletion(Class<? extends Event> eventType, String eventHint,
                                WorkExecutor eventGenerator, long timeoutMs) {
         this.completionEventType = eventType;
-        this.completionEventHint = eventHint;
+        this.completionEventHintSet = new HashSet<>();
+        this.completionEventHintSet.add(eventHint);
+        this.completionEventGenerator = eventGenerator;
+        this.completionEventTimeoutMs = timeoutMs;
+    }
+
+    @Override
+    public void waitAnyCompletion(Class<? extends Event> eventType, Set<String> eventHint,
+                               WorkExecutor eventGenerator, long timeoutMs) {
+        this.completionEventType = eventType;
+        this.completionEventHintSet = new HashSet<>();
+        this.completionEventHintSet.addAll(eventHint);
         this.completionEventGenerator = eventGenerator;
         this.completionEventTimeoutMs = timeoutMs;
     }
@@ -186,8 +199,8 @@
     }
 
     @Override
-    public String completionEventHint() {
-        return completionEventHint;
+    public Set<String> completionEventHints() {
+        return completionEventHintSet;
     }
 
     @Override
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventTimeoutTask.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventTimeoutTask.java
index 9aa870d..2ee2672 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventTimeoutTask.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventTimeoutTask.java
@@ -17,7 +17,9 @@
 
 import com.google.common.base.MoreObjects;
 
+import java.util.HashSet;
 import java.util.Objects;
+import java.util.Set;
 
 import static org.onosproject.workflow.api.CheckCondition.check;
 
@@ -32,9 +34,9 @@
     private final String eventType;
 
     /**
-     * Event hint value for finding target event.
+     * Set of Event hint value for finding target event.
      */
-    private final String eventHint;
+    private final Set<String> eventHintSet = new HashSet<>();
 
     /**
      * Constructor of EventTimeoutTask.
@@ -43,7 +45,7 @@
     private EventTimeoutTask(Builder builder) {
         super(builder);
         this.eventType = builder.eventType;
-        this.eventHint = builder.eventHint;
+        this.eventHintSet.addAll(builder.eventHintSet);
     }
 
     /**
@@ -55,11 +57,11 @@
     }
 
     /**
-     * Gets event hint value for finding target event.
-     * @return event hint string
+     * Gets set of event hint value for finding target event.
+     * @return event hint set
      */
-    public String eventHint() {
-        return eventHint;
+    public Set<String> eventHintSet() {
+        return eventHintSet;
     }
 
     @Override
@@ -76,7 +78,7 @@
             return false;
         }
         return Objects.equals(this.eventType(), ((EventTask) obj).eventType())
-                && Objects.equals(this.eventHint(), ((EventTask) obj).eventHint());
+                && Objects.equals(this.eventHintSet(), ((EventTask) obj).eventHint());
     }
 
     @Override
@@ -85,7 +87,7 @@
                 .add("context", context())
                 .add("programCounter", programCounter())
                 .add("eventType", eventType())
-                .add("eventHint", eventHint())
+                .add("eventHint", eventHintSet())
                 .toString();
     }
 
@@ -107,9 +109,9 @@
         private String eventType;
 
         /**
-         * Event hint value for finding target event.
+         * Set of Event hint value for finding target event.
          */
-        private String eventHint;
+        private Set<String> eventHintSet;
 
         /**
          * Sets Event type (Class name of event).
@@ -123,11 +125,11 @@
 
         /**
          * Sets event hint string for finding target event.
-         * @param eventHint event hint string
+         * @param eventHintSet Set of event hint string
          * @return builder of EventTimeoutTask
          */
-        public Builder eventHint(String eventHint) {
-            this.eventHint = eventHint;
+        public Builder eventHintSet(Set<String> eventHintSet) {
+            this.eventHintSet = eventHintSet;
             return this;
         }
 
@@ -150,7 +152,7 @@
          */
         public EventTimeoutTask build() throws WorkflowException {
             check(eventType != null, "eventType is invalid");
-            check(eventHint != null, "eventType is invalid");
+            check(eventHintSet != null, "eventHintSet is invalid");
             return new EventTimeoutTask(this);
         }
     }
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java
index 9f0b4fe..836524d 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java
@@ -18,6 +18,7 @@
 import org.onosproject.event.Event;
 
 import java.net.URI;
+import java.util.Set;
 
 /**
  * An abstract class representing WorkflowContext.
@@ -98,6 +99,20 @@
     public abstract void waitCompletion(Class<? extends Event> eventType, String eventHint,
                                         WorkExecutor eventGenerator, long timeoutMs);
 
+
+    /**
+     * Waits an event which has any one of eventHint from Set 'eventHintSet' after executing executor.
+     * If the event happens, Worklet.isCompleted will be called.
+     * If the event does not happen for timeoutMs, Worklet.timeout will be called.
+     * @param eventType the class of event to wait
+     * @param eventHintSet the Set of eventHints of the event to wait
+     * @param eventGenerator a method reference to be executed after executing executor
+     * @param timeoutMs timeout millisecond
+     */
+    public abstract void waitAnyCompletion(Class<? extends Event> eventType, Set<String> eventHintSet,
+                                           WorkExecutor eventGenerator, long timeoutMs);
+
+
     /**
      * Waits timeout milliseconds. After timeoutMs Worklet.timeout will be called.
      * @param timeoutMs timeout millisecond
@@ -111,10 +126,10 @@
     public abstract Class<? extends Event> completionEventType();
 
     /**
-     * Returns the event hint string to wait.
-     * @return the event hint string
+     * Returns the set of event hint string to wait.
+     * @return the event hint string set
      */
-    public abstract String completionEventHint();
+    public abstract Set<String> completionEventHints();
 
     /**
      * Returns method reference for generating completion event.
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java
index 9f609b3..c5e00a7 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java
@@ -18,6 +18,8 @@
 import org.onosproject.event.Event;
 import org.onosproject.event.ListenerService;
 
+import java.util.Set;
+
 /**
  * Interface for workflow execution service.
  */
@@ -45,11 +47,11 @@
     /**
      * Registers workflow event map.
      * @param eventType event type (class name of event)
-     * @param eventHint event hint value
+     * @param eventHintSet Set of event hint value
      * @param contextName workflow context name to be called by this event map
      * @param programCounterString worklet type to be called by this event map
      * @throws WorkflowException workflow exception
      */
-    void registerEventMap(Class<? extends Event> eventType, String eventHint,
+    void registerEventMap(Class<? extends Event> eventType, Set<String> eventHintSet,
                           String contextName, String programCounterString) throws WorkflowException;
 }
