diff --git a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
index 4c5ac44..2c0132d 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
@@ -170,6 +170,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     public Response createFlows(@QueryParam("appId") String appId, InputStream stream) {
+        FlowRuleService service = get(FlowRuleService.class);
         ObjectNode root = mapper().createObjectNode();
         ArrayNode flowsNode = root.putArray(FLOWS);
         try {
@@ -183,7 +184,7 @@
 
             List<FlowRule> rules = codec(FlowRule.class).decode(flowsArray, this);
 
-            get(FlowRuleService.class).applyFlowRules(rules.toArray(new FlowRule[rules.size()]));
+            service.applyFlowRules(rules.toArray(new FlowRule[rules.size()]));
             rules.forEach(flowRule -> {
                 ObjectNode flowNode = mapper().createObjectNode();
                 flowNode.put(DEVICE_ID, flowRule.deviceId().toString())
@@ -209,10 +210,11 @@
     // TODO: we need to add "/device" suffix to the path to differentiate with appId
     @Path("{deviceId}")
     public Response getFlowByDeviceId(@PathParam("deviceId") String deviceId) {
+        FlowRuleService service = get(FlowRuleService.class);
         ObjectNode root = mapper().createObjectNode();
         ArrayNode flowsNode = root.putArray(FLOWS);
         Iterable<FlowEntry> flowEntries =
-                get(FlowRuleService.class).getFlowEntries(DeviceId.deviceId(deviceId));
+                service.getFlowEntries(DeviceId.deviceId(deviceId));
 
         if (flowEntries == null || !flowEntries.iterator().hasNext()) {
             throw new ItemNotFoundException(DEVICE_NOT_FOUND);
@@ -237,10 +239,11 @@
     @Path("{deviceId}/{flowId}")
     public Response getFlowByDeviceIdAndFlowId(@PathParam("deviceId") String deviceId,
                                                @PathParam("flowId") long flowId) {
+        FlowRuleService service = get(FlowRuleService.class);
         ObjectNode root = mapper().createObjectNode();
         ArrayNode flowsNode = root.putArray(FLOWS);
         Iterable<FlowEntry> flowEntries =
-                get(FlowRuleService.class).getFlowEntries(DeviceId.deviceId(deviceId));
+                service.getFlowEntries(DeviceId.deviceId(deviceId));
 
         if (flowEntries == null || !flowEntries.iterator().hasNext()) {
             throw new ItemNotFoundException(DEVICE_NOT_FOUND);
@@ -287,9 +290,10 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("application/{appId}")
     public Response removeFlowByAppId(@PathParam("appId") String appId) {
+        FlowRuleService service = get(FlowRuleService.class);
         ApplicationService appService = get(ApplicationService.class);
         ApplicationId idInstant = nullIsNotFound(appService.getId(appId), APP_ID_NOT_FOUND);
-        get(FlowRuleService.class).removeFlowRulesById(idInstant);
+        service.removeFlowRulesById(idInstant);
         return Response.noContent().build();
     }
 
@@ -313,6 +317,7 @@
     public Response createFlow(@PathParam("deviceId") String deviceId,
                                @QueryParam("appId") String appId,
                                InputStream stream) {
+        FlowRuleService service = get(FlowRuleService.class);
         try {
             ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
@@ -328,7 +333,7 @@
             }
 
             FlowRule rule = codec(FlowRule.class).decode(jsonTree, this);
-            get(FlowRuleService.class).applyFlowRules(rule);
+            service.applyFlowRules(rule);
             UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
                     .path("flows")
                     .path(deviceId)
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
index d2a361e..80eba7a 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
@@ -67,8 +67,6 @@
 
     private static final String DEVICE_INVALID = "Invalid deviceId in group creation request";
     private static final String GROUP_NOT_FOUND = "Group was not found";
-
-    private final GroupService groupService = get(GroupService.class);
     private final ObjectNode root = mapper().createObjectNode();
     private final ArrayNode groupsNode = root.putArray("groups");
 
@@ -89,6 +87,7 @@
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response getGroups() {
+        GroupService groupService = get(GroupService.class);
         final Iterable<Device> devices = get(DeviceService.class).getDevices();
         devices.forEach(device -> {
             final Iterable<Group> groups = groupService.getGroups(device.id());
@@ -111,6 +110,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}")
     public Response getGroupsByDeviceId(@PathParam("deviceId") String deviceId) {
+        GroupService groupService = get(GroupService.class);
         final Iterable<Group> groups = groupService.getGroups(DeviceId.deviceId(deviceId));
 
         groups.forEach(group -> groupsNode.add(codec(Group.class).encode(group, this)));
@@ -131,6 +131,7 @@
     @Path("{deviceId}/{appCookie}")
     public Response getGroupByDeviceIdAndAppCookie(@PathParam("deviceId") String deviceId,
                                                    @PathParam("appCookie") String appCookie) {
+        GroupService groupService = get(GroupService.class);
         final DeviceId deviceIdInstance = DeviceId.deviceId(deviceId);
 
         final GroupKey appCookieInstance = createKey(appCookie);
@@ -158,6 +159,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createGroup(@PathParam("deviceId") String deviceId,
                                 InputStream stream) {
+        GroupService groupService = get(GroupService.class);
         try {
 
             ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
@@ -196,6 +198,7 @@
     @Path("{deviceId}/{appCookie}")
     public Response deleteGroupByDeviceIdAndAppCookie(@PathParam("deviceId") String deviceId,
                                                       @PathParam("appCookie") String appCookie) {
+        GroupService groupService = get(GroupService.class);
         DeviceId deviceIdInstance = DeviceId.deviceId(deviceId);
 
         final GroupKey appCookieInstance = createKey(appCookie);
@@ -213,6 +216,7 @@
      */
     private void updateGroupBuckets(String deviceIdString, String appCookieString, InputStream stream)
                  throws IOException {
+        GroupService groupService = get(GroupService.class);
         DeviceId deviceId = DeviceId.deviceId(deviceIdString);
         final GroupKey groupKey = createKey(appCookieString);
 
@@ -273,6 +277,7 @@
     private void removeGroupBuckets(String deviceIdString, String appCookieString, String bucketIds) {
         DeviceId deviceId = DeviceId.deviceId(deviceIdString);
         final GroupKey groupKey = createKey(appCookieString);
+        GroupService groupService = get(GroupService.class);
 
         Group group = nullIsNotFound(groupService.getGroup(deviceId, groupKey), GROUP_NOT_FOUND);
 
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java
index cfd0f26..8b5484f 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java
@@ -60,11 +60,6 @@
     private static final String ROLE_INFO_NOT_FOUND = "Role info is not found";
     private static final String MASTERSHIP_ROLE_NOT_FOUND = "Mastership role is not found";
 
-    private final DeviceService deviceService = get(DeviceService.class);
-    private final MastershipService mastershipService = get(MastershipService.class);
-    private final MastershipAdminService mastershipAdminService =
-                                         get(MastershipAdminService.class);
-
     /**
      * Returns the role of the local node for the specified device.
      *
@@ -76,6 +71,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/local")
     public Response getLocalRole(@PathParam("deviceId") String deviceId) {
+        MastershipService mastershipService = get(MastershipService.class);
         MastershipRole role = mastershipService.getLocalRole(DeviceId.deviceId(deviceId));
         ObjectNode root = codec(MastershipRole.class).encode(role, this);
         return ok(root).build();
@@ -92,6 +88,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/master")
     public Response getMasterFor(@PathParam("deviceId") String deviceId) {
+        MastershipService mastershipService = get(MastershipService.class);
         NodeId id = nullIsNotFound(mastershipService.getMasterFor(
                     DeviceId.deviceId(deviceId)), NODE_ID_NOT_FOUND);
 
@@ -112,6 +109,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/role")
     public Response getNodesFor(@PathParam("deviceId") String deviceId) {
+        MastershipService mastershipService = get(MastershipService.class);
         RoleInfo info = nullIsNotFound(mastershipService.getNodesFor(
                         DeviceId.deviceId(deviceId)), ROLE_INFO_NOT_FOUND);
         ObjectNode root = codec(RoleInfo.class).encode(info, this);
@@ -129,6 +127,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{nodeId}/device")
     public Response getDeviceOf(@PathParam("nodeId") String nodeId) {
+        MastershipService mastershipService = get(MastershipService.class);
         ObjectNode root = mapper().createObjectNode();
         ArrayNode devicesNode = root.putArray(DEVICE_IDS);
 
@@ -152,6 +151,8 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/request")
     public Response requestRoleFor(@PathParam("deviceId") String deviceId) {
+        MastershipService mastershipService = get(MastershipService.class);
+        DeviceService deviceService = get(DeviceService.class);
         DeviceId id = DeviceId.deviceId(deviceId);
         nullIsNotFound(deviceService.getDevice(id), DEVICE_ID_NOT_FOUND);
 
@@ -173,6 +174,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/relinquish")
     public Response relinquishMastership(@PathParam("deviceId") String deviceId) {
+        MastershipService mastershipService = get(MastershipService.class);
         DeviceId id = DeviceId.deviceId(deviceId);
         mastershipService.relinquishMastershipSync(id);
         return Response.created(id.uri()).build();
@@ -189,6 +191,7 @@
     @PUT
     @Consumes(MediaType.APPLICATION_JSON)
     public Response setRole(InputStream stream) {
+        MastershipAdminService mastershipAdminService = get(MastershipAdminService.class);
 
         try {
             ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
@@ -222,6 +225,7 @@
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response balanceRoles() {
+        MastershipAdminService mastershipAdminService = get(MastershipAdminService.class);
         mastershipAdminService.balanceRoles();
         return Response.ok().build();
     }
