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 1a3523b..ccf6081 100644
--- a/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
@@ -26,10 +26,12 @@
 import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
 import net.onrc.onos.api.flowmanager.FlowManagerListener;
 import net.onrc.onos.core.datagrid.ISharedCollectionsService;
-import net.onrc.onos.core.matchaction.MatchActionIdGeneratorWithIdBlockAllocator;
+import net.onrc.onos.core.matchaction.MatchActionFloodlightService;
+import net.onrc.onos.core.matchaction.MatchActionIdGenerator;
 import net.onrc.onos.core.matchaction.MatchActionOperationEntry;
 import net.onrc.onos.core.matchaction.MatchActionOperations;
-import net.onrc.onos.core.matchaction.MatchActionOperationsIdGeneratorWithIdBlockAllocator;
+import net.onrc.onos.core.matchaction.MatchActionOperationsIdGenerator;
+import net.onrc.onos.core.matchaction.MatchActionService;
 import net.onrc.onos.core.registry.IControllerRegistryService;
 import net.onrc.onos.core.util.IdBlockAllocator;
 
@@ -43,8 +45,9 @@
     private ConflictDetectionPolicy conflictDetectionPolicy;
     private FlowIdGeneratorWithIdBlockAllocator flowIdGenerator;
     private FlowBatchIdGeneratorWithIdBlockAllocator flowBatchIdGenerator;
-    private MatchActionIdGeneratorWithIdBlockAllocator maIdGenerator;
-    private MatchActionOperationsIdGeneratorWithIdBlockAllocator maoIdGenerator;
+    private MatchActionIdGenerator maIdGenerator;
+    private MatchActionOperationsIdGenerator maoIdGenerator;
+    private MatchActionService matchActionService;
     private IControllerRegistryService registryService;
     private ISharedCollectionsService sharedCollectionService;
     private FlowMap flowMap;
@@ -69,33 +72,27 @@
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
         return Arrays.asList(
-                // TODO: Add MatchActionService.class.
-                // The class has to be an instance of IFloodlightService.
+                MatchActionFloodlightService.class,
                 ISharedCollectionsService.class,
                 IControllerRegistryService.class);
     }
 
     @Override
     public void init(FloodlightModuleContext context) throws FloodlightModuleException {
+        matchActionService = context.getServiceImpl(MatchActionFloodlightService.class);
         registryService = context.getServiceImpl(IControllerRegistryService.class);
         sharedCollectionService = context.getServiceImpl(ISharedCollectionsService.class);
     }
 
     @Override
     public void startUp(FloodlightModuleContext context) throws FloodlightModuleException {
-
         IdBlockAllocator idBlockAllocator = registryService;
         flowIdGenerator =
                 new FlowIdGeneratorWithIdBlockAllocator(idBlockAllocator);
         flowBatchIdGenerator =
                 new FlowBatchIdGeneratorWithIdBlockAllocator(idBlockAllocator);
-
-        // TODO: MatchAction related ID generator should be retrieved from
-        // MatchAction Module.
-        maIdGenerator =
-                new MatchActionIdGeneratorWithIdBlockAllocator(idBlockAllocator);
-        maoIdGenerator =
-                new MatchActionOperationsIdGeneratorWithIdBlockAllocator(idBlockAllocator);
+        maIdGenerator = matchActionService.getMatchActionIdGenerator();
+        maoIdGenerator = matchActionService.getMatchActionOperationsIdGenerator();
 
         flowMap = new SharedFlowMap(sharedCollectionService);
         flowBatchMap = new SharedFlowBatchMap(sharedCollectionService);
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionFloodlightService.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionFloodlightService.java
new file mode 100644
index 0000000..73c9e87
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionFloodlightService.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.core.matchaction;
+
+import net.floodlightcontroller.core.module.IFloodlightService;
+
+/**
+ * A match action service interface as {@link IFloodlightService} service.
+ */
+public interface MatchActionFloodlightService extends MatchActionService,
+        IFloodlightService {
+}
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 9ed031c..78e528c 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionModule.java
@@ -5,6 +5,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+
 import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
 
 /**
@@ -12,7 +13,7 @@
  * <p>
  * TODO: Make all methods thread-safe
  */
-public class MatchActionModule implements MatchActionService {
+public class MatchActionModule implements MatchActionFloodlightService {
 
     private final HashSet<MatchAction> currentOperations = new HashSet<>();
 
@@ -55,6 +56,20 @@
     }
 
     @Override
+    public MatchActionIdGenerator getMatchActionIdGenerator() {
+        // TODO Auto-generated method stub
+        // use MatchActionIdGeneratorWithIdBlockAllocator.
+        return null;
+    }
+
+    @Override
+    public MatchActionOperationsIdGenerator getMatchActionOperationsIdGenerator() {
+        // TODO Auto-generated method stub
+        // use MatchActionOperationsIdGeneratorWithIdBlockAllocator.
+        return null;
+    }
+
+    @Override
     public void addEventListener(EventListener listener) {
         // TODO Auto-generated method stub
 
diff --git a/src/main/java/net/onrc/onos/core/matchaction/MatchActionService.java b/src/main/java/net/onrc/onos/core/matchaction/MatchActionService.java
index a905e09..161ed91 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/MatchActionService.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/MatchActionService.java
@@ -47,6 +47,20 @@
     ConflictDetectionPolicy getConflictDetectionPolicy();
 
     /**
+     * Gets the ID generator for MatchActionId.
+     *
+     * @return the ID generator for MatchActionId
+     */
+    MatchActionIdGenerator getMatchActionIdGenerator();
+
+    /**
+     * Gets the ID generator for MatchActionOperationsId.
+     *
+     * @return the ID generator for MatchActionOperationsId
+     */
+    MatchActionOperationsIdGenerator getMatchActionOperationsIdGenerator();
+
+    /**
      * Adds event listener to this service.
      *
      * @param listener EventListener to be added.
