You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/10/12 23:01:34 UTC

[1/2] git commit: CLOUDSTACK-332: intermediate checkin fixing count parameter in listCommands Fixes the count in commands:

Updated Branches:
  refs/heads/master 6e60a0756 -> 8f2d9a09e


CLOUDSTACK-332: intermediate checkin fixing count parameter in listCommands
Fixes the count in commands:

listVolumes
listVirtualMachines
listSnapshots
listRouters
listFirewallRules
listPortForwardingRules
listLoadBalancerRules
listIpForwardingRules
listAccounts
listUsers
listDomains
listDomainChildren
listPublicIpAddresses
listAlerts
listAsyncJobs
listRemoteAccessVpns
listVpnUsers
listTags
listPrivateGateways
listNetworkACLs
listStaticRoutes

Conflicts:

	api/src/com/cloud/api/commands/ListVMsCmd.java
	api/src/com/cloud/api/commands/ListVolumesCmd.java
	api/src/com/cloud/network/lb/LoadBalancingRulesService.java
	server/src/com/cloud/network/firewall/FirewallManagerImpl.java
	server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
	server/src/com/cloud/network/rules/RulesManagerImpl.java
	server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
	server/src/com/cloud/network/vpc/VpcManagerImpl.java
	server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
	server/src/com/cloud/tags/TaggedResourceManagerImpl.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/8f2d9a09
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/8f2d9a09
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/8f2d9a09

Branch: refs/heads/master
Commit: 8f2d9a09e546e42a01b1cb7dceb2a7f129811a0d
Parents: 6e60a07
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Fri Oct 12 12:52:28 2012 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Fri Oct 12 13:58:59 2012 -0700

----------------------------------------------------------------------
 .../com/cloud/api/commands/ListAccountsCmd.java    |    7 +-
 api/src/com/cloud/api/commands/ListAlertsCmd.java  |    7 +-
 .../com/cloud/api/commands/ListAsyncJobsCmd.java   |    7 +-
 .../cloud/api/commands/ListDomainChildrenCmd.java  |    7 +-
 api/src/com/cloud/api/commands/ListDomainsCmd.java |    7 +-
 .../cloud/api/commands/ListFirewallRulesCmd.java   |    7 +-
 .../api/commands/ListIpForwardingRulesCmd.java     |    9 +-
 .../api/commands/ListLoadBalancerRulesCmd.java     |    7 +-
 .../com/cloud/api/commands/ListNetworkACLsCmd.java |    7 +-
 .../api/commands/ListPortForwardingRulesCmd.java   |    7 +-
 .../cloud/api/commands/ListPrivateGatewaysCmd.java |    7 +-
 .../api/commands/ListPublicIpAddressesCmd.java     |    7 +-
 .../api/commands/ListRemoteAccessVpnsCmd.java      |    9 +-
 api/src/com/cloud/api/commands/ListRoutersCmd.java |    7 +-
 .../com/cloud/api/commands/ListSnapshotsCmd.java   |    7 +-
 .../cloud/api/commands/ListStaticRoutesCmd.java    |    7 +-
 api/src/com/cloud/api/commands/ListTagsCmd.java    |    7 +-
 api/src/com/cloud/api/commands/ListUsersCmd.java   |    7 +-
 api/src/com/cloud/api/commands/ListVMsCmd.java     |   10 +-
 api/src/com/cloud/api/commands/ListVolumesCmd.java |    7 +-
 .../com/cloud/api/commands/ListVpnUsersCmd.java    |    7 +-
 api/src/com/cloud/api/response/ListResponse.java   |   15 ++-
 .../cloud/network/firewall/FirewallService.java    |    4 +-
 .../cloud/network/firewall/NetworkACLService.java  |    4 +-
 .../network/lb/LoadBalancingRulesService.java      |    6 +-
 api/src/com/cloud/network/rules/RulesService.java  |    5 +-
 .../network/security/SecurityGroupService.java     |    4 +-
 api/src/com/cloud/network/vpc/VpcService.java      |    5 +-
 .../cloud/network/vpn/RemoteAccessVpnService.java  |    5 +-
 api/src/com/cloud/server/ManagementService.java    |    8 +-
 .../com/cloud/server/TaggedResourceService.java    |    3 +-
 api/src/com/cloud/storage/StorageService.java      |    3 +-
 .../cloud/storage/snapshot/SnapshotService.java    |    3 +-
 api/src/com/cloud/user/AccountService.java         |    4 +-
 api/src/com/cloud/user/DomainService.java          |    5 +-
 api/src/com/cloud/vm/UserVmService.java            |    3 +-
 server/src/com/cloud/api/ApiDBUtils.java           |    3 +-
 .../cloud/api/response/ApiResponseSerializer.java  |    4 +-
 .../network/firewall/FirewallManagerImpl.java      |    7 +-
 .../network/lb/LoadBalancingRulesManagerImpl.java  |    7 +-
 .../com/cloud/network/rules/RulesManagerImpl.java  |   12 ++-
 .../cloud/network/vpc/NetworkACLManagerImpl.java   |    7 +-
 .../src/com/cloud/network/vpc/VpcManagerImpl.java  |   24 ++--
 .../network/vpn/RemoteAccessVpnManagerImpl.java    |   11 +-
 .../src/com/cloud/server/ManagementServerImpl.java |   23 +++--
 .../src/com/cloud/storage/StorageManagerImpl.java  |    6 +-
 .../storage/snapshot/SnapshotManagerImpl.java      |    5 +-
 .../com/cloud/tags/TaggedResourceManagerImpl.java  |   98 ++++++++-------
 server/src/com/cloud/user/AccountManagerImpl.java  |   12 +-
 server/src/com/cloud/user/DomainManagerImpl.java   |   16 ++-
 server/src/com/cloud/vm/UserVmManager.java         |    4 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java     |   14 ++-
 .../com/cloud/user/MockAccountManagerImpl.java     |    4 +-
 .../test/com/cloud/user/MockDomainManagerImpl.java |    5 +-
 .../test/com/cloud/vm/MockUserVmManagerImpl.java   |    4 +-
 server/test/com/cloud/vpc/MockVpcManagerImpl.java  |    5 +-
 utils/src/com/cloud/utils/db/GenericDao.java       |    9 ++
 utils/src/com/cloud/utils/db/GenericDaoBase.java   |   76 +++++++++++
 utils/src/com/cloud/utils/db/SqlGenerator.java     |    7 +
 59 files changed, 385 insertions(+), 209 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListAccountsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListAccountsCmd.java b/api/src/com/cloud/api/commands/ListAccountsCmd.java
index eac7d1b..6e0a524 100755
--- a/api/src/com/cloud/api/commands/ListAccountsCmd.java
+++ b/api/src/com/cloud/api/commands/ListAccountsCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.AccountResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.user.Account;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class)
 public class ListAccountsCmd extends BaseListDomainResourcesCmd {
@@ -91,15 +92,15 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd {
 
     @Override
     public void execute(){
-        List<? extends Account> accounts = _accountService.searchForAccounts(this);
+        Pair<List<? extends Account>, Integer> accounts = _accountService.searchForAccounts(this);
         ListResponse<AccountResponse> response = new ListResponse<AccountResponse>();
         List<AccountResponse> accountResponses = new ArrayList<AccountResponse>();
-        for (Account account : accounts) {
+        for (Account account : accounts.first()) {
             AccountResponse acctResponse = _responseGenerator.createAccountResponse(account);
             acctResponse.setObjectName("account");
             accountResponses.add(acctResponse);
         }
-        response.setResponses(accountResponses);
+        response.setResponses(accountResponses, accounts.second());
         response.setResponseName(getCommandName());
         
         this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListAlertsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListAlertsCmd.java b/api/src/com/cloud/api/commands/ListAlertsCmd.java
index 1504093..1f6c7b3 100644
--- a/api/src/com/cloud/api/commands/ListAlertsCmd.java
+++ b/api/src/com/cloud/api/commands/ListAlertsCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Implementation;
 import com.cloud.api.Parameter;
 import com.cloud.api.response.AlertResponse;
 import com.cloud.api.response.ListResponse;
+import com.cloud.utils.Pair;
 
 @Implementation(description = "Lists all alerts.", responseObject = AlertResponse.class)
 public class ListAlertsCmd extends BaseListCmd {
@@ -71,10 +72,10 @@ public class ListAlertsCmd extends BaseListCmd {
 
     @Override
     public void execute() {
-        List<? extends Alert> result = _mgr.searchForAlerts(this);
+        Pair<List<? extends Alert>, Integer> result = _mgr.searchForAlerts(this);
         ListResponse<AlertResponse> response = new ListResponse<AlertResponse>();
         List<AlertResponse> alertResponseList = new ArrayList<AlertResponse>();
-        for (Alert alert : result) {
+        for (Alert alert : result.first()) {
             AlertResponse alertResponse = new AlertResponse();
             alertResponse.setId(alert.getId());
             alertResponse.setAlertType(alert.getType());
@@ -85,7 +86,7 @@ public class ListAlertsCmd extends BaseListCmd {
             alertResponseList.add(alertResponse);
         }
 
-        response.setResponses(alertResponseList);
+        response.setResponses(alertResponseList, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java b/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java
index bd6e80b..e0520cd 100644
--- a/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java
+++ b/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java
@@ -27,6 +27,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.AsyncJobResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.async.AsyncJob;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class)
 public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd {
@@ -58,14 +59,14 @@ public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd {
 
     @Override
     public void execute(){
-        List<? extends AsyncJob> result = _mgr.searchForAsyncJobs(this);
+        Pair<List<? extends AsyncJob>, Integer> result = _mgr.searchForAsyncJobs(this);
         ListResponse<AsyncJobResponse> response = new ListResponse<AsyncJobResponse>();
         List<AsyncJobResponse> jobResponses = new ArrayList<AsyncJobResponse>();
-        for (AsyncJob job : result) {
+        for (AsyncJob job : result.first()) {
             jobResponses.add(_responseGenerator.createAsyncJobResponse(job));
         }
 
-        response.setResponses(jobResponses);
+        response.setResponses(jobResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java
index d5b3f6c..bb0dd7f 100644
--- a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java
+++ b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.DomainResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.domain.Domain;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class)
 public class ListDomainChildrenCmd extends BaseListCmd {
@@ -84,16 +85,16 @@ public class ListDomainChildrenCmd extends BaseListCmd {
     
     @Override
     public void execute(){
-        List<? extends Domain> result = _domainService.searchForDomainChildren(this);
+        Pair<List<? extends Domain>, Integer> result = _domainService.searchForDomainChildren(this);
         ListResponse<DomainResponse> response = new ListResponse<DomainResponse>();
         List<DomainResponse> domainResponses = new ArrayList<DomainResponse>();
-        for (Domain domain : result) {
+        for (Domain domain : result.first()) {
             DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain);
             domainResponse.setObjectName("domain");
             domainResponses.add(domainResponse);
         }
 
-        response.setResponses(domainResponses);
+        response.setResponses(domainResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListDomainsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListDomainsCmd.java b/api/src/com/cloud/api/commands/ListDomainsCmd.java
index 9cefe9b..93d1570 100644
--- a/api/src/com/cloud/api/commands/ListDomainsCmd.java
+++ b/api/src/com/cloud/api/commands/ListDomainsCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.DomainResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.domain.Domain;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class)
 public class ListDomainsCmd extends BaseListCmd {
@@ -84,16 +85,16 @@ public class ListDomainsCmd extends BaseListCmd {
 
     @Override
     public void execute(){
-        List<? extends Domain> result = _domainService.searchForDomains(this);
+        Pair<List<? extends Domain>, Integer> result = _domainService.searchForDomains(this);
         ListResponse<DomainResponse> response = new ListResponse<DomainResponse>();
         List<DomainResponse> domainResponses = new ArrayList<DomainResponse>();
-        for (Domain domain : result) {
+        for (Domain domain : result.first()) {
             DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain);
             domainResponse.setObjectName("domain");
             domainResponses.add(domainResponse);
         }
 
-        response.setResponses(domainResponses);
+        response.setResponses(domainResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java b/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java
index 66dcc4d..c136266 100644
--- a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java
+++ b/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.FirewallResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.network.rules.FirewallRule;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class)
 public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd {
@@ -69,16 +70,16 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends FirewallRule> result = _firewallService.listFirewallRules(this);
+        Pair<List<? extends FirewallRule>, Integer> result = _firewallService.listFirewallRules(this);
         ListResponse<FirewallResponse> response = new ListResponse<FirewallResponse>();
         List<FirewallResponse> fwResponses = new ArrayList<FirewallResponse>();
         
-        for (FirewallRule fwRule : result) {
+        for (FirewallRule fwRule : result.first()) {
             FirewallResponse ruleData = _responseGenerator.createFirewallResponse(fwRule);
             ruleData.setObjectName("firewallrule");
             fwResponses.add(ruleData);
         }
-        response.setResponses(fwResponses);
+        response.setResponses(fwResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response); 
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java
index f385fe0..fedbac0 100644
--- a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java
+++ b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java
@@ -22,7 +22,6 @@ import java.util.List;
 import org.apache.log4j.Logger;
 
 import com.cloud.api.ApiConstants;
-import com.cloud.api.BaseCmd.CommandType;
 import com.cloud.api.BaseListProjectAndAccountResourcesCmd;
 import com.cloud.api.IdentityMapper;
 import com.cloud.api.Implementation;
@@ -32,6 +31,7 @@ import com.cloud.api.response.IpForwardingRuleResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.StaticNatRule;
+import com.cloud.utils.Pair;
 
 @Implementation(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class)
 public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResourcesCmd {
@@ -82,17 +82,18 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources
 
     @Override
     public void execute(){
-        List<? extends FirewallRule> result = _rulesService.searchStaticNatRules(publicIpAddressId, id, vmId, this.getStartIndex(), this.getPageSizeVal(), this.getAccountName(), this.getDomainId(), this.getProjectId(), this.isRecursive(), this.listAll());
+        Pair<List<? extends FirewallRule>, Integer> result = _rulesService.searchStaticNatRules(publicIpAddressId, id, vmId, 
+                this.getStartIndex(), this.getPageSizeVal(), this.getAccountName(), this.getDomainId(), this.getProjectId(), this.isRecursive(), this.listAll());
         ListResponse<IpForwardingRuleResponse> response = new ListResponse<IpForwardingRuleResponse>();
         List<IpForwardingRuleResponse> ipForwardingResponses = new ArrayList<IpForwardingRuleResponse>();
-        for (FirewallRule rule : result) {
+        for (FirewallRule rule : result.first()) {
             StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false);
             IpForwardingRuleResponse resp = _responseGenerator.createIpForwardingRuleResponse(staticNatRule);
             if (resp != null) {
                 ipForwardingResponses.add(resp);
             }
         }
-        response.setResponses(ipForwardingResponses);
+        response.setResponses(ipForwardingResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java
index 43b0540..8413f60 100644
--- a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java
+++ b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.LoadBalancerResponse;
 import com.cloud.network.rules.LoadBalancer;
+import com.cloud.utils.Pair;
 
 @Implementation(description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class)
 public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd {
@@ -94,17 +95,17 @@ public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd {
 
     @Override
     public void execute() {
-        List<? extends LoadBalancer> loadBalancers = _lbService.searchForLoadBalancers(this);
+        Pair<List<? extends LoadBalancer>, Integer> loadBalancers = _lbService.searchForLoadBalancers(this);
         ListResponse<LoadBalancerResponse> response = new ListResponse<LoadBalancerResponse>();
         List<LoadBalancerResponse> lbResponses = new ArrayList<LoadBalancerResponse>();
         if (loadBalancers != null) {
-            for (LoadBalancer loadBalancer : loadBalancers) {
+            for (LoadBalancer loadBalancer : loadBalancers.first()) {
                 LoadBalancerResponse lbResponse = _responseGenerator.createLoadBalancerResponse(loadBalancer);
                 lbResponse.setObjectName("loadbalancerrule");
                 lbResponses.add(lbResponse);
             }
         }
-        response.setResponses(lbResponses);
+        response.setResponses(lbResponses, loadBalancers.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
index 3529558..bdb3c3b 100644
--- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
+++ b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
@@ -31,6 +31,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.NetworkACLResponse;
 import com.cloud.network.rules.FirewallRule;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists all network ACLs", responseObject=NetworkACLResponse.class)
 public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd {
@@ -79,15 +80,15 @@ public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends FirewallRule> result = _networkACLService.listNetworkACLs(this);
+        Pair<List<? extends FirewallRule>,Integer> result = _networkACLService.listNetworkACLs(this);
         ListResponse<NetworkACLResponse> response = new ListResponse<NetworkACLResponse>();
         List<NetworkACLResponse> aclResponses = new ArrayList<NetworkACLResponse>();
         
-        for (FirewallRule acl : result) {
+        for (FirewallRule acl : result.first()) {
             NetworkACLResponse ruleData = _responseGenerator.createNetworkACLResponse(acl);
             aclResponses.add(ruleData);
         }
-        response.setResponses(aclResponses);
+        response.setResponses(aclResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response); 
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
index 499a574..0315a12 100644
--- a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
+++ b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.FirewallRuleResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.network.rules.PortForwardingRule;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class)
 public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd {
@@ -71,16 +72,16 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends PortForwardingRule> result = _rulesService.listPortForwardingRules(this);
+        Pair<List<? extends PortForwardingRule>, Integer> result = _rulesService.listPortForwardingRules(this);
         ListResponse<FirewallRuleResponse> response = new ListResponse<FirewallRuleResponse>();
         List<FirewallRuleResponse> fwResponses = new ArrayList<FirewallRuleResponse>();
         
-        for (PortForwardingRule fwRule : result) {
+        for (PortForwardingRule fwRule : result.first()) {
             FirewallRuleResponse ruleData = _responseGenerator.createPortForwardingRuleResponse(fwRule);
             ruleData.setObjectName("portforwardingrule");
             fwResponses.add(ruleData);
         }
-        response.setResponses(fwResponses);
+        response.setResponses(fwResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response); 
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java b/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java
index 203d517..389df5e 100644
--- a/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java
+++ b/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.PrivateGatewayResponse;
 import com.cloud.network.vpc.PrivateGateway;
+import com.cloud.utils.Pair;
 
 @Implementation(description="List private gateways", responseObject=PrivateGatewayResponse.class)
 public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCmd{
@@ -91,14 +92,14 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm
     
     @Override
     public void execute() {
-        List<PrivateGateway> gateways = _vpcService.listPrivateGateway(this);
+        Pair<List<PrivateGateway>, Integer> gateways = _vpcService.listPrivateGateway(this);
         ListResponse<PrivateGatewayResponse> response = new ListResponse<PrivateGatewayResponse>();
         List<PrivateGatewayResponse> projectResponses = new ArrayList<PrivateGatewayResponse>();
-        for (PrivateGateway gateway : gateways) {
+        for (PrivateGateway gateway : gateways.first()) {
             PrivateGatewayResponse gatewayResponse = _responseGenerator.createPrivateGatewayResponse(gateway);
             projectResponses.add(gatewayResponse);
         }
-        response.setResponses(projectResponses);
+        response.setResponses(projectResponses, gateways.second());
         response.setResponseName(getCommandName());
         
         this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java
index c6acf97..a49c5fe 100644
--- a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java
+++ b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java
@@ -30,6 +30,7 @@ import com.cloud.api.response.IPAddressResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.async.AsyncJob;
 import com.cloud.network.IpAddress;
+import com.cloud.utils.Pair;
 
 
 @Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class)
@@ -141,16 +142,16 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends IpAddress> result = _mgr.searchForIPAddresses(this);
+        Pair<List<? extends IpAddress>, Integer> result = _mgr.searchForIPAddresses(this);
         ListResponse<IPAddressResponse> response = new ListResponse<IPAddressResponse>();
         List<IPAddressResponse> ipAddrResponses = new ArrayList<IPAddressResponse>();
-        for (IpAddress ipAddress : result) {
+        for (IpAddress ipAddress : result.first()) {
             IPAddressResponse ipResponse = _responseGenerator.createIPAddressResponse(ipAddress);
             ipResponse.setObjectName("publicipaddress");
             ipAddrResponses.add(ipResponse);
         }
 
-        response.setResponses(ipAddrResponses);
+        response.setResponses(ipAddrResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java b/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java
index 4260e3a..9dd1644 100644
--- a/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java
+++ b/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.RemoteAccessVpnResponse;
 import com.cloud.network.RemoteAccessVpn;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class)
 public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesCmd {
@@ -64,15 +65,15 @@ public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesC
 
     @Override
     public void execute(){
-        List<? extends RemoteAccessVpn> vpns = _ravService.searchForRemoteAccessVpns(this);
+        Pair<List<? extends RemoteAccessVpn>, Integer> vpns = _ravService.searchForRemoteAccessVpns(this);
         ListResponse<RemoteAccessVpnResponse> response = new ListResponse<RemoteAccessVpnResponse>();
         List<RemoteAccessVpnResponse> vpnResponses = new ArrayList<RemoteAccessVpnResponse>();
-        if (vpns != null && !vpns.isEmpty()) {
-            for (RemoteAccessVpn vpn : vpns) {
+        if (vpns.first() != null && !vpns.first().isEmpty()) {
+            for (RemoteAccessVpn vpn : vpns.first()) {
                 vpnResponses.add(_responseGenerator.createRemoteAccessVpnResponse(vpn));
             }
         }
-        response.setResponses(vpnResponses);
+        response.setResponses(vpnResponses, vpns.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListRoutersCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListRoutersCmd.java b/api/src/com/cloud/api/commands/ListRoutersCmd.java
index 72a9144..8bf9ba8 100644
--- a/api/src/com/cloud/api/commands/ListRoutersCmd.java
+++ b/api/src/com/cloud/api/commands/ListRoutersCmd.java
@@ -30,6 +30,7 @@ import com.cloud.api.response.DomainRouterResponse;
 import com.cloud.api.response.ListResponse;
 import com.cloud.async.AsyncJob;
 import com.cloud.network.router.VirtualRouter;
+import com.cloud.utils.Pair;
 
 @Implementation(description="List routers.", responseObject=DomainRouterResponse.class)
 public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
@@ -129,16 +130,16 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
 
     @Override
     public void execute(){
-        List<? extends VirtualRouter> result = _mgr.searchForRouters(this);
+        Pair<List<? extends VirtualRouter>, Integer> result = _mgr.searchForRouters(this);
         ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>();
         List<DomainRouterResponse> routerResponses = new ArrayList<DomainRouterResponse>();
-        for (VirtualRouter router : result) {
+        for (VirtualRouter router : result.first()) {
             DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router);
             routerResponse.setObjectName("router");
             routerResponses.add(routerResponse);
         }
 
-        response.setResponses(routerResponses);
+        response.setResponses(routerResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
index d7b2c9e..cc2aad8 100644
--- a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
+++ b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
@@ -30,6 +30,7 @@ import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.SnapshotResponse;
 import com.cloud.async.AsyncJob;
 import com.cloud.storage.Snapshot;
+import com.cloud.utils.Pair;
 
 
 @Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class)
@@ -98,15 +99,15 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd {
 
     @Override
     public void execute(){
-        List<? extends Snapshot> result = _snapshotService.listSnapshots(this);
+        Pair<List<? extends Snapshot>, Integer> result = _snapshotService.listSnapshots(this);
         ListResponse<SnapshotResponse> response = new ListResponse<SnapshotResponse>();
         List<SnapshotResponse> snapshotResponses = new ArrayList<SnapshotResponse>();
-        for (Snapshot snapshot : result) {
+        for (Snapshot snapshot : result.first()) {
             SnapshotResponse snapshotResponse = _responseGenerator.createSnapshotResponse(snapshot);
             snapshotResponse.setObjectName("snapshot");
             snapshotResponses.add(snapshotResponse);
         }
-        response.setResponses(snapshotResponses);
+        response.setResponses(snapshotResponses, result.second());
         response.setResponseName(getCommandName());
         
         this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java b/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
index 3cd8286..93b533e 100644
--- a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
+++ b/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
@@ -26,6 +26,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.StaticRouteResponse;
 import com.cloud.network.vpc.StaticRoute;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists all static routes", responseObject=StaticRouteResponse.class)
 public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd {
@@ -68,15 +69,15 @@ public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends StaticRoute> result = _vpcService.listStaticRoutes(this);
+        Pair<List<? extends StaticRoute>, Integer> result = _vpcService.listStaticRoutes(this);
         ListResponse<StaticRouteResponse> response = new ListResponse<StaticRouteResponse>();
         List<StaticRouteResponse> routeResponses = new ArrayList<StaticRouteResponse>();
         
-        for (StaticRoute route : result) {
+        for (StaticRoute route : result.first()) {
             StaticRouteResponse ruleData = _responseGenerator.createStaticRouteResponse(route);
             routeResponses.add(ruleData);
         }
-        response.setResponses(routeResponses);
+        response.setResponses(routeResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response); 
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListTagsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListTagsCmd.java b/api/src/com/cloud/api/commands/ListTagsCmd.java
index 7206b1c..b832b42 100644
--- a/api/src/com/cloud/api/commands/ListTagsCmd.java
+++ b/api/src/com/cloud/api/commands/ListTagsCmd.java
@@ -27,6 +27,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.ResourceTagResponse;
 import com.cloud.server.ResourceTag;
+import com.cloud.utils.Pair;
 
 @Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank")
 public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{
@@ -55,14 +56,14 @@ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{
     @Override
     public void execute() {
       
-      List<? extends ResourceTag> tags = _taggedResourceService.listTags(this);
+      Pair<List<? extends ResourceTag>, Integer> tags = _taggedResourceService.listTags(this);
       ListResponse<ResourceTagResponse> response = new ListResponse<ResourceTagResponse>();
       List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>();
-      for (ResourceTag tag : tags) {
+      for (ResourceTag tag : tags.first()) {
           ResourceTagResponse tagResponse = _responseGenerator.createResourceTagResponse(tag, false);
           tagResponses.add(tagResponse);
       }
-      response.setResponses(tagResponses);
+      response.setResponses(tagResponses, tags.second());
       
       response.setResponseName(getCommandName());
       this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListUsersCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListUsersCmd.java b/api/src/com/cloud/api/commands/ListUsersCmd.java
index ec3a1bb..03db56d 100644
--- a/api/src/com/cloud/api/commands/ListUsersCmd.java
+++ b/api/src/com/cloud/api/commands/ListUsersCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.UserResponse;
 import com.cloud.user.UserAccount;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists user accounts", responseObject=UserResponse.class)
 public class ListUsersCmd extends BaseListAccountResourcesCmd {
@@ -85,14 +86,14 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends UserAccount> result = _accountService.searchForUsers(this);
+        Pair<List<? extends UserAccount>, Integer> result = _accountService.searchForUsers(this);
         ListResponse<UserResponse> response = new ListResponse<UserResponse>();
         List<UserResponse> userResponses = new ArrayList<UserResponse>();
-        for (UserAccount user : result) {
+        for (UserAccount user : result.first()) {
             UserResponse userResponse = _responseGenerator.createUserResponse(user);
             userResponses.add(userResponse);
         }
-        response.setResponses(userResponses);
+        response.setResponses(userResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListVMsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/com/cloud/api/commands/ListVMsCmd.java
index 37dfcd3..2f6f988 100755
--- a/api/src/com/cloud/api/commands/ListVMsCmd.java
+++ b/api/src/com/cloud/api/commands/ListVMsCmd.java
@@ -33,6 +33,8 @@ import com.cloud.api.response.UserVmResponse;
 import com.cloud.async.AsyncJob;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.uservm.UserVm;
+import com.cloud.utils.Pair;
+
 
 @Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class)
 public class ListVMsCmd extends BaseListTaggedResourcesCmd {
@@ -197,17 +199,17 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
 
 	@Override
     public void execute(){
-        List<? extends UserVm> result = _userVmService.searchForUserVMs(this);
+        Pair<List<? extends UserVm>, Integer> result = _userVmService.searchForUserVMs(this);
         ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();
         EnumSet<VMDetails> details = getDetails();
         List<UserVmResponse> vmResponses;
         if (details.contains(VMDetails.all)){ // for all use optimized version
-        	 vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", result.toArray(new UserVm[result.size()]));
+            vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", result.first().toArray(new UserVm[result.first().size()]));
         }
         else {
-        	 vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.toArray(new UserVm[result.size()]));
+        	 vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVm[result.first().size()]));
         }
-        response.setResponses(vmResponses);
+        response.setResponses(vmResponses, result.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListVolumesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListVolumesCmd.java b/api/src/com/cloud/api/commands/ListVolumesCmd.java
index e0393a9..7875c83 100755
--- a/api/src/com/cloud/api/commands/ListVolumesCmd.java
+++ b/api/src/com/cloud/api/commands/ListVolumesCmd.java
@@ -30,6 +30,7 @@ import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.VolumeResponse;
 import com.cloud.async.AsyncJob;
 import com.cloud.storage.Volume;
+import com.cloud.utils.Pair;
 
 
 @Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class)
@@ -117,17 +118,17 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends Volume> volumes = _storageService.searchForVolumes(this);
+        Pair<List<? extends Volume>, Integer> volumes = _storageService.searchForVolumes(this);
 
         ListResponse<VolumeResponse> response = new ListResponse<VolumeResponse>();
         List<VolumeResponse> volResponses = new ArrayList<VolumeResponse>();
-        for (Volume volume : volumes) {
+        for (Volume volume : volumes.first()) {
             VolumeResponse volResponse = _responseGenerator.createVolumeResponse(volume);
             volResponse.setObjectName("volume");
             volResponses.add(volResponse);
         }
 
-        response.setResponses(volResponses);
+        response.setResponses(volResponses, volumes.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/commands/ListVpnUsersCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java
index 9bc77ff..9280ed5 100644
--- a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java
+++ b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.Parameter;
 import com.cloud.api.response.ListResponse;
 import com.cloud.api.response.VpnUsersResponse;
 import com.cloud.network.VpnUser;
+import com.cloud.utils.Pair;
 
 @Implementation(description="Lists vpn users", responseObject=VpnUsersResponse.class)
 public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd {
@@ -69,15 +70,15 @@ public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd {
     
     @Override
     public void execute(){
-        List<? extends VpnUser> vpnUsers = _ravService.searchForVpnUsers(this);
+        Pair<List<? extends VpnUser>, Integer> vpnUsers = _ravService.searchForVpnUsers(this);
 
         ListResponse<VpnUsersResponse> response = new ListResponse<VpnUsersResponse>();
         List<VpnUsersResponse> vpnResponses = new ArrayList<VpnUsersResponse>();
-        for (VpnUser vpnUser : vpnUsers) {
+        for (VpnUser vpnUser : vpnUsers.first()) {
             vpnResponses.add(_responseGenerator.createVpnUserResponse(vpnUser));
         }
 
-        response.setResponses(vpnResponses);
+        response.setResponses(vpnResponses, vpnUsers.second());
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/api/response/ListResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/ListResponse.java b/api/src/com/cloud/api/response/ListResponse.java
index 47f76a5..ebba402 100644
--- a/api/src/com/cloud/api/response/ListResponse.java
+++ b/api/src/com/cloud/api/response/ListResponse.java
@@ -22,6 +22,7 @@ import com.cloud.api.ResponseObject;
 
 public class ListResponse<T extends ResponseObject> extends BaseResponse {
     List<T> responses;
+    private transient Integer count;
 
     public List<T> getResponses() {
         return responses;
@@ -30,12 +31,22 @@ public class ListResponse<T extends ResponseObject> extends BaseResponse {
     public void setResponses(List<T> responses) {
         this.responses = responses;
     }
+    
+    public void setResponses(List<T> responses, Integer count) {
+        this.responses = responses;
+        this.count = count;
+    }
+    
 
     public Integer getCount() {
+        if (count != null) {
+            return count;
+        }
+        
         if (responses != null) {
             return responses.size();
-        } else {
-            return null;
         }
+        
+        return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/firewall/FirewallService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/firewall/FirewallService.java b/api/src/com/cloud/network/firewall/FirewallService.java
index 6eb9f99..07c2fb5 100644
--- a/api/src/com/cloud/network/firewall/FirewallService.java
+++ b/api/src/com/cloud/network/firewall/FirewallService.java
@@ -16,6 +16,7 @@
 // under the License.
 package com.cloud.network.firewall;
 
+
 import java.util.List;
 
 import com.cloud.api.commands.ListFirewallRulesCmd;
@@ -23,11 +24,12 @@ import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.user.Account;
+import com.cloud.utils.Pair;
 
 public interface FirewallService {
     FirewallRule createFirewallRule(FirewallRule rule) throws NetworkRuleConflictException;
 
-    List<? extends FirewallRule> listFirewallRules(ListFirewallRulesCmd cmd);
+    Pair<List<? extends FirewallRule>, Integer> listFirewallRules(ListFirewallRulesCmd cmd);
 
     /**
      * Revokes a firewall rule

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/firewall/NetworkACLService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/firewall/NetworkACLService.java b/api/src/com/cloud/network/firewall/NetworkACLService.java
index 1977088..10896b6 100644
--- a/api/src/com/cloud/network/firewall/NetworkACLService.java
+++ b/api/src/com/cloud/network/firewall/NetworkACLService.java
@@ -16,6 +16,7 @@
 // under the License.
 package com.cloud.network.firewall;
 
+
 import java.util.List;
 
 import com.cloud.api.commands.ListNetworkACLsCmd;
@@ -23,6 +24,7 @@ import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.user.Account;
+import com.cloud.utils.Pair;
 
 public interface NetworkACLService {
     FirewallRule getNetworkACL(long ruleId);
@@ -43,6 +45,6 @@ public interface NetworkACLService {
      * @param listNetworkACLsCmd
      * @return
      */
-    List<? extends FirewallRule> listNetworkACLs(ListNetworkACLsCmd cmd);
+    Pair<List<? extends FirewallRule>, Integer> listNetworkACLs(ListNetworkACLsCmd cmd);
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/lb/LoadBalancingRulesService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java
index d30195d..0cf2ef9 100644
--- a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java
+++ b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java
@@ -30,6 +30,8 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.network.rules.StickinessPolicy;
 import com.cloud.uservm.UserVm;
+import com.cloud.utils.Pair;
+
 
 public interface LoadBalancingRulesService {
     /**
@@ -90,7 +92,7 @@ public interface LoadBalancingRulesService {
      *            by id, name, public ip, and vm instance id
      * @return list of load balancers that match the criteria
      */
-    List<? extends LoadBalancer> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd);
+    Pair<List<? extends LoadBalancer>, Integer> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd);
 
     /**
      * List stickiness policies based on the given criteria
@@ -105,4 +107,4 @@ public interface LoadBalancingRulesService {
 
     LoadBalancer findById(long LoadBalancer);
 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/rules/RulesService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/com/cloud/network/rules/RulesService.java
index 9dd602b..8eadfba 100644
--- a/api/src/com/cloud/network/rules/RulesService.java
+++ b/api/src/com/cloud/network/rules/RulesService.java
@@ -23,9 +23,10 @@ import com.cloud.exception.InsufficientAddressCapacityException;
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
+import com.cloud.utils.Pair;
 
 public interface RulesService {
-    List<? extends FirewallRule> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll);
+    Pair<List<? extends FirewallRule>, Integer> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll);
 
     /**
      * Creates a port forwarding rule between two ip addresses or between
@@ -60,7 +61,7 @@ public interface RulesService {
      *            the command object holding the criteria for listing port forwarding rules (the ipAddress)
      * @return list of port forwarding rules on the given address, empty list if no rules exist
      */
-    public List<? extends PortForwardingRule> listPortForwardingRules(ListPortForwardingRulesCmd cmd);
+    public Pair<List<? extends PortForwardingRule>, Integer> listPortForwardingRules(ListPortForwardingRulesCmd cmd);
 
     boolean applyPortForwardingRules(long ipAdddressId, Account caller) throws ResourceUnavailableException;
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/security/SecurityGroupService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java
index bace6bb..4a4b171 100644
--- a/api/src/com/cloud/network/security/SecurityGroupService.java
+++ b/api/src/com/cloud/network/security/SecurityGroupService.java
@@ -18,13 +18,13 @@ package com.cloud.network.security;
 
 import java.util.List;
 
-import com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd;
 import com.cloud.api.commands.AuthorizeSecurityGroupEgressCmd;
+import com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd;
 import com.cloud.api.commands.CreateSecurityGroupCmd;
 import com.cloud.api.commands.DeleteSecurityGroupCmd;
 import com.cloud.api.commands.ListSecurityGroupsCmd;
-import com.cloud.api.commands.RevokeSecurityGroupIngressCmd;
 import com.cloud.api.commands.RevokeSecurityGroupEgressCmd;
+import com.cloud.api.commands.RevokeSecurityGroupIngressCmd;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.PermissionDeniedException;
 import com.cloud.exception.ResourceInUseException;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/vpc/VpcService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java
index 7d8de55..c13e37f 100644
--- a/api/src/com/cloud/network/vpc/VpcService.java
+++ b/api/src/com/cloud/network/vpc/VpcService.java
@@ -34,6 +34,7 @@ import com.cloud.network.Network.Provider;
 import com.cloud.network.Network.Service;
 import com.cloud.user.Account;
 import com.cloud.user.User;
+import com.cloud.utils.Pair;
 
 public interface VpcService {
     
@@ -190,7 +191,7 @@ public interface VpcService {
      * @param listPrivateGatewaysCmd
      * @return
      */
-    public List<PrivateGateway> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd);
+    public Pair<List<PrivateGateway>, Integer> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd);
 
     /**
      * @param routeId
@@ -223,7 +224,7 @@ public interface VpcService {
      * @param listStaticRoutesCmd
      * @return
      */
-    public List<? extends StaticRoute> listStaticRoutes(ListStaticRoutesCmd cmd);
+    public Pair<List<? extends StaticRoute>, Integer> listStaticRoutes(ListStaticRoutesCmd cmd);
 
     /**
      * @param id

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java
index b2fb34b..2f95637 100644
--- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java
+++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java
@@ -24,6 +24,7 @@ import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.RemoteAccessVpn;
 import com.cloud.network.VpnUser;
+import com.cloud.utils.Pair;
 
 public interface RemoteAccessVpnService {
 
@@ -37,8 +38,8 @@ public interface RemoteAccessVpnService {
     List<? extends VpnUser> listVpnUsers(long vpnOwnerId, String userName);
     boolean applyVpnUsers(long vpnOwnerId, String userName);
     
-    List<? extends RemoteAccessVpn> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd);
-    List<? extends VpnUser> searchForVpnUsers(ListVpnUsersCmd cmd);
+    Pair<List<? extends RemoteAccessVpn>, Integer> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd);
+    Pair<List<? extends VpnUser>, Integer> searchForVpnUsers(ListVpnUsersCmd cmd);
     
     List<? extends RemoteAccessVpn> listRemoteAccessVpns(long networkId);
     

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/server/ManagementService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java
index 8dcc398..d1a789e 100755
--- a/api/src/com/cloud/server/ManagementService.java
+++ b/api/src/com/cloud/server/ManagementService.java
@@ -184,7 +184,7 @@ public interface ManagementService {
      * @param cmd
      * @return List of DomainRouters.
      */
-    List<? extends VirtualRouter> searchForRouters(ListRoutersCmd cmd);
+    Pair<List<? extends VirtualRouter>, Integer> searchForRouters(ListRoutersCmd cmd);
 
     /**
      * Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId",
@@ -194,7 +194,7 @@ public interface ManagementService {
      *            the command that wraps the search criteria
      * @return List of IPAddresses
      */
-    List<? extends IpAddress> searchForIPAddresses(ListPublicIpAddressesCmd cmd);
+    Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd);
 
     /**
      * Obtains a list of all guest OS.
@@ -235,7 +235,7 @@ public interface ManagementService {
      * @param c
      * @return List of Alerts
      */
-    List<? extends Alert> searchForAlerts(ListAlertsCmd cmd);
+    Pair<List<? extends Alert>, Integer> searchForAlerts(ListAlertsCmd cmd);
 
     /**
      * list all the capacity rows in capacity operations table
@@ -363,7 +363,7 @@ public interface ManagementService {
      *            the command specifying the account and start date parameters
      * @return the list of async jobs that match the criteria
      */
-    List<? extends AsyncJob> searchForAsyncJobs(ListAsyncJobsCmd cmd);
+    Pair<List<? extends AsyncJob>, Integer> searchForAsyncJobs(ListAsyncJobsCmd cmd);
 
     /**
      * Generates a random password that will be used (initially) by newly created and started virtual machines

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/server/TaggedResourceService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java
index dd1b1c6..dce799e 100644
--- a/api/src/com/cloud/server/TaggedResourceService.java
+++ b/api/src/com/cloud/server/TaggedResourceService.java
@@ -21,6 +21,7 @@ import java.util.Map;
 
 import com.cloud.api.commands.ListTagsCmd;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.utils.Pair;
 
 public interface TaggedResourceService {
     
@@ -46,7 +47,7 @@ public interface TaggedResourceService {
      * @param listTagsCmd
      * @return
      */
-    List<? extends ResourceTag> listTags(ListTagsCmd listTagsCmd);
+    Pair<List<? extends ResourceTag>, Integer> listTags(ListTagsCmd listTagsCmd);
 
     /**
      * @param resourceIds

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/storage/StorageService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java
index 4fb3b55..1649e15 100644
--- a/api/src/com/cloud/storage/StorageService.java
+++ b/api/src/com/cloud/storage/StorageService.java
@@ -32,6 +32,7 @@ import com.cloud.exception.PermissionDeniedException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceInUseException;
 import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.utils.Pair;
 
 public interface StorageService{
     /**
@@ -114,7 +115,7 @@ public interface StorageService{
 
     Volume migrateVolume(Long volumeId, Long storagePoolId) throws ConcurrentOperationException;
 
-    List<? extends Volume> searchForVolumes(ListVolumesCmd cmd);
+    Pair<List<? extends Volume>, Integer> searchForVolumes(ListVolumesCmd cmd);
 
     /**
      * Uploads the volume to secondary storage

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/storage/snapshot/SnapshotService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/snapshot/SnapshotService.java b/api/src/com/cloud/storage/snapshot/SnapshotService.java
index 0c0e9b6..84388e9 100644
--- a/api/src/com/cloud/storage/snapshot/SnapshotService.java
+++ b/api/src/com/cloud/storage/snapshot/SnapshotService.java
@@ -28,6 +28,7 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
+import com.cloud.utils.Pair;
 
 public interface SnapshotService {
 
@@ -39,7 +40,7 @@ public interface SnapshotService {
      * @return list of snapshots
      * @throws PermissionDeniedException
      */
-    List<? extends Snapshot> listSnapshots(ListSnapshotsCmd cmd);
+    Pair<List<? extends Snapshot>, Integer> listSnapshots(ListSnapshotsCmd cmd);
 
     /**
      * Delete specified snapshot from the specified. If no other policies are assigned it calls destroy snapshot. This

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/user/AccountService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java
index 53383d3..90e3551 100755
--- a/api/src/com/cloud/user/AccountService.java
+++ b/api/src/com/cloud/user/AccountService.java
@@ -191,9 +191,9 @@ public interface AccountService {
 
     public String[] createApiKeyAndSecretKey(RegisterCmd cmd);
 
-    List<? extends Account> searchForAccounts(ListAccountsCmd cmd);
+    Pair<List<? extends Account>, Integer> searchForAccounts(ListAccountsCmd cmd);
 
-    List<? extends UserAccount> searchForUsers(ListUsersCmd cmd)
+    Pair<List<? extends UserAccount>, Integer> searchForUsers(ListUsersCmd cmd)
             throws PermissionDeniedException;
 
     UserAccount getUserByApiKey(String apiKey);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/user/DomainService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/com/cloud/user/DomainService.java
index 362f87e..83f3622 100644
--- a/api/src/com/cloud/user/DomainService.java
+++ b/api/src/com/cloud/user/DomainService.java
@@ -22,6 +22,7 @@ import com.cloud.api.commands.ListDomainChildrenCmd;
 import com.cloud.api.commands.ListDomainsCmd;
 import com.cloud.domain.Domain;
 import com.cloud.exception.PermissionDeniedException;
+import com.cloud.utils.Pair;
 
 public interface DomainService {
 
@@ -39,10 +40,10 @@ public interface DomainService {
 
     boolean deleteDomain(long domainId, Boolean cleanup);
 
-    List<? extends Domain> searchForDomains(ListDomainsCmd cmd)
+    Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd)
             throws PermissionDeniedException;
 
-    List<? extends Domain> searchForDomainChildren(ListDomainChildrenCmd cmd)
+    Pair<List<? extends Domain>, Integer> searchForDomainChildren(ListDomainChildrenCmd cmd)
             throws PermissionDeniedException;
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/api/src/com/cloud/vm/UserVmService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java
index 6635657..02682b0 100755
--- a/api/src/com/cloud/vm/UserVmService.java
+++ b/api/src/com/cloud/vm/UserVmService.java
@@ -53,6 +53,7 @@ import com.cloud.storage.Volume;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
 import com.cloud.uservm.UserVm;
+import com.cloud.utils.Pair;
 import com.cloud.utils.exception.ExecutionException;
 
 public interface UserVmService {
@@ -378,7 +379,7 @@ public interface UserVmService {
      *            the API command that wraps the search criteria
      * @return List of UserVMs.
      */
-    List<? extends UserVm> searchForUserVMs(ListVMsCmd cmd);
+    Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd);
 
     HypervisorType getHypervisorTypeOfUserVM(long vmid);
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 3fac7a7..1d6ba4f 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -322,7 +322,8 @@ public class ApiDBUtils {
     }
 
     public static List<UserVmVO> searchForUserVMs(Criteria c, List<Long> permittedAccounts) {
-        return _userVmMgr.searchForUserVMs(c, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM), null, false, permittedAccounts, false, null, null);
+        return _userVmMgr.searchForUserVMs(c, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM),
+                null, false, permittedAccounts, false, null, null).first();
     }
 
     public static List<? extends StoragePoolVO> searchForStoragePools(Criteria c) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/api/response/ApiResponseSerializer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java
index 124bee1..1429d14 100644
--- a/server/src/com/cloud/api/response/ApiResponseSerializer.java
+++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java
@@ -80,9 +80,9 @@ public class ApiResponseSerializer {
                     jsonStr = unescape(jsonStr);
 
                     if (count != null && count != 0) {
-                        sb.append("{ \"" + ApiConstants.COUNT + "\":" + ((ListResponse) result).getCount() + " ,\"" + responses.get(0).getObjectName() + "\" : [  " + jsonStr);
+                        sb.append("{ \"" + ApiConstants.COUNT + "\":" + count + " ,\"" + responses.get(0).getObjectName() + "\" : [  " + jsonStr);
                     }
-                    for (int i = 1; i < count; i++) {
+                    for (int i = 1; i < ((ListResponse) result).getResponses().size(); i++) {
                         jsonStr = gson.toJson(responses.get(i));
                         jsonStr = unescape(jsonStr);
                         sb.append(", " + jsonStr);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
index 82aa9d2..6e3805b 100644
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
@@ -66,6 +66,8 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
 import com.cloud.user.UserContext;
+import com.cloud.utils.IdentityProxy;
+import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.component.Manager;
@@ -206,7 +208,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma
     }
 
     @Override
-    public List<? extends FirewallRule> listFirewallRules(ListFirewallRulesCmd cmd) {
+    public Pair<List<? extends FirewallRule>, Integer> listFirewallRules(ListFirewallRulesCmd cmd) {
         Long ipId = cmd.getIpAddressId();
         Long id = cmd.getId();
         Map<String, String> tags = cmd.getTags();
@@ -272,7 +274,8 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma
 
         sc.setParameters("purpose", Purpose.Firewall);
 
-        return _firewallDao.search(sc, filter);
+        Pair<List<FirewallRuleVO>, Integer> result = _firewallDao.searchAndCount(sc, filter);
+        return new Pair<List<? extends FirewallRule>, Integer>(result.first(), result.second());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index ba9923f..ba4b097 100755
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@ -95,6 +95,8 @@ import com.cloud.user.DomainService;
 import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.uservm.UserVm;
+import com.cloud.utils.IdentityProxy;
+import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.component.Manager;
@@ -1237,7 +1239,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
     }
 
     @Override
-    public List<LoadBalancerVO> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd) {
+    public Pair<List<? extends LoadBalancer>, Integer> searchForLoadBalancers(ListLoadBalancerRulesCmd cmd) {
         Long ipId = cmd.getPublicIpId();
         Long zoneId = cmd.getZoneId();
         Long id = cmd.getId();
@@ -1328,7 +1330,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
             }
         }
 
-        return _lbDao.search(sc, searchFilter);
+        Pair<List<LoadBalancerVO>, Integer> result = _lbDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends LoadBalancer>, Integer>(result.first(), result.second());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java
index 2383366..a4e0722 100755
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@ -61,6 +61,8 @@ import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
 import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
+import com.cloud.utils.IdentityProxy;
+import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.component.Manager;
@@ -686,7 +688,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
     }
 
     @Override
-    public List<? extends PortForwardingRule> listPortForwardingRules(ListPortForwardingRulesCmd cmd) {
+    public Pair<List<? extends PortForwardingRule>, Integer> listPortForwardingRules(ListPortForwardingRulesCmd cmd) {
         Long ipId = cmd.getIpAddressId();
         Long id = cmd.getId();
         Map<String, String> tags = cmd.getTags();
@@ -752,7 +754,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
 
         sc.setParameters("purpose", Purpose.PortForwarding);
 
-        return _portForwardingDao.search(sc, filter);
+        Pair<List<PortForwardingRuleVO>, Integer> result = _portForwardingDao.searchAndCount(sc, filter);
+        return new Pair<List<? extends PortForwardingRule>, Integer>(result.first(), result.second());
     }
 
     @Override
@@ -902,7 +905,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
     }
 
     @Override
-    public List<? extends FirewallRule> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll) {
+    public Pair<List<? extends FirewallRule>, Integer> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll) {
         Account caller = UserContext.current().getCaller();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
@@ -950,7 +953,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
             sc.setJoinParameters("ipSearch", "associatedWithVmId", vmId);
         }
 
-        return _firewallDao.search(sc, filter);
+        Pair<List<FirewallRuleVO>, Integer> result = _firewallDao.searchAndCount(sc, filter);
+        return new Pair<List<? extends FirewallRule>, Integer>(result.first(), result.second());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
index e3483a0..ce1b768 100644
--- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
@@ -51,6 +51,8 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.UserContext;
+import com.cloud.utils.IdentityProxy;
+import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.component.Manager;
@@ -346,7 +348,7 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
 
     
     @Override
-    public List<? extends FirewallRule> listNetworkACLs(ListNetworkACLsCmd cmd) {
+    public Pair<List<? extends FirewallRule>,Integer> listNetworkACLs(ListNetworkACLsCmd cmd) {
         Long networkId = cmd.getNetworkId();
         Long id = cmd.getId();
         String trafficType = cmd.getTrafficType();
@@ -411,7 +413,8 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{
 
         sc.setParameters("purpose", Purpose.NetworkACL);
 
-        return _firewallDao.search(sc, filter);
+        Pair<List<FirewallRuleVO>, Integer> result = _firewallDao.searchAndCount(sc, filter);
+        return new Pair<List<? extends FirewallRule>, Integer>(result.first(), result.second());
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 675ae59..987bd45 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -95,6 +95,7 @@ import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
 import com.cloud.user.UserContext;
 import com.cloud.utils.NumbersUtil;
+import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ComponentLocator;
 import com.cloud.utils.component.Inject;
@@ -1387,7 +1388,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
     }
 
     @Override
-    public List<PrivateGateway> listPrivateGateway(ListPrivateGatewaysCmd cmd) {
+    public Pair<List<PrivateGateway>, Integer> listPrivateGateway(ListPrivateGatewaysCmd cmd) {
         String ipAddress = cmd.getIpAddress();
         String vlan = cmd.getVlan();
         Long vpcId = cmd.getVpcId();
@@ -1441,14 +1442,14 @@ public class VpcManagerImpl implements VpcManager, Manager{
         if (vlan != null) {
             sc.setJoinParameters("networkSearch", "vlan", BroadcastDomainType.Vlan.toUri(vlan));
         }
-       
-        List<VpcGatewayVO> vos = _vpcGatewayDao.search(sc, searchFilter);
-        List<PrivateGateway> privateGtws = new ArrayList<PrivateGateway>(vos.size());
-        for (VpcGateway vo : vos) {
+
+        Pair<List<VpcGatewayVO>, Integer> vos = _vpcGatewayDao.searchAndCount(sc, searchFilter);
+        List<PrivateGateway> privateGtws = new ArrayList<PrivateGateway>(vos.first().size());
+        for (VpcGateway vo : vos.first()) {
             privateGtws.add(getPrivateGatewayProfile(vo));
         }
-        
-        return privateGtws;
+
+        return new Pair<List<PrivateGateway>, Integer>(privateGtws, vos.second());
     }
     
     @Override
@@ -1608,7 +1609,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
     }
 
     @Override
-    public List<? extends StaticRoute> listStaticRoutes(ListStaticRoutesCmd cmd) {
+    public Pair<List<? extends StaticRoute>, Integer> listStaticRoutes(ListStaticRoutesCmd cmd) {
         Long id = cmd.getId();
         Long gatewayId = cmd.getGatewayId();
         Long vpcId = cmd.getVpcId();
@@ -1673,10 +1674,11 @@ public class VpcManagerImpl implements VpcManager, Manager{
                 count++;
             }   
         }
-        
-        return _staticRouteDao.search(sc, searchFilter);
+
+        Pair<List<StaticRouteVO>, Integer> result = _staticRouteDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends StaticRoute>, Integer>(result.first(), result.second());
     }
-    
+
     protected void detectRoutesConflict(StaticRoute newRoute) throws NetworkRuleConflictException {
         List<? extends StaticRoute> routes = _staticRouteDao.listByGatewayIdAndNotRevoked(newRoute.getVpcGatewayId());
         assert (routes.size() >= 1) : "For static routes, we now always first persist the route and then check for " +

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
index c01dc6e..0556e8e 100755
--- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
@@ -497,10 +497,9 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
     }
 
     @Override
-    public List<VpnUserVO> searchForVpnUsers(ListVpnUsersCmd cmd) {
+    public Pair<List<? extends VpnUser>, Integer> searchForVpnUsers(ListVpnUsersCmd cmd) {
         String username = cmd.getUsername();
         Long id = cmd.getId();
-        
         Account caller = UserContext.current().getCaller();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
@@ -532,11 +531,12 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
             sc.setParameters("username", username);
         }
 
-        return _vpnUsersDao.search(sc, searchFilter);
+        Pair<List<VpnUserVO>, Integer> result = _vpnUsersDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends VpnUser>, Integer>(result.first(), result.second());
     }
 
     @Override
-    public List<RemoteAccessVpnVO> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd) {
+    public Pair<List<? extends RemoteAccessVpn>, Integer> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd) {
         // do some parameter validation
         Account caller = UserContext.current().getCaller();
         Long ipAddressId = cmd.getPublicIpId();
@@ -579,7 +579,8 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
             sc.setParameters("serverAddressId", ipAddressId);
         }
 
-        return _remoteAccessVpnDao.search(sc, filter);
+        Pair<List<RemoteAccessVpnVO>, Integer> result = _remoteAccessVpnDao.searchAndCount(sc, filter);
+        return new Pair<List<? extends RemoteAccessVpn>, Integer> (result.first(), result.second());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index d043ab1..a698c93 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -98,6 +98,7 @@ import com.cloud.api.commands.UpdateVMGroupCmd;
 import com.cloud.api.commands.UpgradeSystemVMCmd;
 import com.cloud.api.commands.UploadCustomCertificateCmd;
 import com.cloud.api.response.ExtractResponse;
+import com.cloud.async.AsyncJob;
 import com.cloud.async.AsyncJobExecutor;
 import com.cloud.async.AsyncJobManager;
 import com.cloud.async.AsyncJobResult;
@@ -159,11 +160,13 @@ import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
 import com.cloud.info.ConsoleProxyInfo;
 import com.cloud.keystore.KeystoreManager;
 import com.cloud.network.IPAddressVO;
+import com.cloud.network.IpAddress;
 import com.cloud.network.LoadBalancerVO;
 import com.cloud.network.NetworkVO;
 import com.cloud.network.dao.IPAddressDao;
 import com.cloud.network.dao.LoadBalancerDao;
 import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.router.VirtualRouter;
 import com.cloud.org.Cluster;
 import com.cloud.org.Grouping.AllocationState;
 import com.cloud.projects.Project;
@@ -1612,7 +1615,7 @@ public class ManagementServerImpl implements ManagementServer {
     }
 
     @Override
-    public List<DomainRouterVO> searchForRouters(ListRoutersCmd cmd) {
+    public Pair<List<? extends VirtualRouter>, Integer> searchForRouters(ListRoutersCmd cmd) {
         Long id = cmd.getId();
         String name = cmd.getRouterName();
         String state = cmd.getState();
@@ -1707,11 +1710,12 @@ public class ManagementServerImpl implements ManagementServer {
             sc.setParameters("vpcId", vpcId);
         }
 
-        return _routerDao.search(sc, searchFilter);
+        Pair<List<DomainRouterVO>, Integer> result = _routerDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends VirtualRouter>, Integer>(result.first(), result.second());
     }
 
     @Override
-    public List<IPAddressVO> searchForIPAddresses(ListPublicIpAddressesCmd cmd) {
+    public Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd) {
         Object keyword = cmd.getKeyword();
         Long physicalNetworkId = cmd.getPhysicalNetworkId();
         Long associatedNetworkId = cmd.getAssociatedNetworkId();
@@ -1858,7 +1862,8 @@ public class ManagementServerImpl implements ManagementServer {
             sc.setParameters("associatedNetworkIdEq", associatedNetworkId);
         }
 
-        return _publicIpAddressDao.search(sc, searchFilter);
+        Pair<List<IPAddressVO>, Integer> result = _publicIpAddressDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends IpAddress>, Integer>(result.first(), result.second());
     }
 
     @Override
@@ -2076,7 +2081,7 @@ public class ManagementServerImpl implements ManagementServer {
     }
 
     @Override
-    public List<? extends Alert> searchForAlerts(ListAlertsCmd cmd) {
+    public Pair<List<? extends Alert>, Integer> searchForAlerts(ListAlertsCmd cmd) {
         Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal());
         SearchCriteria<AlertVO> sc = _alertDao.createSearchCriteria();
 
@@ -2103,7 +2108,8 @@ public class ManagementServerImpl implements ManagementServer {
             sc.addAnd("type", SearchCriteria.Op.EQ, type);
         }
 
-        return _alertDao.search(sc, searchFilter);
+        Pair<List<AlertVO>, Integer> result =_alertDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends Alert>, Integer>(result.first(), result.second());
     }
 
     @Override
@@ -2539,7 +2545,7 @@ public class ManagementServerImpl implements ManagementServer {
     }
 
     @Override
-    public List<AsyncJobVO> searchForAsyncJobs(ListAsyncJobsCmd cmd) {
+    public Pair<List<? extends AsyncJob>, Integer> searchForAsyncJobs(ListAsyncJobsCmd cmd) {
 
         Account caller = UserContext.current().getCaller();
 
@@ -2609,7 +2615,8 @@ public class ManagementServerImpl implements ManagementServer {
             sc.addAnd("created", SearchCriteria.Op.GTEQ, startDate);
         }
 
-        return _jobDao.search(sc, searchFilter);
+        Pair<List<AsyncJobVO>, Integer> result = _jobDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends AsyncJob>, Integer> (result.first(), result.second());
     }
 
     @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "starting secondary storage Vm", async = true)

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index fc6fb5b..7ec50f9 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -3825,7 +3825,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
     }
 
     @Override
-    public List<VolumeVO> searchForVolumes(ListVolumesCmd cmd) {
+    public Pair<List<? extends Volume>, Integer> searchForVolumes(ListVolumesCmd cmd) {
         Account caller = UserContext.current().getCaller();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
@@ -3937,8 +3937,10 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
 
         // Only return volumes that are not destroyed
         sc.setParameters("state", Volume.State.Destroy);
+        
+        Pair<List<VolumeVO>, Integer> volumes = _volumeDao.searchAndCount(sc, searchFilter);
 
-        return _volumeDao.search(sc, searchFilter);
+        return new Pair<List<? extends Volume>, Integer>(volumes.first(), volumes.second());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8f2d9a09/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index 2410d08..32e37e6 100755
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@ -853,7 +853,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
     }
 
     @Override
-    public List<SnapshotVO> listSnapshots(ListSnapshotsCmd cmd) {
+    public Pair<List<? extends Snapshot>, Integer> listSnapshots(ListSnapshotsCmd cmd) {
         Long volumeId = cmd.getVolumeId();
         String name = cmd.getSnapshotName();
         Long id = cmd.getId();
@@ -954,7 +954,8 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
             sc.setParameters("snapshotTypeNEQ", Snapshot.Type.TEMPLATE.ordinal());
         }
 
-        return _snapshotDao.search(sc, searchFilter);
+        Pair<List<SnapshotVO>, Integer> result = _snapshotDao.searchAndCount(sc, searchFilter);
+        return new Pair<List<? extends Snapshot>, Integer>(result.first(), result.second());
     }