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);
         }
     }
