diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
new file mode 100644
index 0000000..3bac158
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.event;
+
+import org.onosproject.event.AbstractEvent;
+
+
+/**
+ * Describes network vtnrsc event.
+ */
+public class VtnRscEvent
+        extends AbstractEvent<VtnRscEvent.Type, VtnRscEventFeedback> {
+
+    /**
+     * Type of vtnrsc events.
+     */
+    public enum Type {
+        /**
+         * Signifies that floating IP has create.
+         */
+        FLOATINGIP_PUT,
+        /**
+         * Signifies that floating IP has delete.
+         */
+        FLOATINGIP_DELETE,
+        /**
+         * Signifies that router has create.
+         */
+        ROUTER_PUT,
+        /**
+         * Signifies that router has delete.
+         */
+        ROUTER_DELETE,
+        /**
+         * Signifies that router interface has add.
+         */
+        ROUTER_INTERFACE_PUT,
+        /**
+         * Signifies that router interface has remove.
+         */
+        ROUTER_INTERFACE_DELETE
+    }
+
+    /**
+     * Creates an event of a given type and for the specified vtn event feedback.
+     *
+     * @param type Vtnrsc event type
+     * @param vtnFeedback event VtnrscEventFeedback subject
+     */
+    public VtnRscEvent(Type type, VtnRscEventFeedback vtnFeedback) {
+        super(type, vtnFeedback);
+    }
+
+    /**
+     * Creates an event of a given type and for the specified vtn event feedback.
+     *
+     * @param type Vtnrsc event type
+     * @param vtnFeedback event VtnrscEventFeedback subject
+     * @param time occurrence time
+     */
+    public VtnRscEvent(Type type, VtnRscEventFeedback vtnFeedback, long time) {
+        super(type, vtnFeedback, time);
+    }
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
new file mode 100644
index 0000000..63dcaee
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.event;
+
+import java.util.Objects;
+
+import org.onosproject.vtnrsc.FloatingIp;
+import org.onosproject.vtnrsc.Router;
+import org.onosproject.vtnrsc.RouterInterface;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Representation of a VtnRsc event feedback.
+ */
+public class VtnRscEventFeedback {
+    private final FloatingIp floaingtIp;
+    private final Router router;
+    private final RouterInterface routerInterface;
+
+    /**
+     * Creates VtnRscEventFeedback object.
+     *
+     * @param floatingIp the floating Ip
+     */
+    public VtnRscEventFeedback(FloatingIp floatingIp) {
+        this.floaingtIp = checkNotNull(floatingIp, "floaintIp cannot be null");
+        this.router = null;
+        this.routerInterface = null;
+    }
+
+    /**
+     * Creates VtnRscEventFeedback object.
+     *
+     * @param router the router
+     */
+    public VtnRscEventFeedback(Router router) {
+        this.floaingtIp = null;
+        this.router = checkNotNull(router, "router cannot be null");
+        this.routerInterface = null;
+    }
+
+    /**
+     * Creates VtnRscEventFeedback object.
+     *
+     * @param routerInterface the router interface
+     */
+    public VtnRscEventFeedback(RouterInterface routerInterface) {
+        this.floaingtIp = null;
+        this.router = null;
+        this.routerInterface = checkNotNull(routerInterface,
+                                            "routerInterface cannot be null");
+    }
+
+    /**
+     * Returns floating IP.
+     *
+     * @return floaingtIp the floating IP
+     */
+    public FloatingIp floatingIp() {
+        return floaingtIp;
+    }
+
+    /**
+     * Returns router.
+     *
+     * @return router the router
+     */
+    public Router router() {
+        return router;
+    }
+
+    /**
+     * Returns router interface.
+     *
+     * @return routerInterface the router interface
+     */
+    public RouterInterface routerInterface() {
+        return routerInterface;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(floaingtIp, router, routerInterface);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof VtnRscEventFeedback) {
+            final VtnRscEventFeedback that = (VtnRscEventFeedback) obj;
+            return Objects.equals(this.floaingtIp, that.floaingtIp)
+                    && Objects.equals(this.router, that.router)
+                    && Objects.equals(this.routerInterface, that.routerInterface);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("router", router)
+                .add("floaingtIp", floaingtIp)
+                .add("routerInterface", routerInterface)
+                .toString();
+    }
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscListener.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscListener.java
new file mode 100644
index 0000000..fdd6755
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscListener.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.vtnrsc.event;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of VtnRsc related events.
+ */
+public interface VtnRscListener extends EventListener<VtnRscEvent> {
+
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/package-info.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/package-info.java
new file mode 100644
index 0000000..c1575ad
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Event of VtnRsc for VtnRsc service.
+ */
+package org.onosproject.vtnrsc.event;
