diff --git a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationEntry.java b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationEntry.java
index 23b3e39..b7f4356 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationEntry.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationEntry.java
@@ -6,7 +6,7 @@
  * This is the interface to classes which are maintained by BatchOperation as
  * its entries.
  */
-public class BatchOperationEntry<T extends Enum<?>, U extends IBatchOperationTarget> {
+public class BatchOperationEntry<T extends Enum<?>, U extends BatchOperationTarget> {
     private final T operator;
     private final U target;
 
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTarget.java
similarity index 74%
rename from src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java
rename to src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTarget.java
index d9adaed..ebcee5d 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTarget.java
@@ -3,6 +3,6 @@
 /**
  * An interface of the class which is assigned to BatchOperation.
  */
-public interface IBatchOperationTarget {
+public interface BatchOperationTarget {
 
 }
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/IFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/Flow.java
similarity index 88%
rename from src/main/java/net/onrc/onos/api/flowmanager/IFlow.java
rename to src/main/java/net/onrc/onos/api/flowmanager/Flow.java
index fbd6b2b..bd1c619 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/IFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/Flow.java
@@ -1,6 +1,6 @@
 package net.onrc.onos.api.flowmanager;
 
-import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
+import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 import net.onrc.onos.core.matchaction.MatchActionPlan;
 import net.onrc.onos.core.matchaction.match.IMatch;
 
@@ -11,7 +11,7 @@
  * The flow objects (eg. path, tree, disjoint-paths, etc.) must implement this
  * interface.
  */
-public interface IFlow extends IBatchOperationTarget {
+public interface Flow extends BatchOperationTarget {
     /**
      * Gets ID for this flow object.
      *
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/FlowBatchOperation.java b/src/main/java/net/onrc/onos/api/flowmanager/FlowBatchOperation.java
index 42eb81d..71d5378 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/FlowBatchOperation.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/FlowBatchOperation.java
@@ -29,9 +29,9 @@
      * @param flow the flow to be added
      * @return the FlowBatchOperation object if succeeded, null otherwise
      */
-    public FlowBatchOperation addAddFlowOperation(IFlow flow) {
+    public FlowBatchOperation addAddFlowOperation(Flow flow) {
         return (null == super.addOperation(
-                new BatchOperationEntry<Operator, IFlow>(Operator.ADD, flow)))
+                new BatchOperationEntry<Operator, Flow>(Operator.ADD, flow)))
                 ? null : this;
     }
 
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/FlowId.java b/src/main/java/net/onrc/onos/api/flowmanager/FlowId.java
index a0ebd2d..4fef792 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/FlowId.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/FlowId.java
@@ -1,11 +1,11 @@
 package net.onrc.onos.api.flowmanager;
 
-import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
+import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 
 /**
  * Represents ID for IFlow objects.
  */
-public class FlowId implements IBatchOperationTarget {
+public class FlowId implements BatchOperationTarget {
     private final String value;
 
     /**
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java b/src/main/java/net/onrc/onos/api/flowmanager/FlowManagerService.java
similarity index 94%
rename from src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java
rename to src/main/java/net/onrc/onos/api/flowmanager/FlowManagerService.java
index efd7b98..a87eb65 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/FlowManagerService.java
@@ -14,14 +14,14 @@
  * <p>
  * TODO: add more getter with filter for IFlow objects.
  */
-public interface IFlowManagerService {
+public interface FlowManagerService {
     /**
      * Adds IFlow object, calculates match-action plan and executes it.
      *
      * @param flow IFlow object to be added
      * @return true if succeeded, false otherwise
      */
-    boolean addFlow(IFlow flow);
+    boolean addFlow(Flow flow);
 
     /**
      * Removes IFlow object, calculates match-action plan and executes it.
@@ -37,14 +37,14 @@
      * @param id ID of IFlow object
      * @return IFlow object if found, null otherwise
      */
-    IFlow getFlow(FlowId id);
+    Flow getFlow(FlowId id);
 
     /**
      * Gets All IFlow objects.
      *
      * @return the collection of IFlow objects
      */
-    Collection<IFlow> getFlows();
+    Collection<Flow> getFlows();
 
     /**
      * Executes batch operation of IFlow object.
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java
index 48053ef..787a11f 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/PathFlow.java
@@ -13,7 +13,7 @@
  * TODO: Think this: Should this class be an abstract class? Is it enough to
  * have only the PacketPathFlow and OpticalPathFlow classes?
  */
-public class PathFlow implements IFlow {
+public class PathFlow implements Flow {
     protected final FlowId id;
     protected IMatch match;
     protected PortNumber ingressPort;
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
index 473b7e8..58c5b38 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
@@ -17,7 +17,7 @@
  * NOTE: This class might generate the MatchActionPlan which includes the MAC
  * address modifications or other the label-switching-like schemes.
  */
-public class SingleDstTreeFlow implements IFlow {
+public class SingleDstTreeFlow implements Flow {
     protected final FlowId id;
     protected PacketMatch match;
     protected Set<SwitchPort> ingressPorts;
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java
index 538315c..b9fdb88 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/SingleSrcTreeFlow.java
@@ -13,7 +13,7 @@
  * An IFlow object expressing the point-to-multipoints tree flow for the packet
  * layer.
  */
-public class SingleSrcTreeFlow implements IFlow {
+public class SingleSrcTreeFlow implements Flow {
     protected final FlowId id;
     protected PacketMatch match;
     protected SwitchPort ingressPort;
diff --git a/src/main/java/net/onrc/onos/api/intent/IIntentRuntimeService.java b/src/main/java/net/onrc/onos/api/intent/IIntentRuntimeService.java
index 890bb7f..2b7b517 100644
--- a/src/main/java/net/onrc/onos/api/intent/IIntentRuntimeService.java
+++ b/src/main/java/net/onrc/onos/api/intent/IIntentRuntimeService.java
@@ -4,7 +4,7 @@
 import java.util.EventListener;
 
 import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
-import net.onrc.onos.api.flowmanager.IFlow;
+import net.onrc.onos.api.flowmanager.Flow;
 
 /**
  * An interface class for the Intent-Runtime Service. The role of the
@@ -120,7 +120,7 @@
      * @param intentId ID of the target Intent.
      * @return Collection of IFlow objects if exists, null otherwise.
      */
-    Collection<IFlow> getFlows(String intentId);
+    Collection<Flow> getFlows(String intentId);
 
     /**
      * Gets Intent object which manages the specified IFlow object.
diff --git a/src/main/java/net/onrc/onos/api/intent/Intent.java b/src/main/java/net/onrc/onos/api/intent/Intent.java
index f8ec5c2..586605c 100644
--- a/src/main/java/net/onrc/onos/api/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/api/intent/Intent.java
@@ -1,7 +1,7 @@
 package net.onrc.onos.api.intent;
 
 import com.google.common.base.Objects;
-import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
+import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -25,7 +25,7 @@
  * Developers that will define a new intent type should ensure its immutability.
  * </p>
  */
-public abstract class Intent implements IBatchOperationTarget {
+public abstract class Intent implements BatchOperationTarget {
     private final IntentId id;
 
     /**
diff --git a/src/main/java/net/onrc/onos/api/intent/IntentId.java b/src/main/java/net/onrc/onos/api/intent/IntentId.java
index 327f2cb..5de5a12 100644
--- a/src/main/java/net/onrc/onos/api/intent/IntentId.java
+++ b/src/main/java/net/onrc/onos/api/intent/IntentId.java
@@ -1,6 +1,6 @@
 package net.onrc.onos.api.intent;
 
-import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
+import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 
 /**
  * The class representing intent's ID.
@@ -9,7 +9,7 @@
  * This class is immutable.
  * </p>
  */
-public final class IntentId implements IBatchOperationTarget {
+public final class IntentId implements BatchOperationTarget {
     private final long id;
 
     /**
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java b/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
index 550fa44..3d85d03 100644
--- a/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
@@ -6,8 +6,8 @@
 import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
 import net.onrc.onos.api.flowmanager.FlowBatchOperation;
 import net.onrc.onos.api.flowmanager.FlowId;
-import net.onrc.onos.api.flowmanager.IFlow;
-import net.onrc.onos.api.flowmanager.IFlowManagerService;
+import net.onrc.onos.api.flowmanager.Flow;
+import net.onrc.onos.api.flowmanager.FlowManagerService;
 
 /**
  * Manages a set of IFlow objects, computes and maintains a set of Match-Action
@@ -15,7 +15,7 @@
  * <p>
  * TODO: Make all methods thread-safe
  */
-public class FlowManagerModule implements IFlowManagerService {
+public class FlowManagerModule implements FlowManagerService {
     private ConflictDetectionPolicy conflictDetectionPolicy;
 
     /**
@@ -26,7 +26,7 @@
     }
 
     @Override
-    public boolean addFlow(IFlow flow) {
+    public boolean addFlow(Flow flow) {
         FlowBatchOperation ops = new FlowBatchOperation();
         ops.addAddFlowOperation(flow);
         return executeBatch(ops);
@@ -40,13 +40,13 @@
     }
 
     @Override
-    public IFlow getFlow(FlowId id) {
+    public Flow getFlow(FlowId id) {
         // TODO Auto-generated method stub
         return null;
     }
 
     @Override
-    public Collection<IFlow> getFlows() {
+    public Collection<Flow> getFlows() {
         // TODO Auto-generated method stub
         return null;
     }
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java b/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java
index c9aef04..d31ced8 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchAction.java
@@ -4,7 +4,7 @@
 import java.util.List;
 
 import net.floodlightcontroller.util.MACAddress;
-import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
+import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 import net.onrc.onos.core.matchaction.action.IAction;
 import net.onrc.onos.core.matchaction.action.OutputAction;
 import net.onrc.onos.core.matchaction.match.IMatch;
@@ -17,7 +17,7 @@
 /**
  * A filter and actions for traffic.
  */
-public class MatchAction implements IBatchOperationTarget {
+public class MatchAction implements BatchOperationTarget {
     protected final MatchActionId id;
     protected SwitchPort port;
     protected List<IMatch> matches;
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java
index 3e069c2..86e7000 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionId.java
@@ -1,8 +1,8 @@
 package net.onrc.onos.core.matchaction;
 
-import net.onrc.onos.api.batchoperation.IBatchOperationTarget;
+import net.onrc.onos.api.batchoperation.BatchOperationTarget;
 
-public class MatchActionId implements IBatchOperationTarget {
+public class MatchActionId implements BatchOperationTarget {
     private final String value;
 
     public MatchActionId(String id) {
diff --git a/src/main/java/net/onrc/onos/core/newintent/IntentRuntimeModule.java b/src/main/java/net/onrc/onos/core/newintent/IntentRuntimeModule.java
index 9b96708..59cfec0 100644
--- a/src/main/java/net/onrc/onos/core/newintent/IntentRuntimeModule.java
+++ b/src/main/java/net/onrc/onos/core/newintent/IntentRuntimeModule.java
@@ -4,7 +4,7 @@
 import java.util.EventListener;
 
 import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
-import net.onrc.onos.api.flowmanager.IFlow;
+import net.onrc.onos.api.flowmanager.Flow;
 import net.onrc.onos.api.intent.IIntentRuntimeService;
 import net.onrc.onos.api.intent.Intent;
 import net.onrc.onos.api.intent.IntentBatchOperation;
@@ -78,7 +78,7 @@
     }
 
     @Override
-    public Collection<IFlow> getFlows(String intentId) {
+    public Collection<Flow> getFlows(String intentId) {
         // TODO Auto-generated method stub
         return null;
     }
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java b/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java
index 35d0917..2e379fa 100644
--- a/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java
+++ b/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java
@@ -52,7 +52,7 @@
 
         BatchOperationEntry<Operator, ?> entry = list.get(0);
         assertEquals(Operator.STRING, entry.getOperator());
-        IBatchOperationTarget target = entry.getTarget();
+        BatchOperationTarget target = entry.getTarget();
         assertTrue(target instanceof StringTarget);
         assertEquals("target1", ((StringTarget) target).getString());
 
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/TestBatchOperation.java b/src/test/java/net/onrc/onos/api/batchoperation/TestBatchOperation.java
index 022e7c4..bbb10c0 100644
--- a/src/test/java/net/onrc/onos/api/batchoperation/TestBatchOperation.java
+++ b/src/test/java/net/onrc/onos/api/batchoperation/TestBatchOperation.java
@@ -8,7 +8,7 @@
         INTEGER,
     }
 
-    public static class StringTarget implements IBatchOperationTarget {
+    public static class StringTarget implements BatchOperationTarget {
         private String string;
 
         public StringTarget(String string) {
@@ -20,7 +20,7 @@
         }
     }
 
-    public static class IntegerTarget implements IBatchOperationTarget {
+    public static class IntegerTarget implements BatchOperationTarget {
         private Integer integer;
 
         public IntegerTarget(Integer integer) {
