diff --git a/src/main/java/net/onrc/onos/api/batchoperation/AddOperation.java b/src/main/java/net/onrc/onos/api/batchoperation/AddOperation.java
index 7e8b97a..f8fb8d0 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/AddOperation.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/AddOperation.java
@@ -3,15 +3,16 @@
 /**
  * An add-operation entry of a batch operation.
  */
-public class AddOperation implements BatchOperationEntry {
-    private final IBatchOperationTarget target;
+public class AddOperation<T extends IBatchOperationTarget>
+        implements BatchOperationEntry<T> {
+    private final T target;
 
     /**
      * Creates a add-operation with specified target.
      *
-     * @param target The target object to be assigned to this add-operation.
+     * @param target the target object to be assigned to this add-operation
      */
-    public AddOperation(IBatchOperationTarget target) {
+    public AddOperation(T target) {
         this.target = target;
     }
 
@@ -23,9 +24,9 @@
     /**
      * Gets the target object which assigned to this add-operation.
      *
-     * @return The target object which assigned to this add-operation.
+     * @return the target object which assigned to this add-operation
      */
-    public IBatchOperationTarget getTarget() {
+    public T getTarget() {
         return target;
     }
 }
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperation.java b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperation.java
index 9fc20c0..cb8ddd8 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperation.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperation.java
@@ -12,13 +12,13 @@
  *        MatchAction.
  */
 public class BatchOperation<T extends IBatchOperationTarget> {
-    private List<BatchOperationEntry> ops;
+    private List<BatchOperationEntry<T>> ops;
 
     /**
      * Constructor.
      */
     public BatchOperation() {
-        ops = new LinkedList<BatchOperationEntry>();
+        ops = new LinkedList<>();
     }
 
     /**
@@ -31,7 +31,7 @@
     /**
      * Returns the number of operations in this object.
      *
-     * @return the number of operations in this object.
+     * @return the number of operations in this object
      */
     public int size() {
         return ops.size();
@@ -40,50 +40,38 @@
     /**
      * Returns an iterator over the operations in this object.
      *
-     * @return an iterator over the operations in this object.
+     * @return an iterator over the operations in this object
      */
-    public Iterator<BatchOperationEntry> iterator() {
+    public Iterator<BatchOperationEntry<T>> iterator() {
         return ops.iterator();
     }
 
     /**
      * Returns the operations in this object.
      *
-     * @return the operations in this object.
+     * @return the operations in this object
      */
-    public List<BatchOperationEntry> getOperations() {
+    public List<BatchOperationEntry<T>> getOperations() {
         return Collections.unmodifiableList(ops);
     }
 
     /**
      * Adds an add-operation.
      *
-     * @param target IBatchOperationTarget object to be added.
-     * @return true if succeeded, false otherwise.
+     * @param target IBatchOperationTarget object to be added
+     * @return true if succeeded, false otherwise
      */
     public boolean addAddOperation(T target) {
-        return ops.add(new AddOperation(target));
+        return ops.add(new AddOperation<T>(target));
     }
 
     /**
      * Adds a remove-operation.
      *
-     * @param id ID of the target to be removed.
-     * @return true if succeeded, false otherwise.
+     * @param id ID of the target to be removed
+     * @return true if succeeded, false otherwise
      */
     public boolean addRemoveOperation(BatchOperationTargetId id) {
-        return ops.add(new RemoveOperation(id));
-    }
-
-    /**
-     * Adds an update-operation.
-     * <p>
-     * The existing entry having the same ID with the new target is overwritten.
-     *
-     * @param target The new target to be used for the update.
-     * @return true if succeeded, false otherwise.
-     */
-    public boolean addUpdateOperation(T target) {
-        return ops.add(new UpdateOperation(target));
+        return ops.add(new RemoveOperation<T>(id));
     }
 }
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 fce31d1..7274d5f 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationEntry.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationEntry.java
@@ -6,11 +6,11 @@
  * This is the interface to AddOperation, UpdateOperation and RemoveOperation
  * classes which are the entry maintained by BatchOperation.
  */
-public interface BatchOperationEntry {
+public interface BatchOperationEntry<T extends IBatchOperationTarget> {
     /**
      * Gets the BatchOperator of this operation.
      *
-     * @return The BatchOperator of this operation.
+     * @return the BatchOperator of this operation
      */
     public BatchOperator getOperator();
 }
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTargetId.java b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTargetId.java
index dfa3da9..d2d0ad1 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTargetId.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperationTargetId.java
@@ -10,7 +10,7 @@
     /**
      * Returns a string representation of the target object's ID.
      *
-     * @return a string representation of the target object's ID.
+     * @return a string representation of the target object's ID
      */
     @Override
     public abstract String toString();
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperator.java b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperator.java
index 00ab908..0b9a2ce 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/BatchOperator.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/BatchOperator.java
@@ -5,22 +5,17 @@
  */
 public enum BatchOperator {
     /**
-     * Adds new intent.
+     * Adds new target object.
      */
     ADD,
 
     /**
-     * Removes existing intent specified by intent ID.
+     * Removes existing object.
      */
     REMOVE,
 
     /**
-     * Overwrites existing intent using new intent.
-     */
-    UPDATE,
-
-    /**
-     * Unknown type.
+     * Unknown operator type.
      */
     UNKNOWN,
 }
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java b/src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java
index 45e05ea..3b2d3d9 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/IBatchOperationTarget.java
@@ -7,7 +7,7 @@
     /**
      * Gets ID of the object.
      *
-     * @return ID of the object.
+     * @return ID of the object
      */
     public BatchOperationTargetId getId();
 }
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/RemoveOperation.java b/src/main/java/net/onrc/onos/api/batchoperation/RemoveOperation.java
index bafe926..52eec95 100644
--- a/src/main/java/net/onrc/onos/api/batchoperation/RemoveOperation.java
+++ b/src/main/java/net/onrc/onos/api/batchoperation/RemoveOperation.java
@@ -3,14 +3,14 @@
 /**
  * A remove-operation entry of a batch operation.
  */
-public class RemoveOperation implements BatchOperationEntry {
+public class RemoveOperation<T extends IBatchOperationTarget>
+        implements BatchOperationEntry<T> {
     private final BatchOperationTargetId targetId;
 
     /**
      * Creates a remove-operation with specified target.
      *
-     * @param id The target object ID to be assigned to this
-     *        remove-operation.
+     * @param id the target object ID to be assigned to this remove-operation
      */
     public RemoveOperation(BatchOperationTargetId id) {
         this.targetId = id;
@@ -24,7 +24,7 @@
     /**
      * Gets the target ID to be removed.
      *
-     * @return The target ID to be removed.
+     * @return the target ID to be removed
      */
     public BatchOperationTargetId getTargetId() {
         return targetId;
diff --git a/src/main/java/net/onrc/onos/api/batchoperation/UpdateOperation.java b/src/main/java/net/onrc/onos/api/batchoperation/UpdateOperation.java
deleted file mode 100644
index a2f368e..0000000
--- a/src/main/java/net/onrc/onos/api/batchoperation/UpdateOperation.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package net.onrc.onos.api.batchoperation;
-
-/**
- * An update-operation entry of a batch operation.
- */
-public class UpdateOperation implements BatchOperationEntry {
-    private final IBatchOperationTarget target;
-
-    /**
-     * Creates an update-operation with specified targets.
-     *
-     * @param target The new target to be used for the update.
-     */
-    public UpdateOperation(IBatchOperationTarget target) {
-        this.target = target;
-    }
-
-    @Override
-    public BatchOperator getOperator() {
-        return BatchOperator.UPDATE;
-    }
-
-    /**
-     * Gets the new target object to be used for the update.
-     *
-     * @return The new target object to be used for the update.
-     */
-    public IBatchOperationTarget getTarget() {
-        return target;
-    }
-
-}
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java b/src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java
index ca4e5f7..fcfaacb 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/IFlowManagerService.java
@@ -20,78 +20,67 @@
     /**
      * Adds IFlow object, calculates match-action plan and executes it.
      *
-     * @param flow IFlow object to be added.
-     * @return true if succeeded, false otherwise.
+     * @param flow IFlow object to be added
+     * @return true if succeeded, false otherwise
      */
     boolean addFlow(IFlow flow);
 
     /**
      * Removes IFlow object, calculates match-action plan and executes it.
      *
-     * @param id ID for IFlow object to be removed.
-     * @return true if succeeded, false otherwise.
+     * @param id ID for IFlow object to be removed
+     * @return true if succeeded, false otherwise
      */
     boolean removeFlow(FlowId id);
 
     /**
-     * Updates IFlow object, calculates match-action plan and executes it.
-     * <p>
-     * The IFlow object having the ID which is the same to the ID of the IFlow
-     * object specified by the parameter will be updated.
-     *
-     * @param flow new IFlow object for the update.
-     * @return true if succeeded, false otherwise.
-     */
-    boolean updateFlow(IFlow flow);
-
-    /**
      * Gets IFlow object.
      *
-     * @param id ID of IFlow object.
-     * @return IFlow object if found, null otherwise.
+     * @param id ID of IFlow object
+     * @return IFlow object if found, null otherwise
      */
     IFlow getFlow(FlowId id);
 
     /**
      * Gets All IFlow objects.
      *
-     * @return the collection of IFlow objects.
+     * @return the collection of IFlow objects
      */
     Collection<IFlow> getFlows();
 
     /**
      * Executes batch operation of IFlow object.
      *
-     * @param ops FlowOperations to be executed.
-     * @return true if succeeded, false otherwise.
+     * @param ops FlowOperations to be executed
+     * @return true if succeeded, false otherwise
      */
     boolean executeBatch(BatchOperation<IFlow> ops);
 
     /**
      * Sets a conflict detection policy.
      *
-     * @param policy ConflictDetectionPolicy object to be set.
+     * @param policy ConflictDetectionPolicy object to be set
      */
     void setConflictDetectionPolicy(ConflictDetectionPolicy policy);
 
     /**
      * Gets the conflict detection policy.
      *
-     * @return ConflictDetectionPolicy object being applied currently.
+     * @return ConflictDetectionPolicy object being applied currently
      */
     ConflictDetectionPolicy getConflictDetectionPolicy();
 
     /**
      * Adds event listener to this service.
      *
-     * @param listener EventListener to be added.
+     * @param listener EventListener to be added
      */
     void addEventListener(EventListener listener);
 
     /**
      * Removes event listener from this service.
      *
-     * @param listener EventListener to be removed.
+     * @param listener EventListener to be removed
      */
     void removeEventListener(EventListener listener);
 }
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 1f5f446..8775737 100644
--- a/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
@@ -40,13 +40,6 @@
     }
 
     @Override
-    public boolean updateFlow(IFlow flow) {
-        BatchOperation<IFlow> ops = new BatchOperation<IFlow>();
-        ops.addUpdateOperation(flow);
-        return executeBatch(ops);
-    }
-
-    @Override
     public IFlow getFlow(FlowId id) {
         // TODO Auto-generated method stub
         return null;
diff --git a/src/main/java/net/onrc/onos/core/matchaction/IMatchActionService.java b/src/main/java/net/onrc/onos/core/matchaction/IMatchActionService.java
index 9a87da9..1ff8e28 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/IMatchActionService.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/IMatchActionService.java
@@ -26,15 +26,6 @@
     boolean removeMatchAction(MatchActionId id);
 
     /**
-     * Replaces the existing match-action entry by specified match-action entry.
-     *
-     * @param matchAction MatchAction object which overwrites existing
-     *        match-action.
-     * @return true if succeeded, false otherwise.
-     */
-    boolean updateMatchAction(MatchAction matchAction);
-
-    /**
      * Gets the set of match-action entries.
      *
      * @return The set of match-action entries.
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
index c1fbd8e..c0dab41 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
@@ -32,15 +32,6 @@
     }
 
     @Override
-    public boolean updateMatchAction(MatchAction matchAction) {
-        BatchOperation<MatchAction> phase = new BatchOperation<MatchAction>();
-        phase.addUpdateOperation(matchAction);
-        MatchActionPlan plan = new MatchActionPlan();
-        plan.addPhase(phase);
-        return executePlan(plan);
-    }
-
-    @Override
     public Collection<MatchAction> getMatchActions() {
         // TODO Auto-generated method stub
         return null;
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/AddOperationTest.java b/src/test/java/net/onrc/onos/api/batchoperation/AddOperationTest.java
new file mode 100644
index 0000000..32ce4f0
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/batchoperation/AddOperationTest.java
@@ -0,0 +1,31 @@
+package net.onrc.onos.api.batchoperation;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * Unit test for AddOperation class.
+ */
+public class AddOperationTest {
+
+    /**
+     * Creates the AddOperatoin instance and checks if the getTarget() method
+     * returns the object which was specified with construcutor's parameter and
+     * the getOperator() method returns BatchOperator.ADD.
+     */
+    @Test
+    public void testConstructor() {
+        StringOperationTargetId id = new StringOperationTargetId("test");
+        StringOperationTarget target = new StringOperationTarget(id);
+        AddOperation<StringOperationTarget> op =
+                new AddOperation<StringOperationTarget>(target);
+
+        StringOperationTarget testTarget = op.getTarget();
+        assertEquals(target, testTarget);
+        assertEquals(id, testTarget.getId());
+        assertEquals("test", testTarget.getId().toString());
+
+        assertEquals(BatchOperator.ADD, op.getOperator());
+    }
+}
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java b/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java
new file mode 100644
index 0000000..664ae1f
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/batchoperation/BatchOperationTest.java
@@ -0,0 +1,162 @@
+package net.onrc.onos.api.batchoperation;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.junit.Test;
+
+/**
+ * Unit tests for BatchOperation class.
+ */
+public class BatchOperationTest {
+
+    /**
+     * Tests constructor of the BatchOperation. It checks the size of the
+     * operations equals to 0.
+     */
+    @Test
+    public void testConstructor() {
+        // Initialization
+        BatchOperation<StringOperationTarget> op = new BatchOperation<StringOperationTarget>();
+
+        // Checks if there is no operation in the object
+        assertEquals(0, op.size());
+        assertEquals(new LinkedList<BatchOperationEntry<StringOperationTarget>>(),
+                op.getOperations());
+        Iterator<BatchOperationEntry<StringOperationTarget>> i = op.iterator();
+        assertFalse(i.hasNext());
+    }
+
+    /**
+     * Tests adding the add-operation to the BatchOperation. It adds an
+     * add-operation to the BatchOperation and checks the list of operations
+     * maintained by the BatchOperation.
+     */
+    @Test
+    public void testAddAddOp() {
+        // Initialization
+        BatchOperation<StringOperationTarget> op = new BatchOperation<StringOperationTarget>();
+        assertEquals(0, op.size());
+
+        // Adds one add-operation
+        StringOperationTarget target1 = new StringOperationTarget("target1");
+        op.addAddOperation(target1);
+
+        // Checks the size
+        assertEquals(1, op.size());
+
+        // Checks the iterator
+        Iterator<BatchOperationEntry<StringOperationTarget>> i = op.iterator();
+        assertTrue(i.hasNext());
+        BatchOperationEntry<StringOperationTarget> entry = i.next();
+        assertEquals(BatchOperator.ADD, entry.getOperator());
+        assertTrue(entry instanceof AddOperation);
+        assertEquals(target1, ((AddOperation<StringOperationTarget>) entry).getTarget());
+        assertFalse(i.hasNext());
+
+        // Checks the list
+        List<BatchOperationEntry<StringOperationTarget>> list = op.getOperations();
+        assertEquals(1, list.size());
+        entry = list.get(0);
+        assertEquals(BatchOperator.ADD, entry.getOperator());
+        assertTrue(entry instanceof AddOperation);
+        assertEquals(target1, ((AddOperation<StringOperationTarget>) entry).getTarget());
+    }
+
+    /**
+     * Tests adding the remove-operation to the BatchOperation. It adds a
+     * remove-operation to the BatchOperation and checks the list of operations
+     * maintained by the BatchOperation.
+     */
+    @Test
+    public void testAddRemoveOp() {
+        // Initialization
+        BatchOperation<StringOperationTarget> op = new BatchOperation<StringOperationTarget>();
+        assertEquals(0, op.size());
+
+        // Adds one remove-operation
+        StringOperationTargetId targetId1 = new StringOperationTargetId("target1");
+        op.addRemoveOperation(targetId1);
+
+        // Checks the size
+        assertEquals(1, op.size());
+
+        // Checks the iterator
+        Iterator<BatchOperationEntry<StringOperationTarget>> i = op.iterator();
+        assertTrue(i.hasNext());
+        BatchOperationEntry<StringOperationTarget> entry = i.next();
+        assertEquals(BatchOperator.REMOVE, entry.getOperator());
+        assertTrue(entry instanceof RemoveOperation);
+        assertEquals(targetId1,
+                ((RemoveOperation<StringOperationTarget>) entry).getTargetId());
+        assertFalse(i.hasNext());
+
+        // Checks the list
+        List<BatchOperationEntry<StringOperationTarget>> list = op.getOperations();
+        assertEquals(1, list.size());
+        entry = list.get(0);
+        assertEquals(BatchOperator.REMOVE, entry.getOperator());
+        assertTrue(entry instanceof RemoveOperation);
+        assertEquals(targetId1,
+                ((RemoveOperation<StringOperationTarget>) entry).getTargetId());
+    }
+
+    /**
+     * Tests adding the two types of operations, add/remove-operations, to the
+     * BatchOperation. It adds add/remove-operation to the BatchOperation and
+     * checks the list of operations maintained by the BatchOperation.
+     */
+    @Test
+    public void testAddMultiOp() {
+        // Initialization
+        BatchOperation<StringOperationTarget> op = new BatchOperation<StringOperationTarget>();
+        assertEquals(0, op.size());
+
+        // Adds one add-operation
+        StringOperationTarget target1 = new StringOperationTarget("target1");
+        op.addAddOperation(target1);
+
+        // Adds one remove-operation
+        StringOperationTargetId targetId2 = new StringOperationTargetId("target2");
+        op.addRemoveOperation(targetId2);
+
+        // Checks the size
+        assertEquals(2, op.size());
+
+        // Checks the iterator
+        Iterator<BatchOperationEntry<StringOperationTarget>> i = op.iterator();
+        assertTrue(i.hasNext());
+        BatchOperationEntry<StringOperationTarget> entry = i.next();
+        assertEquals(BatchOperator.ADD, entry.getOperator());
+        assertTrue(entry instanceof AddOperation);
+        assertEquals(target1, ((AddOperation<StringOperationTarget>) entry).getTarget());
+
+        assertTrue(i.hasNext());
+        entry = i.next();
+        assertEquals(BatchOperator.REMOVE, entry.getOperator());
+        assertTrue(entry instanceof RemoveOperation);
+        assertEquals(targetId2,
+                ((RemoveOperation<StringOperationTarget>) entry).getTargetId());
+
+        assertFalse(i.hasNext());
+
+        // Checks the list
+        List<BatchOperationEntry<StringOperationTarget>> list = op.getOperations();
+        assertEquals(2, list.size());
+        entry = list.get(0);
+        assertEquals(BatchOperator.ADD, entry.getOperator());
+        assertTrue(entry instanceof AddOperation);
+        assertEquals(target1, ((AddOperation<StringOperationTarget>) entry).getTarget());
+
+        entry = list.get(1);
+        assertEquals(BatchOperator.REMOVE, entry.getOperator());
+        assertTrue(entry instanceof RemoveOperation);
+        assertEquals(targetId2,
+                ((RemoveOperation<StringOperationTarget>) entry).getTargetId());
+    }
+}
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/RemoveOperationTest.java b/src/test/java/net/onrc/onos/api/batchoperation/RemoveOperationTest.java
new file mode 100644
index 0000000..01209f8
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/batchoperation/RemoveOperationTest.java
@@ -0,0 +1,29 @@
+package net.onrc.onos.api.batchoperation;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * Unit test for RemoveOperation class.
+ */
+public class RemoveOperationTest {
+
+    /**
+     * Creates the RemoveOperation instance and checks if the getTargetId()
+     * method returns the object which was specified with construcutor's
+     * parameter and the getOperator() method returns BatchOperator.REMOVE.
+     */
+    @Test
+    public void testConstructor() {
+        StringOperationTargetId id = new StringOperationTargetId("test");
+        RemoveOperation<StringOperationTarget> op =
+                new RemoveOperation<StringOperationTarget>(id);
+
+        BatchOperationTargetId testTargetId = op.getTargetId();
+        assertEquals(id, testTargetId);
+        assertEquals("test", testTargetId.toString());
+
+        assertEquals(BatchOperator.REMOVE, op.getOperator());
+    }
+}
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/StringOperationTarget.java b/src/test/java/net/onrc/onos/api/batchoperation/StringOperationTarget.java
new file mode 100644
index 0000000..f526254
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/batchoperation/StringOperationTarget.java
@@ -0,0 +1,18 @@
+package net.onrc.onos.api.batchoperation;
+
+public class StringOperationTarget implements IBatchOperationTarget {
+    private StringOperationTargetId id;
+
+    public StringOperationTarget(StringOperationTargetId id) {
+        this.id = id;
+    }
+
+    public StringOperationTarget(String id) {
+        this.id = new StringOperationTargetId(id);
+    }
+
+    @Override
+    public StringOperationTargetId getId() {
+        return id;
+    }
+}
diff --git a/src/test/java/net/onrc/onos/api/batchoperation/StringOperationTargetId.java b/src/test/java/net/onrc/onos/api/batchoperation/StringOperationTargetId.java
new file mode 100644
index 0000000..86c8917
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/batchoperation/StringOperationTargetId.java
@@ -0,0 +1,28 @@
+package net.onrc.onos.api.batchoperation;
+
+public class StringOperationTargetId extends BatchOperationTargetId {
+    private final String id;
+
+    public StringOperationTargetId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        return id;
+    }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof StringOperationTargetId) {
+            return id.equals(obj.toString());
+        } else {
+            return false;
+        }
+    }
+}
