You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2021/11/19 08:34:53 UTC

[cloudstack-go] branch main updated: Fix add tests (#16)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git


The following commit(s) were added to refs/heads/main by this push:
     new c8c7cf5  Fix add tests (#16)
c8c7cf5 is described below

commit c8c7cf5956905a9b1ead4a2121da798c328719a1
Author: Pearl Dsilva <pe...@gmail.com>
AuthorDate: Fri Nov 19 14:04:49 2021 +0530

    Fix add tests (#16)
    
    * refactor tests
    
    * Decouple Test data from tests
    
    * Update listApis and add/refactor tests
---
 Makefile                                           |     12 +
 cloudstack/AccountService.go                       |     42 +
 cloudstack/AddressService.go                       |      3 +
 cloudstack/AffinityGroupService.go                 |      8 +-
 cloudstack/BrocadeVCSService.go                    |      5 +
 cloudstack/ClusterService.go                       |      4 +
 cloudstack/ConfigurationService.go                 |      1 +
 cloudstack/ConfigurationService_test.go            |      1 -
 cloudstack/DiskOfferingService.go                  |     24 +
 cloudstack/DomainService.go                        |    430 +-
 cloudstack/HostService.go                          |     47 +-
 cloudstack/HostService_mock.go                     |     16 +-
 cloudstack/HostService_test.go                     |      5 +-
 cloudstack/ISOService.go                           |     43 +-
 cloudstack/ImageStoreService.go                    |    162 +-
 cloudstack/InternalLBService.go                    |      3 +
 cloudstack/LDAPService.go                          |      3 +
 cloudstack/LimitService.go                         |     34 +-
 .../AddHost.go => cloudstack/LimitService_test.go  |     38 +-
 .../NetworkACLService_test.go                      |     38 +-
 cloudstack/NetworkOfferingService.go               |     27 +-
 cloudstack/NetworkOfferingService_mock.go          |      8 +-
 cloudstack/NetworkOfferingService_test.go          |      2 +-
 cloudstack/NetworkService.go                       |    128 +-
 cloudstack/NetworkService_test.go                  |      1 -
 cloudstack/NicService.go                           |      8 +-
 cloudstack/PodService.go                           |     27 +
 cloudstack/PoolService.go                          |      4 +
 cloudstack/ProjectService.go                       |    555 +
 cloudstack/ProjectService_mock.go                  |    116 +
 cloudstack/ProjectService_test.go                  |     25 +
 cloudstack/RouterService.go                        |     44 +
 cloudstack/SSHService.go                           |     96 +-
 cloudstack/SSHService_mock.go                      |     21 +
 cloudstack/ServiceOfferingService.go               |     67 +-
 cloudstack/SnapshotService.go                      |    220 +-
 cloudstack/StoragePoolService.go                   |      2 +
 cloudstack/SwiftService.go                         |     54 +-
 cloudstack/SystemVMService.go                      |    637 +-
 cloudstack/SystemVMService_mock.go                 |      8 +-
 cloudstack/TemplateService.go                      |     31 +
 cloudstack/UsageService.go                         |      1 +
 cloudstack/UserService.go                          |     26 +
 cloudstack/VMGroupService.go                       |     63 +-
 cloudstack/VPCService.go                           |    419 +-
 .../AddHost.go => cloudstack/VPCService_test.go    |     38 +-
 cloudstack/VPNService.go                           |      3 +
 .../AddHost.go => cloudstack/VPNService_test.go    |     38 +-
 cloudstack/VirtualMachineService.go                |    266 +-
 cloudstack/VirtualMachineService_mock.go           |      8 +-
 cloudstack/VirtualMachineService_test.go           |     23 +
 cloudstack/VolumeService.go                        |     34 +
 cloudstack/ZoneService.go                          |     25 +
 cloudstack/testdata/LimitServiceData.json          |      7 +
 cloudstack/testdata/NetworkACLServiceData.json     |     32 +
 cloudstack/testdata/ProjectServiceData.json        |     16 +
 cloudstack/testdata/VPCServiceData.json            |     26 +
 cloudstack/testdata/VPNServiceData.json            |     26 +
 cloudstack/testdata/VirtualMachineServiceData.json |    105 +
 examples/{ACSDetails.go => ACSOps.go}              |     10 +-
 examples/AddHost.go                                |     15 +-
 examples/CreateDeleteDomain.go                     |      6 +-
 examples/HostOperations.go                         |      5 +-
 generate/layout.go                                 |      4 +
 generate/listApis.json                             | 109377 +++++++++---------
 65 files changed, 58373 insertions(+), 55200 deletions(-)

diff --git a/Makefile b/Makefile
index 5cf684c..3c52362 100644
--- a/Makefile
+++ b/Makefile
@@ -29,3 +29,15 @@ MOCKGEN := $(shell pwd)/bin/mockgen
 mockgen: ## Download conversion-gen locally if necessary.
 	$(call go-get-tool,$(MOCKGEN),github.com/golang/mock/mockgen)
 
+PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
+define go-get-tool
+[ -f $(1) ] || { \
+set -e ;\
+TMP_DIR=$$(mktemp -d) ;\
+cd $$TMP_DIR ;\
+go mod init tmp ;\
+echo "Downloading $(2)" ;\
+GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\
+rm -rf $$TMP_DIR ;\
+}
+endef
diff --git a/cloudstack/AccountService.go b/cloudstack/AccountService.go
index 80b2cc2..32680e5 100644
--- a/cloudstack/AccountService.go
+++ b/cloudstack/AccountService.go
@@ -513,11 +513,13 @@ type CreateAccountResponse struct {
 	Cpuavailable              string                      `json:"cpuavailable"`
 	Cpulimit                  string                      `json:"cpulimit"`
 	Cputotal                  int64                       `json:"cputotal"`
+	Created                   string                      `json:"created"`
 	Defaultzoneid             string                      `json:"defaultzoneid"`
 	Domain                    string                      `json:"domain"`
 	Domainid                  string                      `json:"domainid"`
 	Domainpath                string                      `json:"domainpath"`
 	Groups                    []string                    `json:"groups"`
+	Icon                      string                      `json:"icon"`
 	Id                        string                      `json:"id"`
 	Ipavailable               string                      `json:"ipavailable"`
 	Iplimit                   string                      `json:"iplimit"`
@@ -579,6 +581,7 @@ type CreateAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -899,11 +902,13 @@ type DisableAccountResponse struct {
 	Cpuavailable              string                       `json:"cpuavailable"`
 	Cpulimit                  string                       `json:"cpulimit"`
 	Cputotal                  int64                        `json:"cputotal"`
+	Created                   string                       `json:"created"`
 	Defaultzoneid             string                       `json:"defaultzoneid"`
 	Domain                    string                       `json:"domain"`
 	Domainid                  string                       `json:"domainid"`
 	Domainpath                string                       `json:"domainpath"`
 	Groups                    []string                     `json:"groups"`
+	Icon                      string                       `json:"icon"`
 	Id                        string                       `json:"id"`
 	Ipavailable               string                       `json:"ipavailable"`
 	Iplimit                   string                       `json:"iplimit"`
@@ -965,6 +970,7 @@ type DisableAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -1074,11 +1080,13 @@ type EnableAccountResponse struct {
 	Cpuavailable              string                      `json:"cpuavailable"`
 	Cpulimit                  string                      `json:"cpulimit"`
 	Cputotal                  int64                       `json:"cputotal"`
+	Created                   string                      `json:"created"`
 	Defaultzoneid             string                      `json:"defaultzoneid"`
 	Domain                    string                      `json:"domain"`
 	Domainid                  string                      `json:"domainid"`
 	Domainpath                string                      `json:"domainpath"`
 	Groups                    []string                    `json:"groups"`
+	Icon                      string                      `json:"icon"`
 	Id                        string                      `json:"id"`
 	Ipavailable               string                      `json:"ipavailable"`
 	Iplimit                   string                      `json:"iplimit"`
@@ -1140,6 +1148,7 @@ type EnableAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -1282,6 +1291,10 @@ func (p *ListAccountsParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("pagesize", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
@@ -1453,6 +1466,21 @@ func (p *ListAccountsParams) GetPagesize() (int, bool) {
 	return value, ok
 }
 
+func (p *ListAccountsParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListAccountsParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListAccountsParams) SetState(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1585,11 +1613,13 @@ type Account struct {
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
+	Created                   string            `json:"created"`
 	Defaultzoneid             string            `json:"defaultzoneid"`
 	Domain                    string            `json:"domain"`
 	Domainid                  string            `json:"domainid"`
 	Domainpath                string            `json:"domainpath"`
 	Groups                    []string          `json:"groups"`
+	Icon                      string            `json:"icon"`
 	Id                        string            `json:"id"`
 	Ipavailable               string            `json:"ipavailable"`
 	Iplimit                   string            `json:"iplimit"`
@@ -1651,6 +1681,7 @@ type AccountUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -1893,9 +1924,11 @@ type ProjectAccount struct {
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
+	Created                   string              `json:"created"`
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Icon                      string              `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
 	Iplimit                   string              `json:"iplimit"`
@@ -2030,11 +2063,13 @@ type LockAccountResponse struct {
 	Cpuavailable              string                    `json:"cpuavailable"`
 	Cpulimit                  string                    `json:"cpulimit"`
 	Cputotal                  int64                     `json:"cputotal"`
+	Created                   string                    `json:"created"`
 	Defaultzoneid             string                    `json:"defaultzoneid"`
 	Domain                    string                    `json:"domain"`
 	Domainid                  string                    `json:"domainid"`
 	Domainpath                string                    `json:"domainpath"`
 	Groups                    []string                  `json:"groups"`
+	Icon                      string                    `json:"icon"`
 	Id                        string                    `json:"id"`
 	Ipavailable               string                    `json:"ipavailable"`
 	Iplimit                   string                    `json:"iplimit"`
@@ -2096,6 +2131,7 @@ type LockAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -2228,11 +2264,13 @@ type MarkDefaultZoneForAccountResponse struct {
 	Cpuavailable              string                                  `json:"cpuavailable"`
 	Cpulimit                  string                                  `json:"cpulimit"`
 	Cputotal                  int64                                   `json:"cputotal"`
+	Created                   string                                  `json:"created"`
 	Defaultzoneid             string                                  `json:"defaultzoneid"`
 	Domain                    string                                  `json:"domain"`
 	Domainid                  string                                  `json:"domainid"`
 	Domainpath                string                                  `json:"domainpath"`
 	Groups                    []string                                `json:"groups"`
+	Icon                      string                                  `json:"icon"`
 	Id                        string                                  `json:"id"`
 	Ipavailable               string                                  `json:"ipavailable"`
 	Iplimit                   string                                  `json:"iplimit"`
@@ -2294,6 +2332,7 @@ type MarkDefaultZoneForAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -2479,11 +2518,13 @@ type UpdateAccountResponse struct {
 	Cpuavailable              string                      `json:"cpuavailable"`
 	Cpulimit                  string                      `json:"cpulimit"`
 	Cputotal                  int64                       `json:"cputotal"`
+	Created                   string                      `json:"created"`
 	Defaultzoneid             string                      `json:"defaultzoneid"`
 	Domain                    string                      `json:"domain"`
 	Domainid                  string                      `json:"domainid"`
 	Domainpath                string                      `json:"domainpath"`
 	Groups                    []string                    `json:"groups"`
+	Icon                      string                      `json:"icon"`
 	Id                        string                      `json:"id"`
 	Ipavailable               string                      `json:"ipavailable"`
 	Iplimit                   string                      `json:"iplimit"`
@@ -2545,6 +2586,7 @@ type UpdateAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
diff --git a/cloudstack/AddressService.go b/cloudstack/AddressService.go
index 0e76635..dacecc2 100644
--- a/cloudstack/AddressService.go
+++ b/cloudstack/AddressService.go
@@ -286,6 +286,7 @@ type AssociateIpAddressResponse struct {
 	Domainid                  string `json:"domainid"`
 	Fordisplay                bool   `json:"fordisplay"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
+	Hasannotations            bool   `json:"hasannotations"`
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Isportable                bool   `json:"isportable"`
@@ -918,6 +919,7 @@ type PublicIpAddress struct {
 	Domainid                  string `json:"domainid"`
 	Fordisplay                bool   `json:"fordisplay"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
+	Hasannotations            bool   `json:"hasannotations"`
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Isportable                bool   `json:"isportable"`
@@ -1066,6 +1068,7 @@ type UpdateIpAddressResponse struct {
 	Domainid                  string `json:"domainid"`
 	Fordisplay                bool   `json:"fordisplay"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
+	Hasannotations            bool   `json:"hasannotations"`
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Isportable                bool   `json:"isportable"`
diff --git a/cloudstack/AffinityGroupService.go b/cloudstack/AffinityGroupService.go
index 4537303..3d6ae18 100644
--- a/cloudstack/AffinityGroupService.go
+++ b/cloudstack/AffinityGroupService.go
@@ -977,9 +977,11 @@ type UpdateVMAffinityGroupResponse struct {
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
 	Haenable              bool                                         `json:"haenable"`
+	Hasannotations        bool                                         `json:"hasannotations"`
 	Hostid                string                                       `json:"hostid"`
 	Hostname              string                                       `json:"hostname"`
 	Hypervisor            string                                       `json:"hypervisor"`
+	Icon                  string                                       `json:"icon"`
 	Id                    string                                       `json:"id"`
 	Instancename          string                                       `json:"instancename"`
 	Isdynamicallyscalable bool                                         `json:"isdynamicallyscalable"`
@@ -989,6 +991,7 @@ type UpdateVMAffinityGroupResponse struct {
 	JobID                 string                                       `json:"jobid"`
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
+	Lastupdated           string                                       `json:"lastupdated"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -1001,14 +1004,17 @@ type UpdateVMAffinityGroupResponse struct {
 	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
+	Pooltype              string                                       `json:"pooltype"`
 	Project               string                                       `json:"project"`
 	Projectid             string                                       `json:"projectid"`
 	Publicip              string                                       `json:"publicip"`
 	Publicipid            string                                       `json:"publicipid"`
-	Readonlyuidetails     string                                       `json:"readonlyuidetails"`
+	Readonlydetails       string                                       `json:"readonlydetails"`
+	Receivedbytes         int64                                        `json:"receivedbytes"`
 	Rootdeviceid          int64                                        `json:"rootdeviceid"`
 	Rootdevicetype        string                                       `json:"rootdevicetype"`
 	Securitygroup         []UpdateVMAffinityGroupResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                        `json:"sentbytes"`
 	Serviceofferingid     string                                       `json:"serviceofferingid"`
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
diff --git a/cloudstack/BrocadeVCSService.go b/cloudstack/BrocadeVCSService.go
index cc42fff..fc90274 100644
--- a/cloudstack/BrocadeVCSService.go
+++ b/cloudstack/BrocadeVCSService.go
@@ -416,6 +416,7 @@ type BrocadeVcsDeviceNetwork struct {
 	Broadcasturi                string                           `json:"broadcasturi"`
 	Canusefordeploy             bool                             `json:"canusefordeploy"`
 	Cidr                        string                           `json:"cidr"`
+	Created                     string                           `json:"created"`
 	Details                     map[string]string                `json:"details"`
 	Displaynetwork              bool                             `json:"displaynetwork"`
 	Displaytext                 string                           `json:"displaytext"`
@@ -425,6 +426,8 @@ type BrocadeVcsDeviceNetwork struct {
 	Domainid                    string                           `json:"domainid"`
 	Externalid                  string                           `json:"externalid"`
 	Gateway                     string                           `json:"gateway"`
+	Hasannotations              bool                             `json:"hasannotations"`
+	Icon                        string                           `json:"icon"`
 	Id                          string                           `json:"id"`
 	Ip6cidr                     string                           `json:"ip6cidr"`
 	Ip6gateway                  string                           `json:"ip6gateway"`
@@ -445,10 +448,12 @@ type BrocadeVcsDeviceNetwork struct {
 	Physicalnetworkid           string                           `json:"physicalnetworkid"`
 	Project                     string                           `json:"project"`
 	Projectid                   string                           `json:"projectid"`
+	Receivedbytes               int64                            `json:"receivedbytes"`
 	Redundantrouter             bool                             `json:"redundantrouter"`
 	Related                     string                           `json:"related"`
 	Reservediprange             string                           `json:"reservediprange"`
 	Restartrequired             bool                             `json:"restartrequired"`
+	Sentbytes                   int64                            `json:"sentbytes"`
 	Service                     []BrocadeVcsDeviceNetworkService `json:"service"`
 	Specifyipranges             bool                             `json:"specifyipranges"`
 	State                       string                           `json:"state"`
diff --git a/cloudstack/ClusterService.go b/cloudstack/ClusterService.go
index 7399c54..1bc5667 100644
--- a/cloudstack/ClusterService.go
+++ b/cloudstack/ClusterService.go
@@ -447,6 +447,7 @@ type AddClusterResponse struct {
 	Capacity              []AddClusterResponseCapacity `json:"capacity"`
 	Clustertype           string                       `json:"clustertype"`
 	Cpuovercommitratio    string                       `json:"cpuovercommitratio"`
+	Hasannotations        bool                         `json:"hasannotations"`
 	Hypervisortype        string                       `json:"hypervisortype"`
 	Id                    string                       `json:"id"`
 	JobID                 string                       `json:"jobid"`
@@ -1366,6 +1367,7 @@ type Cluster struct {
 	Capacity              []ClusterCapacity `json:"capacity"`
 	Clustertype           string            `json:"clustertype"`
 	Cpuovercommitratio    string            `json:"cpuovercommitratio"`
+	Hasannotations        bool              `json:"hasannotations"`
 	Hypervisortype        string            `json:"hypervisortype"`
 	Id                    string            `json:"id"`
 	JobID                 string            `json:"jobid"`
@@ -1751,6 +1753,7 @@ type ClustersMetric struct {
 	Cputhreshold                    bool                     `json:"cputhreshold"`
 	Cputotal                        string                   `json:"cputotal"`
 	Cpuused                         string                   `json:"cpuused"`
+	Hasannotations                  bool                     `json:"hasannotations"`
 	Hosts                           string                   `json:"hosts"`
 	Hypervisortype                  string                   `json:"hypervisortype"`
 	Id                              string                   `json:"id"`
@@ -2199,6 +2202,7 @@ type UpdateClusterResponse struct {
 	Capacity              []UpdateClusterResponseCapacity `json:"capacity"`
 	Clustertype           string                          `json:"clustertype"`
 	Cpuovercommitratio    string                          `json:"cpuovercommitratio"`
+	Hasannotations        bool                            `json:"hasannotations"`
 	Hypervisortype        string                          `json:"hypervisortype"`
 	Id                    string                          `json:"id"`
 	JobID                 string                          `json:"jobid"`
diff --git a/cloudstack/ConfigurationService.go b/cloudstack/ConfigurationService.go
index 8ceb01d..ee60f39 100644
--- a/cloudstack/ConfigurationService.go
+++ b/cloudstack/ConfigurationService.go
@@ -86,6 +86,7 @@ type Capability struct {
 	Cloudstackversion                            string `json:"cloudstackversion"`
 	Customdiskofferingmaxsize                    int64  `json:"customdiskofferingmaxsize"`
 	Customdiskofferingminsize                    int64  `json:"customdiskofferingminsize"`
+	Defaultuipagesize                            int64  `json:"defaultuipagesize"`
 	Dynamicrolesenabled                          bool   `json:"dynamicrolesenabled"`
 	JobID                                        string `json:"jobid"`
 	Jobstatus                                    int    `json:"jobstatus"`
diff --git a/cloudstack/ConfigurationService_test.go b/cloudstack/ConfigurationService_test.go
index 70518ed..00d1053 100644
--- a/cloudstack/ConfigurationService_test.go
+++ b/cloudstack/ConfigurationService_test.go
@@ -86,7 +86,6 @@ func TestConfigurationService_UpdateConfigurations(t *testing.T) {
 	if err != nil {
 		t.Errorf("Failed to update configuration due to: %v", err)
 	}
-
 	if resp.Value != "false" {
 		t.Errorf("Failed to update configuration")
 	}
diff --git a/cloudstack/DiskOfferingService.go b/cloudstack/DiskOfferingService.go
index 91e3095..863a046 100644
--- a/cloudstack/DiskOfferingService.go
+++ b/cloudstack/DiskOfferingService.go
@@ -85,6 +85,12 @@ func (p *CreateDiskOfferingParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("customizediops", vv)
 	}
+	if v, found := p.p["details"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("details[%d].%s", i, k), m[k])
+		}
+	}
 	if v, found := p.p["disksize"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("disksize", vv)
@@ -293,6 +299,21 @@ func (p *CreateDiskOfferingParams) GetCustomizediops() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateDiskOfferingParams) SetDetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["details"] = v
+}
+
+func (p *CreateDiskOfferingParams) GetDetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["details"].(map[string]string)
+	return value, ok
+}
+
 func (p *CreateDiskOfferingParams) SetDisksize(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -623,6 +644,7 @@ type CreateDiskOfferingResponse struct {
 	Displaytext                 string `json:"displaytext"`
 	Domain                      string `json:"domain"`
 	Domainid                    string `json:"domainid"`
+	Hasannotations              bool   `json:"hasannotations"`
 	Hypervisorsnapshotreserve   int    `json:"hypervisorsnapshotreserve"`
 	Id                          string `json:"id"`
 	Iscustomized                bool   `json:"iscustomized"`
@@ -1037,6 +1059,7 @@ type DiskOffering struct {
 	Displaytext                 string `json:"displaytext"`
 	Domain                      string `json:"domain"`
 	Domainid                    string `json:"domainid"`
+	Hasannotations              bool   `json:"hasannotations"`
 	Hypervisorsnapshotreserve   int    `json:"hypervisorsnapshotreserve"`
 	Id                          string `json:"id"`
 	Iscustomized                bool   `json:"iscustomized"`
@@ -1502,6 +1525,7 @@ type UpdateDiskOfferingResponse struct {
 	Displaytext                 string `json:"displaytext"`
 	Domain                      string `json:"domain"`
 	Domainid                    string `json:"domainid"`
+	Hasannotations              bool   `json:"hasannotations"`
 	Hypervisorsnapshotreserve   int    `json:"hypervisorsnapshotreserve"`
 	Id                          string `json:"id"`
 	Iscustomized                bool   `json:"iscustomized"`
diff --git a/cloudstack/DomainService.go b/cloudstack/DomainService.go
index e6668b7..24a4342 100644
--- a/cloudstack/DomainService.go
+++ b/cloudstack/DomainService.go
@@ -159,53 +159,57 @@ func (s *DomainService) CreateDomain(p *CreateDomainParams) (*CreateDomainRespon
 }
 
 type CreateDomainResponse struct {
-	Cpuavailable              string  `json:"cpuavailable"`
-	Cpulimit                  string  `json:"cpulimit"`
-	Cputotal                  int64   `json:"cputotal"`
-	Haschild                  bool    `json:"haschild"`
-	Id                        string  `json:"id"`
-	Ipavailable               string  `json:"ipavailable"`
-	Iplimit                   string  `json:"iplimit"`
-	Iptotal                   int64   `json:"iptotal"`
-	JobID                     string  `json:"jobid"`
-	Jobstatus                 int     `json:"jobstatus"`
-	Level                     int     `json:"level"`
-	Memoryavailable           string  `json:"memoryavailable"`
-	Memorylimit               string  `json:"memorylimit"`
-	Memorytotal               int64   `json:"memorytotal"`
-	Name                      string  `json:"name"`
-	Networkavailable          string  `json:"networkavailable"`
-	Networkdomain             string  `json:"networkdomain"`
-	Networklimit              string  `json:"networklimit"`
-	Networktotal              int64   `json:"networktotal"`
-	Parentdomainid            string  `json:"parentdomainid"`
-	Parentdomainname          string  `json:"parentdomainname"`
-	Path                      string  `json:"path"`
-	Primarystorageavailable   string  `json:"primarystorageavailable"`
-	Primarystoragelimit       string  `json:"primarystoragelimit"`
-	Primarystoragetotal       int64   `json:"primarystoragetotal"`
-	Projectavailable          string  `json:"projectavailable"`
-	Projectlimit              string  `json:"projectlimit"`
-	Projecttotal              int64   `json:"projecttotal"`
-	Secondarystorageavailable string  `json:"secondarystorageavailable"`
-	Secondarystoragelimit     string  `json:"secondarystoragelimit"`
-	Secondarystoragetotal     float64 `json:"secondarystoragetotal"`
-	Snapshotavailable         string  `json:"snapshotavailable"`
-	Snapshotlimit             string  `json:"snapshotlimit"`
-	Snapshottotal             int64   `json:"snapshottotal"`
-	State                     string  `json:"state"`
-	Templateavailable         string  `json:"templateavailable"`
-	Templatelimit             string  `json:"templatelimit"`
-	Templatetotal             int64   `json:"templatetotal"`
-	Vmavailable               string  `json:"vmavailable"`
-	Vmlimit                   string  `json:"vmlimit"`
-	Vmtotal                   int64   `json:"vmtotal"`
-	Volumeavailable           string  `json:"volumeavailable"`
-	Volumelimit               string  `json:"volumelimit"`
-	Volumetotal               int64   `json:"volumetotal"`
-	Vpcavailable              string  `json:"vpcavailable"`
-	Vpclimit                  string  `json:"vpclimit"`
-	Vpctotal                  int64   `json:"vpctotal"`
+	Cpuavailable              string            `json:"cpuavailable"`
+	Cpulimit                  string            `json:"cpulimit"`
+	Cputotal                  int64             `json:"cputotal"`
+	Created                   string            `json:"created"`
+	Domaindetails             map[string]string `json:"domaindetails"`
+	Hasannotations            bool              `json:"hasannotations"`
+	Haschild                  bool              `json:"haschild"`
+	Icon                      string            `json:"icon"`
+	Id                        string            `json:"id"`
+	Ipavailable               string            `json:"ipavailable"`
+	Iplimit                   string            `json:"iplimit"`
+	Iptotal                   int64             `json:"iptotal"`
+	JobID                     string            `json:"jobid"`
+	Jobstatus                 int               `json:"jobstatus"`
+	Level                     int               `json:"level"`
+	Memoryavailable           string            `json:"memoryavailable"`
+	Memorylimit               string            `json:"memorylimit"`
+	Memorytotal               int64             `json:"memorytotal"`
+	Name                      string            `json:"name"`
+	Networkavailable          string            `json:"networkavailable"`
+	Networkdomain             string            `json:"networkdomain"`
+	Networklimit              string            `json:"networklimit"`
+	Networktotal              int64             `json:"networktotal"`
+	Parentdomainid            string            `json:"parentdomainid"`
+	Parentdomainname          string            `json:"parentdomainname"`
+	Path                      string            `json:"path"`
+	Primarystorageavailable   string            `json:"primarystorageavailable"`
+	Primarystoragelimit       string            `json:"primarystoragelimit"`
+	Primarystoragetotal       int64             `json:"primarystoragetotal"`
+	Projectavailable          string            `json:"projectavailable"`
+	Projectlimit              string            `json:"projectlimit"`
+	Projecttotal              int64             `json:"projecttotal"`
+	Secondarystorageavailable string            `json:"secondarystorageavailable"`
+	Secondarystoragelimit     string            `json:"secondarystoragelimit"`
+	Secondarystoragetotal     float64           `json:"secondarystoragetotal"`
+	Snapshotavailable         string            `json:"snapshotavailable"`
+	Snapshotlimit             string            `json:"snapshotlimit"`
+	Snapshottotal             int64             `json:"snapshottotal"`
+	State                     string            `json:"state"`
+	Templateavailable         string            `json:"templateavailable"`
+	Templatelimit             string            `json:"templatelimit"`
+	Templatetotal             int64             `json:"templatetotal"`
+	Vmavailable               string            `json:"vmavailable"`
+	Vmlimit                   string            `json:"vmlimit"`
+	Vmtotal                   int64             `json:"vmtotal"`
+	Volumeavailable           string            `json:"volumeavailable"`
+	Volumelimit               string            `json:"volumelimit"`
+	Volumetotal               int64             `json:"volumetotal"`
+	Vpcavailable              string            `json:"vpcavailable"`
+	Vpclimit                  string            `json:"vpclimit"`
+	Vpctotal                  int64             `json:"vpctotal"`
 }
 
 type DeleteDomainParams struct {
@@ -337,6 +341,10 @@ func (p *ListDomainChildrenParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("pagesize", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	return u
 }
 
@@ -445,6 +453,21 @@ func (p *ListDomainChildrenParams) GetPagesize() (int, bool) {
 	return value, ok
 }
 
+func (p *ListDomainChildrenParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListDomainChildrenParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 // You should always use this function to get a new ListDomainChildrenParams instance,
 // as then you are sure you have configured all required params
 func (s *DomainService) NewListDomainChildrenParams() *ListDomainChildrenParams {
@@ -557,53 +580,57 @@ type ListDomainChildrenResponse struct {
 }
 
 type DomainChildren struct {
-	Cpuavailable              string  `json:"cpuavailable"`
-	Cpulimit                  string  `json:"cpulimit"`
-	Cputotal                  int64   `json:"cputotal"`
-	Haschild                  bool    `json:"haschild"`
-	Id                        string  `json:"id"`
-	Ipavailable               string  `json:"ipavailable"`
-	Iplimit                   string  `json:"iplimit"`
-	Iptotal                   int64   `json:"iptotal"`
-	JobID                     string  `json:"jobid"`
-	Jobstatus                 int     `json:"jobstatus"`
-	Level                     int     `json:"level"`
-	Memoryavailable           string  `json:"memoryavailable"`
-	Memorylimit               string  `json:"memorylimit"`
-	Memorytotal               int64   `json:"memorytotal"`
-	Name                      string  `json:"name"`
-	Networkavailable          string  `json:"networkavailable"`
-	Networkdomain             string  `json:"networkdomain"`
-	Networklimit              string  `json:"networklimit"`
-	Networktotal              int64   `json:"networktotal"`
-	Parentdomainid            string  `json:"parentdomainid"`
-	Parentdomainname          string  `json:"parentdomainname"`
-	Path                      string  `json:"path"`
-	Primarystorageavailable   string  `json:"primarystorageavailable"`
-	Primarystoragelimit       string  `json:"primarystoragelimit"`
-	Primarystoragetotal       int64   `json:"primarystoragetotal"`
-	Projectavailable          string  `json:"projectavailable"`
-	Projectlimit              string  `json:"projectlimit"`
-	Projecttotal              int64   `json:"projecttotal"`
-	Secondarystorageavailable string  `json:"secondarystorageavailable"`
-	Secondarystoragelimit     string  `json:"secondarystoragelimit"`
-	Secondarystoragetotal     float64 `json:"secondarystoragetotal"`
-	Snapshotavailable         string  `json:"snapshotavailable"`
-	Snapshotlimit             string  `json:"snapshotlimit"`
-	Snapshottotal             int64   `json:"snapshottotal"`
-	State                     string  `json:"state"`
-	Templateavailable         string  `json:"templateavailable"`
-	Templatelimit             string  `json:"templatelimit"`
-	Templatetotal             int64   `json:"templatetotal"`
-	Vmavailable               string  `json:"vmavailable"`
-	Vmlimit                   string  `json:"vmlimit"`
-	Vmtotal                   int64   `json:"vmtotal"`
-	Volumeavailable           string  `json:"volumeavailable"`
-	Volumelimit               string  `json:"volumelimit"`
-	Volumetotal               int64   `json:"volumetotal"`
-	Vpcavailable              string  `json:"vpcavailable"`
-	Vpclimit                  string  `json:"vpclimit"`
-	Vpctotal                  int64   `json:"vpctotal"`
+	Cpuavailable              string            `json:"cpuavailable"`
+	Cpulimit                  string            `json:"cpulimit"`
+	Cputotal                  int64             `json:"cputotal"`
+	Created                   string            `json:"created"`
+	Domaindetails             map[string]string `json:"domaindetails"`
+	Hasannotations            bool              `json:"hasannotations"`
+	Haschild                  bool              `json:"haschild"`
+	Icon                      string            `json:"icon"`
+	Id                        string            `json:"id"`
+	Ipavailable               string            `json:"ipavailable"`
+	Iplimit                   string            `json:"iplimit"`
+	Iptotal                   int64             `json:"iptotal"`
+	JobID                     string            `json:"jobid"`
+	Jobstatus                 int               `json:"jobstatus"`
+	Level                     int               `json:"level"`
+	Memoryavailable           string            `json:"memoryavailable"`
+	Memorylimit               string            `json:"memorylimit"`
+	Memorytotal               int64             `json:"memorytotal"`
+	Name                      string            `json:"name"`
+	Networkavailable          string            `json:"networkavailable"`
+	Networkdomain             string            `json:"networkdomain"`
+	Networklimit              string            `json:"networklimit"`
+	Networktotal              int64             `json:"networktotal"`
+	Parentdomainid            string            `json:"parentdomainid"`
+	Parentdomainname          string            `json:"parentdomainname"`
+	Path                      string            `json:"path"`
+	Primarystorageavailable   string            `json:"primarystorageavailable"`
+	Primarystoragelimit       string            `json:"primarystoragelimit"`
+	Primarystoragetotal       int64             `json:"primarystoragetotal"`
+	Projectavailable          string            `json:"projectavailable"`
+	Projectlimit              string            `json:"projectlimit"`
+	Projecttotal              int64             `json:"projecttotal"`
+	Secondarystorageavailable string            `json:"secondarystorageavailable"`
+	Secondarystoragelimit     string            `json:"secondarystoragelimit"`
+	Secondarystoragetotal     float64           `json:"secondarystoragetotal"`
+	Snapshotavailable         string            `json:"snapshotavailable"`
+	Snapshotlimit             string            `json:"snapshotlimit"`
+	Snapshottotal             int64             `json:"snapshottotal"`
+	State                     string            `json:"state"`
+	Templateavailable         string            `json:"templateavailable"`
+	Templatelimit             string            `json:"templatelimit"`
+	Templatetotal             int64             `json:"templatetotal"`
+	Vmavailable               string            `json:"vmavailable"`
+	Vmlimit                   string            `json:"vmlimit"`
+	Vmtotal                   int64             `json:"vmtotal"`
+	Volumeavailable           string            `json:"volumeavailable"`
+	Volumelimit               string            `json:"volumelimit"`
+	Volumetotal               int64             `json:"volumetotal"`
+	Vpcavailable              string            `json:"vpcavailable"`
+	Vpclimit                  string            `json:"vpclimit"`
+	Vpctotal                  int64             `json:"vpctotal"`
 }
 
 type ListDomainsParams struct {
@@ -644,6 +671,10 @@ func (p *ListDomainsParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("pagesize", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	return u
 }
 
@@ -767,6 +798,21 @@ func (p *ListDomainsParams) GetPagesize() (int, bool) {
 	return value, ok
 }
 
+func (p *ListDomainsParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListDomainsParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 // You should always use this function to get a new ListDomainsParams instance,
 // as then you are sure you have configured all required params
 func (s *DomainService) NewListDomainsParams() *ListDomainsParams {
@@ -879,53 +925,57 @@ type ListDomainsResponse struct {
 }
 
 type Domain struct {
-	Cpuavailable              string  `json:"cpuavailable"`
-	Cpulimit                  string  `json:"cpulimit"`
-	Cputotal                  int64   `json:"cputotal"`
-	Haschild                  bool    `json:"haschild"`
-	Id                        string  `json:"id"`
-	Ipavailable               string  `json:"ipavailable"`
-	Iplimit                   string  `json:"iplimit"`
-	Iptotal                   int64   `json:"iptotal"`
-	JobID                     string  `json:"jobid"`
-	Jobstatus                 int     `json:"jobstatus"`
-	Level                     int     `json:"level"`
-	Memoryavailable           string  `json:"memoryavailable"`
-	Memorylimit               string  `json:"memorylimit"`
-	Memorytotal               int64   `json:"memorytotal"`
-	Name                      string  `json:"name"`
-	Networkavailable          string  `json:"networkavailable"`
-	Networkdomain             string  `json:"networkdomain"`
-	Networklimit              string  `json:"networklimit"`
-	Networktotal              int64   `json:"networktotal"`
-	Parentdomainid            string  `json:"parentdomainid"`
-	Parentdomainname          string  `json:"parentdomainname"`
-	Path                      string  `json:"path"`
-	Primarystorageavailable   string  `json:"primarystorageavailable"`
-	Primarystoragelimit       string  `json:"primarystoragelimit"`
-	Primarystoragetotal       int64   `json:"primarystoragetotal"`
-	Projectavailable          string  `json:"projectavailable"`
-	Projectlimit              string  `json:"projectlimit"`
-	Projecttotal              int64   `json:"projecttotal"`
-	Secondarystorageavailable string  `json:"secondarystorageavailable"`
-	Secondarystoragelimit     string  `json:"secondarystoragelimit"`
-	Secondarystoragetotal     float64 `json:"secondarystoragetotal"`
-	Snapshotavailable         string  `json:"snapshotavailable"`
-	Snapshotlimit             string  `json:"snapshotlimit"`
-	Snapshottotal             int64   `json:"snapshottotal"`
-	State                     string  `json:"state"`
-	Templateavailable         string  `json:"templateavailable"`
-	Templatelimit             string  `json:"templatelimit"`
-	Templatetotal             int64   `json:"templatetotal"`
-	Vmavailable               string  `json:"vmavailable"`
-	Vmlimit                   string  `json:"vmlimit"`
-	Vmtotal                   int64   `json:"vmtotal"`
-	Volumeavailable           string  `json:"volumeavailable"`
-	Volumelimit               string  `json:"volumelimit"`
-	Volumetotal               int64   `json:"volumetotal"`
-	Vpcavailable              string  `json:"vpcavailable"`
-	Vpclimit                  string  `json:"vpclimit"`
-	Vpctotal                  int64   `json:"vpctotal"`
+	Cpuavailable              string            `json:"cpuavailable"`
+	Cpulimit                  string            `json:"cpulimit"`
+	Cputotal                  int64             `json:"cputotal"`
+	Created                   string            `json:"created"`
+	Domaindetails             map[string]string `json:"domaindetails"`
+	Hasannotations            bool              `json:"hasannotations"`
+	Haschild                  bool              `json:"haschild"`
+	Icon                      string            `json:"icon"`
+	Id                        string            `json:"id"`
+	Ipavailable               string            `json:"ipavailable"`
+	Iplimit                   string            `json:"iplimit"`
+	Iptotal                   int64             `json:"iptotal"`
+	JobID                     string            `json:"jobid"`
+	Jobstatus                 int               `json:"jobstatus"`
+	Level                     int               `json:"level"`
+	Memoryavailable           string            `json:"memoryavailable"`
+	Memorylimit               string            `json:"memorylimit"`
+	Memorytotal               int64             `json:"memorytotal"`
+	Name                      string            `json:"name"`
+	Networkavailable          string            `json:"networkavailable"`
+	Networkdomain             string            `json:"networkdomain"`
+	Networklimit              string            `json:"networklimit"`
+	Networktotal              int64             `json:"networktotal"`
+	Parentdomainid            string            `json:"parentdomainid"`
+	Parentdomainname          string            `json:"parentdomainname"`
+	Path                      string            `json:"path"`
+	Primarystorageavailable   string            `json:"primarystorageavailable"`
+	Primarystoragelimit       string            `json:"primarystoragelimit"`
+	Primarystoragetotal       int64             `json:"primarystoragetotal"`
+	Projectavailable          string            `json:"projectavailable"`
+	Projectlimit              string            `json:"projectlimit"`
+	Projecttotal              int64             `json:"projecttotal"`
+	Secondarystorageavailable string            `json:"secondarystorageavailable"`
+	Secondarystoragelimit     string            `json:"secondarystoragelimit"`
+	Secondarystoragetotal     float64           `json:"secondarystoragetotal"`
+	Snapshotavailable         string            `json:"snapshotavailable"`
+	Snapshotlimit             string            `json:"snapshotlimit"`
+	Snapshottotal             int64             `json:"snapshottotal"`
+	State                     string            `json:"state"`
+	Templateavailable         string            `json:"templateavailable"`
+	Templatelimit             string            `json:"templatelimit"`
+	Templatetotal             int64             `json:"templatetotal"`
+	Vmavailable               string            `json:"vmavailable"`
+	Vmlimit                   string            `json:"vmlimit"`
+	Vmtotal                   int64             `json:"vmtotal"`
+	Volumeavailable           string            `json:"volumeavailable"`
+	Volumelimit               string            `json:"volumelimit"`
+	Volumetotal               int64             `json:"volumetotal"`
+	Vpcavailable              string            `json:"vpcavailable"`
+	Vpclimit                  string            `json:"vpclimit"`
+	Vpctotal                  int64             `json:"vpctotal"`
 }
 
 type UpdateDomainParams struct {
@@ -1023,51 +1073,55 @@ func (s *DomainService) UpdateDomain(p *UpdateDomainParams) (*UpdateDomainRespon
 }
 
 type UpdateDomainResponse struct {
-	Cpuavailable              string  `json:"cpuavailable"`
-	Cpulimit                  string  `json:"cpulimit"`
-	Cputotal                  int64   `json:"cputotal"`
-	Haschild                  bool    `json:"haschild"`
-	Id                        string  `json:"id"`
-	Ipavailable               string  `json:"ipavailable"`
-	Iplimit                   string  `json:"iplimit"`
-	Iptotal                   int64   `json:"iptotal"`
-	JobID                     string  `json:"jobid"`
-	Jobstatus                 int     `json:"jobstatus"`
-	Level                     int     `json:"level"`
-	Memoryavailable           string  `json:"memoryavailable"`
-	Memorylimit               string  `json:"memorylimit"`
-	Memorytotal               int64   `json:"memorytotal"`
-	Name                      string  `json:"name"`
-	Networkavailable          string  `json:"networkavailable"`
-	Networkdomain             string  `json:"networkdomain"`
-	Networklimit              string  `json:"networklimit"`
-	Networktotal              int64   `json:"networktotal"`
-	Parentdomainid            string  `json:"parentdomainid"`
-	Parentdomainname          string  `json:"parentdomainname"`
-	Path                      string  `json:"path"`
-	Primarystorageavailable   string  `json:"primarystorageavailable"`
-	Primarystoragelimit       string  `json:"primarystoragelimit"`
-	Primarystoragetotal       int64   `json:"primarystoragetotal"`
-	Projectavailable          string  `json:"projectavailable"`
-	Projectlimit              string  `json:"projectlimit"`
-	Projecttotal              int64   `json:"projecttotal"`
-	Secondarystorageavailable string  `json:"secondarystorageavailable"`
-	Secondarystoragelimit     string  `json:"secondarystoragelimit"`
-	Secondarystoragetotal     float64 `json:"secondarystoragetotal"`
-	Snapshotavailable         string  `json:"snapshotavailable"`
-	Snapshotlimit             string  `json:"snapshotlimit"`
-	Snapshottotal             int64   `json:"snapshottotal"`
-	State                     string  `json:"state"`
-	Templateavailable         string  `json:"templateavailable"`
-	Templatelimit             string  `json:"templatelimit"`
-	Templatetotal             int64   `json:"templatetotal"`
-	Vmavailable               string  `json:"vmavailable"`
-	Vmlimit                   string  `json:"vmlimit"`
-	Vmtotal                   int64   `json:"vmtotal"`
-	Volumeavailable           string  `json:"volumeavailable"`
-	Volumelimit               string  `json:"volumelimit"`
-	Volumetotal               int64   `json:"volumetotal"`
-	Vpcavailable              string  `json:"vpcavailable"`
-	Vpclimit                  string  `json:"vpclimit"`
-	Vpctotal                  int64   `json:"vpctotal"`
+	Cpuavailable              string            `json:"cpuavailable"`
+	Cpulimit                  string            `json:"cpulimit"`
+	Cputotal                  int64             `json:"cputotal"`
+	Created                   string            `json:"created"`
+	Domaindetails             map[string]string `json:"domaindetails"`
+	Hasannotations            bool              `json:"hasannotations"`
+	Haschild                  bool              `json:"haschild"`
+	Icon                      string            `json:"icon"`
+	Id                        string            `json:"id"`
+	Ipavailable               string            `json:"ipavailable"`
+	Iplimit                   string            `json:"iplimit"`
+	Iptotal                   int64             `json:"iptotal"`
+	JobID                     string            `json:"jobid"`
+	Jobstatus                 int               `json:"jobstatus"`
+	Level                     int               `json:"level"`
+	Memoryavailable           string            `json:"memoryavailable"`
+	Memorylimit               string            `json:"memorylimit"`
+	Memorytotal               int64             `json:"memorytotal"`
+	Name                      string            `json:"name"`
+	Networkavailable          string            `json:"networkavailable"`
+	Networkdomain             string            `json:"networkdomain"`
+	Networklimit              string            `json:"networklimit"`
+	Networktotal              int64             `json:"networktotal"`
+	Parentdomainid            string            `json:"parentdomainid"`
+	Parentdomainname          string            `json:"parentdomainname"`
+	Path                      string            `json:"path"`
+	Primarystorageavailable   string            `json:"primarystorageavailable"`
+	Primarystoragelimit       string            `json:"primarystoragelimit"`
+	Primarystoragetotal       int64             `json:"primarystoragetotal"`
+	Projectavailable          string            `json:"projectavailable"`
+	Projectlimit              string            `json:"projectlimit"`
+	Projecttotal              int64             `json:"projecttotal"`
+	Secondarystorageavailable string            `json:"secondarystorageavailable"`
+	Secondarystoragelimit     string            `json:"secondarystoragelimit"`
+	Secondarystoragetotal     float64           `json:"secondarystoragetotal"`
+	Snapshotavailable         string            `json:"snapshotavailable"`
+	Snapshotlimit             string            `json:"snapshotlimit"`
+	Snapshottotal             int64             `json:"snapshottotal"`
+	State                     string            `json:"state"`
+	Templateavailable         string            `json:"templateavailable"`
+	Templatelimit             string            `json:"templatelimit"`
+	Templatetotal             int64             `json:"templatetotal"`
+	Vmavailable               string            `json:"vmavailable"`
+	Vmlimit                   string            `json:"vmlimit"`
+	Vmtotal                   int64             `json:"vmtotal"`
+	Volumeavailable           string            `json:"volumeavailable"`
+	Volumelimit               string            `json:"volumelimit"`
+	Volumetotal               int64             `json:"volumetotal"`
+	Vpcavailable              string            `json:"vpcavailable"`
+	Vpclimit                  string            `json:"vpclimit"`
+	Vpctotal                  int64             `json:"vpctotal"`
 }
diff --git a/cloudstack/HostService.go b/cloudstack/HostService.go
index 8c51c61..3412c9a 100644
--- a/cloudstack/HostService.go
+++ b/cloudstack/HostService.go
@@ -29,11 +29,11 @@ import (
 
 type HostServiceIface interface {
 	AddBaremetalHost(p *AddBaremetalHostParams) (*AddBaremetalHostResponse, error)
-	NewAddBaremetalHostParams(hypervisor string, password string, podid string, url string, username string, zoneid string) *AddBaremetalHostParams
+	NewAddBaremetalHostParams(hypervisor string, podid string, url string, zoneid string) *AddBaremetalHostParams
 	AddGloboDnsHost(p *AddGloboDnsHostParams) (*AddGloboDnsHostResponse, error)
 	NewAddGloboDnsHostParams(password string, physicalnetworkid string, url string, username string) *AddGloboDnsHostParams
 	AddHost(p *AddHostParams) (*AddHostResponse, error)
-	NewAddHostParams(hypervisor string, password string, podid string, url string, username string, zoneid string) *AddHostParams
+	NewAddHostParams(hypervisor string, podid string, url string, zoneid string) *AddHostParams
 	AddSecondaryStorage(p *AddSecondaryStorageParams) (*AddSecondaryStorageResponse, error)
 	NewAddSecondaryStorageParams(url string) *AddSecondaryStorageParams
 	CancelHostMaintenance(p *CancelHostMaintenanceParams) (*CancelHostMaintenanceResponse, error)
@@ -294,14 +294,12 @@ func (p *AddBaremetalHostParams) GetZoneid() (string, bool) {
 
 // You should always use this function to get a new AddBaremetalHostParams instance,
 // as then you are sure you have configured all required params
-func (s *HostService) NewAddBaremetalHostParams(hypervisor string, password string, podid string, url string, username string, zoneid string) *AddBaremetalHostParams {
+func (s *HostService) NewAddBaremetalHostParams(hypervisor string, podid string, url string, zoneid string) *AddBaremetalHostParams {
 	p := &AddBaremetalHostParams{}
 	p.p = make(map[string]interface{})
 	p.p["hypervisor"] = hypervisor
-	p.p["password"] = password
 	p.p["podid"] = podid
 	p.p["url"] = url
-	p.p["username"] = username
 	p.p["zoneid"] = zoneid
 	return p
 }
@@ -345,6 +343,7 @@ type AddBaremetalHostResponse struct {
 	Events                           string                             `json:"events"`
 	Gpugroup                         []AddBaremetalHostResponseGpugroup `json:"gpugroup"`
 	Hahost                           bool                               `json:"hahost"`
+	Hasannotations                   bool                               `json:"hasannotations"`
 	Hasenoughcapacity                bool                               `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse                  `json:"hostha"`
 	Hosttags                         string                             `json:"hosttags"`
@@ -728,14 +727,12 @@ func (p *AddHostParams) GetZoneid() (string, bool) {
 
 // You should always use this function to get a new AddHostParams instance,
 // as then you are sure you have configured all required params
-func (s *HostService) NewAddHostParams(hypervisor string, password string, podid string, url string, username string, zoneid string) *AddHostParams {
+func (s *HostService) NewAddHostParams(hypervisor string, podid string, url string, zoneid string) *AddHostParams {
 	p := &AddHostParams{}
 	p.p = make(map[string]interface{})
 	p.p["hypervisor"] = hypervisor
-	p.p["password"] = password
 	p.p["podid"] = podid
 	p.p["url"] = url
-	p.p["username"] = username
 	p.p["zoneid"] = zoneid
 	return p
 }
@@ -779,6 +776,7 @@ type AddHostResponse struct {
 	Events                           string                      `json:"events"`
 	Gpugroup                         []AddHostResponseGpugroup   `json:"gpugroup"`
 	Hahost                           bool                        `json:"hahost"`
+	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse           `json:"hostha"`
 	Hosttags                         string                      `json:"hosttags"`
@@ -907,19 +905,20 @@ func (s *HostService) AddSecondaryStorage(p *AddSecondaryStorageParams) (*AddSec
 }
 
 type AddSecondaryStorageResponse struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type CancelHostMaintenanceParams struct {
@@ -1020,6 +1019,7 @@ type CancelHostMaintenanceResponse struct {
 	Events                           string                                  `json:"events"`
 	Gpugroup                         []CancelHostMaintenanceResponseGpugroup `json:"gpugroup"`
 	Hahost                           bool                                    `json:"hahost"`
+	Hasannotations                   bool                                    `json:"hasannotations"`
 	Hasenoughcapacity                bool                                    `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse                       `json:"hostha"`
 	Hosttags                         string                                  `json:"hosttags"`
@@ -2632,6 +2632,7 @@ type Host struct {
 	Events                           string                      `json:"events"`
 	Gpugroup                         []HostGpugroup              `json:"gpugroup"`
 	Hahost                           bool                        `json:"hahost"`
+	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse           `json:"hostha"`
 	Hosttags                         string                      `json:"hosttags"`
@@ -3152,6 +3153,7 @@ type HostsMetric struct {
 	Events                           string                      `json:"events"`
 	Gpugroup                         []HostsMetricGpugroup       `json:"gpugroup"`
 	Hahost                           bool                        `json:"hahost"`
+	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse           `json:"hostha"`
 	Hosttags                         string                      `json:"hosttags"`
@@ -3316,6 +3318,7 @@ type PrepareHostForMaintenanceResponse struct {
 	Events                           string                                      `json:"events"`
 	Gpugroup                         []PrepareHostForMaintenanceResponseGpugroup `json:"gpugroup"`
 	Hahost                           bool                                        `json:"hahost"`
+	Hasannotations                   bool                                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                                        `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse                           `json:"hostha"`
 	Hosttags                         string                                      `json:"hosttags"`
@@ -3469,6 +3472,7 @@ type ReconnectHostResponse struct {
 	Events                           string                          `json:"events"`
 	Gpugroup                         []ReconnectHostResponseGpugroup `json:"gpugroup"`
 	Hahost                           bool                            `json:"hahost"`
+	Hasannotations                   bool                            `json:"hasannotations"`
 	Hasenoughcapacity                bool                            `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse               `json:"hostha"`
 	Hosttags                         string                          `json:"hosttags"`
@@ -3863,6 +3867,7 @@ type UpdateHostResponse struct {
 	Events                           string                       `json:"events"`
 	Gpugroup                         []UpdateHostResponseGpugroup `json:"gpugroup"`
 	Hahost                           bool                         `json:"hahost"`
+	Hasannotations                   bool                         `json:"hasannotations"`
 	Hasenoughcapacity                bool                         `json:"hasenoughcapacity"`
 	Hostha                           HAForHostResponse            `json:"hostha"`
 	Hosttags                         string                       `json:"hosttags"`
diff --git a/cloudstack/HostService_mock.go b/cloudstack/HostService_mock.go
index acf7da2..afa82fe 100644
--- a/cloudstack/HostService_mock.go
+++ b/cloudstack/HostService_mock.go
@@ -440,17 +440,17 @@ func (mr *MockHostServiceIfaceMockRecorder) ListHostsMetrics(p interface{}) *gom
 }
 
 // NewAddBaremetalHostParams mocks base method.
-func (m *MockHostServiceIface) NewAddBaremetalHostParams(hypervisor, password, podid, url, username, zoneid string) *AddBaremetalHostParams {
+func (m *MockHostServiceIface) NewAddBaremetalHostParams(hypervisor, podid, url, zoneid string) *AddBaremetalHostParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewAddBaremetalHostParams", hypervisor, password, podid, url, username, zoneid)
+	ret := m.ctrl.Call(m, "NewAddBaremetalHostParams", hypervisor, podid, url, zoneid)
 	ret0, _ := ret[0].(*AddBaremetalHostParams)
 	return ret0
 }
 
 // NewAddBaremetalHostParams indicates an expected call of NewAddBaremetalHostParams.
-func (mr *MockHostServiceIfaceMockRecorder) NewAddBaremetalHostParams(hypervisor, password, podid, url, username, zoneid interface{}) *gomock.Call {
+func (mr *MockHostServiceIfaceMockRecorder) NewAddBaremetalHostParams(hypervisor, podid, url, zoneid interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewAddBaremetalHostParams", reflect.TypeOf((*MockHostServiceIface)(nil).NewAddBaremetalHostParams), hypervisor, password, podid, url, username, zoneid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewAddBaremetalHostParams", reflect.TypeOf((*MockHostServiceIface)(nil).NewAddBaremetalHostParams), hypervisor, podid, url, zoneid)
 }
 
 // NewAddGloboDnsHostParams mocks base method.
@@ -468,17 +468,17 @@ func (mr *MockHostServiceIfaceMockRecorder) NewAddGloboDnsHostParams(password, p
 }
 
 // NewAddHostParams mocks base method.
-func (m *MockHostServiceIface) NewAddHostParams(hypervisor, password, podid, url, username, zoneid string) *AddHostParams {
+func (m *MockHostServiceIface) NewAddHostParams(hypervisor, podid, url, zoneid string) *AddHostParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewAddHostParams", hypervisor, password, podid, url, username, zoneid)
+	ret := m.ctrl.Call(m, "NewAddHostParams", hypervisor, podid, url, zoneid)
 	ret0, _ := ret[0].(*AddHostParams)
 	return ret0
 }
 
 // NewAddHostParams indicates an expected call of NewAddHostParams.
-func (mr *MockHostServiceIfaceMockRecorder) NewAddHostParams(hypervisor, password, podid, url, username, zoneid interface{}) *gomock.Call {
+func (mr *MockHostServiceIfaceMockRecorder) NewAddHostParams(hypervisor, podid, url, zoneid interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewAddHostParams", reflect.TypeOf((*MockHostServiceIface)(nil).NewAddHostParams), hypervisor, password, podid, url, username, zoneid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewAddHostParams", reflect.TypeOf((*MockHostServiceIface)(nil).NewAddHostParams), hypervisor, podid, url, zoneid)
 }
 
 // NewAddSecondaryStorageParams mocks base method.
diff --git a/cloudstack/HostService_test.go b/cloudstack/HostService_test.go
index 2e542b4..9d529f3 100644
--- a/cloudstack/HostService_test.go
+++ b/cloudstack/HostService_test.go
@@ -38,9 +38,8 @@ func TestHostService_AddHost(t *testing.T) {
 
 	defer server.Close()
 	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewAddHostParams("Simulator", "password",
-		"5382edc2-e689-4074-bd67-0e1a236eb2bc", "http://sim/c0/h0",
-		"root", "d4a81f75-5d92-415e-ab59-e85cc2ce56d9")
+	params := client.Host.NewAddHostParams("Simulator", "5382edc2-e689-4074-bd67-0e1a236eb2bc", "http://sim/c0/h0",
+		"d4a81f75-5d92-415e-ab59-e85cc2ce56d9")
 	resp, err := client.Host.AddHost(params)
 	if err != nil {
 		t.Errorf("Failed to add host due to: %v", err)
diff --git a/cloudstack/ISOService.go b/cloudstack/ISOService.go
index e913d24..db285a3 100644
--- a/cloudstack/ISOService.go
+++ b/cloudstack/ISOService.go
@@ -193,9 +193,11 @@ type AttachIsoResponse struct {
 	Groupid               string                           `json:"groupid"`
 	Guestosid             string                           `json:"guestosid"`
 	Haenable              bool                             `json:"haenable"`
+	Hasannotations        bool                             `json:"hasannotations"`
 	Hostid                string                           `json:"hostid"`
 	Hostname              string                           `json:"hostname"`
 	Hypervisor            string                           `json:"hypervisor"`
+	Icon                  string                           `json:"icon"`
 	Id                    string                           `json:"id"`
 	Instancename          string                           `json:"instancename"`
 	Isdynamicallyscalable bool                             `json:"isdynamicallyscalable"`
@@ -205,6 +207,7 @@ type AttachIsoResponse struct {
 	JobID                 string                           `json:"jobid"`
 	Jobstatus             int                              `json:"jobstatus"`
 	Keypair               string                           `json:"keypair"`
+	Lastupdated           string                           `json:"lastupdated"`
 	Memory                int                              `json:"memory"`
 	Memoryintfreekbs      int64                            `json:"memoryintfreekbs"`
 	Memorykbs             int64                            `json:"memorykbs"`
@@ -217,14 +220,17 @@ type AttachIsoResponse struct {
 	Ostypeid              string                           `json:"ostypeid"`
 	Password              string                           `json:"password"`
 	Passwordenabled       bool                             `json:"passwordenabled"`
+	Pooltype              string                           `json:"pooltype"`
 	Project               string                           `json:"project"`
 	Projectid             string                           `json:"projectid"`
 	Publicip              string                           `json:"publicip"`
 	Publicipid            string                           `json:"publicipid"`
-	Readonlyuidetails     string                           `json:"readonlyuidetails"`
+	Readonlydetails       string                           `json:"readonlydetails"`
+	Receivedbytes         int64                            `json:"receivedbytes"`
 	Rootdeviceid          int64                            `json:"rootdeviceid"`
 	Rootdevicetype        string                           `json:"rootdevicetype"`
 	Securitygroup         []AttachIsoResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                            `json:"sentbytes"`
 	Serviceofferingid     string                           `json:"serviceofferingid"`
 	Serviceofferingname   string                           `json:"serviceofferingname"`
 	Servicestate          string                           `json:"servicestate"`
@@ -456,9 +462,11 @@ type CopyIsoResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -730,9 +738,11 @@ type DetachIsoResponse struct {
 	Groupid               string                           `json:"groupid"`
 	Guestosid             string                           `json:"guestosid"`
 	Haenable              bool                             `json:"haenable"`
+	Hasannotations        bool                             `json:"hasannotations"`
 	Hostid                string                           `json:"hostid"`
 	Hostname              string                           `json:"hostname"`
 	Hypervisor            string                           `json:"hypervisor"`
+	Icon                  string                           `json:"icon"`
 	Id                    string                           `json:"id"`
 	Instancename          string                           `json:"instancename"`
 	Isdynamicallyscalable bool                             `json:"isdynamicallyscalable"`
@@ -742,6 +752,7 @@ type DetachIsoResponse struct {
 	JobID                 string                           `json:"jobid"`
 	Jobstatus             int                              `json:"jobstatus"`
 	Keypair               string                           `json:"keypair"`
+	Lastupdated           string                           `json:"lastupdated"`
 	Memory                int                              `json:"memory"`
 	Memoryintfreekbs      int64                            `json:"memoryintfreekbs"`
 	Memorykbs             int64                            `json:"memorykbs"`
@@ -754,14 +765,17 @@ type DetachIsoResponse struct {
 	Ostypeid              string                           `json:"ostypeid"`
 	Password              string                           `json:"password"`
 	Passwordenabled       bool                             `json:"passwordenabled"`
+	Pooltype              string                           `json:"pooltype"`
 	Project               string                           `json:"project"`
 	Projectid             string                           `json:"projectid"`
 	Publicip              string                           `json:"publicip"`
 	Publicipid            string                           `json:"publicipid"`
-	Readonlyuidetails     string                           `json:"readonlyuidetails"`
+	Readonlydetails       string                           `json:"readonlydetails"`
+	Receivedbytes         int64                            `json:"receivedbytes"`
 	Rootdeviceid          int64                            `json:"rootdeviceid"`
 	Rootdevicetype        string                           `json:"rootdevicetype"`
 	Securitygroup         []DetachIsoResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                            `json:"sentbytes"`
 	Serviceofferingid     string                           `json:"serviceofferingid"`
 	Serviceofferingname   string                           `json:"serviceofferingname"`
 	Servicestate          string                           `json:"servicestate"`
@@ -1157,6 +1171,10 @@ func (p *ListIsosParams) toURLValues() url.Values {
 	if v, found := p.p["projectid"]; found {
 		u.Set("projectid", v.(string))
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["showremoved"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showremoved", vv)
@@ -1403,6 +1421,21 @@ func (p *ListIsosParams) GetProjectid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListIsosParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListIsosParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListIsosParams) SetShowremoved(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1594,9 +1627,11 @@ type Iso struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -2024,9 +2059,11 @@ type RegisterIsoResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -2401,9 +2438,11 @@ type UpdateIsoResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
diff --git a/cloudstack/ImageStoreService.go b/cloudstack/ImageStoreService.go
index 65d4dc2..0e7769f 100644
--- a/cloudstack/ImageStoreService.go
+++ b/cloudstack/ImageStoreService.go
@@ -187,19 +187,20 @@ func (s *ImageStoreService) AddImageStore(p *AddImageStoreParams) (*AddImageStor
 }
 
 type AddImageStoreResponse struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type AddImageStoreS3Params struct {
@@ -446,19 +447,20 @@ func (s *ImageStoreService) AddImageStoreS3(p *AddImageStoreS3Params) (*AddImage
 }
 
 type AddImageStoreS3Response struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type CreateSecondaryStagingStoreParams struct {
@@ -592,19 +594,20 @@ func (s *ImageStoreService) CreateSecondaryStagingStore(p *CreateSecondaryStagin
 }
 
 type CreateSecondaryStagingStoreResponse struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type DeleteImageStoreParams struct {
@@ -1072,19 +1075,20 @@ type ListImageStoresResponse struct {
 }
 
 type ImageStore struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type ListSecondaryStagingStoresParams struct {
@@ -1357,19 +1361,20 @@ type ListSecondaryStagingStoresResponse struct {
 }
 
 type SecondaryStagingStore struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type UpdateCloudToUseObjectStoreParams struct {
@@ -1485,17 +1490,18 @@ func (s *ImageStoreService) UpdateCloudToUseObjectStore(p *UpdateCloudToUseObjec
 }
 
 type UpdateCloudToUseObjectStoreResponse struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
diff --git a/cloudstack/InternalLBService.go b/cloudstack/InternalLBService.go
index 6ee3b69..44922d0 100644
--- a/cloudstack/InternalLBService.go
+++ b/cloudstack/InternalLBService.go
@@ -888,6 +888,7 @@ type InternalLoadBalancerVM struct {
 	Guestnetmask        string                                     `json:"guestnetmask"`
 	Guestnetworkid      string                                     `json:"guestnetworkid"`
 	Guestnetworkname    string                                     `json:"guestnetworkname"`
+	Hasannotations      bool                                       `json:"hasannotations"`
 	Healthcheckresults  []InternalLoadBalancerVMHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                       `json:"healthchecksfailed"`
 	Hostid              string                                     `json:"hostid"`
@@ -1025,6 +1026,7 @@ type StartInternalLoadBalancerVMResponse struct {
 	Guestnetmask        string                                                  `json:"guestnetmask"`
 	Guestnetworkid      string                                                  `json:"guestnetworkid"`
 	Guestnetworkname    string                                                  `json:"guestnetworkname"`
+	Hasannotations      bool                                                    `json:"hasannotations"`
 	Healthcheckresults  []StartInternalLoadBalancerVMResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                                    `json:"healthchecksfailed"`
 	Hostid              string                                                  `json:"hostid"`
@@ -1181,6 +1183,7 @@ type StopInternalLoadBalancerVMResponse struct {
 	Guestnetmask        string                                                 `json:"guestnetmask"`
 	Guestnetworkid      string                                                 `json:"guestnetworkid"`
 	Guestnetworkname    string                                                 `json:"guestnetworkname"`
+	Hasannotations      bool                                                   `json:"hasannotations"`
 	Healthcheckresults  []StopInternalLoadBalancerVMResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                                   `json:"healthchecksfailed"`
 	Hostid              string                                                 `json:"hostid"`
diff --git a/cloudstack/LDAPService.go b/cloudstack/LDAPService.go
index e38a46f..c437ba2 100644
--- a/cloudstack/LDAPService.go
+++ b/cloudstack/LDAPService.go
@@ -939,11 +939,13 @@ type LdapCreateAccountResponse struct {
 	Cpuavailable              string                          `json:"cpuavailable"`
 	Cpulimit                  string                          `json:"cpulimit"`
 	Cputotal                  int64                           `json:"cputotal"`
+	Created                   string                          `json:"created"`
 	Defaultzoneid             string                          `json:"defaultzoneid"`
 	Domain                    string                          `json:"domain"`
 	Domainid                  string                          `json:"domainid"`
 	Domainpath                string                          `json:"domainpath"`
 	Groups                    []string                        `json:"groups"`
+	Icon                      string                          `json:"icon"`
 	Id                        string                          `json:"id"`
 	Ipavailable               string                          `json:"ipavailable"`
 	Iplimit                   string                          `json:"iplimit"`
@@ -1005,6 +1007,7 @@ type LdapCreateAccountResponseUser struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
diff --git a/cloudstack/LimitService.go b/cloudstack/LimitService.go
index dd838cd..56e91e3 100644
--- a/cloudstack/LimitService.go
+++ b/cloudstack/LimitService.go
@@ -394,13 +394,37 @@ func (s *LimitService) ResetApiLimit(p *ResetApiLimitParams) (*ResetApiLimitResp
 }
 
 type ResetApiLimitResponse struct {
-	Account     string `json:"account"`
-	Accountid   string `json:"accountid"`
-	ApiAllowed  int    `json:"apiAllowed"`
-	ApiIssued   int    `json:"apiIssued"`
-	ExpireAfter int64  `json:"expireAfter"`
+	Displaytext string `json:"displaytext"`
 	JobID       string `json:"jobid"`
 	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
+}
+
+func (r *ResetApiLimitResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias ResetApiLimitResponse
+	return json.Unmarshal(b, (*alias)(r))
 }
 
 type UpdateResourceCountParams struct {
diff --git a/examples/AddHost.go b/cloudstack/LimitService_test.go
similarity index 53%
copy from examples/AddHost.go
copy to cloudstack/LimitService_test.go
index 20b8fcf..81aa2e0 100644
--- a/examples/AddHost.go
+++ b/cloudstack/LimitService_test.go
@@ -17,28 +17,34 @@
 // under the License.
 //
 
-package main
+package cloudstack
 
 import (
-	"encoding/json"
 	"fmt"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
-	"log"
+	"net/http"
+	"net/http/httptest"
+	"testing"
 )
 
-func main()  {
-	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
-	p := cs.Host.NewAddHostParams("Simulator", "password", PodId,
-		"http://sim/c0/h0", "root", ZoneId)
-	resp, err := cs.Host.AddHost(p)
+func TestLimitService_ResetApiLimit(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+		apiName := "resetApiLimit"
+		response, err := ReadData(apiName, "LimitService")
+		if err != nil {
+			t.Errorf("Failed to read response data due to: %v", err)
+		}
+		fmt.Fprintln(writer, response[apiName])
+	}))
+	defer server.Close()
+	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
+	params := client.Limit.NewResetApiLimitParams()
+	resp, err := client.Limit.ResetApiLimit(params)
 	if err != nil {
-		fmt.Errorf("Failed to add host due to: %v", err)
+		t.Errorf("Failed to reset API Params limit due to: %v", err)
+		return
 	}
 
-	b, err := json.MarshalIndent(resp, "", "    ")
-	if err != nil {
-		log.Printf("%v", err)
-		return
+	if resp == nil {
+		t.Errorf("Failed to register template")
 	}
-	log.Printf("Host response : %v", string(b))
-}
\ No newline at end of file
+}
diff --git a/examples/AddHost.go b/cloudstack/NetworkACLService_test.go
similarity index 50%
copy from examples/AddHost.go
copy to cloudstack/NetworkACLService_test.go
index 20b8fcf..b9023aa 100644
--- a/examples/AddHost.go
+++ b/cloudstack/NetworkACLService_test.go
@@ -17,28 +17,32 @@
 // under the License.
 //
 
-package main
+package cloudstack
 
 import (
-	"encoding/json"
 	"fmt"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
-	"log"
+	"net/http"
+	"net/http/httptest"
+	"testing"
 )
 
-func main()  {
-	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
-	p := cs.Host.NewAddHostParams("Simulator", "password", PodId,
-		"http://sim/c0/h0", "root", ZoneId)
-	resp, err := cs.Host.AddHost(p)
+func TestNetworkACLService_UpdateNetworkACLList(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+		apiName := "updateNetworkACLList"
+		response, err := ParseAsyncResponse(apiName, "NetworkACLService", *request)
+		if err != nil {
+			t.Errorf("Failed to parse response, due to: %v", err)
+		}
+		fmt.Fprintln(writer, response)
+	}))
+	defer server.Close()
+	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
+	params := client.NetworkACL.NewUpdateNetworkACLListParams("a31e11a0-57fe-41df-be7a-34d359673061")
+	resp, err := client.NetworkACL.UpdateNetworkACLList(params)
 	if err != nil {
-		fmt.Errorf("Failed to add host due to: %v", err)
+		t.Errorf("Failed to update Network ACL list due to: %v", err)
 	}
-
-	b, err := json.MarshalIndent(resp, "", "    ")
-	if err != nil {
-		log.Printf("%v", err)
-		return
+	if resp == nil {
+		t.Errorf("Failed to update Network ACL list ")
 	}
-	log.Printf("Host response : %v", string(b))
-}
\ No newline at end of file
+}
diff --git a/cloudstack/NetworkOfferingService.go b/cloudstack/NetworkOfferingService.go
index 503a78b..7ae5bff 100644
--- a/cloudstack/NetworkOfferingService.go
+++ b/cloudstack/NetworkOfferingService.go
@@ -29,7 +29,7 @@ import (
 
 type NetworkOfferingServiceIface interface {
 	CreateNetworkOffering(p *CreateNetworkOfferingParams) (*CreateNetworkOfferingResponse, error)
-	NewCreateNetworkOfferingParams(displaytext string, guestiptype string, name string, supportedservices []string, traffictype string) *CreateNetworkOfferingParams
+	NewCreateNetworkOfferingParams(displaytext string, guestiptype string, name string, traffictype string) *CreateNetworkOfferingParams
 	DeleteNetworkOffering(p *DeleteNetworkOfferingParams) (*DeleteNetworkOfferingResponse, error)
 	NewDeleteNetworkOfferingParams(id string) *DeleteNetworkOfferingParams
 	ListNetworkOfferings(p *ListNetworkOfferingsParams) (*ListNetworkOfferingsResponse, error)
@@ -74,6 +74,10 @@ func (p *CreateNetworkOfferingParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("egressdefaultpolicy", vv)
 	}
+	if v, found := p.p["enable"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("enable", vv)
+	}
 	if v, found := p.p["forvpc"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forvpc", vv)
@@ -232,6 +236,21 @@ func (p *CreateNetworkOfferingParams) GetEgressdefaultpolicy() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateNetworkOfferingParams) SetEnable(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["enable"] = v
+}
+
+func (p *CreateNetworkOfferingParams) GetEnable() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["enable"].(bool)
+	return value, ok
+}
+
 func (p *CreateNetworkOfferingParams) SetForvpc(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -474,13 +493,12 @@ func (p *CreateNetworkOfferingParams) GetZoneid() ([]string, bool) {
 
 // You should always use this function to get a new CreateNetworkOfferingParams instance,
 // as then you are sure you have configured all required params
-func (s *NetworkOfferingService) NewCreateNetworkOfferingParams(displaytext string, guestiptype string, name string, supportedservices []string, traffictype string) *CreateNetworkOfferingParams {
+func (s *NetworkOfferingService) NewCreateNetworkOfferingParams(displaytext string, guestiptype string, name string, traffictype string) *CreateNetworkOfferingParams {
 	p := &CreateNetworkOfferingParams{}
 	p.p = make(map[string]interface{})
 	p.p["displaytext"] = displaytext
 	p.p["guestiptype"] = guestiptype
 	p.p["name"] = name
-	p.p["supportedservices"] = supportedservices
 	p.p["traffictype"] = traffictype
 	return p
 }
@@ -515,6 +533,7 @@ type CreateNetworkOfferingResponse struct {
 	Egressdefaultpolicy      bool                                   `json:"egressdefaultpolicy"`
 	Forvpc                   bool                                   `json:"forvpc"`
 	Guestiptype              string                                 `json:"guestiptype"`
+	Hasannotations           bool                                   `json:"hasannotations"`
 	Id                       string                                 `json:"id"`
 	Isdefault                bool                                   `json:"isdefault"`
 	Ispersistent             bool                                   `json:"ispersistent"`
@@ -1167,6 +1186,7 @@ type NetworkOffering struct {
 	Egressdefaultpolicy      bool                             `json:"egressdefaultpolicy"`
 	Forvpc                   bool                             `json:"forvpc"`
 	Guestiptype              string                           `json:"guestiptype"`
+	Hasannotations           bool                             `json:"hasannotations"`
 	Id                       string                           `json:"id"`
 	Isdefault                bool                             `json:"isdefault"`
 	Ispersistent             bool                             `json:"ispersistent"`
@@ -1461,6 +1481,7 @@ type UpdateNetworkOfferingResponse struct {
 	Egressdefaultpolicy      bool                                   `json:"egressdefaultpolicy"`
 	Forvpc                   bool                                   `json:"forvpc"`
 	Guestiptype              string                                 `json:"guestiptype"`
+	Hasannotations           bool                                   `json:"hasannotations"`
 	Id                       string                                 `json:"id"`
 	Isdefault                bool                                   `json:"isdefault"`
 	Ispersistent             bool                                   `json:"ispersistent"`
diff --git a/cloudstack/NetworkOfferingService_mock.go b/cloudstack/NetworkOfferingService_mock.go
index 36a020d..aeda2fb 100644
--- a/cloudstack/NetworkOfferingService_mock.go
+++ b/cloudstack/NetworkOfferingService_mock.go
@@ -161,17 +161,17 @@ func (mr *MockNetworkOfferingServiceIfaceMockRecorder) ListNetworkOfferings(p in
 }
 
 // NewCreateNetworkOfferingParams mocks base method.
-func (m *MockNetworkOfferingServiceIface) NewCreateNetworkOfferingParams(displaytext, guestiptype, name string, supportedservices []string, traffictype string) *CreateNetworkOfferingParams {
+func (m *MockNetworkOfferingServiceIface) NewCreateNetworkOfferingParams(displaytext, guestiptype, name, traffictype string) *CreateNetworkOfferingParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewCreateNetworkOfferingParams", displaytext, guestiptype, name, supportedservices, traffictype)
+	ret := m.ctrl.Call(m, "NewCreateNetworkOfferingParams", displaytext, guestiptype, name, traffictype)
 	ret0, _ := ret[0].(*CreateNetworkOfferingParams)
 	return ret0
 }
 
 // NewCreateNetworkOfferingParams indicates an expected call of NewCreateNetworkOfferingParams.
-func (mr *MockNetworkOfferingServiceIfaceMockRecorder) NewCreateNetworkOfferingParams(displaytext, guestiptype, name, supportedservices, traffictype interface{}) *gomock.Call {
+func (mr *MockNetworkOfferingServiceIfaceMockRecorder) NewCreateNetworkOfferingParams(displaytext, guestiptype, name, traffictype interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateNetworkOfferingParams", reflect.TypeOf((*MockNetworkOfferingServiceIface)(nil).NewCreateNetworkOfferingParams), displaytext, guestiptype, name, supportedservices, traffictype)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateNetworkOfferingParams", reflect.TypeOf((*MockNetworkOfferingServiceIface)(nil).NewCreateNetworkOfferingParams), displaytext, guestiptype, name, traffictype)
 }
 
 // NewDeleteNetworkOfferingParams mocks base method.
diff --git a/cloudstack/NetworkOfferingService_test.go b/cloudstack/NetworkOfferingService_test.go
index 18ddf4e..98e5f00 100644
--- a/cloudstack/NetworkOfferingService_test.go
+++ b/cloudstack/NetworkOfferingService_test.go
@@ -37,7 +37,7 @@ func TestNetworkOfferingService_CreateNetworkOffering(t *testing.T) {
 	}))
 	defer server.Close()
 	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.NetworkOffering.NewCreateNetworkOfferingParams("testNetOffering", "L2", "testNetOffering", []string{}, "Guest")
+	params := client.NetworkOffering.NewCreateNetworkOfferingParams("testNetOffering", "L2", "testNetOffering", "Guest")
 	resp, err := client.NetworkOffering.CreateNetworkOffering(params)
 	if err != nil {
 		t.Errorf("Failed to create network offering due to: %v", err)
diff --git a/cloudstack/NetworkService.go b/cloudstack/NetworkService.go
index dac9718..914c2a1 100644
--- a/cloudstack/NetworkService.go
+++ b/cloudstack/NetworkService.go
@@ -459,6 +459,12 @@ func (p *CreateNetworkParams) toURLValues() url.Values {
 	if v, found := p.p["projectid"]; found {
 		u.Set("projectid", v.(string))
 	}
+	if v, found := p.p["routerip"]; found {
+		u.Set("routerip", v.(string))
+	}
+	if v, found := p.p["routeripv6"]; found {
+		u.Set("routeripv6", v.(string))
+	}
 	if v, found := p.p["startip"]; found {
 		u.Set("startip", v.(string))
 	}
@@ -811,6 +817,36 @@ func (p *CreateNetworkParams) GetProjectid() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateNetworkParams) SetRouterip(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["routerip"] = v
+}
+
+func (p *CreateNetworkParams) GetRouterip() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["routerip"].(string)
+	return value, ok
+}
+
+func (p *CreateNetworkParams) SetRouteripv6(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["routeripv6"] = v
+}
+
+func (p *CreateNetworkParams) GetRouteripv6() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["routeripv6"].(string)
+	return value, ok
+}
+
 func (p *CreateNetworkParams) SetStartip(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -941,6 +977,7 @@ type CreateNetworkResponse struct {
 	Broadcasturi                string                         `json:"broadcasturi"`
 	Canusefordeploy             bool                           `json:"canusefordeploy"`
 	Cidr                        string                         `json:"cidr"`
+	Created                     string                         `json:"created"`
 	Details                     map[string]string              `json:"details"`
 	Displaynetwork              bool                           `json:"displaynetwork"`
 	Displaytext                 string                         `json:"displaytext"`
@@ -950,6 +987,8 @@ type CreateNetworkResponse struct {
 	Domainid                    string                         `json:"domainid"`
 	Externalid                  string                         `json:"externalid"`
 	Gateway                     string                         `json:"gateway"`
+	Hasannotations              bool                           `json:"hasannotations"`
+	Icon                        string                         `json:"icon"`
 	Id                          string                         `json:"id"`
 	Ip6cidr                     string                         `json:"ip6cidr"`
 	Ip6gateway                  string                         `json:"ip6gateway"`
@@ -970,10 +1009,12 @@ type CreateNetworkResponse struct {
 	Physicalnetworkid           string                         `json:"physicalnetworkid"`
 	Project                     string                         `json:"project"`
 	Projectid                   string                         `json:"projectid"`
+	Receivedbytes               int64                          `json:"receivedbytes"`
 	Redundantrouter             bool                           `json:"redundantrouter"`
 	Related                     string                         `json:"related"`
 	Reservediprange             string                         `json:"reservediprange"`
 	Restartrequired             bool                           `json:"restartrequired"`
+	Sentbytes                   int64                          `json:"sentbytes"`
 	Service                     []CreateNetworkResponseService `json:"service"`
 	Specifyipranges             bool                           `json:"specifyipranges"`
 	State                       string                         `json:"state"`
@@ -2354,6 +2395,7 @@ type NetscalerLoadBalancerNetwork struct {
 	Broadcasturi                string                                `json:"broadcasturi"`
 	Canusefordeploy             bool                                  `json:"canusefordeploy"`
 	Cidr                        string                                `json:"cidr"`
+	Created                     string                                `json:"created"`
 	Details                     map[string]string                     `json:"details"`
 	Displaynetwork              bool                                  `json:"displaynetwork"`
 	Displaytext                 string                                `json:"displaytext"`
@@ -2363,6 +2405,8 @@ type NetscalerLoadBalancerNetwork struct {
 	Domainid                    string                                `json:"domainid"`
 	Externalid                  string                                `json:"externalid"`
 	Gateway                     string                                `json:"gateway"`
+	Hasannotations              bool                                  `json:"hasannotations"`
+	Icon                        string                                `json:"icon"`
 	Id                          string                                `json:"id"`
 	Ip6cidr                     string                                `json:"ip6cidr"`
 	Ip6gateway                  string                                `json:"ip6gateway"`
@@ -2383,10 +2427,12 @@ type NetscalerLoadBalancerNetwork struct {
 	Physicalnetworkid           string                                `json:"physicalnetworkid"`
 	Project                     string                                `json:"project"`
 	Projectid                   string                                `json:"projectid"`
+	Receivedbytes               int64                                 `json:"receivedbytes"`
 	Redundantrouter             bool                                  `json:"redundantrouter"`
 	Related                     string                                `json:"related"`
 	Reservediprange             string                                `json:"reservediprange"`
 	Restartrequired             bool                                  `json:"restartrequired"`
+	Sentbytes                   int64                                 `json:"sentbytes"`
 	Service                     []NetscalerLoadBalancerNetworkService `json:"service"`
 	Specifyipranges             bool                                  `json:"specifyipranges"`
 	State                       string                                `json:"state"`
@@ -2794,6 +2840,10 @@ func (p *ListNetworksParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("restartrequired", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["specifyipranges"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("specifyipranges", vv)
@@ -3079,6 +3129,21 @@ func (p *ListNetworksParams) GetRestartrequired() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListNetworksParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListNetworksParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListNetworksParams) SetSpecifyipranges(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3304,6 +3369,7 @@ type Network struct {
 	Broadcasturi                string                   `json:"broadcasturi"`
 	Canusefordeploy             bool                     `json:"canusefordeploy"`
 	Cidr                        string                   `json:"cidr"`
+	Created                     string                   `json:"created"`
 	Details                     map[string]string        `json:"details"`
 	Displaynetwork              bool                     `json:"displaynetwork"`
 	Displaytext                 string                   `json:"displaytext"`
@@ -3313,6 +3379,8 @@ type Network struct {
 	Domainid                    string                   `json:"domainid"`
 	Externalid                  string                   `json:"externalid"`
 	Gateway                     string                   `json:"gateway"`
+	Hasannotations              bool                     `json:"hasannotations"`
+	Icon                        string                   `json:"icon"`
 	Id                          string                   `json:"id"`
 	Ip6cidr                     string                   `json:"ip6cidr"`
 	Ip6gateway                  string                   `json:"ip6gateway"`
@@ -3333,10 +3401,12 @@ type Network struct {
 	Physicalnetworkid           string                   `json:"physicalnetworkid"`
 	Project                     string                   `json:"project"`
 	Projectid                   string                   `json:"projectid"`
+	Receivedbytes               int64                    `json:"receivedbytes"`
 	Redundantrouter             bool                     `json:"redundantrouter"`
 	Related                     string                   `json:"related"`
 	Reservediprange             string                   `json:"reservediprange"`
 	Restartrequired             bool                     `json:"restartrequired"`
+	Sentbytes                   int64                    `json:"sentbytes"`
 	Service                     []NetworkServiceInternal `json:"service"`
 	Specifyipranges             bool                     `json:"specifyipranges"`
 	State                       string                   `json:"state"`
@@ -3536,6 +3606,7 @@ type NiciraNvpDeviceNetwork struct {
 	Broadcasturi                string                          `json:"broadcasturi"`
 	Canusefordeploy             bool                            `json:"canusefordeploy"`
 	Cidr                        string                          `json:"cidr"`
+	Created                     string                          `json:"created"`
 	Details                     map[string]string               `json:"details"`
 	Displaynetwork              bool                            `json:"displaynetwork"`
 	Displaytext                 string                          `json:"displaytext"`
@@ -3545,6 +3616,8 @@ type NiciraNvpDeviceNetwork struct {
 	Domainid                    string                          `json:"domainid"`
 	Externalid                  string                          `json:"externalid"`
 	Gateway                     string                          `json:"gateway"`
+	Hasannotations              bool                            `json:"hasannotations"`
+	Icon                        string                          `json:"icon"`
 	Id                          string                          `json:"id"`
 	Ip6cidr                     string                          `json:"ip6cidr"`
 	Ip6gateway                  string                          `json:"ip6gateway"`
@@ -3565,10 +3638,12 @@ type NiciraNvpDeviceNetwork struct {
 	Physicalnetworkid           string                          `json:"physicalnetworkid"`
 	Project                     string                          `json:"project"`
 	Projectid                   string                          `json:"projectid"`
+	Receivedbytes               int64                           `json:"receivedbytes"`
 	Redundantrouter             bool                            `json:"redundantrouter"`
 	Related                     string                          `json:"related"`
 	Reservediprange             string                          `json:"reservediprange"`
 	Restartrequired             bool                            `json:"restartrequired"`
+	Sentbytes                   int64                           `json:"sentbytes"`
 	Service                     []NiciraNvpDeviceNetworkService `json:"service"`
 	Specifyipranges             bool                            `json:"specifyipranges"`
 	State                       string                          `json:"state"`
@@ -3887,6 +3962,7 @@ type PaloAltoFirewallNetwork struct {
 	Broadcasturi                string                           `json:"broadcasturi"`
 	Canusefordeploy             bool                             `json:"canusefordeploy"`
 	Cidr                        string                           `json:"cidr"`
+	Created                     string                           `json:"created"`
 	Details                     map[string]string                `json:"details"`
 	Displaynetwork              bool                             `json:"displaynetwork"`
 	Displaytext                 string                           `json:"displaytext"`
@@ -3896,6 +3972,8 @@ type PaloAltoFirewallNetwork struct {
 	Domainid                    string                           `json:"domainid"`
 	Externalid                  string                           `json:"externalid"`
 	Gateway                     string                           `json:"gateway"`
+	Hasannotations              bool                             `json:"hasannotations"`
+	Icon                        string                           `json:"icon"`
 	Id                          string                           `json:"id"`
 	Ip6cidr                     string                           `json:"ip6cidr"`
 	Ip6gateway                  string                           `json:"ip6gateway"`
@@ -3916,10 +3994,12 @@ type PaloAltoFirewallNetwork struct {
 	Physicalnetworkid           string                           `json:"physicalnetworkid"`
 	Project                     string                           `json:"project"`
 	Projectid                   string                           `json:"projectid"`
+	Receivedbytes               int64                            `json:"receivedbytes"`
 	Redundantrouter             bool                             `json:"redundantrouter"`
 	Related                     string                           `json:"related"`
 	Reservediprange             string                           `json:"reservediprange"`
 	Restartrequired             bool                             `json:"restartrequired"`
+	Sentbytes                   int64                            `json:"sentbytes"`
 	Service                     []PaloAltoFirewallNetworkService `json:"service"`
 	Specifyipranges             bool                             `json:"specifyipranges"`
 	State                       string                           `json:"state"`
@@ -4747,11 +4827,6 @@ func (s *NetworkService) RestartNetwork(p *RestartNetworkParams) (*RestartNetwor
 			return nil, err
 		}
 
-		b, err = getRawValue(b)
-		if err != nil {
-			return nil, err
-		}
-
 		if err := json.Unmarshal(b, &r); err != nil {
 			return nil, err
 		}
@@ -4761,40 +4836,10 @@ func (s *NetworkService) RestartNetwork(p *RestartNetworkParams) (*RestartNetwor
 }
 
 type RestartNetworkResponse struct {
-	Account                   string `json:"account"`
-	Allocated                 string `json:"allocated"`
-	Associatednetworkid       string `json:"associatednetworkid"`
-	Associatednetworkname     string `json:"associatednetworkname"`
-	Domain                    string `json:"domain"`
-	Domainid                  string `json:"domainid"`
-	Fordisplay                bool   `json:"fordisplay"`
-	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
-	Id                        string `json:"id"`
-	Ipaddress                 string `json:"ipaddress"`
-	Isportable                bool   `json:"isportable"`
-	Issourcenat               bool   `json:"issourcenat"`
-	Isstaticnat               bool   `json:"isstaticnat"`
-	Issystem                  bool   `json:"issystem"`
-	JobID                     string `json:"jobid"`
-	Jobstatus                 int    `json:"jobstatus"`
-	Networkid                 string `json:"networkid"`
-	Networkname               string `json:"networkname"`
-	Physicalnetworkid         string `json:"physicalnetworkid"`
-	Project                   string `json:"project"`
-	Projectid                 string `json:"projectid"`
-	Purpose                   string `json:"purpose"`
-	State                     string `json:"state"`
-	Tags                      []Tags `json:"tags"`
-	Virtualmachinedisplayname string `json:"virtualmachinedisplayname"`
-	Virtualmachineid          string `json:"virtualmachineid"`
-	Virtualmachinename        string `json:"virtualmachinename"`
-	Vlanid                    string `json:"vlanid"`
-	Vlanname                  string `json:"vlanname"`
-	Vmipaddress               string `json:"vmipaddress"`
-	Vpcid                     string `json:"vpcid"`
-	Vpcname                   string `json:"vpcname"`
-	Zoneid                    string `json:"zoneid"`
-	Zonename                  string `json:"zonename"`
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
 }
 
 type UpdateNetworkParams struct {
@@ -5083,6 +5128,7 @@ type UpdateNetworkResponse struct {
 	Broadcasturi                string                         `json:"broadcasturi"`
 	Canusefordeploy             bool                           `json:"canusefordeploy"`
 	Cidr                        string                         `json:"cidr"`
+	Created                     string                         `json:"created"`
 	Details                     map[string]string              `json:"details"`
 	Displaynetwork              bool                           `json:"displaynetwork"`
 	Displaytext                 string                         `json:"displaytext"`
@@ -5092,6 +5138,8 @@ type UpdateNetworkResponse struct {
 	Domainid                    string                         `json:"domainid"`
 	Externalid                  string                         `json:"externalid"`
 	Gateway                     string                         `json:"gateway"`
+	Hasannotations              bool                           `json:"hasannotations"`
+	Icon                        string                         `json:"icon"`
 	Id                          string                         `json:"id"`
 	Ip6cidr                     string                         `json:"ip6cidr"`
 	Ip6gateway                  string                         `json:"ip6gateway"`
@@ -5112,10 +5160,12 @@ type UpdateNetworkResponse struct {
 	Physicalnetworkid           string                         `json:"physicalnetworkid"`
 	Project                     string                         `json:"project"`
 	Projectid                   string                         `json:"projectid"`
+	Receivedbytes               int64                          `json:"receivedbytes"`
 	Redundantrouter             bool                           `json:"redundantrouter"`
 	Related                     string                         `json:"related"`
 	Reservediprange             string                         `json:"reservediprange"`
 	Restartrequired             bool                           `json:"restartrequired"`
+	Sentbytes                   int64                          `json:"sentbytes"`
 	Service                     []UpdateNetworkResponseService `json:"service"`
 	Specifyipranges             bool                           `json:"specifyipranges"`
 	State                       string                         `json:"state"`
diff --git a/cloudstack/NetworkService_test.go b/cloudstack/NetworkService_test.go
index faf21f1..18f7508 100644
--- a/cloudstack/NetworkService_test.go
+++ b/cloudstack/NetworkService_test.go
@@ -79,7 +79,6 @@ func TestNetworkService_DeleteNetwork(t *testing.T) {
 		if err != nil {
 			t.Errorf("Failed to parse response, due to: %v", err)
 		}
-
 		fmt.Fprintf(writer, response)
 	}))
 	defer server.Close()
diff --git a/cloudstack/NicService.go b/cloudstack/NicService.go
index 470dfa5..08463e5 100644
--- a/cloudstack/NicService.go
+++ b/cloudstack/NicService.go
@@ -541,9 +541,11 @@ type UpdateVmNicIpResponse struct {
 	Groupid               string                               `json:"groupid"`
 	Guestosid             string                               `json:"guestosid"`
 	Haenable              bool                                 `json:"haenable"`
+	Hasannotations        bool                                 `json:"hasannotations"`
 	Hostid                string                               `json:"hostid"`
 	Hostname              string                               `json:"hostname"`
 	Hypervisor            string                               `json:"hypervisor"`
+	Icon                  string                               `json:"icon"`
 	Id                    string                               `json:"id"`
 	Instancename          string                               `json:"instancename"`
 	Isdynamicallyscalable bool                                 `json:"isdynamicallyscalable"`
@@ -553,6 +555,7 @@ type UpdateVmNicIpResponse struct {
 	JobID                 string                               `json:"jobid"`
 	Jobstatus             int                                  `json:"jobstatus"`
 	Keypair               string                               `json:"keypair"`
+	Lastupdated           string                               `json:"lastupdated"`
 	Memory                int                                  `json:"memory"`
 	Memoryintfreekbs      int64                                `json:"memoryintfreekbs"`
 	Memorykbs             int64                                `json:"memorykbs"`
@@ -565,14 +568,17 @@ type UpdateVmNicIpResponse struct {
 	Ostypeid              string                               `json:"ostypeid"`
 	Password              string                               `json:"password"`
 	Passwordenabled       bool                                 `json:"passwordenabled"`
+	Pooltype              string                               `json:"pooltype"`
 	Project               string                               `json:"project"`
 	Projectid             string                               `json:"projectid"`
 	Publicip              string                               `json:"publicip"`
 	Publicipid            string                               `json:"publicipid"`
-	Readonlyuidetails     string                               `json:"readonlyuidetails"`
+	Readonlydetails       string                               `json:"readonlydetails"`
+	Receivedbytes         int64                                `json:"receivedbytes"`
 	Rootdeviceid          int64                                `json:"rootdeviceid"`
 	Rootdevicetype        string                               `json:"rootdevicetype"`
 	Securitygroup         []UpdateVmNicIpResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                `json:"sentbytes"`
 	Serviceofferingid     string                               `json:"serviceofferingid"`
 	Serviceofferingname   string                               `json:"serviceofferingname"`
 	Servicestate          string                               `json:"servicestate"`
diff --git a/cloudstack/PodService.go b/cloudstack/PodService.go
index a0a4dab..7766d8d 100644
--- a/cloudstack/PodService.go
+++ b/cloudstack/PodService.go
@@ -219,7 +219,9 @@ type CreatePodResponse struct {
 	Endip           []string                    `json:"endip"`
 	Forsystemvms    []string                    `json:"forsystemvms"`
 	Gateway         string                      `json:"gateway"`
+	Hasannotations  bool                        `json:"hasannotations"`
 	Id              string                      `json:"id"`
+	Ipranges        []CreatePodResponseIpranges `json:"ipranges"`
 	JobID           string                      `json:"jobid"`
 	Jobstatus       int                         `json:"jobstatus"`
 	Name            string                      `json:"name"`
@@ -230,6 +232,13 @@ type CreatePodResponse struct {
 	Zonename        string                      `json:"zonename"`
 }
 
+type CreatePodResponseIpranges struct {
+	Endip        string `json:"endip"`
+	Forsystemvms string `json:"forsystemvms"`
+	Startip      string `json:"startip"`
+	Vlanid       string `json:"vlanid"`
+}
+
 type CreatePodResponseCapacity struct {
 	Capacityallocated int64  `json:"capacityallocated"`
 	Capacitytotal     int64  `json:"capacitytotal"`
@@ -910,7 +919,9 @@ type Pod struct {
 	Endip           []string      `json:"endip"`
 	Forsystemvms    []string      `json:"forsystemvms"`
 	Gateway         string        `json:"gateway"`
+	Hasannotations  bool          `json:"hasannotations"`
 	Id              string        `json:"id"`
+	Ipranges        []PodIpranges `json:"ipranges"`
 	JobID           string        `json:"jobid"`
 	Jobstatus       int           `json:"jobstatus"`
 	Name            string        `json:"name"`
@@ -921,6 +932,13 @@ type Pod struct {
 	Zonename        string        `json:"zonename"`
 }
 
+type PodIpranges struct {
+	Endip        string `json:"endip"`
+	Forsystemvms string `json:"forsystemvms"`
+	Startip      string `json:"startip"`
+	Vlanid       string `json:"vlanid"`
+}
+
 type PodCapacity struct {
 	Capacityallocated int64  `json:"capacityallocated"`
 	Capacitytotal     int64  `json:"capacitytotal"`
@@ -1180,7 +1198,9 @@ type UpdatePodResponse struct {
 	Endip           []string                    `json:"endip"`
 	Forsystemvms    []string                    `json:"forsystemvms"`
 	Gateway         string                      `json:"gateway"`
+	Hasannotations  bool                        `json:"hasannotations"`
 	Id              string                      `json:"id"`
+	Ipranges        []UpdatePodResponseIpranges `json:"ipranges"`
 	JobID           string                      `json:"jobid"`
 	Jobstatus       int                         `json:"jobstatus"`
 	Name            string                      `json:"name"`
@@ -1191,6 +1211,13 @@ type UpdatePodResponse struct {
 	Zonename        string                      `json:"zonename"`
 }
 
+type UpdatePodResponseIpranges struct {
+	Endip        string `json:"endip"`
+	Forsystemvms string `json:"forsystemvms"`
+	Startip      string `json:"startip"`
+	Vlanid       string `json:"vlanid"`
+}
+
 type UpdatePodResponseCapacity struct {
 	Capacityallocated int64  `json:"capacityallocated"`
 	Capacitytotal     int64  `json:"capacitytotal"`
diff --git a/cloudstack/PoolService.go b/cloudstack/PoolService.go
index f6191f3..09cecee 100644
--- a/cloudstack/PoolService.go
+++ b/cloudstack/PoolService.go
@@ -334,6 +334,7 @@ type CreateStoragePoolResponse struct {
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
+	Hasannotations       bool              `json:"hasannotations"`
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
@@ -581,6 +582,7 @@ type FindStoragePoolsForMigrationResponse struct {
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
+	Hasannotations       bool              `json:"hasannotations"`
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
@@ -934,6 +936,7 @@ type StoragePool struct {
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
+	Hasannotations       bool              `json:"hasannotations"`
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
@@ -1112,6 +1115,7 @@ type UpdateStoragePoolResponse struct {
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
+	Hasannotations       bool              `json:"hasannotations"`
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
diff --git a/cloudstack/ProjectService.go b/cloudstack/ProjectService.go
index ac0e38c..d08a88f 100644
--- a/cloudstack/ProjectService.go
+++ b/cloudstack/ProjectService.go
@@ -50,6 +50,14 @@ type ProjectServiceIface interface {
 	NewUpdateProjectParams(id string) *UpdateProjectParams
 	UpdateProjectInvitation(p *UpdateProjectInvitationParams) (*UpdateProjectInvitationResponse, error)
 	NewUpdateProjectInvitationParams(projectid string) *UpdateProjectInvitationParams
+	ListProjectRolePermissions(p *ListProjectRolePermissionsParams) (*ListProjectRolePermissionsResponse, error)
+	NewListProjectRolePermissionsParams(projectid string) *ListProjectRolePermissionsParams
+	CreateProjectRolePermission(p *CreateProjectRolePermissionParams) (*CreateProjectRolePermissionResponse, error)
+	NewCreateProjectRolePermissionParams(permission string, projectid string, projectroleid string, rule string) *CreateProjectRolePermissionParams
+	UpdateProjectRolePermission(p *UpdateProjectRolePermissionParams) (*UpdateProjectRolePermissionResponse, error)
+	NewUpdateProjectRolePermissionParams(projectid string, projectroleid string) *UpdateProjectRolePermissionParams
+	DeleteProjectRolePermission(p *DeleteProjectRolePermissionParams) (*DeleteProjectRolePermissionResponse, error)
+	NewDeleteProjectRolePermissionParams(id string, projectid string) *DeleteProjectRolePermissionParams
 }
 
 type ActivateProjectParams struct {
@@ -130,9 +138,11 @@ type ActivateProjectResponse struct {
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
+	Created                   string              `json:"created"`
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Icon                      string              `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
 	Iplimit                   string              `json:"iplimit"`
@@ -344,9 +354,11 @@ type CreateProjectResponse struct {
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
+	Created                   string              `json:"created"`
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Icon                      string              `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
 	Iplimit                   string              `json:"iplimit"`
@@ -398,12 +410,31 @@ func (p *DeleteProjectParams) toURLValues() url.Values {
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["cleanup"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("cleanup", vv)
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
 	return u
 }
 
+func (p *DeleteProjectParams) SetCleanup(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["cleanup"] = v
+}
+
+func (p *DeleteProjectParams) GetCleanup() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["cleanup"].(bool)
+	return value, ok
+}
+
 func (p *DeleteProjectParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -896,6 +927,10 @@ func (p *ListProjectsParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("pagesize", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
@@ -1077,6 +1112,21 @@ func (p *ListProjectsParams) GetPagesize() (int, bool) {
 	return value, ok
 }
 
+func (p *ListProjectsParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListProjectsParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListProjectsParams) SetState(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1237,9 +1287,11 @@ type Project struct {
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
+	Created                   string              `json:"created"`
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Icon                      string              `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
 	Iplimit                   string              `json:"iplimit"`
@@ -1360,9 +1412,11 @@ type SuspendProjectResponse struct {
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
+	Created                   string              `json:"created"`
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Icon                      string              `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
 	Iplimit                   string              `json:"iplimit"`
@@ -1574,9 +1628,11 @@ type UpdateProjectResponse struct {
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
+	Created                   string              `json:"created"`
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Icon                      string              `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
 	Iplimit                   string              `json:"iplimit"`
@@ -1767,3 +1823,502 @@ type UpdateProjectInvitationResponse struct {
 	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
+
+type ListProjectRolePermissionsParams struct {
+	p map[string]interface{}
+}
+
+func (p *ListProjectRolePermissionsParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["projectid"]; found {
+		u.Set("projectid", v.(string))
+	}
+	if v, found := p.p["projectroleid"]; found {
+		u.Set("projectroleid", v.(string))
+	}
+	return u
+}
+
+func (p *ListProjectRolePermissionsParams) SetProjectid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectid"] = v
+}
+
+func (p *ListProjectRolePermissionsParams) GetProjectid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectid"].(string)
+	return value, ok
+}
+
+func (p *ListProjectRolePermissionsParams) SetProjectroleid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectroleid"] = v
+}
+
+func (p *ListProjectRolePermissionsParams) GetProjectroleid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectroleid"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new ListProjectRolePermissionsParams instance,
+// as then you are sure you have configured all required params
+func (s *ProjectService) NewListProjectRolePermissionsParams(projectid string) *ListProjectRolePermissionsParams {
+	p := &ListProjectRolePermissionsParams{}
+	p.p = make(map[string]interface{})
+	p.p["projectid"] = projectid
+	return p
+}
+
+// Lists a project's project role permissions
+func (s *ProjectService) ListProjectRolePermissions(p *ListProjectRolePermissionsParams) (*ListProjectRolePermissionsResponse, error) {
+	resp, err := s.cs.newRequest("listProjectRolePermissions", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r ListProjectRolePermissionsResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type ListProjectRolePermissionsResponse struct {
+	Count                  int                      `json:"count"`
+	ProjectRolePermissions []*ProjectRolePermission `json:"projectrolepermission"`
+}
+
+type ProjectRolePermission struct {
+	Description     string `json:"description"`
+	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
+	Permission      string `json:"permission"`
+	Projectid       string `json:"projectid"`
+	Projectroleid   string `json:"projectroleid"`
+	Projectrolename string `json:"projectrolename"`
+	Rule            string `json:"rule"`
+}
+
+type CreateProjectRolePermissionParams struct {
+	p map[string]interface{}
+}
+
+func (p *CreateProjectRolePermissionParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["description"]; found {
+		u.Set("description", v.(string))
+	}
+	if v, found := p.p["permission"]; found {
+		u.Set("permission", v.(string))
+	}
+	if v, found := p.p["projectid"]; found {
+		u.Set("projectid", v.(string))
+	}
+	if v, found := p.p["projectroleid"]; found {
+		u.Set("projectroleid", v.(string))
+	}
+	if v, found := p.p["rule"]; found {
+		u.Set("rule", v.(string))
+	}
+	return u
+}
+
+func (p *CreateProjectRolePermissionParams) SetDescription(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["description"] = v
+}
+
+func (p *CreateProjectRolePermissionParams) GetDescription() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["description"].(string)
+	return value, ok
+}
+
+func (p *CreateProjectRolePermissionParams) SetPermission(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["permission"] = v
+}
+
+func (p *CreateProjectRolePermissionParams) GetPermission() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["permission"].(string)
+	return value, ok
+}
+
+func (p *CreateProjectRolePermissionParams) SetProjectid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectid"] = v
+}
+
+func (p *CreateProjectRolePermissionParams) GetProjectid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectid"].(string)
+	return value, ok
+}
+
+func (p *CreateProjectRolePermissionParams) SetProjectroleid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectroleid"] = v
+}
+
+func (p *CreateProjectRolePermissionParams) GetProjectroleid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectroleid"].(string)
+	return value, ok
+}
+
+func (p *CreateProjectRolePermissionParams) SetRule(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["rule"] = v
+}
+
+func (p *CreateProjectRolePermissionParams) GetRule() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["rule"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new CreateProjectRolePermissionParams instance,
+// as then you are sure you have configured all required params
+func (s *ProjectService) NewCreateProjectRolePermissionParams(permission string, projectid string, projectroleid string, rule string) *CreateProjectRolePermissionParams {
+	p := &CreateProjectRolePermissionParams{}
+	p.p = make(map[string]interface{})
+	p.p["permission"] = permission
+	p.p["projectid"] = projectid
+	p.p["projectroleid"] = projectroleid
+	p.p["rule"] = rule
+	return p
+}
+
+// Adds API permissions to a project role
+func (s *ProjectService) CreateProjectRolePermission(p *CreateProjectRolePermissionParams) (*CreateProjectRolePermissionResponse, error) {
+	resp, err := s.cs.newRequest("createProjectRolePermission", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r CreateProjectRolePermissionResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type CreateProjectRolePermissionResponse struct {
+	Description     string `json:"description"`
+	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
+	Permission      string `json:"permission"`
+	Projectid       string `json:"projectid"`
+	Projectroleid   string `json:"projectroleid"`
+	Projectrolename string `json:"projectrolename"`
+	Rule            string `json:"rule"`
+}
+
+type UpdateProjectRolePermissionParams struct {
+	p map[string]interface{}
+}
+
+func (p *UpdateProjectRolePermissionParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["permission"]; found {
+		u.Set("permission", v.(string))
+	}
+	if v, found := p.p["projectid"]; found {
+		u.Set("projectid", v.(string))
+	}
+	if v, found := p.p["projectroleid"]; found {
+		u.Set("projectroleid", v.(string))
+	}
+	if v, found := p.p["projectrolepermissionid"]; found {
+		u.Set("projectrolepermissionid", v.(string))
+	}
+	if v, found := p.p["ruleorder"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("ruleorder", vv)
+	}
+	return u
+}
+
+func (p *UpdateProjectRolePermissionParams) SetPermission(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["permission"] = v
+}
+
+func (p *UpdateProjectRolePermissionParams) GetPermission() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["permission"].(string)
+	return value, ok
+}
+
+func (p *UpdateProjectRolePermissionParams) SetProjectid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectid"] = v
+}
+
+func (p *UpdateProjectRolePermissionParams) GetProjectid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectid"].(string)
+	return value, ok
+}
+
+func (p *UpdateProjectRolePermissionParams) SetProjectroleid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectroleid"] = v
+}
+
+func (p *UpdateProjectRolePermissionParams) GetProjectroleid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectroleid"].(string)
+	return value, ok
+}
+
+func (p *UpdateProjectRolePermissionParams) SetProjectrolepermissionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectrolepermissionid"] = v
+}
+
+func (p *UpdateProjectRolePermissionParams) GetProjectrolepermissionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectrolepermissionid"].(string)
+	return value, ok
+}
+
+func (p *UpdateProjectRolePermissionParams) SetRuleorder(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["ruleorder"] = v
+}
+
+func (p *UpdateProjectRolePermissionParams) GetRuleorder() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["ruleorder"].([]string)
+	return value, ok
+}
+
+// You should always use this function to get a new UpdateProjectRolePermissionParams instance,
+// as then you are sure you have configured all required params
+func (s *ProjectService) NewUpdateProjectRolePermissionParams(projectid string, projectroleid string) *UpdateProjectRolePermissionParams {
+	p := &UpdateProjectRolePermissionParams{}
+	p.p = make(map[string]interface{})
+	p.p["projectid"] = projectid
+	p.p["projectroleid"] = projectroleid
+	return p
+}
+
+// Updates a project role permission and/or order
+func (s *ProjectService) UpdateProjectRolePermission(p *UpdateProjectRolePermissionParams) (*UpdateProjectRolePermissionResponse, error) {
+	resp, err := s.cs.newRequest("updateProjectRolePermission", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r UpdateProjectRolePermissionResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type UpdateProjectRolePermissionResponse struct {
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
+}
+
+func (r *UpdateProjectRolePermissionResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateProjectRolePermissionResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
+type DeleteProjectRolePermissionParams struct {
+	p map[string]interface{}
+}
+
+func (p *DeleteProjectRolePermissionParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	if v, found := p.p["projectid"]; found {
+		u.Set("projectid", v.(string))
+	}
+	return u
+}
+
+func (p *DeleteProjectRolePermissionParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *DeleteProjectRolePermissionParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+func (p *DeleteProjectRolePermissionParams) SetProjectid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectid"] = v
+}
+
+func (p *DeleteProjectRolePermissionParams) GetProjectid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectid"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new DeleteProjectRolePermissionParams instance,
+// as then you are sure you have configured all required params
+func (s *ProjectService) NewDeleteProjectRolePermissionParams(id string, projectid string) *DeleteProjectRolePermissionParams {
+	p := &DeleteProjectRolePermissionParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	p.p["projectid"] = projectid
+	return p
+}
+
+// Deletes a project role permission in the project
+func (s *ProjectService) DeleteProjectRolePermission(p *DeleteProjectRolePermissionParams) (*DeleteProjectRolePermissionResponse, error) {
+	resp, err := s.cs.newRequest("deleteProjectRolePermission", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r DeleteProjectRolePermissionResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type DeleteProjectRolePermissionResponse struct {
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
+}
+
+func (r *DeleteProjectRolePermissionResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias DeleteProjectRolePermissionResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
diff --git a/cloudstack/ProjectService_mock.go b/cloudstack/ProjectService_mock.go
index 2222cc6..d511fac 100644
--- a/cloudstack/ProjectService_mock.go
+++ b/cloudstack/ProjectService_mock.go
@@ -82,6 +82,21 @@ func (mr *MockProjectServiceIfaceMockRecorder) CreateProject(p interface{}) *gom
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProject", reflect.TypeOf((*MockProjectServiceIface)(nil).CreateProject), p)
 }
 
+// CreateProjectRolePermission mocks base method.
+func (m *MockProjectServiceIface) CreateProjectRolePermission(p *CreateProjectRolePermissionParams) (*CreateProjectRolePermissionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateProjectRolePermission", p)
+	ret0, _ := ret[0].(*CreateProjectRolePermissionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CreateProjectRolePermission indicates an expected call of CreateProjectRolePermission.
+func (mr *MockProjectServiceIfaceMockRecorder) CreateProjectRolePermission(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProjectRolePermission", reflect.TypeOf((*MockProjectServiceIface)(nil).CreateProjectRolePermission), p)
+}
+
 // DeleteProject mocks base method.
 func (m *MockProjectServiceIface) DeleteProject(p *DeleteProjectParams) (*DeleteProjectResponse, error) {
 	m.ctrl.T.Helper()
@@ -112,6 +127,21 @@ func (mr *MockProjectServiceIfaceMockRecorder) DeleteProjectInvitation(p interfa
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProjectInvitation", reflect.TypeOf((*MockProjectServiceIface)(nil).DeleteProjectInvitation), p)
 }
 
+// DeleteProjectRolePermission mocks base method.
+func (m *MockProjectServiceIface) DeleteProjectRolePermission(p *DeleteProjectRolePermissionParams) (*DeleteProjectRolePermissionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteProjectRolePermission", p)
+	ret0, _ := ret[0].(*DeleteProjectRolePermissionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DeleteProjectRolePermission indicates an expected call of DeleteProjectRolePermission.
+func (mr *MockProjectServiceIfaceMockRecorder) DeleteProjectRolePermission(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProjectRolePermission", reflect.TypeOf((*MockProjectServiceIface)(nil).DeleteProjectRolePermission), p)
+}
+
 // GetProjectByID mocks base method.
 func (m *MockProjectServiceIface) GetProjectByID(id string, opts ...OptionFunc) (*Project, int, error) {
 	m.ctrl.T.Helper()
@@ -211,6 +241,21 @@ func (mr *MockProjectServiceIfaceMockRecorder) ListProjectInvitations(p interfac
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListProjectInvitations", reflect.TypeOf((*MockProjectServiceIface)(nil).ListProjectInvitations), p)
 }
 
+// ListProjectRolePermissions mocks base method.
+func (m *MockProjectServiceIface) ListProjectRolePermissions(p *ListProjectRolePermissionsParams) (*ListProjectRolePermissionsResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ListProjectRolePermissions", p)
+	ret0, _ := ret[0].(*ListProjectRolePermissionsResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// ListProjectRolePermissions indicates an expected call of ListProjectRolePermissions.
+func (mr *MockProjectServiceIfaceMockRecorder) ListProjectRolePermissions(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListProjectRolePermissions", reflect.TypeOf((*MockProjectServiceIface)(nil).ListProjectRolePermissions), p)
+}
+
 // ListProjects mocks base method.
 func (m *MockProjectServiceIface) ListProjects(p *ListProjectsParams) (*ListProjectsResponse, error) {
 	m.ctrl.T.Helper()
@@ -254,6 +299,20 @@ func (mr *MockProjectServiceIfaceMockRecorder) NewCreateProjectParams(displaytex
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateProjectParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewCreateProjectParams), displaytext, name)
 }
 
+// NewCreateProjectRolePermissionParams mocks base method.
+func (m *MockProjectServiceIface) NewCreateProjectRolePermissionParams(permission, projectid, projectroleid, rule string) *CreateProjectRolePermissionParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewCreateProjectRolePermissionParams", permission, projectid, projectroleid, rule)
+	ret0, _ := ret[0].(*CreateProjectRolePermissionParams)
+	return ret0
+}
+
+// NewCreateProjectRolePermissionParams indicates an expected call of NewCreateProjectRolePermissionParams.
+func (mr *MockProjectServiceIfaceMockRecorder) NewCreateProjectRolePermissionParams(permission, projectid, projectroleid, rule interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateProjectRolePermissionParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewCreateProjectRolePermissionParams), permission, projectid, projectroleid, rule)
+}
+
 // NewDeleteProjectInvitationParams mocks base method.
 func (m *MockProjectServiceIface) NewDeleteProjectInvitationParams(id string) *DeleteProjectInvitationParams {
 	m.ctrl.T.Helper()
@@ -282,6 +341,20 @@ func (mr *MockProjectServiceIfaceMockRecorder) NewDeleteProjectParams(id interfa
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeleteProjectParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewDeleteProjectParams), id)
 }
 
+// NewDeleteProjectRolePermissionParams mocks base method.
+func (m *MockProjectServiceIface) NewDeleteProjectRolePermissionParams(id, projectid string) *DeleteProjectRolePermissionParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewDeleteProjectRolePermissionParams", id, projectid)
+	ret0, _ := ret[0].(*DeleteProjectRolePermissionParams)
+	return ret0
+}
+
+// NewDeleteProjectRolePermissionParams indicates an expected call of NewDeleteProjectRolePermissionParams.
+func (mr *MockProjectServiceIfaceMockRecorder) NewDeleteProjectRolePermissionParams(id, projectid interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeleteProjectRolePermissionParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewDeleteProjectRolePermissionParams), id, projectid)
+}
+
 // NewListProjectInvitationsParams mocks base method.
 func (m *MockProjectServiceIface) NewListProjectInvitationsParams() *ListProjectInvitationsParams {
 	m.ctrl.T.Helper()
@@ -296,6 +369,20 @@ func (mr *MockProjectServiceIfaceMockRecorder) NewListProjectInvitationsParams()
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewListProjectInvitationsParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewListProjectInvitationsParams))
 }
 
+// NewListProjectRolePermissionsParams mocks base method.
+func (m *MockProjectServiceIface) NewListProjectRolePermissionsParams(projectid string) *ListProjectRolePermissionsParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewListProjectRolePermissionsParams", projectid)
+	ret0, _ := ret[0].(*ListProjectRolePermissionsParams)
+	return ret0
+}
+
+// NewListProjectRolePermissionsParams indicates an expected call of NewListProjectRolePermissionsParams.
+func (mr *MockProjectServiceIfaceMockRecorder) NewListProjectRolePermissionsParams(projectid interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewListProjectRolePermissionsParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewListProjectRolePermissionsParams), projectid)
+}
+
 // NewListProjectsParams mocks base method.
 func (m *MockProjectServiceIface) NewListProjectsParams() *ListProjectsParams {
 	m.ctrl.T.Helper()
@@ -352,6 +439,20 @@ func (mr *MockProjectServiceIfaceMockRecorder) NewUpdateProjectParams(id interfa
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewUpdateProjectParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewUpdateProjectParams), id)
 }
 
+// NewUpdateProjectRolePermissionParams mocks base method.
+func (m *MockProjectServiceIface) NewUpdateProjectRolePermissionParams(projectid, projectroleid string) *UpdateProjectRolePermissionParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewUpdateProjectRolePermissionParams", projectid, projectroleid)
+	ret0, _ := ret[0].(*UpdateProjectRolePermissionParams)
+	return ret0
+}
+
+// NewUpdateProjectRolePermissionParams indicates an expected call of NewUpdateProjectRolePermissionParams.
+func (mr *MockProjectServiceIfaceMockRecorder) NewUpdateProjectRolePermissionParams(projectid, projectroleid interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewUpdateProjectRolePermissionParams", reflect.TypeOf((*MockProjectServiceIface)(nil).NewUpdateProjectRolePermissionParams), projectid, projectroleid)
+}
+
 // SuspendProject mocks base method.
 func (m *MockProjectServiceIface) SuspendProject(p *SuspendProjectParams) (*SuspendProjectResponse, error) {
 	m.ctrl.T.Helper()
@@ -396,3 +497,18 @@ func (mr *MockProjectServiceIfaceMockRecorder) UpdateProjectInvitation(p interfa
 	mr.mock.ctrl.T.Helper()
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProjectInvitation", reflect.TypeOf((*MockProjectServiceIface)(nil).UpdateProjectInvitation), p)
 }
+
+// UpdateProjectRolePermission mocks base method.
+func (m *MockProjectServiceIface) UpdateProjectRolePermission(p *UpdateProjectRolePermissionParams) (*UpdateProjectRolePermissionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UpdateProjectRolePermission", p)
+	ret0, _ := ret[0].(*UpdateProjectRolePermissionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UpdateProjectRolePermission indicates an expected call of UpdateProjectRolePermission.
+func (mr *MockProjectServiceIfaceMockRecorder) UpdateProjectRolePermission(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProjectRolePermission", reflect.TypeOf((*MockProjectServiceIface)(nil).UpdateProjectRolePermission), p)
+}
diff --git a/cloudstack/ProjectService_test.go b/cloudstack/ProjectService_test.go
index 6691fff..8d65869 100644
--- a/cloudstack/ProjectService_test.go
+++ b/cloudstack/ProjectService_test.go
@@ -115,3 +115,28 @@ func TestProjectService_UpdateProject(t *testing.T) {
 		t.Errorf("Failed to update project name")
 	}
 }
+
+func TestProjectService_listProjectRolePermissions(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
+		apiName := "listProjectRolePermissions"
+		response, err := ReadData(apiName, "ProjectService")
+		if err != nil {
+			t.Errorf("Failed to read response data due to: %v", err)
+		}
+		fmt.Fprintln(writer, response[apiName])
+	}))
+	defer server.Close()
+	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
+	params := client.Project.NewListProjectRolePermissionsParams("69646881-8d7f-4800-987d-106698a42608")
+	params.SetProjectroleid("fa089002-d055-46b5-aa0a-18f2eae2b4fc")
+	resp, err := client.Project.ListProjectRolePermissions(params)
+	if err != nil {
+		t.Errorf("Failed to list project role permissions due to %v", err)
+		return
+	}
+
+	fmt.Println(resp)
+	if resp == nil || resp.Count != 1 {
+		t.Errorf("Failed to list VM")
+	}
+}
diff --git a/cloudstack/RouterService.go b/cloudstack/RouterService.go
index d5926b3..8c4f81a 100644
--- a/cloudstack/RouterService.go
+++ b/cloudstack/RouterService.go
@@ -138,6 +138,7 @@ type ChangeServiceForRouterResponse struct {
 	Guestnetmask        string                                             `json:"guestnetmask"`
 	Guestnetworkid      string                                             `json:"guestnetworkid"`
 	Guestnetworkname    string                                             `json:"guestnetworkname"`
+	Hasannotations      bool                                               `json:"hasannotations"`
 	Healthcheckresults  []ChangeServiceForRouterResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                               `json:"healthchecksfailed"`
 	Hostid              string                                             `json:"hostid"`
@@ -487,6 +488,7 @@ type DestroyRouterResponse struct {
 	Guestnetmask        string                                    `json:"guestnetmask"`
 	Guestnetworkid      string                                    `json:"guestnetworkid"`
 	Guestnetworkname    string                                    `json:"guestnetworkname"`
+	Hasannotations      bool                                      `json:"hasannotations"`
 	Healthcheckresults  []DestroyRouterResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                      `json:"healthchecksfailed"`
 	Hostid              string                                    `json:"hostid"`
@@ -563,6 +565,10 @@ func (p *ListRoutersParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forvpc", vv)
 	}
+	if v, found := p.p["healthchecksfailed"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("healthchecksfailed", vv)
+	}
 	if v, found := p.p["hostid"]; found {
 		u.Set("hostid", v.(string))
 	}
@@ -690,6 +696,21 @@ func (p *ListRoutersParams) GetForvpc() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListRoutersParams) SetHealthchecksfailed(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["healthchecksfailed"] = v
+}
+
+func (p *ListRoutersParams) GetHealthchecksfailed() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["healthchecksfailed"].(bool)
+	return value, ok
+}
+
 func (p *ListRoutersParams) SetHostid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1039,6 +1060,7 @@ type Router struct {
 	Guestnetmask        string                     `json:"guestnetmask"`
 	Guestnetworkid      string                     `json:"guestnetworkid"`
 	Guestnetworkname    string                     `json:"guestnetworkname"`
+	Hasannotations      bool                       `json:"hasannotations"`
 	Healthcheckresults  []RouterHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                       `json:"healthchecksfailed"`
 	Hostid              string                     `json:"hostid"`
@@ -1295,12 +1317,31 @@ func (p *RebootRouterParams) toURLValues() url.Values {
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["forced"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forced", vv)
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
 	return u
 }
 
+func (p *RebootRouterParams) SetForced(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forced"] = v
+}
+
+func (p *RebootRouterParams) GetForced() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forced"].(bool)
+	return value, ok
+}
+
 func (p *RebootRouterParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1373,6 +1414,7 @@ type RebootRouterResponse struct {
 	Guestnetmask        string                                   `json:"guestnetmask"`
 	Guestnetworkid      string                                   `json:"guestnetworkid"`
 	Guestnetworkname    string                                   `json:"guestnetworkname"`
+	Hasannotations      bool                                     `json:"hasannotations"`
 	Healthcheckresults  []RebootRouterResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                     `json:"healthchecksfailed"`
 	Hostid              string                                   `json:"hostid"`
@@ -1510,6 +1552,7 @@ type StartRouterResponse struct {
 	Guestnetmask        string                                  `json:"guestnetmask"`
 	Guestnetworkid      string                                  `json:"guestnetworkid"`
 	Guestnetworkname    string                                  `json:"guestnetworkname"`
+	Hasannotations      bool                                    `json:"hasannotations"`
 	Healthcheckresults  []StartRouterResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                    `json:"healthchecksfailed"`
 	Hostid              string                                  `json:"hostid"`
@@ -1666,6 +1709,7 @@ type StopRouterResponse struct {
 	Guestnetmask        string                                 `json:"guestnetmask"`
 	Guestnetworkid      string                                 `json:"guestnetworkid"`
 	Guestnetworkname    string                                 `json:"guestnetworkname"`
+	Hasannotations      bool                                   `json:"hasannotations"`
 	Healthcheckresults  []StopRouterResponseHealthcheckresults `json:"healthcheckresults"`
 	Healthchecksfailed  bool                                   `json:"healthchecksfailed"`
 	Hostid              string                                 `json:"hostid"`
diff --git a/cloudstack/SSHService.go b/cloudstack/SSHService.go
index 4b2f651..a5f9777 100644
--- a/cloudstack/SSHService.go
+++ b/cloudstack/SSHService.go
@@ -21,6 +21,7 @@ package cloudstack
 
 import (
 	"encoding/json"
+	"fmt"
 	"net/url"
 	"strconv"
 )
@@ -32,6 +33,7 @@ type SSHServiceIface interface {
 	NewDeleteSSHKeyPairParams(name string) *DeleteSSHKeyPairParams
 	ListSSHKeyPairs(p *ListSSHKeyPairsParams) (*ListSSHKeyPairsResponse, error)
 	NewListSSHKeyPairsParams() *ListSSHKeyPairsParams
+	GetSSHKeyPairID(name string, opts ...OptionFunc) (string, int, error)
 	RegisterSSHKeyPair(p *RegisterSSHKeyPairParams) (*RegisterSSHKeyPairResponse, error)
 	NewRegisterSSHKeyPairParams(name string, publickey string) *RegisterSSHKeyPairParams
 	ResetSSHKeyForVirtualMachine(p *ResetSSHKeyForVirtualMachineParams) (*ResetSSHKeyForVirtualMachineResponse, error)
@@ -151,14 +153,16 @@ func (s *SSHService) CreateSSHKeyPair(p *CreateSSHKeyPairParams) (*CreateSSHKeyP
 }
 
 type CreateSSHKeyPairResponse struct {
-	Account     string `json:"account"`
-	Domain      string `json:"domain"`
-	Domainid    string `json:"domainid"`
-	Fingerprint string `json:"fingerprint"`
-	JobID       string `json:"jobid"`
-	Jobstatus   int    `json:"jobstatus"`
-	Name        string `json:"name"`
-	Privatekey  string `json:"privatekey"`
+	Account        string `json:"account"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Fingerprint    string `json:"fingerprint"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Privatekey     string `json:"privatekey"`
 }
 
 type DeleteSSHKeyPairParams struct {
@@ -507,6 +511,42 @@ func (s *SSHService) NewListSSHKeyPairsParams() *ListSSHKeyPairsParams {
 	return p
 }
 
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *SSHService) GetSSHKeyPairID(name string, opts ...OptionFunc) (string, int, error) {
+	p := &ListSSHKeyPairsParams{}
+	p.p = make(map[string]interface{})
+
+	p.p["name"] = name
+
+	for _, fn := range append(s.cs.options, opts...) {
+		if err := fn(s.cs, p); err != nil {
+			return "", -1, err
+		}
+	}
+
+	l, err := s.ListSSHKeyPairs(p)
+	if err != nil {
+		return "", -1, err
+	}
+
+	if l.Count == 0 {
+		return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
+	}
+
+	if l.Count == 1 {
+		return l.SSHKeyPairs[0].Id, l.Count, nil
+	}
+
+	if l.Count > 1 {
+		for _, v := range l.SSHKeyPairs {
+			if v.Name == name {
+				return v.Id, l.Count, nil
+			}
+		}
+	}
+	return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
+}
+
 // List registered keypairs
 func (s *SSHService) ListSSHKeyPairs(p *ListSSHKeyPairsParams) (*ListSSHKeyPairsResponse, error) {
 	resp, err := s.cs.newRequest("listSSHKeyPairs", p.toURLValues())
@@ -528,13 +568,15 @@ type ListSSHKeyPairsResponse struct {
 }
 
 type SSHKeyPair struct {
-	Account     string `json:"account"`
-	Domain      string `json:"domain"`
-	Domainid    string `json:"domainid"`
-	Fingerprint string `json:"fingerprint"`
-	JobID       string `json:"jobid"`
-	Jobstatus   int    `json:"jobstatus"`
-	Name        string `json:"name"`
+	Account        string `json:"account"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Fingerprint    string `json:"fingerprint"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
 }
 
 type RegisterSSHKeyPairParams struct {
@@ -669,13 +711,15 @@ func (s *SSHService) RegisterSSHKeyPair(p *RegisterSSHKeyPairParams) (*RegisterS
 }
 
 type RegisterSSHKeyPairResponse struct {
-	Account     string `json:"account"`
-	Domain      string `json:"domain"`
-	Domainid    string `json:"domainid"`
-	Fingerprint string `json:"fingerprint"`
-	JobID       string `json:"jobid"`
-	Jobstatus   int    `json:"jobstatus"`
-	Name        string `json:"name"`
+	Account        string `json:"account"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Fingerprint    string `json:"fingerprint"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
 }
 
 type ResetSSHKeyForVirtualMachineParams struct {
@@ -852,9 +896,11 @@ type ResetSSHKeyForVirtualMachineResponse struct {
 	Groupid               string                                              `json:"groupid"`
 	Guestosid             string                                              `json:"guestosid"`
 	Haenable              bool                                                `json:"haenable"`
+	Hasannotations        bool                                                `json:"hasannotations"`
 	Hostid                string                                              `json:"hostid"`
 	Hostname              string                                              `json:"hostname"`
 	Hypervisor            string                                              `json:"hypervisor"`
+	Icon                  string                                              `json:"icon"`
 	Id                    string                                              `json:"id"`
 	Instancename          string                                              `json:"instancename"`
 	Isdynamicallyscalable bool                                                `json:"isdynamicallyscalable"`
@@ -864,6 +910,7 @@ type ResetSSHKeyForVirtualMachineResponse struct {
 	JobID                 string                                              `json:"jobid"`
 	Jobstatus             int                                                 `json:"jobstatus"`
 	Keypair               string                                              `json:"keypair"`
+	Lastupdated           string                                              `json:"lastupdated"`
 	Memory                int                                                 `json:"memory"`
 	Memoryintfreekbs      int64                                               `json:"memoryintfreekbs"`
 	Memorykbs             int64                                               `json:"memorykbs"`
@@ -876,14 +923,17 @@ type ResetSSHKeyForVirtualMachineResponse struct {
 	Ostypeid              string                                              `json:"ostypeid"`
 	Password              string                                              `json:"password"`
 	Passwordenabled       bool                                                `json:"passwordenabled"`
+	Pooltype              string                                              `json:"pooltype"`
 	Project               string                                              `json:"project"`
 	Projectid             string                                              `json:"projectid"`
 	Publicip              string                                              `json:"publicip"`
 	Publicipid            string                                              `json:"publicipid"`
-	Readonlyuidetails     string                                              `json:"readonlyuidetails"`
+	Readonlydetails       string                                              `json:"readonlydetails"`
+	Receivedbytes         int64                                               `json:"receivedbytes"`
 	Rootdeviceid          int64                                               `json:"rootdeviceid"`
 	Rootdevicetype        string                                              `json:"rootdevicetype"`
 	Securitygroup         []ResetSSHKeyForVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                               `json:"sentbytes"`
 	Serviceofferingid     string                                              `json:"serviceofferingid"`
 	Serviceofferingname   string                                              `json:"serviceofferingname"`
 	Servicestate          string                                              `json:"servicestate"`
diff --git a/cloudstack/SSHService_mock.go b/cloudstack/SSHService_mock.go
index 1359680..24d7098 100644
--- a/cloudstack/SSHService_mock.go
+++ b/cloudstack/SSHService_mock.go
@@ -82,6 +82,27 @@ func (mr *MockSSHServiceIfaceMockRecorder) DeleteSSHKeyPair(p interface{}) *gomo
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSSHKeyPair", reflect.TypeOf((*MockSSHServiceIface)(nil).DeleteSSHKeyPair), p)
 }
 
+// GetSSHKeyPairID mocks base method.
+func (m *MockSSHServiceIface) GetSSHKeyPairID(name string, opts ...OptionFunc) (string, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{name}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetSSHKeyPairID", varargs...)
+	ret0, _ := ret[0].(string)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetSSHKeyPairID indicates an expected call of GetSSHKeyPairID.
+func (mr *MockSSHServiceIfaceMockRecorder) GetSSHKeyPairID(name interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{name}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSSHKeyPairID", reflect.TypeOf((*MockSSHServiceIface)(nil).GetSSHKeyPairID), varargs...)
+}
+
 // ListSSHKeyPairs mocks base method.
 func (m *MockSSHServiceIface) ListSSHKeyPairs(p *ListSSHKeyPairsParams) (*ListSSHKeyPairsResponse, error) {
 	m.ctrl.T.Helper()
diff --git a/cloudstack/ServiceOfferingService.go b/cloudstack/ServiceOfferingService.go
index c3ee0b6..402ef15 100644
--- a/cloudstack/ServiceOfferingService.go
+++ b/cloudstack/ServiceOfferingService.go
@@ -103,6 +103,10 @@ func (p *CreateServiceOfferingParams) toURLValues() url.Values {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("domainid", vv)
 	}
+	if v, found := p.p["dynamicscalingenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("dynamicscalingenabled", vv)
+	}
 	if v, found := p.p["hosttags"]; found {
 		u.Set("hosttags", v.(string))
 	}
@@ -428,6 +432,21 @@ func (p *CreateServiceOfferingParams) GetDomainid() ([]string, bool) {
 	return value, ok
 }
 
+func (p *CreateServiceOfferingParams) SetDynamicscalingenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["dynamicscalingenabled"] = v
+}
+
+func (p *CreateServiceOfferingParams) GetDynamicscalingenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["dynamicscalingenabled"].(bool)
+	return value, ok
+}
+
 func (p *CreateServiceOfferingParams) SetHosttags(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -914,6 +933,8 @@ type CreateServiceOfferingResponse struct {
 	Displaytext                 string            `json:"displaytext"`
 	Domain                      string            `json:"domain"`
 	Domainid                    string            `json:"domainid"`
+	Dynamicscalingenabled       bool              `json:"dynamicscalingenabled"`
+	Hasannotations              bool              `json:"hasannotations"`
 	Hosttags                    string            `json:"hosttags"`
 	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
 	Id                          string            `json:"id"`
@@ -933,9 +954,9 @@ type CreateServiceOfferingResponse struct {
 	Provisioningtype            string            `json:"provisioningtype"`
 	Rootdisksize                int64             `json:"rootdisksize"`
 	Serviceofferingdetails      map[string]string `json:"serviceofferingdetails"`
+	Storagetags                 string            `json:"storagetags"`
 	Storagetype                 string            `json:"storagetype"`
 	Systemvmtype                string            `json:"systemvmtype"`
-	Tags                        string            `json:"tags"`
 	Vspherestoragepolicy        string            `json:"vspherestoragepolicy"`
 	Zone                        string            `json:"zone"`
 	Zoneid                      string            `json:"zoneid"`
@@ -1452,6 +1473,8 @@ type ServiceOffering struct {
 	Displaytext                 string            `json:"displaytext"`
 	Domain                      string            `json:"domain"`
 	Domainid                    string            `json:"domainid"`
+	Dynamicscalingenabled       bool              `json:"dynamicscalingenabled"`
+	Hasannotations              bool              `json:"hasannotations"`
 	Hosttags                    string            `json:"hosttags"`
 	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
 	Id                          string            `json:"id"`
@@ -1471,9 +1494,9 @@ type ServiceOffering struct {
 	Provisioningtype            string            `json:"provisioningtype"`
 	Rootdisksize                int64             `json:"rootdisksize"`
 	Serviceofferingdetails      map[string]string `json:"serviceofferingdetails"`
+	Storagetags                 string            `json:"storagetags"`
 	Storagetype                 string            `json:"storagetype"`
 	Systemvmtype                string            `json:"systemvmtype"`
-	Tags                        string            `json:"tags"`
 	Vspherestoragepolicy        string            `json:"vspherestoragepolicy"`
 	Zone                        string            `json:"zone"`
 	Zoneid                      string            `json:"zoneid"`
@@ -1494,6 +1517,9 @@ func (p *UpdateServiceOfferingParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["hosttags"]; found {
+		u.Set("hosttags", v.(string))
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
@@ -1504,6 +1530,9 @@ func (p *UpdateServiceOfferingParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("sortkey", vv)
 	}
+	if v, found := p.p["storagetags"]; found {
+		u.Set("storagetags", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -1540,6 +1569,21 @@ func (p *UpdateServiceOfferingParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateServiceOfferingParams) SetHosttags(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["hosttags"] = v
+}
+
+func (p *UpdateServiceOfferingParams) GetHosttags() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["hosttags"].(string)
+	return value, ok
+}
+
 func (p *UpdateServiceOfferingParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1585,6 +1629,21 @@ func (p *UpdateServiceOfferingParams) GetSortkey() (int, bool) {
 	return value, ok
 }
 
+func (p *UpdateServiceOfferingParams) SetStoragetags(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storagetags"] = v
+}
+
+func (p *UpdateServiceOfferingParams) GetStoragetags() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storagetags"].(string)
+	return value, ok
+}
+
 func (p *UpdateServiceOfferingParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1650,6 +1709,8 @@ type UpdateServiceOfferingResponse struct {
 	Displaytext                 string            `json:"displaytext"`
 	Domain                      string            `json:"domain"`
 	Domainid                    string            `json:"domainid"`
+	Dynamicscalingenabled       bool              `json:"dynamicscalingenabled"`
+	Hasannotations              bool              `json:"hasannotations"`
 	Hosttags                    string            `json:"hosttags"`
 	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
 	Id                          string            `json:"id"`
@@ -1669,9 +1730,9 @@ type UpdateServiceOfferingResponse struct {
 	Provisioningtype            string            `json:"provisioningtype"`
 	Rootdisksize                int64             `json:"rootdisksize"`
 	Serviceofferingdetails      map[string]string `json:"serviceofferingdetails"`
+	Storagetags                 string            `json:"storagetags"`
 	Storagetype                 string            `json:"storagetype"`
 	Systemvmtype                string            `json:"systemvmtype"`
-	Tags                        string            `json:"tags"`
 	Vspherestoragepolicy        string            `json:"vspherestoragepolicy"`
 	Zone                        string            `json:"zone"`
 	Zoneid                      string            `json:"zoneid"`
diff --git a/cloudstack/SnapshotService.go b/cloudstack/SnapshotService.go
index cb472a2..f469d12 100644
--- a/cloudstack/SnapshotService.go
+++ b/cloudstack/SnapshotService.go
@@ -284,30 +284,31 @@ func (s *SnapshotService) CreateSnapshot(p *CreateSnapshotParams) (*CreateSnapsh
 }
 
 type CreateSnapshotResponse struct {
-	Account       string `json:"account"`
-	Created       string `json:"created"`
-	Domain        string `json:"domain"`
-	Domainid      string `json:"domainid"`
-	Id            string `json:"id"`
-	Intervaltype  string `json:"intervaltype"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Locationtype  string `json:"locationtype"`
-	Name          string `json:"name"`
-	Osdisplayname string `json:"osdisplayname"`
-	Ostypeid      string `json:"ostypeid"`
-	Physicalsize  int64  `json:"physicalsize"`
-	Project       string `json:"project"`
-	Projectid     string `json:"projectid"`
-	Revertable    bool   `json:"revertable"`
-	Snapshottype  string `json:"snapshottype"`
-	State         string `json:"state"`
-	Tags          []Tags `json:"tags"`
-	Virtualsize   int64  `json:"virtualsize"`
-	Volumeid      string `json:"volumeid"`
-	Volumename    string `json:"volumename"`
-	Volumetype    string `json:"volumetype"`
-	Zoneid        string `json:"zoneid"`
+	Account        string `json:"account"`
+	Created        string `json:"created"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	Intervaltype   string `json:"intervaltype"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Locationtype   string `json:"locationtype"`
+	Name           string `json:"name"`
+	Osdisplayname  string `json:"osdisplayname"`
+	Ostypeid       string `json:"ostypeid"`
+	Physicalsize   int64  `json:"physicalsize"`
+	Project        string `json:"project"`
+	Projectid      string `json:"projectid"`
+	Revertable     bool   `json:"revertable"`
+	Snapshottype   string `json:"snapshottype"`
+	State          string `json:"state"`
+	Tags           []Tags `json:"tags"`
+	Virtualsize    int64  `json:"virtualsize"`
+	Volumeid       string `json:"volumeid"`
+	Volumename     string `json:"volumename"`
+	Volumetype     string `json:"volumetype"`
+	Zoneid         string `json:"zoneid"`
 }
 
 func (r *CreateSnapshotResponse) UnmarshalJSON(b []byte) error {
@@ -510,16 +511,17 @@ func (s *SnapshotService) CreateSnapshotPolicy(p *CreateSnapshotPolicyParams) (*
 }
 
 type CreateSnapshotPolicyResponse struct {
-	Fordisplay   bool   `json:"fordisplay"`
-	Id           string `json:"id"`
-	Intervaltype int    `json:"intervaltype"`
-	JobID        string `json:"jobid"`
-	Jobstatus    int    `json:"jobstatus"`
-	Maxsnaps     int    `json:"maxsnaps"`
-	Schedule     string `json:"schedule"`
-	Tags         []Tags `json:"tags"`
-	Timezone     string `json:"timezone"`
-	Volumeid     string `json:"volumeid"`
+	Fordisplay     bool   `json:"fordisplay"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	Intervaltype   int    `json:"intervaltype"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Maxsnaps       int    `json:"maxsnaps"`
+	Schedule       string `json:"schedule"`
+	Tags           []Tags `json:"tags"`
+	Timezone       string `json:"timezone"`
+	Volumeid       string `json:"volumeid"`
 }
 
 type CreateVMSnapshotParams struct {
@@ -678,6 +680,7 @@ type CreateVMSnapshotResponse struct {
 	Displayname        string `json:"displayname"`
 	Domain             string `json:"domain"`
 	Domainid           string `json:"domainid"`
+	Hasannotations     bool   `json:"hasannotations"`
 	Hypervisor         string `json:"hypervisor"`
 	Id                 string `json:"id"`
 	JobID              string `json:"jobid"`
@@ -1139,16 +1142,17 @@ type ListSnapshotPoliciesResponse struct {
 }
 
 type SnapshotPolicy struct {
-	Fordisplay   bool   `json:"fordisplay"`
-	Id           string `json:"id"`
-	Intervaltype int    `json:"intervaltype"`
-	JobID        string `json:"jobid"`
-	Jobstatus    int    `json:"jobstatus"`
-	Maxsnaps     int    `json:"maxsnaps"`
-	Schedule     string `json:"schedule"`
-	Tags         []Tags `json:"tags"`
-	Timezone     string `json:"timezone"`
-	Volumeid     string `json:"volumeid"`
+	Fordisplay     bool   `json:"fordisplay"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	Intervaltype   int    `json:"intervaltype"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Maxsnaps       int    `json:"maxsnaps"`
+	Schedule       string `json:"schedule"`
+	Tags           []Tags `json:"tags"`
+	Timezone       string `json:"timezone"`
+	Volumeid       string `json:"volumeid"`
 }
 
 type ListSnapshotsParams struct {
@@ -1572,30 +1576,31 @@ type ListSnapshotsResponse struct {
 }
 
 type Snapshot struct {
-	Account       string `json:"account"`
-	Created       string `json:"created"`
-	Domain        string `json:"domain"`
-	Domainid      string `json:"domainid"`
-	Id            string `json:"id"`
-	Intervaltype  string `json:"intervaltype"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Locationtype  string `json:"locationtype"`
-	Name          string `json:"name"`
-	Osdisplayname string `json:"osdisplayname"`
-	Ostypeid      string `json:"ostypeid"`
-	Physicalsize  int64  `json:"physicalsize"`
-	Project       string `json:"project"`
-	Projectid     string `json:"projectid"`
-	Revertable    bool   `json:"revertable"`
-	Snapshottype  string `json:"snapshottype"`
-	State         string `json:"state"`
-	Tags          []Tags `json:"tags"`
-	Virtualsize   int64  `json:"virtualsize"`
-	Volumeid      string `json:"volumeid"`
-	Volumename    string `json:"volumename"`
-	Volumetype    string `json:"volumetype"`
-	Zoneid        string `json:"zoneid"`
+	Account        string `json:"account"`
+	Created        string `json:"created"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	Intervaltype   string `json:"intervaltype"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Locationtype   string `json:"locationtype"`
+	Name           string `json:"name"`
+	Osdisplayname  string `json:"osdisplayname"`
+	Ostypeid       string `json:"ostypeid"`
+	Physicalsize   int64  `json:"physicalsize"`
+	Project        string `json:"project"`
+	Projectid      string `json:"projectid"`
+	Revertable     bool   `json:"revertable"`
+	Snapshottype   string `json:"snapshottype"`
+	State          string `json:"state"`
+	Tags           []Tags `json:"tags"`
+	Virtualsize    int64  `json:"virtualsize"`
+	Volumeid       string `json:"volumeid"`
+	Volumename     string `json:"volumename"`
+	Volumetype     string `json:"volumetype"`
+	Zoneid         string `json:"zoneid"`
 }
 
 func (r *Snapshot) UnmarshalJSON(b []byte) error {
@@ -1970,6 +1975,7 @@ type VMSnapshot struct {
 	Displayname        string `json:"displayname"`
 	Domain             string `json:"domain"`
 	Domainid           string `json:"domainid"`
+	Hasannotations     bool   `json:"hasannotations"`
 	Hypervisor         string `json:"hypervisor"`
 	Id                 string `json:"id"`
 	JobID              string `json:"jobid"`
@@ -2063,30 +2069,31 @@ func (s *SnapshotService) RevertSnapshot(p *RevertSnapshotParams) (*RevertSnapsh
 }
 
 type RevertSnapshotResponse struct {
-	Account       string `json:"account"`
-	Created       string `json:"created"`
-	Domain        string `json:"domain"`
-	Domainid      string `json:"domainid"`
-	Id            string `json:"id"`
-	Intervaltype  string `json:"intervaltype"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Locationtype  string `json:"locationtype"`
-	Name          string `json:"name"`
-	Osdisplayname string `json:"osdisplayname"`
-	Ostypeid      string `json:"ostypeid"`
-	Physicalsize  int64  `json:"physicalsize"`
-	Project       string `json:"project"`
-	Projectid     string `json:"projectid"`
-	Revertable    bool   `json:"revertable"`
-	Snapshottype  string `json:"snapshottype"`
-	State         string `json:"state"`
-	Tags          []Tags `json:"tags"`
-	Virtualsize   int64  `json:"virtualsize"`
-	Volumeid      string `json:"volumeid"`
-	Volumename    string `json:"volumename"`
-	Volumetype    string `json:"volumetype"`
-	Zoneid        string `json:"zoneid"`
+	Account        string `json:"account"`
+	Created        string `json:"created"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	Intervaltype   string `json:"intervaltype"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Locationtype   string `json:"locationtype"`
+	Name           string `json:"name"`
+	Osdisplayname  string `json:"osdisplayname"`
+	Ostypeid       string `json:"ostypeid"`
+	Physicalsize   int64  `json:"physicalsize"`
+	Project        string `json:"project"`
+	Projectid      string `json:"projectid"`
+	Revertable     bool   `json:"revertable"`
+	Snapshottype   string `json:"snapshottype"`
+	State          string `json:"state"`
+	Tags           []Tags `json:"tags"`
+	Virtualsize    int64  `json:"virtualsize"`
+	Volumeid       string `json:"volumeid"`
+	Volumename     string `json:"volumename"`
+	Volumetype     string `json:"volumetype"`
+	Zoneid         string `json:"zoneid"`
 }
 
 func (r *RevertSnapshotResponse) UnmarshalJSON(b []byte) error {
@@ -2217,9 +2224,11 @@ type RevertToVMSnapshotResponse struct {
 	Groupid               string                                    `json:"groupid"`
 	Guestosid             string                                    `json:"guestosid"`
 	Haenable              bool                                      `json:"haenable"`
+	Hasannotations        bool                                      `json:"hasannotations"`
 	Hostid                string                                    `json:"hostid"`
 	Hostname              string                                    `json:"hostname"`
 	Hypervisor            string                                    `json:"hypervisor"`
+	Icon                  string                                    `json:"icon"`
 	Id                    string                                    `json:"id"`
 	Instancename          string                                    `json:"instancename"`
 	Isdynamicallyscalable bool                                      `json:"isdynamicallyscalable"`
@@ -2229,6 +2238,7 @@ type RevertToVMSnapshotResponse struct {
 	JobID                 string                                    `json:"jobid"`
 	Jobstatus             int                                       `json:"jobstatus"`
 	Keypair               string                                    `json:"keypair"`
+	Lastupdated           string                                    `json:"lastupdated"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
 	Memorykbs             int64                                     `json:"memorykbs"`
@@ -2241,14 +2251,17 @@ type RevertToVMSnapshotResponse struct {
 	Ostypeid              string                                    `json:"ostypeid"`
 	Password              string                                    `json:"password"`
 	Passwordenabled       bool                                      `json:"passwordenabled"`
+	Pooltype              string                                    `json:"pooltype"`
 	Project               string                                    `json:"project"`
 	Projectid             string                                    `json:"projectid"`
 	Publicip              string                                    `json:"publicip"`
 	Publicipid            string                                    `json:"publicipid"`
-	Readonlyuidetails     string                                    `json:"readonlyuidetails"`
+	Readonlydetails       string                                    `json:"readonlydetails"`
+	Receivedbytes         int64                                     `json:"receivedbytes"`
 	Rootdeviceid          int64                                     `json:"rootdeviceid"`
 	Rootdevicetype        string                                    `json:"rootdevicetype"`
 	Securitygroup         []RevertToVMSnapshotResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                     `json:"sentbytes"`
 	Serviceofferingid     string                                    `json:"serviceofferingid"`
 	Serviceofferingname   string                                    `json:"serviceofferingname"`
 	Servicestate          string                                    `json:"servicestate"`
@@ -2444,14 +2457,15 @@ func (s *SnapshotService) UpdateSnapshotPolicy(p *UpdateSnapshotPolicyParams) (*
 }
 
 type UpdateSnapshotPolicyResponse struct {
-	Fordisplay   bool   `json:"fordisplay"`
-	Id           string `json:"id"`
-	Intervaltype int    `json:"intervaltype"`
-	JobID        string `json:"jobid"`
-	Jobstatus    int    `json:"jobstatus"`
-	Maxsnaps     int    `json:"maxsnaps"`
-	Schedule     string `json:"schedule"`
-	Tags         []Tags `json:"tags"`
-	Timezone     string `json:"timezone"`
-	Volumeid     string `json:"volumeid"`
+	Fordisplay     bool   `json:"fordisplay"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	Intervaltype   int    `json:"intervaltype"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Maxsnaps       int    `json:"maxsnaps"`
+	Schedule       string `json:"schedule"`
+	Tags           []Tags `json:"tags"`
+	Timezone       string `json:"timezone"`
+	Volumeid       string `json:"volumeid"`
 }
diff --git a/cloudstack/StoragePoolService.go b/cloudstack/StoragePoolService.go
index 2451a76..80f7980 100644
--- a/cloudstack/StoragePoolService.go
+++ b/cloudstack/StoragePoolService.go
@@ -117,6 +117,7 @@ type CancelStorageMaintenanceResponse struct {
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
+	Hasannotations       bool              `json:"hasannotations"`
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
@@ -221,6 +222,7 @@ type EnableStorageMaintenanceResponse struct {
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
+	Hasannotations       bool              `json:"hasannotations"`
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
diff --git a/cloudstack/SwiftService.go b/cloudstack/SwiftService.go
index db2b3f6..e4f670c 100644
--- a/cloudstack/SwiftService.go
+++ b/cloudstack/SwiftService.go
@@ -143,19 +143,20 @@ func (s *SwiftService) AddSwift(p *AddSwiftParams) (*AddSwiftResponse, error) {
 }
 
 type AddSwiftResponse struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
 
 type ListSwiftsParams struct {
@@ -310,17 +311,18 @@ type ListSwiftsResponse struct {
 }
 
 type Swift struct {
-	Disksizetotal int64  `json:"disksizetotal"`
-	Disksizeused  int64  `json:"disksizeused"`
-	Id            string `json:"id"`
-	JobID         string `json:"jobid"`
-	Jobstatus     int    `json:"jobstatus"`
-	Name          string `json:"name"`
-	Protocol      string `json:"protocol"`
-	Providername  string `json:"providername"`
-	Readonly      bool   `json:"readonly"`
-	Scope         string `json:"scope"`
-	Url           string `json:"url"`
-	Zoneid        string `json:"zoneid"`
-	Zonename      string `json:"zonename"`
+	Disksizetotal  int64  `json:"disksizetotal"`
+	Disksizeused   int64  `json:"disksizeused"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Protocol       string `json:"protocol"`
+	Providername   string `json:"providername"`
+	Readonly       bool   `json:"readonly"`
+	Scope          string `json:"scope"`
+	Url            string `json:"url"`
+	Zoneid         string `json:"zoneid"`
+	Zonename       string `json:"zonename"`
 }
diff --git a/cloudstack/SystemVMService.go b/cloudstack/SystemVMService.go
index acfce82..9f648b2 100644
--- a/cloudstack/SystemVMService.go
+++ b/cloudstack/SystemVMService.go
@@ -38,7 +38,7 @@ type SystemVMServiceIface interface {
 	GetSystemVmByName(name string, opts ...OptionFunc) (*SystemVm, int, error)
 	GetSystemVmByID(id string, opts ...OptionFunc) (*SystemVm, int, error)
 	MigrateSystemVm(p *MigrateSystemVmParams) (*MigrateSystemVmResponse, error)
-	NewMigrateSystemVmParams(hostid string, virtualmachineid string) *MigrateSystemVmParams
+	NewMigrateSystemVmParams(virtualmachineid string) *MigrateSystemVmParams
 	RebootSystemVm(p *RebootSystemVmParams) (*RebootSystemVmResponse, error)
 	NewRebootSystemVmParams(id string) *RebootSystemVmParams
 	ScaleSystemVm(p *ScaleSystemVmParams) (*ScaleSystemVmResponse, error)
@@ -144,41 +144,43 @@ func (s *SystemVMService) ChangeServiceForSystemVm(p *ChangeServiceForSystemVmPa
 }
 
 type ChangeServiceForSystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type DestroySystemVmParams struct {
@@ -256,41 +258,43 @@ func (s *SystemVMService) DestroySystemVm(p *DestroySystemVmParams) (*DestroySys
 }
 
 type DestroySystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type ListSystemVmsParams struct {
@@ -617,41 +621,43 @@ type ListSystemVmsResponse struct {
 }
 
 type SystemVm struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type MigrateSystemVmParams struct {
@@ -663,15 +669,37 @@ func (p *MigrateSystemVmParams) toURLValues() url.Values {
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["autoselect"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("autoselect", vv)
+	}
 	if v, found := p.p["hostid"]; found {
 		u.Set("hostid", v.(string))
 	}
+	if v, found := p.p["storageid"]; found {
+		u.Set("storageid", v.(string))
+	}
 	if v, found := p.p["virtualmachineid"]; found {
 		u.Set("virtualmachineid", v.(string))
 	}
 	return u
 }
 
+func (p *MigrateSystemVmParams) SetAutoselect(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["autoselect"] = v
+}
+
+func (p *MigrateSystemVmParams) GetAutoselect() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["autoselect"].(bool)
+	return value, ok
+}
+
 func (p *MigrateSystemVmParams) SetHostid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -687,6 +715,21 @@ func (p *MigrateSystemVmParams) GetHostid() (string, bool) {
 	return value, ok
 }
 
+func (p *MigrateSystemVmParams) SetStorageid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageid"] = v
+}
+
+func (p *MigrateSystemVmParams) GetStorageid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageid"].(string)
+	return value, ok
+}
+
 func (p *MigrateSystemVmParams) SetVirtualmachineid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -704,10 +747,9 @@ func (p *MigrateSystemVmParams) GetVirtualmachineid() (string, bool) {
 
 // You should always use this function to get a new MigrateSystemVmParams instance,
 // as then you are sure you have configured all required params
-func (s *SystemVMService) NewMigrateSystemVmParams(hostid string, virtualmachineid string) *MigrateSystemVmParams {
+func (s *SystemVMService) NewMigrateSystemVmParams(virtualmachineid string) *MigrateSystemVmParams {
 	p := &MigrateSystemVmParams{}
 	p.p = make(map[string]interface{})
-	p.p["hostid"] = hostid
 	p.p["virtualmachineid"] = virtualmachineid
 	return p
 }
@@ -748,41 +790,43 @@ func (s *SystemVMService) MigrateSystemVm(p *MigrateSystemVmParams) (*MigrateSys
 }
 
 type MigrateSystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type RebootSystemVmParams struct {
@@ -794,12 +838,31 @@ func (p *RebootSystemVmParams) toURLValues() url.Values {
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["forced"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forced", vv)
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
 	return u
 }
 
+func (p *RebootSystemVmParams) SetForced(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forced"] = v
+}
+
+func (p *RebootSystemVmParams) GetForced() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forced"].(bool)
+	return value, ok
+}
+
 func (p *RebootSystemVmParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -860,41 +923,43 @@ func (s *SystemVMService) RebootSystemVm(p *RebootSystemVmParams) (*RebootSystem
 }
 
 type RebootSystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type ScaleSystemVmParams struct {
@@ -1012,41 +1077,43 @@ func (s *SystemVMService) ScaleSystemVm(p *ScaleSystemVmParams) (*ScaleSystemVmR
 }
 
 type ScaleSystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type StartSystemVmParams struct {
@@ -1124,41 +1191,43 @@ func (s *SystemVMService) StartSystemVm(p *StartSystemVmParams) (*StartSystemVmR
 }
 
 type StartSystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
 
 type StopSystemVmParams struct {
@@ -1255,39 +1324,41 @@ func (s *SystemVMService) StopSystemVm(p *StopSystemVmParams) (*StopSystemVmResp
 }
 
 type StopSystemVmResponse struct {
-	Activeviewersessions int      `json:"activeviewersessions"`
-	Agentstate           string   `json:"agentstate"`
-	Created              string   `json:"created"`
-	Disconnected         string   `json:"disconnected"`
-	Dns1                 string   `json:"dns1"`
-	Dns2                 string   `json:"dns2"`
-	Gateway              string   `json:"gateway"`
-	Guestvlan            string   `json:"guestvlan"`
-	Hostid               string   `json:"hostid"`
-	Hostname             string   `json:"hostname"`
-	Hypervisor           string   `json:"hypervisor"`
-	Id                   string   `json:"id"`
-	JobID                string   `json:"jobid"`
-	Jobstatus            int      `json:"jobstatus"`
-	Linklocalip          string   `json:"linklocalip"`
-	Linklocalmacaddress  string   `json:"linklocalmacaddress"`
-	Linklocalnetmask     string   `json:"linklocalnetmask"`
-	Name                 string   `json:"name"`
-	Networkdomain        string   `json:"networkdomain"`
-	Podid                string   `json:"podid"`
-	Podname              string   `json:"podname"`
-	Privateip            string   `json:"privateip"`
-	Privatemacaddress    string   `json:"privatemacaddress"`
-	Privatenetmask       string   `json:"privatenetmask"`
-	Publicip             string   `json:"publicip"`
-	Publicmacaddress     string   `json:"publicmacaddress"`
-	Publicnetmask        string   `json:"publicnetmask"`
-	Publicvlan           []string `json:"publicvlan"`
-	State                string   `json:"state"`
-	Systemvmtype         string   `json:"systemvmtype"`
-	Templateid           string   `json:"templateid"`
-	Templatename         string   `json:"templatename"`
-	Version              string   `json:"version"`
-	Zoneid               string   `json:"zoneid"`
-	Zonename             string   `json:"zonename"`
+	Activeviewersessions  int      `json:"activeviewersessions"`
+	Agentstate            string   `json:"agentstate"`
+	Created               string   `json:"created"`
+	Disconnected          string   `json:"disconnected"`
+	Dns1                  string   `json:"dns1"`
+	Dns2                  string   `json:"dns2"`
+	Gateway               string   `json:"gateway"`
+	Guestvlan             string   `json:"guestvlan"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Hostid                string   `json:"hostid"`
+	Hostname              string   `json:"hostname"`
+	Hypervisor            string   `json:"hypervisor"`
+	Id                    string   `json:"id"`
+	Isdynamicallyscalable bool     `json:"isdynamicallyscalable"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Linklocalip           string   `json:"linklocalip"`
+	Linklocalmacaddress   string   `json:"linklocalmacaddress"`
+	Linklocalnetmask      string   `json:"linklocalnetmask"`
+	Name                  string   `json:"name"`
+	Networkdomain         string   `json:"networkdomain"`
+	Podid                 string   `json:"podid"`
+	Podname               string   `json:"podname"`
+	Privateip             string   `json:"privateip"`
+	Privatemacaddress     string   `json:"privatemacaddress"`
+	Privatenetmask        string   `json:"privatenetmask"`
+	Publicip              string   `json:"publicip"`
+	Publicmacaddress      string   `json:"publicmacaddress"`
+	Publicnetmask         string   `json:"publicnetmask"`
+	Publicvlan            []string `json:"publicvlan"`
+	State                 string   `json:"state"`
+	Systemvmtype          string   `json:"systemvmtype"`
+	Templateid            string   `json:"templateid"`
+	Templatename          string   `json:"templatename"`
+	Version               string   `json:"version"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
 }
diff --git a/cloudstack/SystemVMService_mock.go b/cloudstack/SystemVMService_mock.go
index 1fd69a6..9c03657 100644
--- a/cloudstack/SystemVMService_mock.go
+++ b/cloudstack/SystemVMService_mock.go
@@ -218,17 +218,17 @@ func (mr *MockSystemVMServiceIfaceMockRecorder) NewListSystemVmsParams() *gomock
 }
 
 // NewMigrateSystemVmParams mocks base method.
-func (m *MockSystemVMServiceIface) NewMigrateSystemVmParams(hostid, virtualmachineid string) *MigrateSystemVmParams {
+func (m *MockSystemVMServiceIface) NewMigrateSystemVmParams(virtualmachineid string) *MigrateSystemVmParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewMigrateSystemVmParams", hostid, virtualmachineid)
+	ret := m.ctrl.Call(m, "NewMigrateSystemVmParams", virtualmachineid)
 	ret0, _ := ret[0].(*MigrateSystemVmParams)
 	return ret0
 }
 
 // NewMigrateSystemVmParams indicates an expected call of NewMigrateSystemVmParams.
-func (mr *MockSystemVMServiceIfaceMockRecorder) NewMigrateSystemVmParams(hostid, virtualmachineid interface{}) *gomock.Call {
+func (mr *MockSystemVMServiceIfaceMockRecorder) NewMigrateSystemVmParams(virtualmachineid interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewMigrateSystemVmParams", reflect.TypeOf((*MockSystemVMServiceIface)(nil).NewMigrateSystemVmParams), hostid, virtualmachineid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewMigrateSystemVmParams", reflect.TypeOf((*MockSystemVMServiceIface)(nil).NewMigrateSystemVmParams), virtualmachineid)
 }
 
 // NewRebootSystemVmParams mocks base method.
diff --git a/cloudstack/TemplateService.go b/cloudstack/TemplateService.go
index 43c2f14..2f5908b 100644
--- a/cloudstack/TemplateService.go
+++ b/cloudstack/TemplateService.go
@@ -205,9 +205,11 @@ type CopyTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -657,9 +659,11 @@ type CreateTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -1599,6 +1603,10 @@ func (p *ListTemplatesParams) toURLValues() url.Values {
 	if v, found := p.p["projectid"]; found {
 		u.Set("projectid", v.(string))
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["showremoved"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showremoved", vv)
@@ -1833,6 +1841,21 @@ func (p *ListTemplatesParams) GetProjectid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListTemplatesParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListTemplatesParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListTemplatesParams) SetShowremoved(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2041,9 +2064,11 @@ type Template struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -2210,9 +2235,11 @@ type PrepareTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -2798,9 +2825,11 @@ type RegisterTemplate struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
@@ -3193,9 +3222,11 @@ type UpdateTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
 	Format                string              `json:"format"`
+	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
 	Hostname              string              `json:"hostname"`
 	Hypervisor            string              `json:"hypervisor"`
+	Icon                  string              `json:"icon"`
 	Id                    string              `json:"id"`
 	Isdynamicallyscalable bool                `json:"isdynamicallyscalable"`
 	Isextractable         bool                `json:"isextractable"`
diff --git a/cloudstack/UsageService.go b/cloudstack/UsageService.go
index bfd3b17..3e2315c 100644
--- a/cloudstack/UsageService.go
+++ b/cloudstack/UsageService.go
@@ -1413,6 +1413,7 @@ type UsageRecord struct {
 	Domain           string `json:"domain"`
 	Domainid         string `json:"domainid"`
 	Enddate          string `json:"enddate"`
+	Hasannotations   bool   `json:"hasannotations"`
 	Isdefault        bool   `json:"isdefault"`
 	Issourcenat      bool   `json:"issourcenat"`
 	Issystem         bool   `json:"issystem"`
diff --git a/cloudstack/UserService.go b/cloudstack/UserService.go
index 07866a7..c5fe70a 100644
--- a/cloudstack/UserService.go
+++ b/cloudstack/UserService.go
@@ -268,6 +268,7 @@ type CreateUserResponse struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -456,6 +457,7 @@ type DisableUserResponse struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -540,6 +542,7 @@ type EnableUserResponse struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -620,6 +623,7 @@ type GetUserResponse struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -742,6 +746,10 @@ func (p *ListUsersParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("pagesize", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
@@ -886,6 +894,21 @@ func (p *ListUsersParams) GetPagesize() (int, bool) {
 	return value, ok
 }
 
+func (p *ListUsersParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListUsersParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListUsersParams) SetState(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -987,6 +1010,7 @@ type User struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -1071,6 +1095,7 @@ type LockUserResponse struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
@@ -1378,6 +1403,7 @@ type UpdateUserResponse struct {
 	Domainid            string `json:"domainid"`
 	Email               string `json:"email"`
 	Firstname           string `json:"firstname"`
+	Icon                string `json:"icon"`
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
diff --git a/cloudstack/VMGroupService.go b/cloudstack/VMGroupService.go
index 1ac999a..52564b8 100644
--- a/cloudstack/VMGroupService.go
+++ b/cloudstack/VMGroupService.go
@@ -150,16 +150,17 @@ func (s *VMGroupService) CreateInstanceGroup(p *CreateInstanceGroupParams) (*Cre
 }
 
 type CreateInstanceGroupResponse struct {
-	Account   string `json:"account"`
-	Created   string `json:"created"`
-	Domain    string `json:"domain"`
-	Domainid  string `json:"domainid"`
-	Id        string `json:"id"`
-	JobID     string `json:"jobid"`
-	Jobstatus int    `json:"jobstatus"`
-	Name      string `json:"name"`
-	Project   string `json:"project"`
-	Projectid string `json:"projectid"`
+	Account        string `json:"account"`
+	Created        string `json:"created"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Project        string `json:"project"`
+	Projectid      string `json:"projectid"`
 }
 
 type DeleteInstanceGroupParams struct {
@@ -558,16 +559,17 @@ type ListInstanceGroupsResponse struct {
 }
 
 type InstanceGroup struct {
-	Account   string `json:"account"`
-	Created   string `json:"created"`
-	Domain    string `json:"domain"`
-	Domainid  string `json:"domainid"`
-	Id        string `json:"id"`
-	JobID     string `json:"jobid"`
-	Jobstatus int    `json:"jobstatus"`
-	Name      string `json:"name"`
-	Project   string `json:"project"`
-	Projectid string `json:"projectid"`
+	Account        string `json:"account"`
+	Created        string `json:"created"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Project        string `json:"project"`
+	Projectid      string `json:"projectid"`
 }
 
 type UpdateInstanceGroupParams struct {
@@ -643,14 +645,15 @@ func (s *VMGroupService) UpdateInstanceGroup(p *UpdateInstanceGroupParams) (*Upd
 }
 
 type UpdateInstanceGroupResponse struct {
-	Account   string `json:"account"`
-	Created   string `json:"created"`
-	Domain    string `json:"domain"`
-	Domainid  string `json:"domainid"`
-	Id        string `json:"id"`
-	JobID     string `json:"jobid"`
-	Jobstatus int    `json:"jobstatus"`
-	Name      string `json:"name"`
-	Project   string `json:"project"`
-	Projectid string `json:"projectid"`
+	Account        string `json:"account"`
+	Created        string `json:"created"`
+	Domain         string `json:"domain"`
+	Domainid       string `json:"domainid"`
+	Hasannotations bool   `json:"hasannotations"`
+	Id             string `json:"id"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
+	Name           string `json:"name"`
+	Project        string `json:"project"`
+	Projectid      string `json:"projectid"`
 }
diff --git a/cloudstack/VPCService.go b/cloudstack/VPCService.go
index b91c928..546de71 100644
--- a/cloudstack/VPCService.go
+++ b/cloudstack/VPCService.go
@@ -712,11 +712,13 @@ type CreateVPCResponse struct {
 	Domain               string                     `json:"domain"`
 	Domainid             string                     `json:"domainid"`
 	Fordisplay           bool                       `json:"fordisplay"`
+	Hasannotations       bool                       `json:"hasannotations"`
+	Icon                 string                     `json:"icon"`
 	Id                   string                     `json:"id"`
 	JobID                string                     `json:"jobid"`
 	Jobstatus            int                        `json:"jobstatus"`
 	Name                 string                     `json:"name"`
-	Network              []CreateVPCResponseNetwork `json:"network"`
+	Network              []string                   `json:"network"`
 	Networkdomain        string                     `json:"networkdomain"`
 	Project              string                     `json:"project"`
 	Projectid            string                     `json:"projectid"`
@@ -754,84 +756,6 @@ type CreateVPCResponseServiceCapability struct {
 	Value                      string `json:"value"`
 }
 
-type CreateVPCResponseNetwork struct {
-	Account                     string                            `json:"account"`
-	Aclid                       string                            `json:"aclid"`
-	Aclname                     string                            `json:"aclname"`
-	Acltype                     string                            `json:"acltype"`
-	Broadcastdomaintype         string                            `json:"broadcastdomaintype"`
-	Broadcasturi                string                            `json:"broadcasturi"`
-	Canusefordeploy             bool                              `json:"canusefordeploy"`
-	Cidr                        string                            `json:"cidr"`
-	Details                     map[string]string                 `json:"details"`
-	Displaynetwork              bool                              `json:"displaynetwork"`
-	Displaytext                 string                            `json:"displaytext"`
-	Dns1                        string                            `json:"dns1"`
-	Dns2                        string                            `json:"dns2"`
-	Domain                      string                            `json:"domain"`
-	Domainid                    string                            `json:"domainid"`
-	Externalid                  string                            `json:"externalid"`
-	Gateway                     string                            `json:"gateway"`
-	Id                          string                            `json:"id"`
-	Ip6cidr                     string                            `json:"ip6cidr"`
-	Ip6gateway                  string                            `json:"ip6gateway"`
-	Isdefault                   bool                              `json:"isdefault"`
-	Ispersistent                bool                              `json:"ispersistent"`
-	Issystem                    bool                              `json:"issystem"`
-	Name                        string                            `json:"name"`
-	Netmask                     string                            `json:"netmask"`
-	Networkcidr                 string                            `json:"networkcidr"`
-	Networkdomain               string                            `json:"networkdomain"`
-	Networkofferingavailability string                            `json:"networkofferingavailability"`
-	Networkofferingconservemode bool                              `json:"networkofferingconservemode"`
-	Networkofferingdisplaytext  string                            `json:"networkofferingdisplaytext"`
-	Networkofferingid           string                            `json:"networkofferingid"`
-	Networkofferingname         string                            `json:"networkofferingname"`
-	Physicalnetworkid           string                            `json:"physicalnetworkid"`
-	Project                     string                            `json:"project"`
-	Projectid                   string                            `json:"projectid"`
-	Redundantrouter             bool                              `json:"redundantrouter"`
-	Related                     string                            `json:"related"`
-	Reservediprange             string                            `json:"reservediprange"`
-	Restartrequired             bool                              `json:"restartrequired"`
-	Service                     []CreateVPCResponseNetworkService `json:"service"`
-	Specifyipranges             bool                              `json:"specifyipranges"`
-	State                       string                            `json:"state"`
-	Strechedl2subnet            bool                              `json:"strechedl2subnet"`
-	Subdomainaccess             bool                              `json:"subdomainaccess"`
-	Tags                        []Tags                            `json:"tags"`
-	Traffictype                 string                            `json:"traffictype"`
-	Type                        string                            `json:"type"`
-	Vlan                        string                            `json:"vlan"`
-	Vpcid                       string                            `json:"vpcid"`
-	Vpcname                     string                            `json:"vpcname"`
-	Zoneid                      string                            `json:"zoneid"`
-	Zonename                    string                            `json:"zonename"`
-	Zonesnetworkspans           []interface{}                     `json:"zonesnetworkspans"`
-}
-
-type CreateVPCResponseNetworkService struct {
-	Capability []CreateVPCResponseNetworkServiceCapability `json:"capability"`
-	Name       string                                      `json:"name"`
-	Provider   []CreateVPCResponseNetworkServiceProvider   `json:"provider"`
-}
-
-type CreateVPCResponseNetworkServiceProvider struct {
-	Canenableindividualservice   bool     `json:"canenableindividualservice"`
-	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
-	Id                           string   `json:"id"`
-	Name                         string   `json:"name"`
-	Physicalnetworkid            string   `json:"physicalnetworkid"`
-	Servicelist                  []string `json:"servicelist"`
-	State                        string   `json:"state"`
-}
-
-type CreateVPCResponseNetworkServiceCapability struct {
-	Canchooseservicecapability bool   `json:"canchooseservicecapability"`
-	Name                       string `json:"name"`
-	Value                      string `json:"value"`
-}
-
 type CreateVPCOfferingParams struct {
 	p map[string]interface{}
 }
@@ -848,6 +772,10 @@ func (p *CreateVPCOfferingParams) toURLValues() url.Values {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("domainid", vv)
 	}
+	if v, found := p.p["enable"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("enable", vv)
+	}
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
@@ -909,6 +837,21 @@ func (p *CreateVPCOfferingParams) GetDomainid() ([]string, bool) {
 	return value, ok
 }
 
+func (p *CreateVPCOfferingParams) SetEnable(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["enable"] = v
+}
+
+func (p *CreateVPCOfferingParams) GetEnable() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["enable"].(bool)
+	return value, ok
+}
+
 func (p *CreateVPCOfferingParams) SetName(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2459,6 +2402,10 @@ func (p *ListVPCsParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("restartrequired", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
@@ -2692,6 +2639,21 @@ func (p *ListVPCsParams) GetRestartrequired() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListVPCsParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListVPCsParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListVPCsParams) SetState(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2887,11 +2849,13 @@ type VPC struct {
 	Domain               string               `json:"domain"`
 	Domainid             string               `json:"domainid"`
 	Fordisplay           bool                 `json:"fordisplay"`
+	Hasannotations       bool                 `json:"hasannotations"`
+	Icon                 string               `json:"icon"`
 	Id                   string               `json:"id"`
 	JobID                string               `json:"jobid"`
 	Jobstatus            int                  `json:"jobstatus"`
 	Name                 string               `json:"name"`
-	Network              []VPCNetwork         `json:"network"`
+	Network              []string             `json:"network"`
 	Networkdomain        string               `json:"networkdomain"`
 	Project              string               `json:"project"`
 	Projectid            string               `json:"projectid"`
@@ -2929,84 +2893,6 @@ type VPCServiceInternalCapability struct {
 	Value                      string `json:"value"`
 }
 
-type VPCNetwork struct {
-	Account                     string              `json:"account"`
-	Aclid                       string              `json:"aclid"`
-	Aclname                     string              `json:"aclname"`
-	Acltype                     string              `json:"acltype"`
-	Broadcastdomaintype         string              `json:"broadcastdomaintype"`
-	Broadcasturi                string              `json:"broadcasturi"`
-	Canusefordeploy             bool                `json:"canusefordeploy"`
-	Cidr                        string              `json:"cidr"`
-	Details                     map[string]string   `json:"details"`
-	Displaynetwork              bool                `json:"displaynetwork"`
-	Displaytext                 string              `json:"displaytext"`
-	Dns1                        string              `json:"dns1"`
-	Dns2                        string              `json:"dns2"`
-	Domain                      string              `json:"domain"`
-	Domainid                    string              `json:"domainid"`
-	Externalid                  string              `json:"externalid"`
-	Gateway                     string              `json:"gateway"`
-	Id                          string              `json:"id"`
-	Ip6cidr                     string              `json:"ip6cidr"`
-	Ip6gateway                  string              `json:"ip6gateway"`
-	Isdefault                   bool                `json:"isdefault"`
-	Ispersistent                bool                `json:"ispersistent"`
-	Issystem                    bool                `json:"issystem"`
-	Name                        string              `json:"name"`
-	Netmask                     string              `json:"netmask"`
-	Networkcidr                 string              `json:"networkcidr"`
-	Networkdomain               string              `json:"networkdomain"`
-	Networkofferingavailability string              `json:"networkofferingavailability"`
-	Networkofferingconservemode bool                `json:"networkofferingconservemode"`
-	Networkofferingdisplaytext  string              `json:"networkofferingdisplaytext"`
-	Networkofferingid           string              `json:"networkofferingid"`
-	Networkofferingname         string              `json:"networkofferingname"`
-	Physicalnetworkid           string              `json:"physicalnetworkid"`
-	Project                     string              `json:"project"`
-	Projectid                   string              `json:"projectid"`
-	Redundantrouter             bool                `json:"redundantrouter"`
-	Related                     string              `json:"related"`
-	Reservediprange             string              `json:"reservediprange"`
-	Restartrequired             bool                `json:"restartrequired"`
-	Service                     []VPCNetworkService `json:"service"`
-	Specifyipranges             bool                `json:"specifyipranges"`
-	State                       string              `json:"state"`
-	Strechedl2subnet            bool                `json:"strechedl2subnet"`
-	Subdomainaccess             bool                `json:"subdomainaccess"`
-	Tags                        []Tags              `json:"tags"`
-	Traffictype                 string              `json:"traffictype"`
-	Type                        string              `json:"type"`
-	Vlan                        string              `json:"vlan"`
-	Vpcid                       string              `json:"vpcid"`
-	Vpcname                     string              `json:"vpcname"`
-	Zoneid                      string              `json:"zoneid"`
-	Zonename                    string              `json:"zonename"`
-	Zonesnetworkspans           []interface{}       `json:"zonesnetworkspans"`
-}
-
-type VPCNetworkService struct {
-	Capability []VPCNetworkServiceCapability `json:"capability"`
-	Name       string                        `json:"name"`
-	Provider   []VPCNetworkServiceProvider   `json:"provider"`
-}
-
-type VPCNetworkServiceProvider struct {
-	Canenableindividualservice   bool     `json:"canenableindividualservice"`
-	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
-	Id                           string   `json:"id"`
-	Name                         string   `json:"name"`
-	Physicalnetworkid            string   `json:"physicalnetworkid"`
-	Servicelist                  []string `json:"servicelist"`
-	State                        string   `json:"state"`
-}
-
-type VPCNetworkServiceCapability struct {
-	Canchooseservicecapability bool   `json:"canchooseservicecapability"`
-	Name                       string `json:"name"`
-	Value                      string `json:"value"`
-}
-
 type RestartVPCParams struct {
 	p map[string]interface{}
 }
@@ -3106,11 +2992,6 @@ func (s *VPCService) RestartVPC(p *RestartVPCParams) (*RestartVPCResponse, error
 			return nil, err
 		}
 
-		b, err = getRawValue(b)
-		if err != nil {
-			return nil, err
-		}
-
 		if err := json.Unmarshal(b, &r); err != nil {
 			return nil, err
 		}
@@ -3120,132 +3001,10 @@ func (s *VPCService) RestartVPC(p *RestartVPCParams) (*RestartVPCResponse, error
 }
 
 type RestartVPCResponse struct {
-	Account              string                      `json:"account"`
-	Cidr                 string                      `json:"cidr"`
-	Created              string                      `json:"created"`
-	Displaytext          string                      `json:"displaytext"`
-	Distributedvpcrouter bool                        `json:"distributedvpcrouter"`
-	Domain               string                      `json:"domain"`
-	Domainid             string                      `json:"domainid"`
-	Fordisplay           bool                        `json:"fordisplay"`
-	Id                   string                      `json:"id"`
-	JobID                string                      `json:"jobid"`
-	Jobstatus            int                         `json:"jobstatus"`
-	Name                 string                      `json:"name"`
-	Network              []RestartVPCResponseNetwork `json:"network"`
-	Networkdomain        string                      `json:"networkdomain"`
-	Project              string                      `json:"project"`
-	Projectid            string                      `json:"projectid"`
-	Redundantvpcrouter   bool                        `json:"redundantvpcrouter"`
-	Regionlevelvpc       bool                        `json:"regionlevelvpc"`
-	Restartrequired      bool                        `json:"restartrequired"`
-	Service              []RestartVPCResponseService `json:"service"`
-	State                string                      `json:"state"`
-	Tags                 []Tags                      `json:"tags"`
-	Vpcofferingid        string                      `json:"vpcofferingid"`
-	Vpcofferingname      string                      `json:"vpcofferingname"`
-	Zoneid               string                      `json:"zoneid"`
-	Zonename             string                      `json:"zonename"`
-}
-
-type RestartVPCResponseService struct {
-	Capability []RestartVPCResponseServiceCapability `json:"capability"`
-	Name       string                                `json:"name"`
-	Provider   []RestartVPCResponseServiceProvider   `json:"provider"`
-}
-
-type RestartVPCResponseServiceProvider struct {
-	Canenableindividualservice   bool     `json:"canenableindividualservice"`
-	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
-	Id                           string   `json:"id"`
-	Name                         string   `json:"name"`
-	Physicalnetworkid            string   `json:"physicalnetworkid"`
-	Servicelist                  []string `json:"servicelist"`
-	State                        string   `json:"state"`
-}
-
-type RestartVPCResponseServiceCapability struct {
-	Canchooseservicecapability bool   `json:"canchooseservicecapability"`
-	Name                       string `json:"name"`
-	Value                      string `json:"value"`
-}
-
-type RestartVPCResponseNetwork struct {
-	Account                     string                             `json:"account"`
-	Aclid                       string                             `json:"aclid"`
-	Aclname                     string                             `json:"aclname"`
-	Acltype                     string                             `json:"acltype"`
-	Broadcastdomaintype         string                             `json:"broadcastdomaintype"`
-	Broadcasturi                string                             `json:"broadcasturi"`
-	Canusefordeploy             bool                               `json:"canusefordeploy"`
-	Cidr                        string                             `json:"cidr"`
-	Details                     map[string]string                  `json:"details"`
-	Displaynetwork              bool                               `json:"displaynetwork"`
-	Displaytext                 string                             `json:"displaytext"`
-	Dns1                        string                             `json:"dns1"`
-	Dns2                        string                             `json:"dns2"`
-	Domain                      string                             `json:"domain"`
-	Domainid                    string                             `json:"domainid"`
-	Externalid                  string                             `json:"externalid"`
-	Gateway                     string                             `json:"gateway"`
-	Id                          string                             `json:"id"`
-	Ip6cidr                     string                             `json:"ip6cidr"`
-	Ip6gateway                  string                             `json:"ip6gateway"`
-	Isdefault                   bool                               `json:"isdefault"`
-	Ispersistent                bool                               `json:"ispersistent"`
-	Issystem                    bool                               `json:"issystem"`
-	Name                        string                             `json:"name"`
-	Netmask                     string                             `json:"netmask"`
-	Networkcidr                 string                             `json:"networkcidr"`
-	Networkdomain               string                             `json:"networkdomain"`
-	Networkofferingavailability string                             `json:"networkofferingavailability"`
-	Networkofferingconservemode bool                               `json:"networkofferingconservemode"`
-	Networkofferingdisplaytext  string                             `json:"networkofferingdisplaytext"`
-	Networkofferingid           string                             `json:"networkofferingid"`
-	Networkofferingname         string                             `json:"networkofferingname"`
-	Physicalnetworkid           string                             `json:"physicalnetworkid"`
-	Project                     string                             `json:"project"`
-	Projectid                   string                             `json:"projectid"`
-	Redundantrouter             bool                               `json:"redundantrouter"`
-	Related                     string                             `json:"related"`
-	Reservediprange             string                             `json:"reservediprange"`
-	Restartrequired             bool                               `json:"restartrequired"`
-	Service                     []RestartVPCResponseNetworkService `json:"service"`
-	Specifyipranges             bool                               `json:"specifyipranges"`
-	State                       string                             `json:"state"`
-	Strechedl2subnet            bool                               `json:"strechedl2subnet"`
-	Subdomainaccess             bool                               `json:"subdomainaccess"`
-	Tags                        []Tags                             `json:"tags"`
-	Traffictype                 string                             `json:"traffictype"`
-	Type                        string                             `json:"type"`
-	Vlan                        string                             `json:"vlan"`
-	Vpcid                       string                             `json:"vpcid"`
-	Vpcname                     string                             `json:"vpcname"`
-	Zoneid                      string                             `json:"zoneid"`
-	Zonename                    string                             `json:"zonename"`
-	Zonesnetworkspans           []interface{}                      `json:"zonesnetworkspans"`
-}
-
-type RestartVPCResponseNetworkService struct {
-	Capability []RestartVPCResponseNetworkServiceCapability `json:"capability"`
-	Name       string                                       `json:"name"`
-	Provider   []RestartVPCResponseNetworkServiceProvider   `json:"provider"`
-}
-
-type RestartVPCResponseNetworkServiceProvider struct {
-	Canenableindividualservice   bool     `json:"canenableindividualservice"`
-	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
-	Id                           string   `json:"id"`
-	Name                         string   `json:"name"`
-	Physicalnetworkid            string   `json:"physicalnetworkid"`
-	Servicelist                  []string `json:"servicelist"`
-	State                        string   `json:"state"`
-}
-
-type RestartVPCResponseNetworkServiceCapability struct {
-	Canchooseservicecapability bool   `json:"canchooseservicecapability"`
-	Name                       string `json:"name"`
-	Value                      string `json:"value"`
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
 }
 
 type UpdateVPCParams struct {
@@ -3404,11 +3163,13 @@ type UpdateVPCResponse struct {
 	Domain               string                     `json:"domain"`
 	Domainid             string                     `json:"domainid"`
 	Fordisplay           bool                       `json:"fordisplay"`
+	Hasannotations       bool                       `json:"hasannotations"`
+	Icon                 string                     `json:"icon"`
 	Id                   string                     `json:"id"`
 	JobID                string                     `json:"jobid"`
 	Jobstatus            int                        `json:"jobstatus"`
 	Name                 string                     `json:"name"`
-	Network              []UpdateVPCResponseNetwork `json:"network"`
+	Network              []string                   `json:"network"`
 	Networkdomain        string                     `json:"networkdomain"`
 	Project              string                     `json:"project"`
 	Projectid            string                     `json:"projectid"`
@@ -3446,84 +3207,6 @@ type UpdateVPCResponseServiceCapability struct {
 	Value                      string `json:"value"`
 }
 
-type UpdateVPCResponseNetwork struct {
-	Account                     string                            `json:"account"`
-	Aclid                       string                            `json:"aclid"`
-	Aclname                     string                            `json:"aclname"`
-	Acltype                     string                            `json:"acltype"`
-	Broadcastdomaintype         string                            `json:"broadcastdomaintype"`
-	Broadcasturi                string                            `json:"broadcasturi"`
-	Canusefordeploy             bool                              `json:"canusefordeploy"`
-	Cidr                        string                            `json:"cidr"`
-	Details                     map[string]string                 `json:"details"`
-	Displaynetwork              bool                              `json:"displaynetwork"`
-	Displaytext                 string                            `json:"displaytext"`
-	Dns1                        string                            `json:"dns1"`
-	Dns2                        string                            `json:"dns2"`
-	Domain                      string                            `json:"domain"`
-	Domainid                    string                            `json:"domainid"`
-	Externalid                  string                            `json:"externalid"`
-	Gateway                     string                            `json:"gateway"`
-	Id                          string                            `json:"id"`
-	Ip6cidr                     string                            `json:"ip6cidr"`
-	Ip6gateway                  string                            `json:"ip6gateway"`
-	Isdefault                   bool                              `json:"isdefault"`
-	Ispersistent                bool                              `json:"ispersistent"`
-	Issystem                    bool                              `json:"issystem"`
-	Name                        string                            `json:"name"`
-	Netmask                     string                            `json:"netmask"`
-	Networkcidr                 string                            `json:"networkcidr"`
-	Networkdomain               string                            `json:"networkdomain"`
-	Networkofferingavailability string                            `json:"networkofferingavailability"`
-	Networkofferingconservemode bool                              `json:"networkofferingconservemode"`
-	Networkofferingdisplaytext  string                            `json:"networkofferingdisplaytext"`
-	Networkofferingid           string                            `json:"networkofferingid"`
-	Networkofferingname         string                            `json:"networkofferingname"`
-	Physicalnetworkid           string                            `json:"physicalnetworkid"`
-	Project                     string                            `json:"project"`
-	Projectid                   string                            `json:"projectid"`
-	Redundantrouter             bool                              `json:"redundantrouter"`
-	Related                     string                            `json:"related"`
-	Reservediprange             string                            `json:"reservediprange"`
-	Restartrequired             bool                              `json:"restartrequired"`
-	Service                     []UpdateVPCResponseNetworkService `json:"service"`
-	Specifyipranges             bool                              `json:"specifyipranges"`
-	State                       string                            `json:"state"`
-	Strechedl2subnet            bool                              `json:"strechedl2subnet"`
-	Subdomainaccess             bool                              `json:"subdomainaccess"`
-	Tags                        []Tags                            `json:"tags"`
-	Traffictype                 string                            `json:"traffictype"`
-	Type                        string                            `json:"type"`
-	Vlan                        string                            `json:"vlan"`
-	Vpcid                       string                            `json:"vpcid"`
-	Vpcname                     string                            `json:"vpcname"`
-	Zoneid                      string                            `json:"zoneid"`
-	Zonename                    string                            `json:"zonename"`
-	Zonesnetworkspans           []interface{}                     `json:"zonesnetworkspans"`
-}
-
-type UpdateVPCResponseNetworkService struct {
-	Capability []UpdateVPCResponseNetworkServiceCapability `json:"capability"`
-	Name       string                                      `json:"name"`
-	Provider   []UpdateVPCResponseNetworkServiceProvider   `json:"provider"`
-}
-
-type UpdateVPCResponseNetworkServiceProvider struct {
-	Canenableindividualservice   bool     `json:"canenableindividualservice"`
-	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
-	Id                           string   `json:"id"`
-	Name                         string   `json:"name"`
-	Physicalnetworkid            string   `json:"physicalnetworkid"`
-	Servicelist                  []string `json:"servicelist"`
-	State                        string   `json:"state"`
-}
-
-type UpdateVPCResponseNetworkServiceCapability struct {
-	Canchooseservicecapability bool   `json:"canchooseservicecapability"`
-	Name                       string `json:"name"`
-	Value                      string `json:"value"`
-}
-
 type UpdateVPCOfferingParams struct {
 	p map[string]interface{}
 }
diff --git a/examples/AddHost.go b/cloudstack/VPCService_test.go
similarity index 52%
copy from examples/AddHost.go
copy to cloudstack/VPCService_test.go
index 20b8fcf..80231bc 100644
--- a/examples/AddHost.go
+++ b/cloudstack/VPCService_test.go
@@ -17,28 +17,32 @@
 // under the License.
 //
 
-package main
+package cloudstack
 
 import (
-	"encoding/json"
 	"fmt"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
-	"log"
+	"net/http"
+	"net/http/httptest"
+	"testing"
 )
 
-func main()  {
-	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
-	p := cs.Host.NewAddHostParams("Simulator", "password", PodId,
-		"http://sim/c0/h0", "root", ZoneId)
-	resp, err := cs.Host.AddHost(p)
+func TestVPCService_RestartVPC(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+		apiName := "restartVPC"
+		response, err := ParseAsyncResponse(apiName, "VPCService", *request)
+		if err != nil {
+			t.Errorf("Failed to parse response, due to: %v", err)
+		}
+		fmt.Fprintln(writer, response)
+	}))
+	defer server.Close()
+	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
+	params := client.VPC.NewRestartVPCParams("f9ec95f3-70be-448a-8ba2-cb6388dce55a")
+	resp, err := client.VPC.RestartVPC(params)
 	if err != nil {
-		fmt.Errorf("Failed to add host due to: %v", err)
+		t.Errorf("Failed to restart VPC network due to: %v", err)
 	}
-
-	b, err := json.MarshalIndent(resp, "", "    ")
-	if err != nil {
-		log.Printf("%v", err)
-		return
+	if resp == nil {
+		t.Errorf("Failed to restart VPC network")
 	}
-	log.Printf("Host response : %v", string(b))
-}
\ No newline at end of file
+}
diff --git a/cloudstack/VPNService.go b/cloudstack/VPNService.go
index 04de5ce..741b935 100644
--- a/cloudstack/VPNService.go
+++ b/cloudstack/VPNService.go
@@ -926,6 +926,7 @@ type CreateVpnCustomerGatewayResponse struct {
 	Esppolicy        string `json:"esppolicy"`
 	Forceencap       bool   `json:"forceencap"`
 	Gateway          string `json:"gateway"`
+	Hasannotations   bool   `json:"hasannotations"`
 	Id               string `json:"id"`
 	Ikelifetime      int64  `json:"ikelifetime"`
 	Ikepolicy        string `json:"ikepolicy"`
@@ -2270,6 +2271,7 @@ type VpnCustomerGateway struct {
 	Esppolicy        string `json:"esppolicy"`
 	Forceencap       bool   `json:"forceencap"`
 	Gateway          string `json:"gateway"`
+	Hasannotations   bool   `json:"hasannotations"`
 	Id               string `json:"id"`
 	Ikelifetime      int64  `json:"ikelifetime"`
 	Ikepolicy        string `json:"ikepolicy"`
@@ -3732,6 +3734,7 @@ type UpdateVpnCustomerGatewayResponse struct {
 	Esppolicy        string `json:"esppolicy"`
 	Forceencap       bool   `json:"forceencap"`
 	Gateway          string `json:"gateway"`
+	Hasannotations   bool   `json:"hasannotations"`
 	Id               string `json:"id"`
 	Ikelifetime      int64  `json:"ikelifetime"`
 	Ikepolicy        string `json:"ikepolicy"`
diff --git a/examples/AddHost.go b/cloudstack/VPNService_test.go
similarity index 51%
copy from examples/AddHost.go
copy to cloudstack/VPNService_test.go
index 20b8fcf..41acffc 100644
--- a/examples/AddHost.go
+++ b/cloudstack/VPNService_test.go
@@ -17,28 +17,34 @@
 // under the License.
 //
 
-package main
+package cloudstack
 
 import (
-	"encoding/json"
 	"fmt"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
-	"log"
+	"net/http"
+	"net/http/httptest"
+	"testing"
 )
 
-func main()  {
-	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
-	p := cs.Host.NewAddHostParams("Simulator", "password", PodId,
-		"http://sim/c0/h0", "root", ZoneId)
-	resp, err := cs.Host.AddHost(p)
+func TestVPNService_DeleteRemoteAccessVpn(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+		apiName := "deleteRemoteAccessVpn"
+		response, err := ParseAsyncResponse(apiName, "VPNService", *request)
+		if err != nil {
+			t.Errorf("Failed to parse response, due to: %v", err)
+		}
+		fmt.Fprintf(writer, response)
+	}))
+	defer server.Close()
+	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
+	params := client.VPN.NewDeleteRemoteAccessVpnParams("8dcd19e9-dbe6-4576-9602-4c3350918983")
+	resp, err := client.VPN.DeleteRemoteAccessVpn(params)
 	if err != nil {
-		fmt.Errorf("Failed to add host due to: %v", err)
+		t.Errorf("Failed to delete remote access VPN due to: %v", err)
+		return
 	}
 
-	b, err := json.MarshalIndent(resp, "", "    ")
-	if err != nil {
-		log.Printf("%v", err)
-		return
+	if resp == nil {
+		t.Errorf("Failed to update project name")
 	}
-	log.Printf("Host response : %v", string(b))
-}
\ No newline at end of file
+}
diff --git a/cloudstack/VirtualMachineService.go b/cloudstack/VirtualMachineService.go
index f271134..88b55fd 100644
--- a/cloudstack/VirtualMachineService.go
+++ b/cloudstack/VirtualMachineService.go
@@ -57,7 +57,7 @@ type VirtualMachineServiceIface interface {
 	MigrateVirtualMachine(p *MigrateVirtualMachineParams) (*MigrateVirtualMachineResponse, error)
 	NewMigrateVirtualMachineParams(virtualmachineid string) *MigrateVirtualMachineParams
 	MigrateVirtualMachineWithVolume(p *MigrateVirtualMachineWithVolumeParams) (*MigrateVirtualMachineWithVolumeResponse, error)
-	NewMigrateVirtualMachineWithVolumeParams(hostid string, virtualmachineid string) *MigrateVirtualMachineWithVolumeParams
+	NewMigrateVirtualMachineWithVolumeParams(virtualmachineid string) *MigrateVirtualMachineWithVolumeParams
 	RebootVirtualMachine(p *RebootVirtualMachineParams) (*RebootVirtualMachineResponse, error)
 	NewRebootVirtualMachineParams(id string) *RebootVirtualMachineParams
 	RecoverVirtualMachine(p *RecoverVirtualMachineParams) (*RecoverVirtualMachineResponse, error)
@@ -258,9 +258,11 @@ type AddNicToVirtualMachineResponse struct {
 	Groupid               string                                        `json:"groupid"`
 	Guestosid             string                                        `json:"guestosid"`
 	Haenable              bool                                          `json:"haenable"`
+	Hasannotations        bool                                          `json:"hasannotations"`
 	Hostid                string                                        `json:"hostid"`
 	Hostname              string                                        `json:"hostname"`
 	Hypervisor            string                                        `json:"hypervisor"`
+	Icon                  string                                        `json:"icon"`
 	Id                    string                                        `json:"id"`
 	Instancename          string                                        `json:"instancename"`
 	Isdynamicallyscalable bool                                          `json:"isdynamicallyscalable"`
@@ -270,6 +272,7 @@ type AddNicToVirtualMachineResponse struct {
 	JobID                 string                                        `json:"jobid"`
 	Jobstatus             int                                           `json:"jobstatus"`
 	Keypair               string                                        `json:"keypair"`
+	Lastupdated           string                                        `json:"lastupdated"`
 	Memory                int                                           `json:"memory"`
 	Memoryintfreekbs      int64                                         `json:"memoryintfreekbs"`
 	Memorykbs             int64                                         `json:"memorykbs"`
@@ -282,14 +285,17 @@ type AddNicToVirtualMachineResponse struct {
 	Ostypeid              string                                        `json:"ostypeid"`
 	Password              string                                        `json:"password"`
 	Passwordenabled       bool                                          `json:"passwordenabled"`
+	Pooltype              string                                        `json:"pooltype"`
 	Project               string                                        `json:"project"`
 	Projectid             string                                        `json:"projectid"`
 	Publicip              string                                        `json:"publicip"`
 	Publicipid            string                                        `json:"publicipid"`
-	Readonlyuidetails     string                                        `json:"readonlyuidetails"`
+	Readonlydetails       string                                        `json:"readonlydetails"`
+	Receivedbytes         int64                                         `json:"receivedbytes"`
 	Rootdeviceid          int64                                         `json:"rootdeviceid"`
 	Rootdevicetype        string                                        `json:"rootdevicetype"`
 	Securitygroup         []AddNicToVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                         `json:"sentbytes"`
 	Serviceofferingid     string                                        `json:"serviceofferingid"`
 	Serviceofferingname   string                                        `json:"serviceofferingname"`
 	Servicestate          string                                        `json:"servicestate"`
@@ -547,9 +553,11 @@ type AssignVirtualMachineResponse struct {
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
 	Haenable              bool                                        `json:"haenable"`
+	Hasannotations        bool                                        `json:"hasannotations"`
 	Hostid                string                                      `json:"hostid"`
 	Hostname              string                                      `json:"hostname"`
 	Hypervisor            string                                      `json:"hypervisor"`
+	Icon                  string                                      `json:"icon"`
 	Id                    string                                      `json:"id"`
 	Instancename          string                                      `json:"instancename"`
 	Isdynamicallyscalable bool                                        `json:"isdynamicallyscalable"`
@@ -559,6 +567,7 @@ type AssignVirtualMachineResponse struct {
 	JobID                 string                                      `json:"jobid"`
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
+	Lastupdated           string                                      `json:"lastupdated"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -571,14 +580,17 @@ type AssignVirtualMachineResponse struct {
 	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
+	Pooltype              string                                      `json:"pooltype"`
 	Project               string                                      `json:"project"`
 	Projectid             string                                      `json:"projectid"`
 	Publicip              string                                      `json:"publicip"`
 	Publicipid            string                                      `json:"publicipid"`
-	Readonlyuidetails     string                                      `json:"readonlyuidetails"`
+	Readonlydetails       string                                      `json:"readonlydetails"`
+	Receivedbytes         int64                                       `json:"receivedbytes"`
 	Rootdeviceid          int64                                       `json:"rootdeviceid"`
 	Rootdevicetype        string                                      `json:"rootdevicetype"`
 	Securitygroup         []AssignVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                       `json:"sentbytes"`
 	Serviceofferingid     string                                      `json:"serviceofferingid"`
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
@@ -742,7 +754,7 @@ func (s *VirtualMachineService) NewChangeServiceForVirtualMachineParams(id strin
 	return p
 }
 
-// Changes the service offering for a virtual machine. The virtual machine must be in a "Stopped" state for this command to take effect.
+// Changes the service offering for a virtual machine. The virtual machine must be in a "Stopped" state for this command to take effect. Note that it only changes the VM's compute offering and it does not update the root volume offering. If the Service Offering has a root disk size the volume will be resized only if using API command 'scaleVirtualMachine'.
 func (s *VirtualMachineService) ChangeServiceForVirtualMachine(p *ChangeServiceForVirtualMachineParams) (*ChangeServiceForVirtualMachineResponse, error) {
 	resp, err := s.cs.newRequest("changeServiceForVirtualMachine", p.toURLValues())
 	if err != nil {
@@ -784,9 +796,11 @@ type ChangeServiceForVirtualMachineResponse struct {
 	Groupid               string                                                `json:"groupid"`
 	Guestosid             string                                                `json:"guestosid"`
 	Haenable              bool                                                  `json:"haenable"`
+	Hasannotations        bool                                                  `json:"hasannotations"`
 	Hostid                string                                                `json:"hostid"`
 	Hostname              string                                                `json:"hostname"`
 	Hypervisor            string                                                `json:"hypervisor"`
+	Icon                  string                                                `json:"icon"`
 	Id                    string                                                `json:"id"`
 	Instancename          string                                                `json:"instancename"`
 	Isdynamicallyscalable bool                                                  `json:"isdynamicallyscalable"`
@@ -796,6 +810,7 @@ type ChangeServiceForVirtualMachineResponse struct {
 	JobID                 string                                                `json:"jobid"`
 	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypair               string                                                `json:"keypair"`
+	Lastupdated           string                                                `json:"lastupdated"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                 `json:"memorykbs"`
@@ -808,14 +823,17 @@ type ChangeServiceForVirtualMachineResponse struct {
 	Ostypeid              string                                                `json:"ostypeid"`
 	Password              string                                                `json:"password"`
 	Passwordenabled       bool                                                  `json:"passwordenabled"`
+	Pooltype              string                                                `json:"pooltype"`
 	Project               string                                                `json:"project"`
 	Projectid             string                                                `json:"projectid"`
 	Publicip              string                                                `json:"publicip"`
 	Publicipid            string                                                `json:"publicipid"`
-	Readonlyuidetails     string                                                `json:"readonlyuidetails"`
+	Readonlydetails       string                                                `json:"readonlydetails"`
+	Receivedbytes         int64                                                 `json:"receivedbytes"`
 	Rootdeviceid          int64                                                 `json:"rootdeviceid"`
 	Rootdevicetype        string                                                `json:"rootdevicetype"`
 	Securitygroup         []ChangeServiceForVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                                 `json:"sentbytes"`
 	Serviceofferingid     string                                                `json:"serviceofferingid"`
 	Serviceofferingname   string                                                `json:"serviceofferingname"`
 	Servicestate          string                                                `json:"servicestate"`
@@ -1034,6 +1052,10 @@ func (p *DeployVirtualMachineParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["dynamicscalingenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("dynamicscalingenabled", vv)
+	}
 	if v, found := p.p["extraconfig"]; found {
 		u.Set("extraconfig", v.(string))
 	}
@@ -1401,6 +1423,21 @@ func (p *DeployVirtualMachineParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *DeployVirtualMachineParams) SetDynamicscalingenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["dynamicscalingenabled"] = v
+}
+
+func (p *DeployVirtualMachineParams) GetDynamicscalingenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["dynamicscalingenabled"].(bool)
+	return value, ok
+}
+
 func (p *DeployVirtualMachineParams) SetExtraconfig(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1877,9 +1914,11 @@ type DeployVirtualMachineResponse struct {
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
 	Haenable              bool                                        `json:"haenable"`
+	Hasannotations        bool                                        `json:"hasannotations"`
 	Hostid                string                                      `json:"hostid"`
 	Hostname              string                                      `json:"hostname"`
 	Hypervisor            string                                      `json:"hypervisor"`
+	Icon                  string                                      `json:"icon"`
 	Id                    string                                      `json:"id"`
 	Instancename          string                                      `json:"instancename"`
 	Isdynamicallyscalable bool                                        `json:"isdynamicallyscalable"`
@@ -1889,6 +1928,7 @@ type DeployVirtualMachineResponse struct {
 	JobID                 string                                      `json:"jobid"`
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
+	Lastupdated           string                                      `json:"lastupdated"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -1901,14 +1941,17 @@ type DeployVirtualMachineResponse struct {
 	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
+	Pooltype              string                                      `json:"pooltype"`
 	Project               string                                      `json:"project"`
 	Projectid             string                                      `json:"projectid"`
 	Publicip              string                                      `json:"publicip"`
 	Publicipid            string                                      `json:"publicipid"`
-	Readonlyuidetails     string                                      `json:"readonlyuidetails"`
+	Readonlydetails       string                                      `json:"readonlydetails"`
+	Receivedbytes         int64                                       `json:"receivedbytes"`
 	Rootdeviceid          int64                                       `json:"rootdeviceid"`
 	Rootdevicetype        string                                      `json:"rootdevicetype"`
 	Securitygroup         []DeployVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                       `json:"sentbytes"`
 	Serviceofferingid     string                                      `json:"serviceofferingid"`
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
@@ -2132,9 +2175,11 @@ type DestroyVirtualMachineResponse struct {
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
 	Haenable              bool                                         `json:"haenable"`
+	Hasannotations        bool                                         `json:"hasannotations"`
 	Hostid                string                                       `json:"hostid"`
 	Hostname              string                                       `json:"hostname"`
 	Hypervisor            string                                       `json:"hypervisor"`
+	Icon                  string                                       `json:"icon"`
 	Id                    string                                       `json:"id"`
 	Instancename          string                                       `json:"instancename"`
 	Isdynamicallyscalable bool                                         `json:"isdynamicallyscalable"`
@@ -2144,6 +2189,7 @@ type DestroyVirtualMachineResponse struct {
 	JobID                 string                                       `json:"jobid"`
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
+	Lastupdated           string                                       `json:"lastupdated"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -2156,14 +2202,17 @@ type DestroyVirtualMachineResponse struct {
 	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
+	Pooltype              string                                       `json:"pooltype"`
 	Project               string                                       `json:"project"`
 	Projectid             string                                       `json:"projectid"`
 	Publicip              string                                       `json:"publicip"`
 	Publicipid            string                                       `json:"publicipid"`
-	Readonlyuidetails     string                                       `json:"readonlyuidetails"`
+	Readonlydetails       string                                       `json:"readonlydetails"`
+	Receivedbytes         int64                                        `json:"receivedbytes"`
 	Rootdeviceid          int64                                        `json:"rootdeviceid"`
 	Rootdevicetype        string                                       `json:"rootdevicetype"`
 	Securitygroup         []DestroyVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                        `json:"sentbytes"`
 	Serviceofferingid     string                                       `json:"serviceofferingid"`
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
@@ -2399,6 +2448,9 @@ func (p *ListVirtualMachinesParams) toURLValues() url.Values {
 	if v, found := p.p["affinitygroupid"]; found {
 		u.Set("affinitygroupid", v.(string))
 	}
+	if v, found := p.p["clusterid"]; found {
+		u.Set("clusterid", v.(string))
+	}
 	if v, found := p.p["details"]; found {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("details", vv)
@@ -2483,6 +2535,10 @@ func (p *ListVirtualMachinesParams) toURLValues() url.Values {
 	if v, found := p.p["serviceofferingid"]; found {
 		u.Set("serviceofferingid", v.(string))
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
@@ -2544,6 +2600,21 @@ func (p *ListVirtualMachinesParams) GetAffinitygroupid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesParams) SetClusterid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["clusterid"] = v
+}
+
+func (p *ListVirtualMachinesParams) GetClusterid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["clusterid"].(string)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesParams) SetDetails(v []string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2889,6 +2960,21 @@ func (p *ListVirtualMachinesParams) GetServiceofferingid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListVirtualMachinesParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesParams) SetState(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3132,9 +3218,11 @@ type VirtualMachine struct {
 	Groupid               string                        `json:"groupid"`
 	Guestosid             string                        `json:"guestosid"`
 	Haenable              bool                          `json:"haenable"`
+	Hasannotations        bool                          `json:"hasannotations"`
 	Hostid                string                        `json:"hostid"`
 	Hostname              string                        `json:"hostname"`
 	Hypervisor            string                        `json:"hypervisor"`
+	Icon                  string                        `json:"icon"`
 	Id                    string                        `json:"id"`
 	Instancename          string                        `json:"instancename"`
 	Isdynamicallyscalable bool                          `json:"isdynamicallyscalable"`
@@ -3144,6 +3232,7 @@ type VirtualMachine struct {
 	JobID                 string                        `json:"jobid"`
 	Jobstatus             int                           `json:"jobstatus"`
 	Keypair               string                        `json:"keypair"`
+	Lastupdated           string                        `json:"lastupdated"`
 	Memory                int                           `json:"memory"`
 	Memoryintfreekbs      int64                         `json:"memoryintfreekbs"`
 	Memorykbs             int64                         `json:"memorykbs"`
@@ -3156,14 +3245,17 @@ type VirtualMachine struct {
 	Ostypeid              string                        `json:"ostypeid"`
 	Password              string                        `json:"password"`
 	Passwordenabled       bool                          `json:"passwordenabled"`
+	Pooltype              string                        `json:"pooltype"`
 	Project               string                        `json:"project"`
 	Projectid             string                        `json:"projectid"`
 	Publicip              string                        `json:"publicip"`
 	Publicipid            string                        `json:"publicipid"`
-	Readonlyuidetails     string                        `json:"readonlyuidetails"`
+	Readonlydetails       string                        `json:"readonlydetails"`
+	Receivedbytes         int64                         `json:"receivedbytes"`
 	Rootdeviceid          int64                         `json:"rootdeviceid"`
 	Rootdevicetype        string                        `json:"rootdevicetype"`
 	Securitygroup         []VirtualMachineSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                         `json:"sentbytes"`
 	Serviceofferingid     string                        `json:"serviceofferingid"`
 	Serviceofferingname   string                        `json:"serviceofferingname"`
 	Servicestate          string                        `json:"servicestate"`
@@ -3341,6 +3433,10 @@ func (p *ListVirtualMachinesMetricsParams) toURLValues() url.Values {
 	if v, found := p.p["serviceofferingid"]; found {
 		u.Set("serviceofferingid", v.(string))
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
@@ -3744,6 +3840,21 @@ func (p *ListVirtualMachinesMetricsParams) GetServiceofferingid() (string, bool)
 	return value, ok
 }
 
+func (p *ListVirtualMachinesMetricsParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListVirtualMachinesMetricsParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesMetricsParams) SetState(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3991,9 +4102,11 @@ type VirtualMachinesMetric struct {
 	Groupid               string                               `json:"groupid"`
 	Guestosid             string                               `json:"guestosid"`
 	Haenable              bool                                 `json:"haenable"`
+	Hasannotations        bool                                 `json:"hasannotations"`
 	Hostid                string                               `json:"hostid"`
 	Hostname              string                               `json:"hostname"`
 	Hypervisor            string                               `json:"hypervisor"`
+	Icon                  string                               `json:"icon"`
 	Id                    string                               `json:"id"`
 	Instancename          string                               `json:"instancename"`
 	Ipaddress             string                               `json:"ipaddress"`
@@ -4004,6 +4117,7 @@ type VirtualMachinesMetric struct {
 	JobID                 string                               `json:"jobid"`
 	Jobstatus             int                                  `json:"jobstatus"`
 	Keypair               string                               `json:"keypair"`
+	Lastupdated           string                               `json:"lastupdated"`
 	Memory                int                                  `json:"memory"`
 	Memoryintfreekbs      int64                                `json:"memoryintfreekbs"`
 	Memorykbs             int64                                `json:"memorykbs"`
@@ -4019,14 +4133,17 @@ type VirtualMachinesMetric struct {
 	Ostypeid              string                               `json:"ostypeid"`
 	Password              string                               `json:"password"`
 	Passwordenabled       bool                                 `json:"passwordenabled"`
+	Pooltype              string                               `json:"pooltype"`
 	Project               string                               `json:"project"`
 	Projectid             string                               `json:"projectid"`
 	Publicip              string                               `json:"publicip"`
 	Publicipid            string                               `json:"publicipid"`
-	Readonlyuidetails     string                               `json:"readonlyuidetails"`
+	Readonlydetails       string                               `json:"readonlydetails"`
+	Receivedbytes         int64                                `json:"receivedbytes"`
 	Rootdeviceid          int64                                `json:"rootdeviceid"`
 	Rootdevicetype        string                               `json:"rootdevicetype"`
 	Securitygroup         []VirtualMachinesMetricSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                `json:"sentbytes"`
 	Serviceofferingid     string                               `json:"serviceofferingid"`
 	Serviceofferingname   string                               `json:"serviceofferingname"`
 	Servicestate          string                               `json:"servicestate"`
@@ -4120,6 +4237,10 @@ func (p *MigrateVirtualMachineParams) toURLValues() url.Values {
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["autoselect"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("autoselect", vv)
+	}
 	if v, found := p.p["hostid"]; found {
 		u.Set("hostid", v.(string))
 	}
@@ -4132,6 +4253,21 @@ func (p *MigrateVirtualMachineParams) toURLValues() url.Values {
 	return u
 }
 
+func (p *MigrateVirtualMachineParams) SetAutoselect(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["autoselect"] = v
+}
+
+func (p *MigrateVirtualMachineParams) GetAutoselect() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["autoselect"].(bool)
+	return value, ok
+}
+
 func (p *MigrateVirtualMachineParams) SetHostid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4248,9 +4384,11 @@ type MigrateVirtualMachineResponse struct {
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
 	Haenable              bool                                         `json:"haenable"`
+	Hasannotations        bool                                         `json:"hasannotations"`
 	Hostid                string                                       `json:"hostid"`
 	Hostname              string                                       `json:"hostname"`
 	Hypervisor            string                                       `json:"hypervisor"`
+	Icon                  string                                       `json:"icon"`
 	Id                    string                                       `json:"id"`
 	Instancename          string                                       `json:"instancename"`
 	Isdynamicallyscalable bool                                         `json:"isdynamicallyscalable"`
@@ -4260,6 +4398,7 @@ type MigrateVirtualMachineResponse struct {
 	JobID                 string                                       `json:"jobid"`
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
+	Lastupdated           string                                       `json:"lastupdated"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -4272,14 +4411,17 @@ type MigrateVirtualMachineResponse struct {
 	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
+	Pooltype              string                                       `json:"pooltype"`
 	Project               string                                       `json:"project"`
 	Projectid             string                                       `json:"projectid"`
 	Publicip              string                                       `json:"publicip"`
 	Publicipid            string                                       `json:"publicipid"`
-	Readonlyuidetails     string                                       `json:"readonlyuidetails"`
+	Readonlydetails       string                                       `json:"readonlydetails"`
+	Receivedbytes         int64                                        `json:"receivedbytes"`
 	Rootdeviceid          int64                                        `json:"rootdeviceid"`
 	Rootdevicetype        string                                       `json:"rootdevicetype"`
 	Securitygroup         []MigrateVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                        `json:"sentbytes"`
 	Serviceofferingid     string                                       `json:"serviceofferingid"`
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
@@ -4451,10 +4593,9 @@ func (p *MigrateVirtualMachineWithVolumeParams) GetVirtualmachineid() (string, b
 
 // You should always use this function to get a new MigrateVirtualMachineWithVolumeParams instance,
 // as then you are sure you have configured all required params
-func (s *VirtualMachineService) NewMigrateVirtualMachineWithVolumeParams(hostid string, virtualmachineid string) *MigrateVirtualMachineWithVolumeParams {
+func (s *VirtualMachineService) NewMigrateVirtualMachineWithVolumeParams(virtualmachineid string) *MigrateVirtualMachineWithVolumeParams {
 	p := &MigrateVirtualMachineWithVolumeParams{}
 	p.p = make(map[string]interface{})
-	p.p["hostid"] = hostid
 	p.p["virtualmachineid"] = virtualmachineid
 	return p
 }
@@ -4521,9 +4662,11 @@ type MigrateVirtualMachineWithVolumeResponse struct {
 	Groupid               string                                                 `json:"groupid"`
 	Guestosid             string                                                 `json:"guestosid"`
 	Haenable              bool                                                   `json:"haenable"`
+	Hasannotations        bool                                                   `json:"hasannotations"`
 	Hostid                string                                                 `json:"hostid"`
 	Hostname              string                                                 `json:"hostname"`
 	Hypervisor            string                                                 `json:"hypervisor"`
+	Icon                  string                                                 `json:"icon"`
 	Id                    string                                                 `json:"id"`
 	Instancename          string                                                 `json:"instancename"`
 	Isdynamicallyscalable bool                                                   `json:"isdynamicallyscalable"`
@@ -4533,6 +4676,7 @@ type MigrateVirtualMachineWithVolumeResponse struct {
 	JobID                 string                                                 `json:"jobid"`
 	Jobstatus             int                                                    `json:"jobstatus"`
 	Keypair               string                                                 `json:"keypair"`
+	Lastupdated           string                                                 `json:"lastupdated"`
 	Memory                int                                                    `json:"memory"`
 	Memoryintfreekbs      int64                                                  `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                  `json:"memorykbs"`
@@ -4545,14 +4689,17 @@ type MigrateVirtualMachineWithVolumeResponse struct {
 	Ostypeid              string                                                 `json:"ostypeid"`
 	Password              string                                                 `json:"password"`
 	Passwordenabled       bool                                                   `json:"passwordenabled"`
+	Pooltype              string                                                 `json:"pooltype"`
 	Project               string                                                 `json:"project"`
 	Projectid             string                                                 `json:"projectid"`
 	Publicip              string                                                 `json:"publicip"`
 	Publicipid            string                                                 `json:"publicipid"`
-	Readonlyuidetails     string                                                 `json:"readonlyuidetails"`
+	Readonlydetails       string                                                 `json:"readonlydetails"`
+	Receivedbytes         int64                                                  `json:"receivedbytes"`
 	Rootdeviceid          int64                                                  `json:"rootdeviceid"`
 	Rootdevicetype        string                                                 `json:"rootdevicetype"`
 	Securitygroup         []MigrateVirtualMachineWithVolumeResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                                  `json:"sentbytes"`
 	Serviceofferingid     string                                                 `json:"serviceofferingid"`
 	Serviceofferingname   string                                                 `json:"serviceofferingname"`
 	Servicestate          string                                                 `json:"servicestate"`
@@ -4650,6 +4797,10 @@ func (p *RebootVirtualMachineParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("bootintosetup", vv)
 	}
+	if v, found := p.p["forced"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forced", vv)
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
@@ -4671,6 +4822,21 @@ func (p *RebootVirtualMachineParams) GetBootintosetup() (bool, bool) {
 	return value, ok
 }
 
+func (p *RebootVirtualMachineParams) SetForced(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forced"] = v
+}
+
+func (p *RebootVirtualMachineParams) GetForced() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forced"].(bool)
+	return value, ok
+}
+
 func (p *RebootVirtualMachineParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4757,9 +4923,11 @@ type RebootVirtualMachineResponse struct {
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
 	Haenable              bool                                        `json:"haenable"`
+	Hasannotations        bool                                        `json:"hasannotations"`
 	Hostid                string                                      `json:"hostid"`
 	Hostname              string                                      `json:"hostname"`
 	Hypervisor            string                                      `json:"hypervisor"`
+	Icon                  string                                      `json:"icon"`
 	Id                    string                                      `json:"id"`
 	Instancename          string                                      `json:"instancename"`
 	Isdynamicallyscalable bool                                        `json:"isdynamicallyscalable"`
@@ -4769,6 +4937,7 @@ type RebootVirtualMachineResponse struct {
 	JobID                 string                                      `json:"jobid"`
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
+	Lastupdated           string                                      `json:"lastupdated"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -4781,14 +4950,17 @@ type RebootVirtualMachineResponse struct {
 	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
+	Pooltype              string                                      `json:"pooltype"`
 	Project               string                                      `json:"project"`
 	Projectid             string                                      `json:"projectid"`
 	Publicip              string                                      `json:"publicip"`
 	Publicipid            string                                      `json:"publicipid"`
-	Readonlyuidetails     string                                      `json:"readonlyuidetails"`
+	Readonlydetails       string                                      `json:"readonlydetails"`
+	Receivedbytes         int64                                       `json:"receivedbytes"`
 	Rootdeviceid          int64                                       `json:"rootdeviceid"`
 	Rootdevicetype        string                                      `json:"rootdevicetype"`
 	Securitygroup         []RebootVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                       `json:"sentbytes"`
 	Serviceofferingid     string                                      `json:"serviceofferingid"`
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
@@ -4954,9 +5126,11 @@ type RecoverVirtualMachineResponse struct {
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
 	Haenable              bool                                         `json:"haenable"`
+	Hasannotations        bool                                         `json:"hasannotations"`
 	Hostid                string                                       `json:"hostid"`
 	Hostname              string                                       `json:"hostname"`
 	Hypervisor            string                                       `json:"hypervisor"`
+	Icon                  string                                       `json:"icon"`
 	Id                    string                                       `json:"id"`
 	Instancename          string                                       `json:"instancename"`
 	Isdynamicallyscalable bool                                         `json:"isdynamicallyscalable"`
@@ -4966,6 +5140,7 @@ type RecoverVirtualMachineResponse struct {
 	JobID                 string                                       `json:"jobid"`
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
+	Lastupdated           string                                       `json:"lastupdated"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -4978,14 +5153,17 @@ type RecoverVirtualMachineResponse struct {
 	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
+	Pooltype              string                                       `json:"pooltype"`
 	Project               string                                       `json:"project"`
 	Projectid             string                                       `json:"projectid"`
 	Publicip              string                                       `json:"publicip"`
 	Publicipid            string                                       `json:"publicipid"`
-	Readonlyuidetails     string                                       `json:"readonlyuidetails"`
+	Readonlydetails       string                                       `json:"readonlydetails"`
+	Receivedbytes         int64                                        `json:"receivedbytes"`
 	Rootdeviceid          int64                                        `json:"rootdeviceid"`
 	Rootdevicetype        string                                       `json:"rootdevicetype"`
 	Securitygroup         []RecoverVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                        `json:"sentbytes"`
 	Serviceofferingid     string                                       `json:"serviceofferingid"`
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
@@ -5190,9 +5368,11 @@ type RemoveNicFromVirtualMachineResponse struct {
 	Groupid               string                                             `json:"groupid"`
 	Guestosid             string                                             `json:"guestosid"`
 	Haenable              bool                                               `json:"haenable"`
+	Hasannotations        bool                                               `json:"hasannotations"`
 	Hostid                string                                             `json:"hostid"`
 	Hostname              string                                             `json:"hostname"`
 	Hypervisor            string                                             `json:"hypervisor"`
+	Icon                  string                                             `json:"icon"`
 	Id                    string                                             `json:"id"`
 	Instancename          string                                             `json:"instancename"`
 	Isdynamicallyscalable bool                                               `json:"isdynamicallyscalable"`
@@ -5202,6 +5382,7 @@ type RemoveNicFromVirtualMachineResponse struct {
 	JobID                 string                                             `json:"jobid"`
 	Jobstatus             int                                                `json:"jobstatus"`
 	Keypair               string                                             `json:"keypair"`
+	Lastupdated           string                                             `json:"lastupdated"`
 	Memory                int                                                `json:"memory"`
 	Memoryintfreekbs      int64                                              `json:"memoryintfreekbs"`
 	Memorykbs             int64                                              `json:"memorykbs"`
@@ -5214,14 +5395,17 @@ type RemoveNicFromVirtualMachineResponse struct {
 	Ostypeid              string                                             `json:"ostypeid"`
 	Password              string                                             `json:"password"`
 	Passwordenabled       bool                                               `json:"passwordenabled"`
+	Pooltype              string                                             `json:"pooltype"`
 	Project               string                                             `json:"project"`
 	Projectid             string                                             `json:"projectid"`
 	Publicip              string                                             `json:"publicip"`
 	Publicipid            string                                             `json:"publicipid"`
-	Readonlyuidetails     string                                             `json:"readonlyuidetails"`
+	Readonlydetails       string                                             `json:"readonlydetails"`
+	Receivedbytes         int64                                              `json:"receivedbytes"`
 	Rootdeviceid          int64                                              `json:"rootdeviceid"`
 	Rootdevicetype        string                                             `json:"rootdevicetype"`
 	Securitygroup         []RemoveNicFromVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                              `json:"sentbytes"`
 	Serviceofferingid     string                                             `json:"serviceofferingid"`
 	Serviceofferingname   string                                             `json:"serviceofferingname"`
 	Servicestate          string                                             `json:"servicestate"`
@@ -5407,9 +5591,11 @@ type ResetPasswordForVirtualMachineResponse struct {
 	Groupid               string                                                `json:"groupid"`
 	Guestosid             string                                                `json:"guestosid"`
 	Haenable              bool                                                  `json:"haenable"`
+	Hasannotations        bool                                                  `json:"hasannotations"`
 	Hostid                string                                                `json:"hostid"`
 	Hostname              string                                                `json:"hostname"`
 	Hypervisor            string                                                `json:"hypervisor"`
+	Icon                  string                                                `json:"icon"`
 	Id                    string                                                `json:"id"`
 	Instancename          string                                                `json:"instancename"`
 	Isdynamicallyscalable bool                                                  `json:"isdynamicallyscalable"`
@@ -5419,6 +5605,7 @@ type ResetPasswordForVirtualMachineResponse struct {
 	JobID                 string                                                `json:"jobid"`
 	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypair               string                                                `json:"keypair"`
+	Lastupdated           string                                                `json:"lastupdated"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                 `json:"memorykbs"`
@@ -5431,14 +5618,17 @@ type ResetPasswordForVirtualMachineResponse struct {
 	Ostypeid              string                                                `json:"ostypeid"`
 	Password              string                                                `json:"password"`
 	Passwordenabled       bool                                                  `json:"passwordenabled"`
+	Pooltype              string                                                `json:"pooltype"`
 	Project               string                                                `json:"project"`
 	Projectid             string                                                `json:"projectid"`
 	Publicip              string                                                `json:"publicip"`
 	Publicipid            string                                                `json:"publicipid"`
-	Readonlyuidetails     string                                                `json:"readonlyuidetails"`
+	Readonlydetails       string                                                `json:"readonlydetails"`
+	Receivedbytes         int64                                                 `json:"receivedbytes"`
 	Rootdeviceid          int64                                                 `json:"rootdeviceid"`
 	Rootdevicetype        string                                                `json:"rootdevicetype"`
 	Securitygroup         []ResetPasswordForVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                                 `json:"sentbytes"`
 	Serviceofferingid     string                                                `json:"serviceofferingid"`
 	Serviceofferingname   string                                                `json:"serviceofferingname"`
 	Servicestate          string                                                `json:"servicestate"`
@@ -5642,9 +5832,11 @@ type RestoreVirtualMachineResponse struct {
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
 	Haenable              bool                                         `json:"haenable"`
+	Hasannotations        bool                                         `json:"hasannotations"`
 	Hostid                string                                       `json:"hostid"`
 	Hostname              string                                       `json:"hostname"`
 	Hypervisor            string                                       `json:"hypervisor"`
+	Icon                  string                                       `json:"icon"`
 	Id                    string                                       `json:"id"`
 	Instancename          string                                       `json:"instancename"`
 	Isdynamicallyscalable bool                                         `json:"isdynamicallyscalable"`
@@ -5654,6 +5846,7 @@ type RestoreVirtualMachineResponse struct {
 	JobID                 string                                       `json:"jobid"`
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
+	Lastupdated           string                                       `json:"lastupdated"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -5666,14 +5859,17 @@ type RestoreVirtualMachineResponse struct {
 	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
+	Pooltype              string                                       `json:"pooltype"`
 	Project               string                                       `json:"project"`
 	Projectid             string                                       `json:"projectid"`
 	Publicip              string                                       `json:"publicip"`
 	Publicipid            string                                       `json:"publicipid"`
-	Readonlyuidetails     string                                       `json:"readonlyuidetails"`
+	Readonlydetails       string                                       `json:"readonlydetails"`
+	Receivedbytes         int64                                        `json:"receivedbytes"`
 	Rootdeviceid          int64                                        `json:"rootdeviceid"`
 	Rootdevicetype        string                                       `json:"rootdevicetype"`
 	Securitygroup         []RestoreVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                        `json:"sentbytes"`
 	Serviceofferingid     string                                       `json:"serviceofferingid"`
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
@@ -5837,7 +6033,7 @@ func (s *VirtualMachineService) NewScaleVirtualMachineParams(id string, serviceo
 	return p
 }
 
-// Scales the virtual machine to a new service offering.
+// Scales the virtual machine to a new service offering. This command also takes into account the Volume and it may resize the root disk size according to the service offering.
 func (s *VirtualMachineService) ScaleVirtualMachine(p *ScaleVirtualMachineParams) (*ScaleVirtualMachineResponse, error) {
 	resp, err := s.cs.newRequest("scaleVirtualMachine", p.toURLValues())
 	if err != nil {
@@ -6066,9 +6262,11 @@ type StartVirtualMachineResponse struct {
 	Groupid               string                                     `json:"groupid"`
 	Guestosid             string                                     `json:"guestosid"`
 	Haenable              bool                                       `json:"haenable"`
+	Hasannotations        bool                                       `json:"hasannotations"`
 	Hostid                string                                     `json:"hostid"`
 	Hostname              string                                     `json:"hostname"`
 	Hypervisor            string                                     `json:"hypervisor"`
+	Icon                  string                                     `json:"icon"`
 	Id                    string                                     `json:"id"`
 	Instancename          string                                     `json:"instancename"`
 	Isdynamicallyscalable bool                                       `json:"isdynamicallyscalable"`
@@ -6078,6 +6276,7 @@ type StartVirtualMachineResponse struct {
 	JobID                 string                                     `json:"jobid"`
 	Jobstatus             int                                        `json:"jobstatus"`
 	Keypair               string                                     `json:"keypair"`
+	Lastupdated           string                                     `json:"lastupdated"`
 	Memory                int                                        `json:"memory"`
 	Memoryintfreekbs      int64                                      `json:"memoryintfreekbs"`
 	Memorykbs             int64                                      `json:"memorykbs"`
@@ -6090,14 +6289,17 @@ type StartVirtualMachineResponse struct {
 	Ostypeid              string                                     `json:"ostypeid"`
 	Password              string                                     `json:"password"`
 	Passwordenabled       bool                                       `json:"passwordenabled"`
+	Pooltype              string                                     `json:"pooltype"`
 	Project               string                                     `json:"project"`
 	Projectid             string                                     `json:"projectid"`
 	Publicip              string                                     `json:"publicip"`
 	Publicipid            string                                     `json:"publicipid"`
-	Readonlyuidetails     string                                     `json:"readonlyuidetails"`
+	Readonlydetails       string                                     `json:"readonlydetails"`
+	Receivedbytes         int64                                      `json:"receivedbytes"`
 	Rootdeviceid          int64                                      `json:"rootdeviceid"`
 	Rootdevicetype        string                                     `json:"rootdevicetype"`
 	Securitygroup         []StartVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                      `json:"sentbytes"`
 	Serviceofferingid     string                                     `json:"serviceofferingid"`
 	Serviceofferingname   string                                     `json:"serviceofferingname"`
 	Servicestate          string                                     `json:"servicestate"`
@@ -6302,9 +6504,11 @@ type StopVirtualMachineResponse struct {
 	Groupid               string                                    `json:"groupid"`
 	Guestosid             string                                    `json:"guestosid"`
 	Haenable              bool                                      `json:"haenable"`
+	Hasannotations        bool                                      `json:"hasannotations"`
 	Hostid                string                                    `json:"hostid"`
 	Hostname              string                                    `json:"hostname"`
 	Hypervisor            string                                    `json:"hypervisor"`
+	Icon                  string                                    `json:"icon"`
 	Id                    string                                    `json:"id"`
 	Instancename          string                                    `json:"instancename"`
 	Isdynamicallyscalable bool                                      `json:"isdynamicallyscalable"`
@@ -6314,6 +6518,7 @@ type StopVirtualMachineResponse struct {
 	JobID                 string                                    `json:"jobid"`
 	Jobstatus             int                                       `json:"jobstatus"`
 	Keypair               string                                    `json:"keypair"`
+	Lastupdated           string                                    `json:"lastupdated"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
 	Memorykbs             int64                                     `json:"memorykbs"`
@@ -6326,14 +6531,17 @@ type StopVirtualMachineResponse struct {
 	Ostypeid              string                                    `json:"ostypeid"`
 	Password              string                                    `json:"password"`
 	Passwordenabled       bool                                      `json:"passwordenabled"`
+	Pooltype              string                                    `json:"pooltype"`
 	Project               string                                    `json:"project"`
 	Projectid             string                                    `json:"projectid"`
 	Publicip              string                                    `json:"publicip"`
 	Publicipid            string                                    `json:"publicipid"`
-	Readonlyuidetails     string                                    `json:"readonlyuidetails"`
+	Readonlydetails       string                                    `json:"readonlydetails"`
+	Receivedbytes         int64                                     `json:"receivedbytes"`
 	Rootdeviceid          int64                                     `json:"rootdeviceid"`
 	Rootdevicetype        string                                    `json:"rootdevicetype"`
 	Securitygroup         []StopVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                     `json:"sentbytes"`
 	Serviceofferingid     string                                    `json:"serviceofferingid"`
 	Serviceofferingname   string                                    `json:"serviceofferingname"`
 	Servicestate          string                                    `json:"servicestate"`
@@ -6538,9 +6746,11 @@ type UpdateDefaultNicForVirtualMachineResponse struct {
 	Groupid               string                                                   `json:"groupid"`
 	Guestosid             string                                                   `json:"guestosid"`
 	Haenable              bool                                                     `json:"haenable"`
+	Hasannotations        bool                                                     `json:"hasannotations"`
 	Hostid                string                                                   `json:"hostid"`
 	Hostname              string                                                   `json:"hostname"`
 	Hypervisor            string                                                   `json:"hypervisor"`
+	Icon                  string                                                   `json:"icon"`
 	Id                    string                                                   `json:"id"`
 	Instancename          string                                                   `json:"instancename"`
 	Isdynamicallyscalable bool                                                     `json:"isdynamicallyscalable"`
@@ -6550,6 +6760,7 @@ type UpdateDefaultNicForVirtualMachineResponse struct {
 	JobID                 string                                                   `json:"jobid"`
 	Jobstatus             int                                                      `json:"jobstatus"`
 	Keypair               string                                                   `json:"keypair"`
+	Lastupdated           string                                                   `json:"lastupdated"`
 	Memory                int                                                      `json:"memory"`
 	Memoryintfreekbs      int64                                                    `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                    `json:"memorykbs"`
@@ -6562,14 +6773,17 @@ type UpdateDefaultNicForVirtualMachineResponse struct {
 	Ostypeid              string                                                   `json:"ostypeid"`
 	Password              string                                                   `json:"password"`
 	Passwordenabled       bool                                                     `json:"passwordenabled"`
+	Pooltype              string                                                   `json:"pooltype"`
 	Project               string                                                   `json:"project"`
 	Projectid             string                                                   `json:"projectid"`
 	Publicip              string                                                   `json:"publicip"`
 	Publicipid            string                                                   `json:"publicipid"`
-	Readonlyuidetails     string                                                   `json:"readonlyuidetails"`
+	Readonlydetails       string                                                   `json:"readonlydetails"`
+	Receivedbytes         int64                                                    `json:"receivedbytes"`
 	Rootdeviceid          int64                                                    `json:"rootdeviceid"`
 	Rootdevicetype        string                                                   `json:"rootdevicetype"`
 	Securitygroup         []UpdateDefaultNicForVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                                    `json:"sentbytes"`
 	Serviceofferingid     string                                                   `json:"serviceofferingid"`
 	Serviceofferingname   string                                                   `json:"serviceofferingname"`
 	Servicestate          string                                                   `json:"servicestate"`
@@ -7051,9 +7265,11 @@ type UpdateVirtualMachineResponse struct {
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
 	Haenable              bool                                        `json:"haenable"`
+	Hasannotations        bool                                        `json:"hasannotations"`
 	Hostid                string                                      `json:"hostid"`
 	Hostname              string                                      `json:"hostname"`
 	Hypervisor            string                                      `json:"hypervisor"`
+	Icon                  string                                      `json:"icon"`
 	Id                    string                                      `json:"id"`
 	Instancename          string                                      `json:"instancename"`
 	Isdynamicallyscalable bool                                        `json:"isdynamicallyscalable"`
@@ -7063,6 +7279,7 @@ type UpdateVirtualMachineResponse struct {
 	JobID                 string                                      `json:"jobid"`
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
+	Lastupdated           string                                      `json:"lastupdated"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -7075,14 +7292,17 @@ type UpdateVirtualMachineResponse struct {
 	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
+	Pooltype              string                                      `json:"pooltype"`
 	Project               string                                      `json:"project"`
 	Projectid             string                                      `json:"projectid"`
 	Publicip              string                                      `json:"publicip"`
 	Publicipid            string                                      `json:"publicipid"`
-	Readonlyuidetails     string                                      `json:"readonlyuidetails"`
+	Readonlydetails       string                                      `json:"readonlydetails"`
+	Receivedbytes         int64                                       `json:"receivedbytes"`
 	Rootdeviceid          int64                                       `json:"rootdeviceid"`
 	Rootdevicetype        string                                      `json:"rootdevicetype"`
 	Securitygroup         []UpdateVirtualMachineResponseSecuritygroup `json:"securitygroup"`
+	Sentbytes             int64                                       `json:"sentbytes"`
 	Serviceofferingid     string                                      `json:"serviceofferingid"`
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
diff --git a/cloudstack/VirtualMachineService_mock.go b/cloudstack/VirtualMachineService_mock.go
index 8117498..3de3537 100644
--- a/cloudstack/VirtualMachineService_mock.go
+++ b/cloudstack/VirtualMachineService_mock.go
@@ -513,17 +513,17 @@ func (mr *MockVirtualMachineServiceIfaceMockRecorder) NewMigrateVirtualMachinePa
 }
 
 // NewMigrateVirtualMachineWithVolumeParams mocks base method.
-func (m *MockVirtualMachineServiceIface) NewMigrateVirtualMachineWithVolumeParams(hostid, virtualmachineid string) *MigrateVirtualMachineWithVolumeParams {
+func (m *MockVirtualMachineServiceIface) NewMigrateVirtualMachineWithVolumeParams(virtualmachineid string) *MigrateVirtualMachineWithVolumeParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewMigrateVirtualMachineWithVolumeParams", hostid, virtualmachineid)
+	ret := m.ctrl.Call(m, "NewMigrateVirtualMachineWithVolumeParams", virtualmachineid)
 	ret0, _ := ret[0].(*MigrateVirtualMachineWithVolumeParams)
 	return ret0
 }
 
 // NewMigrateVirtualMachineWithVolumeParams indicates an expected call of NewMigrateVirtualMachineWithVolumeParams.
-func (mr *MockVirtualMachineServiceIfaceMockRecorder) NewMigrateVirtualMachineWithVolumeParams(hostid, virtualmachineid interface{}) *gomock.Call {
+func (mr *MockVirtualMachineServiceIfaceMockRecorder) NewMigrateVirtualMachineWithVolumeParams(virtualmachineid interface{}) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewMigrateVirtualMachineWithVolumeParams", reflect.TypeOf((*MockVirtualMachineServiceIface)(nil).NewMigrateVirtualMachineWithVolumeParams), hostid, virtualmachineid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewMigrateVirtualMachineWithVolumeParams", reflect.TypeOf((*MockVirtualMachineServiceIface)(nil).NewMigrateVirtualMachineWithVolumeParams), virtualmachineid)
 }
 
 // NewRebootVirtualMachineParams mocks base method.
diff --git a/cloudstack/VirtualMachineService_test.go b/cloudstack/VirtualMachineService_test.go
index 1a68736..3cc9cdc 100644
--- a/cloudstack/VirtualMachineService_test.go
+++ b/cloudstack/VirtualMachineService_test.go
@@ -145,3 +145,26 @@ func TestVirtualMachineService_ListVirtualMachines(t *testing.T) {
 		t.Errorf("Failed to list VM")
 	}
 }
+
+func TestVirtualMachineService_ScaleVirtualMachine(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
+		apiName := "scaleVirtualMachine"
+		response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r)
+		if err != nil {
+			t.Errorf("Failed to read response data due to: %v", err)
+		}
+		fmt.Fprintln(writer, response)
+	}))
+	defer server.Close()
+	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
+	params := client.VirtualMachine.NewScaleVirtualMachineParams("88dedd6b-4fc0-44bf-b76f-441a13bc1f99", "57aba75e-5567-44c9-bfcc-c2c14503a5a6")
+	resp, err := client.VirtualMachine.ScaleVirtualMachine(params)
+	if err != nil {
+		t.Errorf("Failed to scale VM due to %v", err)
+		return
+	}
+
+	if resp == nil {
+		t.Errorf("Failed to list VM")
+	}
+}
diff --git a/cloudstack/VolumeService.go b/cloudstack/VolumeService.go
index 91aa924..60cc2b0 100644
--- a/cloudstack/VolumeService.go
+++ b/cloudstack/VolumeService.go
@@ -196,6 +196,7 @@ type AttachVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -225,6 +226,7 @@ type AttachVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -556,6 +558,7 @@ type CreateVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -585,6 +588,7 @@ type CreateVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -821,6 +825,7 @@ type DetachVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -850,6 +855,7 @@ type DetachVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -1959,6 +1965,7 @@ type Volume struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -1988,6 +1995,7 @@ type Volume struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -2156,6 +2164,7 @@ type MigrateVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -2185,6 +2194,7 @@ type MigrateVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -2391,6 +2401,7 @@ type ResizeVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -2420,6 +2431,7 @@ type ResizeVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -2457,6 +2469,9 @@ func (p *UpdateVolumeParams) toURLValues() url.Values {
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
+	if v, found := p.p["name"]; found {
+		u.Set("name", v.(string))
+	}
 	if v, found := p.p["path"]; found {
 		u.Set("path", v.(string))
 	}
@@ -2529,6 +2544,21 @@ func (p *UpdateVolumeParams) GetId() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateVolumeParams) SetName(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["name"] = v
+}
+
+func (p *UpdateVolumeParams) GetName() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["name"].(string)
+	return value, ok
+}
+
 func (p *UpdateVolumeParams) SetPath(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2640,6 +2670,7 @@ type UpdateVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -2669,6 +2700,7 @@ type UpdateVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
@@ -2946,6 +2978,7 @@ type UploadVolumeResponse struct {
 	Displayvolume              bool   `json:"displayvolume"`
 	Domain                     string `json:"domain"`
 	Domainid                   string `json:"domainid"`
+	Hasannotations             bool   `json:"hasannotations"`
 	Hypervisor                 string `json:"hypervisor"`
 	Id                         string `json:"id"`
 	Isextractable              bool   `json:"isextractable"`
@@ -2975,6 +3008,7 @@ type UploadVolumeResponse struct {
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Supportsstoragesnapshot    bool   `json:"supportsstoragesnapshot"`
 	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
diff --git a/cloudstack/ZoneService.go b/cloudstack/ZoneService.go
index b11de52..58c99f5 100644
--- a/cloudstack/ZoneService.go
+++ b/cloudstack/ZoneService.go
@@ -360,6 +360,8 @@ type CreateZoneResponse struct {
 	Domainid              string                       `json:"domainid"`
 	Domainname            string                       `json:"domainname"`
 	Guestcidraddress      string                       `json:"guestcidraddress"`
+	Hasannotations        bool                         `json:"hasannotations"`
+	Icon                  string                       `json:"icon"`
 	Id                    string                       `json:"id"`
 	Internaldns1          string                       `json:"internaldns1"`
 	Internaldns2          string                       `json:"internaldns2"`
@@ -1152,6 +1154,10 @@ func (p *ListZonesParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showcapacities", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
 	if v, found := p.p["tags"]; found {
 		m := v.(map[string]string)
 		for i, k := range getSortedKeysFromMap(m) {
@@ -1297,6 +1303,21 @@ func (p *ListZonesParams) GetShowcapacities() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListZonesParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListZonesParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
 func (p *ListZonesParams) SetTags(v map[string]string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1435,6 +1456,8 @@ type Zone struct {
 	Domainid              string            `json:"domainid"`
 	Domainname            string            `json:"domainname"`
 	Guestcidraddress      string            `json:"guestcidraddress"`
+	Hasannotations        bool              `json:"hasannotations"`
+	Icon                  string            `json:"icon"`
 	Id                    string            `json:"id"`
 	Internaldns1          string            `json:"internaldns1"`
 	Internaldns2          string            `json:"internaldns2"`
@@ -1904,6 +1927,8 @@ type UpdateZoneResponse struct {
 	Domainid              string                       `json:"domainid"`
 	Domainname            string                       `json:"domainname"`
 	Guestcidraddress      string                       `json:"guestcidraddress"`
+	Hasannotations        bool                         `json:"hasannotations"`
+	Icon                  string                       `json:"icon"`
 	Id                    string                       `json:"id"`
 	Internaldns1          string                       `json:"internaldns1"`
 	Internaldns2          string                       `json:"internaldns2"`
diff --git a/cloudstack/testdata/LimitServiceData.json b/cloudstack/testdata/LimitServiceData.json
new file mode 100644
index 0000000..e5a427b
--- /dev/null
+++ b/cloudstack/testdata/LimitServiceData.json
@@ -0,0 +1,7 @@
+{
+  "resetApiLimit": {
+    "resetapilimitresponse": {
+      "success": true
+    }
+  }
+}
\ No newline at end of file
diff --git a/cloudstack/testdata/NetworkACLServiceData.json b/cloudstack/testdata/NetworkACLServiceData.json
new file mode 100644
index 0000000..fffac7d
--- /dev/null
+++ b/cloudstack/testdata/NetworkACLServiceData.json
@@ -0,0 +1,32 @@
+{
+  "updateNetworkACLList": {
+    "updateNetworkACLList": {
+      "updatenetworkacllistresponse": {
+        "jobid": "6dd51379-b8cf-422c-a6ef-f96c07798c97"
+      }
+    },
+    "queryAsyncJobResult": {
+      "queryasyncjobresultresponse": {
+        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
+        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
+        "cmd": "org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd",
+        "jobstatus": 1,
+        "jobprocstatus": 0,
+        "jobresultcode": 0,
+        "jobresulttype": "object",
+        "jobresult": {
+          "networkacllist": {
+            "id": "a31e11a0-57fe-41df-be7a-34d359673061",
+            "name": "test",
+            "description": "testtest",
+            "vpcid": "40419d33-6d48-4c54-ae2e-5c312b401593",
+            "fordisplay": true
+          }
+        },
+        "created": "2021-10-13T04:46:30+0000",
+        "completed": "2021-10-13T04:46:30+0000",
+        "jobid": "6dd51379-b8cf-422c-a6ef-f96c07798c97"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cloudstack/testdata/ProjectServiceData.json b/cloudstack/testdata/ProjectServiceData.json
index 0eb7a78..907bff0 100644
--- a/cloudstack/testdata/ProjectServiceData.json
+++ b/cloudstack/testdata/ProjectServiceData.json
@@ -292,5 +292,21 @@
       "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b"
       }
     }
+  },
+  "listProjectRolePermissions": {
+    "listprojectrolepermissionsresponse": {
+      "count": 1,
+      "projectrolepermission": [
+        {
+          "id": "e68daeca-556f-4fd2-b4ee-378cb994ef76",
+          "projectroleid": "fa089002-d055-46b5-aa0a-18f2eae2b4fc",
+          "projectid": "69646881-8d7f-4800-987d-106698a42608",
+          "projectrolename": "testProjectPerm",
+          "rule": "activateProject",
+          "permission": "deny",
+          "description": ""
+        }
+      ]
+    }
   }
 }
\ No newline at end of file
diff --git a/cloudstack/testdata/VPCServiceData.json b/cloudstack/testdata/VPCServiceData.json
new file mode 100644
index 0000000..25b0050
--- /dev/null
+++ b/cloudstack/testdata/VPCServiceData.json
@@ -0,0 +1,26 @@
+{
+  "restartVPC": {
+    "restartVPC": {
+      "restartvpcresponse": {
+        "jobid": "98272f42-917c-4286-8c05-4e38d85d32e0"
+      }
+    },
+    "queryAsyncJobResult": {
+      "queryasyncjobresultresponse": {
+        "accountid": "0644f184-269b-11ec-ad12-1e00bc0003a5",
+        "userid": "06466ac0-269b-11ec-ad12-1e00bc0003a5",
+        "cmd": "org.apache.cloudstack.api.command.user.vpc.RestartVPCCmd",
+        "jobstatus": 1,
+        "jobprocstatus": 0,
+        "jobresultcode": 0,
+        "jobresulttype": "object",
+        "jobresult": {
+          "success": true
+        },
+        "created": "2021-10-13T04:36:30+0000",
+        "completed": "2021-10-13T04:36:30+0000",
+        "jobid": "98272f42-917c-4286-8c05-4e38d85d32e0"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cloudstack/testdata/VPNServiceData.json b/cloudstack/testdata/VPNServiceData.json
new file mode 100644
index 0000000..790ede9
--- /dev/null
+++ b/cloudstack/testdata/VPNServiceData.json
@@ -0,0 +1,26 @@
+{
+  "deleteRemoteAccessVpn": {
+    "deleteRemoteAccessVpn": {
+      "deleteremoteaccessvpnresponse": {
+        "jobid": "3697537c-f796-44f2-b997-0b71ff4f4e07"
+      }
+    },
+    "queryAsyncJobResult": {
+      "queryasyncjobresultresponse": {
+        "accountid": "7a2fad8f-2bde-11ec-b173-1e0086000207",
+        "cmd": "org.apache.cloudstack.api.command.user.vpn.DeleteRemoteAccessVpnCmd",
+        "completed": "2021-10-13T07:38:53+0000",
+        "created": "2021-10-13T07:38:51+0000",
+        "jobid": "50bdd6c2-6958-48ba-94fe-3e6ec410dcce",
+        "jobprocstatus": 0,
+        "jobresult": {
+          "success": true
+        },
+        "jobresultcode": 0,
+        "jobresulttype": "object",
+        "jobstatus": 1,
+        "userid": "7a309dc2-2bde-11ec-b173-1e0086000207"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cloudstack/testdata/VirtualMachineServiceData.json b/cloudstack/testdata/VirtualMachineServiceData.json
index 72dd165..918a8b1 100644
--- a/cloudstack/testdata/VirtualMachineServiceData.json
+++ b/cloudstack/testdata/VirtualMachineServiceData.json
@@ -436,5 +436,110 @@
         }
       ]
     }
+  },
+  "scaleVirtualMachine": {
+    "scaleVirtualMachine": {
+      "scalevirtualmachineresponse": {
+        "jobid": "f9a9af61-47ea-4fb7-acc9-93ea50f12042"
+      }
+    },
+    "queryAsyncJobResult": {
+      "queryasyncjobresultresponse": {
+        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
+        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
+        "cmd": "org.apache.cloudstack.api.command.admin.vm.ScaleVMCmdByAdmin",
+        "jobstatus": 1,
+        "jobprocstatus": 0,
+        "jobresultcode": 0,
+        "jobresulttype": "object",
+        "jobresult": {
+          "virtualmachine": {
+            "id": "88dedd6b-4fc0-44bf-b76f-441a13bc1f99",
+            "name": "QA-88dedd6b-4fc0-44bf-b76f-441a13bc1f99",
+            "displayname": "QA-88dedd6b-4fc0-44bf-b76f-441a13bc1f99",
+            "account": "admin",
+            "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
+            "username": "admin",
+            "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
+            "domain": "ROOT",
+            "created": "2020-05-22T19:52:22+0000",
+            "lastupdated": "2021-10-06T09:57:19+0000",
+            "state": "Stopped",
+            "haenable": false,
+            "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
+            "zonename": "SimZone1",
+            "templateid": "56217438-4f36-450b-9246-850a10a3e57b",
+            "templatename": "macha-sim1",
+            "templatedisplaytext": "macha-simm",
+            "passwordenabled": true,
+            "isoid": "169fe81d-47e0-4119-b38c-f6ce42dcf451",
+            "isoname": "k8s-1.16.3-Kubernetes-Binaries-ISO",
+            "isodisplaytext": "k8s-1.16.3-Kubernetes-Binaries-IS",
+            "serviceofferingid": "57aba75e-5567-44c9-bfcc-c2c14503a5a6",
+            "serviceofferingname": "Medium Instanc",
+            "backupofferingid": "7c42d74e-c029-4431-9025-6caa8b903472",
+            "backupofferingname": "BackupGoldDummy",
+            "cpunumber": 1,
+            "cpuspeed": 1000,
+            "memory": 1024,
+            "guestosid": "12fea95b-5fe0-11ea-9a56-1e006800018c",
+            "rootdeviceid": 0,
+            "rootdevicetype": "ROOT",
+            "securitygroup": [],
+            "nic": [
+              {
+                "id": "c26193a6-9b41-4149-b836-e48bc46fc5c8",
+                "networkid": "b9bb5ef5-16cd-413c-996e-3671d8a2bc20",
+                "networkname": "test",
+                "netmask": "255.255.255.0",
+                "gateway": "10.1.1.1",
+                "ipaddress": "10.1.1.208",
+                "traffictype": "Guest",
+                "type": "Isolated",
+                "isdefault": false,
+                "macaddress": "02:00:63:59:00:05",
+                "secondaryip": [],
+                "extradhcpoption": [],
+                "deviceid": "1"
+              },
+              {
+                "id": "d9f8203d-e680-438a-86b6-327c69271011",
+                "networkid": "cc39d938-5ea0-4d9c-b89d-421da3274e54",
+                "networkname": "testNet2",
+                "netmask": "255.255.255.0",
+                "gateway": "10.1.1.1",
+                "ipaddress": "10.1.1.177",
+                "traffictype": "Guest",
+                "type": "Isolated",
+                "isdefault": true,
+                "macaddress": "02:00:22:f7:00:08",
+                "secondaryip": [],
+                "extradhcpoption": [],
+                "deviceid": "0"
+              }
+            ],
+            "hypervisor": "Simulator",
+            "instancename": "i-2-101-QA",
+            "details": {
+              "keyboard": "us",
+              "Message.ReservedCapacityFreed.Flag": "true"
+            },
+            "affinitygroup": [],
+            "displayvm": true,
+            "isdynamicallyscalable": false,
+            "ostypeid": "12fea95b-5fe0-11ea-9a56-1e006800018c",
+            "osdisplayname": "CentOS 6 (64-bit)",
+            "pooltype": "NetworkFilesystem",
+            "receivedbytes": 0,
+            "sentbytes": 0,
+            "tags": [],
+            "hasannotations": true
+          }
+        },
+        "created": "2021-10-13T04:54:55+0000",
+        "completed": "2021-10-13T04:54:56+0000",
+        "jobid": "f9a9af61-47ea-4fb7-acc9-93ea50f12042"
+      }
+    }
   }
 }
\ No newline at end of file
diff --git a/examples/ACSDetails.go b/examples/ACSOps.go
similarity index 86%
rename from examples/ACSDetails.go
rename to examples/ACSOps.go
index 78ddc78..55feee4 100644
--- a/examples/ACSDetails.go
+++ b/examples/ACSOps.go
@@ -23,6 +23,12 @@ var (
 	ApiUrl    = "http://qa.cloudstack.cloud:8080/client/api"
 	SecretKey = "PZAM4nrxKbMnlq8RT0GMqAJyYtJGMN5x-PN7owa9vSmE58zObTcn4Yc8pgLeznln1aEUkHH_d2S-QQTt3E2Azw"
 	ApiKey    = "DN7uIwbqAMASSB1GUGHWvXqUlDDBf7H6A3XI-kNeXahW5LMUoqgfDEDWMv8zWKaj51fDozg8fjqc7tGCSozScA"
-	ZoneId = "b6afade4-1919-4f0b-a785-12ff05a4d383"
-	PodId = "83a739b7-bf5f-481e-8016-3a6045045e0b"
+	ZoneId    = "b6afade4-1919-4f0b-a785-12ff05a4d383"
+	PodId     = "83a739b7-bf5f-481e-8016-3a6045045e0b"
 )
+
+func main() {
+	AddHost()
+	CreateDomain()
+	PerformHostOperations()
+}
diff --git a/examples/AddHost.go b/examples/AddHost.go
index 20b8fcf..f9af25e 100644
--- a/examples/AddHost.go
+++ b/examples/AddHost.go
@@ -22,14 +22,17 @@ package main
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
 	"log"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
 )
 
-func main()  {
+func AddHost() {
 	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
-	p := cs.Host.NewAddHostParams("Simulator", "password", PodId,
-		"http://sim/c0/h0", "root", ZoneId)
+	p := cs.Host.NewAddHostParams("Simulator", PodId,
+		"http://sim/c0/h0", ZoneId)
+	p.SetUsername("root")
+	p.SetPassword("password")
 	resp, err := cs.Host.AddHost(p)
 	if err != nil {
 		fmt.Errorf("Failed to add host due to: %v", err)
@@ -37,8 +40,8 @@ func main()  {
 
 	b, err := json.MarshalIndent(resp, "", "    ")
 	if err != nil {
-		log.Printf("%v", err)
+		fmt.Errorf("%v", err)
 		return
 	}
 	log.Printf("Host response : %v", string(b))
-}
\ No newline at end of file
+}
diff --git a/examples/CreateDeleteDomain.go b/examples/CreateDeleteDomain.go
index 96c4414..2053257 100644
--- a/examples/CreateDeleteDomain.go
+++ b/examples/CreateDeleteDomain.go
@@ -22,11 +22,12 @@ package main
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
 	"log"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
 )
 
-func main() {
+func CreateDomain() {
 	domainName := "DummyDomain"
 	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
 	domain, _, err := cs.Domain.GetDomainByName(domainName)
@@ -63,7 +64,6 @@ func main() {
 	fmt.Printf("Create Domain response : %v\n\n", string(b))
 }
 
-
 func parseResponse(resp interface{}) ([]byte, error) {
 	b, err := json.MarshalIndent(resp, "", "    ")
 	if err != nil {
diff --git a/examples/HostOperations.go b/examples/HostOperations.go
index 5cefdc0..dde9c5f 100644
--- a/examples/HostOperations.go
+++ b/examples/HostOperations.go
@@ -21,11 +21,12 @@ package main
 
 import (
 	"encoding/json"
-	"github.com/apache/cloudstack-go/v2/cloudstack"
 	"log"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
 )
 
-func main() {
+func PerformHostOperations() {
 	cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
 	zone, _, err := cs.Zone.GetZoneByID(ZoneId)
 	if err != nil {
diff --git a/generate/layout.go b/generate/layout.go
index fa82c51..6697420 100644
--- a/generate/layout.go
+++ b/generate/layout.go
@@ -355,6 +355,10 @@ var layout = apiInfo{
 		"suspendProject",
 		"updateProject",
 		"updateProjectInvitation",
+		"listProjectRolePermissions",
+		"createProjectRolePermission",
+		"updateProjectRolePermission",
+		"deleteProjectRolePermission",
 	},
 	"PoolService": {
 		"createStoragePool",
diff --git a/generate/listApis.json b/generate/listApis.json
index 6d97e6b..b2ac5f1 100644
--- a/generate/listApis.json
+++ b/generate/listApis.json
@@ -1,11 +1,71 @@
 {
   "api": [
     {
+      "description": "Lists the resource icon for the specified resource(s)",
+      "isasync": false,
+      "name": "listResourceIcon",
+      "params": [
+        {
+          "description": "type of the resource",
+          "length": 255,
+          "name": "resourcetype",
+          "required": true,
+          "type": "string"
+        },
+        {
+          "description": "list of resources to upload the icon/image for",
+          "length": 255,
+          "name": "resourceids",
+          "required": true,
+          "type": "list"
+        }
+      ],
+      "related": "",
+      "response": [
+        {
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "id of the resource",
+          "name": "resourceid",
+          "type": "string"
+        },
+        {
+          "description": "resource type",
+          "name": "resourcetype",
+          "type": "resourceobjecttype"
+        },
+        {
+          "description": "base64 representation of resource icon",
+          "name": "base64image",
+          "type": "string"
+        },
+        {},
+        {}
+      ],
+      "since": "4.16.0.0"
+    },
+    {
       "description": "Creates VPC offering",
       "isasync": true,
       "name": "createVPCOffering",
       "params": [
         {
+          "description": "the ID of the service offering for the VPC router appliance",
+          "length": 255,
+          "name": "serviceofferingid",
+          "related": "createServiceOffering,updateServiceOffering,listServiceOfferings",
+          "required": false,
+          "type": "uuid"
+        },
+        {
           "description": "the ID of the containing zone(s), null for public offerings",
           "length": 255,
           "name": "zoneid",
@@ -15,20 +75,6 @@
           "type": "list"
         },
         {
-          "description": "provider to service mapping. If not specified, the provider for the service will be mapped to the default provider on the physical network",
-          "length": 255,
-          "name": "serviceproviderlist",
-          "required": false,
-          "type": "map"
-        },
-        {
-          "description": "the display text of the vpc offering",
-          "length": 255,
-          "name": "displaytext",
-          "required": true,
-          "type": "string"
-        },
-        {
           "description": "services supported by the vpc offering",
           "length": 255,
           "name": "supportedservices",
@@ -44,40 +90,90 @@
           "type": "map"
         },
         {
-          "description": "the name of the vpc offering",
+          "description": "the ID of the containing domain(s), null for public offerings",
           "length": 255,
-          "name": "name",
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "required": false,
+          "type": "list"
+        },
+        {
+          "description": "set to true if the offering is to be enabled during creation. Default is false",
+          "length": 255,
+          "name": "enable",
+          "required": false,
+          "since": "4.16",
+          "type": "boolean"
+        },
+        {
+          "description": "the display text of the vpc offering",
+          "length": 255,
+          "name": "displaytext",
           "required": true,
           "type": "string"
         },
         {
-          "description": "the ID of the service offering for the VPC router appliance",
+          "description": "the name of the vpc offering",
           "length": 255,
-          "name": "serviceofferingid",
-          "related": "createServiceOffering,updateServiceOffering,listServiceOfferings",
-          "required": false,
-          "type": "uuid"
+          "name": "name",
+          "required": true,
+          "type": "string"
         },
         {
-          "description": "the ID of the containing domain(s), null for public offerings",
+          "description": "provider to service mapping. If not specified, the provider for the service will be mapped to the default provider on the physical network",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "serviceproviderlist",
           "required": false,
-          "type": "list"
+          "type": "map"
         }
       ],
       "related": "updateVPCOffering,listVPCOfferings",
       "response": [
         {
+          "description": " indicated if the offering can support region level vpc",
+          "name": "supportsregionLevelvpc",
+          "type": "boolean"
+        },
+        {},
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the date this vpc offering was created",
+          "name": "created",
+          "type": "date"
+        },
+        {},
+        {
+          "description": "the zone name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "zone",
+          "type": "string"
+        },
+        {
+          "description": "true if vpc offering is default, false otherwise",
+          "name": "isdefault",
+          "type": "boolean"
+        },
+        {
           "description": "the zone ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
           "name": "zoneid",
           "type": "string"
         },
-        {},
         {
-          "description": "the name of the vpc offering",
-          "name": "name",
+          "description": "the domain name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "domain",
+          "type": "string"
+        },
+        {
+          "description": "an alternate display text of the vpc offering.",
+          "name": "displaytext",
+          "type": "string"
+        },
+        {
+          "description": "the domain ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "domainid",
           "type": "string"
         },
         {
@@ -85,35 +181,57 @@
           "name": "service",
           "response": [
             {
-              "description": "the service provider name",
-              "name": "provider",
+              "description": "the service name",
+              "name": "name",
+              "type": "string"
+            },
+            {
+              "description": "the list of capabilities",
+              "name": "capability",
               "response": [
                 {
-                  "description": "services for this provider",
-                  "name": "servicelist",
-                  "type": "list"
+                  "description": "the capability value",
+                  "name": "value",
+                  "type": "string"
                 },
                 {
-                  "description": "the destination physical network",
-                  "name": "destinationphysicalnetworkid",
-                  "type": "string"
+                  "description": "can this service capability value can be choosable while creatine network offerings",
+                  "name": "canchooseservicecapability",
+                  "type": "boolean"
                 },
                 {
-                  "description": "state of the network provider",
-                  "name": "state",
+                  "description": "the capability name",
+                  "name": "name",
                   "type": "string"
-                },
+                }
+              ],
+              "type": "list"
+            },
+            {
+              "description": "the service provider name",
+              "name": "provider",
+              "response": [
                 {
                   "description": "the physical network this belongs to",
                   "name": "physicalnetworkid",
                   "type": "string"
                 },
                 {
+                  "description": "the destination physical network",
+                  "name": "destinationphysicalnetworkid",
+                  "type": "string"
+                },
+                {
                   "description": "the provider name",
                   "name": "name",
                   "type": "string"
                 },
                 {
+                  "description": "state of the network provider",
+                  "name": "state",
+                  "type": "string"
+                },
+                {
                   "description": "true if individual services can be enabled/disabled",
                   "name": "canenableindividualservice",
                   "type": "boolean"
@@ -122,33 +240,11 @@
                   "description": "uuid of the network provider",
                   "name": "id",
                   "type": "string"
-                }
-              ],
-              "type": "list"
-            },
-            {
-              "description": "the service name",
-              "name": "name",
-              "type": "string"
-            },
-            {
-              "description": "the list of capabilities",
-              "name": "capability",
-              "response": [
-                {
-                  "description": "the capability name",
-                  "name": "name",
-                  "type": "string"
-                },
-                {
-                  "description": "the capability value",
-                  "name": "value",
-                  "type": "string"
                 },
                 {
-                  "description": "can this service capability value can be choosable while creatine network offerings",
-                  "name": "canchooseservicecapability",
-                  "type": "boolean"
+                  "description": "services for this provider",
+                  "name": "servicelist",
+                  "type": "list"
                 }
               ],
               "type": "list"
@@ -157,38 +253,8 @@
           "type": "list"
         },
         {
-          "description": " indicated if the offering can support region level vpc",
-          "name": "supportsregionLevelvpc",
-          "type": "boolean"
-        },
-        {
-          "description": "true if vpc offering is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
-        },
-        {
-          "description": "the id of the vpc offering",
-          "name": "id",
-          "type": "string"
-        },
-        {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
-          "description": "the zone name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "zone",
-          "type": "string"
-        },
-        {
-          "description": "the date this vpc offering was created",
-          "name": "created",
-          "type": "date"
-        },
-        {
-          "description": "the domain ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "domainid",
+          "description": "the name of the vpc offering",
+          "name": "name",
           "type": "string"
         },
         {
@@ -197,22 +263,16 @@
           "type": "integer"
         },
         {
-          "description": "an alternate display text of the vpc offering.",
-          "name": "displaytext",
-          "type": "string"
-        },
-        {
-          "description": "the domain name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "domain",
-          "type": "string"
-        },
-        {},
-        {
           "description": " indicates if the vpc offering supports distributed router for one-hop forwarding",
           "name": "distributedvpcrouter",
           "type": "boolean"
         },
         {
+          "description": "the id of the vpc offering",
+          "name": "id",
+          "type": "string"
+        },
+        {
           "description": "state of the vpc offering. Can be Disabled/Enabled",
           "name": "state",
           "type": "string"
@@ -225,9 +285,9 @@
       "name": "createPod",
       "params": [
         {
-          "description": "the ending IP address for the Pod",
+          "description": "Allocation state of this Pod for allocation of new resources",
           "length": 255,
-          "name": "endip",
+          "name": "allocationstate",
           "required": false,
           "type": "string"
         },
@@ -239,17 +299,17 @@
           "type": "string"
         },
         {
-          "description": "Allocation state of this Pod for allocation of new resources",
+          "description": "the gateway for the Pod",
           "length": 255,
-          "name": "allocationstate",
-          "required": false,
+          "name": "gateway",
+          "required": true,
           "type": "string"
         },
         {
-          "description": "the netmask for the Pod",
+          "description": "the ending IP address for the Pod",
           "length": 255,
-          "name": "netmask",
-          "required": true,
+          "name": "endip",
+          "required": false,
           "type": "string"
         },
         {
@@ -261,16 +321,16 @@
           "type": "uuid"
         },
         {
-          "description": "the name of the Pod",
+          "description": "the netmask for the Pod",
           "length": 255,
-          "name": "name",
+          "name": "netmask",
           "required": true,
           "type": "string"
         },
         {
-          "description": "the gateway for the Pod",
+          "description": "the name of the Pod",
           "length": 255,
-          "name": "gateway",
+          "name": "name",
           "required": true,
           "type": "string"
         }
@@ -278,33 +338,94 @@
       "related": "listPods,updatePod,createManagementNetworkIpRange",
       "response": [
         {
-          "description": "the gateway of the Pod",
-          "name": "gateway",
+          "description": "the IP ranges for the Pod",
+          "name": "ipranges",
+          "response": [
+            {
+              "description": "indicates Vlan ID for the range",
+              "name": "vlanid",
+              "type": "string"
+            },
+            {
+              "description": "the ending IP for the range",
+              "name": "endip",
+              "type": "string"
+            },
+            {
+              "description": "indicates if range is dedicated for CPVM and SSVM",
+              "name": "forsystemvms",
+              "type": "string"
+            },
+            {
+              "description": "the starting IP for the range",
+              "name": "startip",
+              "type": "string"
+            }
+          ],
+          "type": "list"
+        },
+        {
+          "description": "the ending IP for the Pod. This parameter is deprecated, please use 'endip' from ipranges parameter.",
+          "name": "endip",
+          "type": "list"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the Zone ID of the Pod",
+          "name": "zoneid",
+          "type": "string"
+        },
+        {
+          "description": "the starting IP for the Pod. This parameter is deprecated, please use 'startip' from ipranges parameter.",
+          "name": "startip",
+          "type": "list"
+        },
+        {
+          "description": "the name of the Pod",
+          "name": "name",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the Pod",
+          "name": "id",
           "type": "string"
         },
-        {},
         {
           "description": "the capacity of the Pod",
           "name": "capacity",
           "response": [
             {
+              "description": "the capacity currently in use",
+              "name": "capacityused",
+              "type": "long"
+            },
+            {
+              "description": "the percentage of capacity currently in use",
+              "name": "percentused",
+              "type": "string"
+            },
+            {
               "description": "the Zone ID",
               "name": "zoneid",
               "type": "string"
             },
             {
-              "description": "the Zone name",
-              "name": "zonename",
-              "type": "string"
+              "description": "the total capacity available",
+              "name": "capacitytotal",
+              "type": "long"
             },
             {
-              "description": "the capacity name",
-              "name": "name",
+              "description": "the Zone name",
+              "name": "zonename",
               "type": "string"
             },
             {
-              "description": "the Pod name",
-              "name": "podname",
+              "description": "the Cluster name",
+              "name": "clustername",
               "type": "string"
             },
             {
@@ -313,33 +434,23 @@
               "type": "long"
             },
             {
-              "description": "the total capacity available",
-              "name": "capacitytotal",
-              "type": "long"
-            },
-            {
-              "description": "the percentage of capacity currently in use",
-              "name": "percentused",
-              "type": "string"
-            },
-            {
               "description": "the capacity type",
               "name": "type",
               "type": "short"
             },
             {
-              "description": "the Cluster ID",
-              "name": "clusterid",
+              "description": "the capacity name",
+              "name": "name",
               "type": "string"
             },
             {
-              "description": "the capacity currently in use",
-              "name": "capacityused",
-              "type": "long"
+              "description": "the Pod name",
+              "name": "podname",
+              "type": "string"
             },
             {
-              "description": "the Cluster name",
-              "name": "clustername",
+              "description": "the Cluster ID",
+              "name": "clusterid",
               "type": "string"
             },
             {
@@ -350,66 +461,47 @@
           ],
           "type": "list"
         },
-        {},
-        {
-          "description": "the ending IP for the Pod",
-          "name": "endip",
-          "type": "list"
-        },
-        {
-          "description": "the allocation state of the Pod",
-          "name": "allocationstate",
-          "type": "string"
-        },
         {
           "description": "the netmask of the Pod",
           "name": "netmask",
           "type": "string"
         },
+        {},
         {
-          "description": "the Zone name of the Pod",
-          "name": "zonename",
-          "type": "string"
-        },
-        {
-          "description": "indicates Vlan ID for the range",
+          "description": "indicates Vlan ID for the range. This parameter is deprecated, please use 'vlanid' from ipranges parameter.",
           "name": "vlanid",
           "type": "list"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the gateway of the Pod",
+          "name": "gateway",
           "type": "string"
         },
         {
-          "description": "the Zone ID of the Pod",
-          "name": "zoneid",
+          "description": "the Zone name of the Pod",
+          "name": "zonename",
           "type": "string"
         },
         {
-          "description": "indicates if range is dedicated for CPVM and SSVM",
+          "description": "indicates if range is dedicated for CPVM and SSVM. This parameter is deprecated, please use 'forsystemvms' from ipranges parameter.",
           "name": "forsystemvms",
           "type": "list"
         },
         {
-          "description": "the name of the Pod",
-          "name": "name",
-          "type": "string"
-        },
-        {
-          "description": "the starting IP for the Pod",
-          "name": "startip",
-          "type": "list"
-        },
-        {
-          "description": "the ID of the Pod",
-          "name": "id",
-          "type": "string"
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
         },
+        {},
         {
           "description": "the current status of the latest async job acting on this object",
           "name": "jobstatus",
           "type": "integer"
+        },
+        {
+          "description": "the allocation state of the Pod",
+          "name": "allocationstate",
+          "type": "string"
         }
       ]
     },
@@ -419,6 +511,20 @@
       "name": "ldapCreateAccount",
       "params": [
         {
+          "description": "Account UUID, required for adding account from external provisioning system",
+          "length": 255,
+          "name": "accountid",
+          "required": false,
+          "type": "string"
+        },
+        {
+          "description": "Unique username.",
+          "length": 255,
+          "name": "username",
+          "required": true,
+          "type": "string"
+        },
+        {
           "description": "details for account used to store specific parameters",
           "length": 255,
           "name": "accountdetails",
@@ -440,34 +546,19 @@
           "type": "string"
         },
         {
-          "description": "Network domain for the account's networks",
-          "length": 255,
-          "name": "networkdomain",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "Creates the account under the specified role.",
+          "description": "Creates the user under the specified domain.",
           "length": 255,
-          "name": "roleid",
-          "related": "createRole,importRole,listRoles,updateRole",
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin",
-          "length": 255,
-          "name": "accounttype",
-          "required": false,
-          "type": "short"
-        },
-        {
-          "description": "Creates the user under the specified domain.",
+          "description": "Network domain for the account's networks",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "networkdomain",
           "required": false,
-          "type": "uuid"
+          "type": "string"
         },
         {
           "description": "User UUID, required for adding account from external provisioning system",
@@ -477,81 +568,152 @@
           "type": "string"
         },
         {
-          "description": "Account UUID, required for adding account from external provisioning system",
+          "description": "Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin",
           "length": 255,
-          "name": "accountid",
+          "name": "accounttype",
           "required": false,
-          "type": "string"
+          "type": "short"
         },
         {
-          "description": "Unique username.",
+          "description": "Creates the account under the specified role.",
           "length": 255,
-          "name": "username",
-          "required": true,
-          "type": "string"
+          "name": "roleid",
+          "related": "createRole,importRole,listRoles,updateRole",
+          "required": false,
+          "type": "uuid"
         }
       ],
       "related": "createAccount,disableAccount,enableAccount,lockAccount,updateAccount,markDefaultZoneForAccount,listAccounts,listAccounts",
       "response": [
         {
-          "description": "the total number of network traffic bytes received",
-          "name": "receivedbytes",
+          "description": "the total number of projects being administrated by this account",
+          "name": "projecttotal",
           "type": "long"
         },
         {
-          "description": "the total volume being used by this account",
-          "name": "volumetotal",
+          "description": "the total number of virtual machines deployed by this account",
+          "name": "vmtotal",
           "type": "long"
         },
         {
-          "description": "the total number of projects the account can own",
-          "name": "projectlimit",
+          "description": "the total primary storage space (in GiB) available to be used for this account",
+          "name": "primarystorageavailable",
           "type": "string"
         },
         {
-          "description": "name of the Domain the account belongs to",
-          "name": "domain",
-          "type": "string"
+          "description": "true if account is default, false otherwise",
+          "name": "isdefault",
+          "type": "boolean"
         },
         {
-          "description": "the total number of virtual machines running for this account",
-          "name": "vmrunning",
+          "description": "the date when this account was created",
+          "name": "created",
+          "type": "date"
+        },
+        {
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
           "type": "integer"
         },
         {
-          "description": "the total number of virtual machines deployed by this account",
-          "name": "vmtotal",
-          "type": "long"
+          "description": "Base64 string representation of the resource icon",
+          "name": "icon",
+          "type": "resourceiconresponse"
         },
         {
-          "description": "the network domain",
-          "name": "networkdomain",
+          "description": "the total number of virtual machines running for this account",
+          "name": "vmrunning",
+          "type": "integer"
+        },
+        {
+          "description": "the total number of cpu cores available to be created for this account",
+          "name": "cpuavailable",
           "type": "string"
         },
-        {},
         {
-          "description": "the total primary storage space (in GiB) available to be used for this account",
-          "name": "primarystorageavailable",
+          "description": "the total secondary storage space (in GiB) available to be used for this account",
+          "name": "secondarystorageavailable",
           "type": "string"
         },
         {
-          "description": "the total number of public ip addresses allocated for this account",
-          "name": "iptotal",
+          "description": "the network domain",
+          "name": "networkdomain",
+          "type": "string"
+        },
+        {
+          "description": "name of the Domain the account belongs to",
+          "name": "domain",
+          "type": "string"
+        },
+        {},
+        {
+          "description": "the total number of network traffic bytes sent",
+          "name": "sentbytes",
+          "type": "long"
+        },
+        {
+          "description": "the total volume being used by this account",
+          "name": "volumetotal",
           "type": "long"
         },
         {
+          "description": "the default zone of the account",
+          "name": "defaultzoneid",
+          "type": "string"
+        },
+        {
+          "description": "the id of the account",
+          "name": "id",
+          "type": "string"
+        },
+        {
+          "description": "the total secondary storage space (in GiB) owned by account",
+          "name": "secondarystoragetotal",
+          "type": "float"
+        },
+        {
+          "description": "the total secondary storage space (in GiB) the account can own",
+          "name": "secondarystoragelimit",
+          "type": "string"
+        },
+        {
+          "description": "the total number of vpcs the account can own",
+          "name": "vpclimit",
+          "type": "string"
+        },
+        {
           "description": "the list of acl groups that account belongs to",
           "name": "groups",
           "type": "list"
         },
         {
-          "description": "the total number of templates which can be created by this account",
-          "name": "templatelimit",
+          "description": "the total number of snapshots which can be stored by this account",
+          "name": "snapshotlimit",
           "type": "string"
         },
         {
-          "description": "the total number of cpu cores available to be created for this account",
-          "name": "cpuavailable",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the total number of vpcs available to be created for this account",
+          "name": "vpcavailable",
+          "type": "string"
+        },
+        {
+          "description": "id of the Domain the account belongs to",
+          "name": "domainid",
+          "type": "string"
+        },
+        {
+          "description": "the total number of cpu cores the account can own",
+          "name": "cpulimit",
+          "type": "string"
+        },
+        {
+          "description": "the name of the role",
+          "name": "rolename",
           "type": "string"
         },
         {
@@ -560,8 +722,43 @@
           "type": "string"
         },
         {
-          "description": "the id of the account",
-          "name": "id",
+          "description": "true if the account requires cleanup",
+          "name": "iscleanuprequired",
+          "type": "boolean"
+        },
+        {
+          "description": "the total number of projects the account can own",
+          "name": "projectlimit",
+          "type": "string"
+        },
+        {
+          "description": "the total number of snapshots available for this account",
+          "name": "snapshotavailable",
+          "type": "string"
+        },
+        {
+          "description": "path of the Domain the account belongs to",
+          "name": "domainpath",
+          "type": "string"
+        },
+        {
+          "description": "the state of the account",
+          "name": "state",
+          "type": "string"
+        },
+        {
+          "description": "the total number of network traffic bytes received",
+          "name": "receivedbytes",
+          "type": "long"
+        },
+        {
+          "description": "the total volume which can be used by this account",
+          "name": "volumelimit",
+          "type": "string"
+        },
+        {
+          "description": "the type of the role (Admin, ResourceAdmin, DomainAdmin, User)",
+          "name": "roletype",
           "type": "string"
         },
         {
@@ -575,50 +772,50 @@
           "type": "string"
         },
         {
-          "description": "path of the Domain the account belongs to",
-          "name": "domainpath",
-          "type": "string"
+          "description": "the total number of networks owned by account",
+          "name": "networktotal",
+          "type": "long"
         },
         {
-          "description": "the total number of public ip addresses available for this account to acquire",
-          "name": "ipavailable",
+          "description": "the total memory (in MB) the account can own",
+          "name": "memorylimit",
           "type": "string"
         },
         {
-          "description": "the total number of virtual machines stopped for this account",
-          "name": "vmstopped",
-          "type": "integer"
+          "description": "the total number of cpu cores owned by account",
+          "name": "cputotal",
+          "type": "long"
         },
         {
-          "description": "the total volume available for this account",
-          "name": "volumeavailable",
+          "description": "the total number of public ip addresses allocated for this account",
+          "name": "iptotal",
+          "type": "long"
+        },
+        {
+          "description": "the total number of templates available to be created by this account",
+          "name": "templateavailable",
           "type": "string"
         },
         {
+          "description": "account type (admin, domain-admin, user)",
+          "name": "accounttype",
+          "type": "short"
+        },
+        {
           "description": "the list of users associated with account",
           "name": "user",
           "response": [
             {
-              "description": "the date and time the user account was created",
-              "name": "created",
-              "type": "date"
-            },
-            {
-              "description": "the source type of the user in lowercase, such as native, ldap, saml2",
-              "name": "usersource",
+              "description": "the ID of the role",
+              "name": "roleid",
               "type": "string"
             },
             {
-              "description": "the secret key of the user",
-              "name": "secretkey",
+              "description": "the user firstname",
+              "name": "firstname",
               "type": "string"
             },
             {
-              "description": "the account type of the user",
-              "name": "accounttype",
-              "type": "short"
-            },
-            {
               "description": "the user state",
               "name": "state",
               "type": "string"
@@ -629,13 +826,23 @@
               "type": "string"
             },
             {
-              "description": "the user name",
-              "name": "username",
+              "description": "Base64 string representation of the resource icon",
+              "name": "icon",
+              "type": "resourceiconresponse"
+            },
+            {
+              "description": "the boolean value representing if the updating target is in caller's child domain",
+              "name": "iscallerchilddomain",
+              "type": "boolean"
+            },
+            {
+              "description": "the user lastname",
+              "name": "lastname",
               "type": "string"
             },
             {
-              "description": "the api key of the user",
-              "name": "apikey",
+              "description": "the secret key of the user",
+              "name": "secretkey",
               "type": "string"
             },
             {
@@ -644,18 +851,28 @@
               "type": "string"
             },
             {
+              "description": "the account type of the user",
+              "name": "accounttype",
+              "type": "short"
+            },
+            {
               "description": "the account name of the user",
               "name": "account",
               "type": "string"
             },
             {
+              "description": "the date and time the user account was created",
+              "name": "created",
+              "type": "date"
+            },
+            {
               "description": "the type of the role",
               "name": "roletype",
               "type": "string"
             },
             {
-              "description": "the timezone user was created in",
-              "name": "timezone",
+              "description": "the name of the role",
+              "name": "rolename",
               "type": "string"
             },
             {
@@ -664,18 +881,13 @@
               "type": "string"
             },
             {
-              "description": "the domain ID of the user",
-              "name": "domainid",
-              "type": "string"
-            },
-            {
-              "description": "the user lastname",
-              "name": "lastname",
+              "description": "the timezone user was created in",
+              "name": "timezone",
               "type": "string"
             },
             {
-              "description": "the name of the role",
-              "name": "rolename",
+              "description": "the account ID of the user",
+              "name": "accountid",
               "type": "string"
             },
             {
@@ -684,97 +896,53 @@
               "type": "boolean"
             },
             {
-              "description": "the ID of the role",
-              "name": "roleid",
+              "description": "the user name",
+              "name": "username",
               "type": "string"
             },
             {
-              "description": "the user firstname",
-              "name": "firstname",
+              "description": "the source type of the user in lowercase, such as native, ldap, saml2",
+              "name": "usersource",
               "type": "string"
             },
             {
-              "description": "the account ID of the user",
-              "name": "accountid",
+              "description": "the domain ID of the user",
+              "name": "domainid",
               "type": "string"
             },
             {
-              "description": "the boolean value representing if the updating target is in caller's child domain",
-              "name": "iscallerchilddomain",
-              "type": "boolean"
+              "description": "the api key of the user",
+              "name": "apikey",
+              "type": "string"
             }
           ],
           "type": "list"
         },
+        {},
         {
-          "description": "the total number of networks the account can own",
-          "name": "networklimit",
-          "type": "string"
-        },
-        {
-          "description": "the total number of cpu cores the account can own",
-          "name": "cpulimit",
-          "type": "string"
-        },
-        {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
-          "description": "the total number of projects being administrated by this account",
-          "name": "projecttotal",
+          "description": "the total number of snapshots stored by this account",
+          "name": "snapshottotal",
           "type": "long"
         },
         {
-          "description": "the total number of snapshots available for this account",
-          "name": "snapshotavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of vpcs the account can own",
-          "name": "vpclimit",
-          "type": "string"
-        },
-        {
-          "description": "the total number of public ip addresses this account can acquire",
-          "name": "iplimit",
-          "type": "string"
-        },
-        {
-          "description": "the total secondary storage space (in GiB) the account can own",
-          "name": "secondarystoragelimit",
-          "type": "string"
-        },
-        {
-          "description": "the name of the role",
-          "name": "rolename",
-          "type": "string"
-        },
-        {
-          "description": "id of the Domain the account belongs to",
-          "name": "domainid",
+          "description": "the total number of virtual machines available for this account to acquire",
+          "name": "vmavailable",
           "type": "string"
         },
         {
-          "description": "the total volume which can be used by this account",
-          "name": "volumelimit",
+          "description": "the total volume available for this account",
+          "name": "volumeavailable",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
-          "description": "the total number of networks owned by account",
-          "name": "networktotal",
+          "description": "the total number of vpcs owned by account",
+          "name": "vpctotal",
           "type": "long"
         },
         {
-          "description": "the total memory (in MB) the account can own",
-          "name": "memorylimit",
-          "type": "string"
+          "description": "the total memory (in MB) owned by account",
+          "name": "memorytotal",
+          "type": "long"
         },
         {
           "description": "the ID of the role",
@@ -782,37 +950,6 @@
           "type": "string"
         },
         {
-          "description": "true if the account requires cleanup",
-          "name": "iscleanuprequired",
-          "type": "boolean"
-        },
-        {
-          "description": "account type (admin, domain-admin, user)",
-          "name": "accounttype",
-          "type": "short"
-        },
-        {},
-        {
-          "description": "the type of the role (Admin, ResourceAdmin, DomainAdmin, User)",
-          "name": "roletype",
-          "type": "string"
-        },
-        {
-          "description": "the total secondary storage space (in GiB) owned by account",
-          "name": "secondarystoragetotal",
-          "type": "float"
-        },
-        {
-          "description": "the total number of virtual machines that can be deployed by this account",
-          "name": "vmlimit",
-          "type": "string"
-        },
-        {
-          "description": "the total number of vpcs available to be created for this account",
-          "name": "vpcavailable",
-          "type": "string"
-        },
-        {
           "description": "the total memory (in MB) available to be created for this account",
           "name": "memoryavailable",
           "type": "string"
@@ -823,43 +960,8 @@
           "type": "long"
         },
         {
-          "description": "details for the account",
-          "name": "accountdetails",
-          "type": "map"
-        },
-        {
-          "description": "the state of the account",
-          "name": "state",
-          "type": "string"
-        },
-        {
-          "description": "the total number of templates available to be created by this account",
-          "name": "templateavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of vpcs owned by account",
-          "name": "vpctotal",
-          "type": "long"
-        },
-        {
-          "description": "the total number of cpu cores owned by account",
-          "name": "cputotal",
-          "type": "long"
-        },
-        {
-          "description": "the total number of network traffic bytes sent",
-          "name": "sentbytes",
-          "type": "long"
-        },
-        {
-          "description": "the total secondary storage space (in GiB) available to be used for this account",
-          "name": "secondarystorageavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of snapshots which can be stored by this account",
-          "name": "snapshotlimit",
+          "description": "the total number of virtual machines that can be deployed by this account",
+          "name": "vmlimit",
           "type": "string"
         },
         {
@@ -868,19 +970,24 @@
           "type": "string"
         },
         {
-          "description": "the default zone of the account",
-          "name": "defaultzoneid",
+          "description": "the total number of templates which can be created by this account",
+          "name": "templatelimit",
           "type": "string"
         },
         {
-          "description": "the total number of virtual machines available for this account to acquire",
-          "name": "vmavailable",
+          "description": "the total number of virtual machines stopped for this account",
+          "name": "vmstopped",
+          "type": "integer"
+        },
+        {
+          "description": "the total number of networks the account can own",
+          "name": "networklimit",
           "type": "string"
         },
         {
-          "description": "the total memory (in MB) owned by account",
-          "name": "memorytotal",
-          "type": "long"
+          "description": "details for the account",
+          "name": "accountdetails",
+          "type": "map"
         },
         {
           "description": "the name of the account",
@@ -888,14 +995,14 @@
           "type": "string"
         },
         {
-          "description": "true if account is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
+          "description": "the total number of public ip addresses available for this account to acquire",
+          "name": "ipavailable",
+          "type": "string"
         },
         {
-          "description": "the total number of snapshots stored by this account",
-          "name": "snapshottotal",
-          "type": "long"
+          "description": "the total number of public ip addresses this account can acquire",
+          "name": "iplimit",
+          "type": "string"
         }
       ],
       "since": "4.2.0"
@@ -914,27 +1021,27 @@
         }
       ],
       "response": [
-        {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
-        },
+        {},
         {},
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
           "description": "any text associated with the success or failure",
           "name": "displaytext",
           "type": "string"
         },
-        {},
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
         }
       ],
       "since": "4.6.0"
@@ -953,12 +1060,12 @@
           "type": "uuid"
         },
         {
-          "description": "ID of the zone the template is being copied to.",
+          "description": "A list of IDs of the zones that the template needs to be copied to.Specify this list if the template needs to copied to multiple zones in one go. Do not specify destzoneid and destzoneids together, however one of them is required.",
           "length": 255,
-          "name": "destzoneid",
+          "name": "destzoneids",
           "related": "createZone,updateZone,listZones,listZones",
           "required": false,
-          "type": "uuid"
+          "type": "list"
         },
         {
           "description": "Template ID.",
@@ -969,24 +1076,29 @@
           "type": "uuid"
         },
         {
-          "description": "A list of IDs of the zones that the template needs to be copied to.Specify this list if the template needs to copied to multiple zones in one go. Do not specify destzoneid and destzoneids together, however one of them is required.",
+          "description": "ID of the zone the template is being copied to.",
           "length": 255,
-          "name": "destzoneids",
+          "name": "destzoneid",
           "related": "createZone,updateZone,listZones,listZones",
           "required": false,
-          "type": "list"
+          "type": "uuid"
         }
       ],
       "related": "prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos",
       "response": [
         {
-          "description": "the name of the OS type for this template.",
-          "name": "ostypename",
-          "type": "string"
+          "description": "Lists the download progress of a template across all secondary storages",
+          "name": "downloaddetails",
+          "type": "list"
         },
         {
-          "description": "the account name to which the template belongs",
-          "name": "account",
+          "description": "additional key/value details tied with template",
+          "name": "details",
+          "type": "map"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
@@ -995,67 +1107,132 @@
           "type": "string"
         },
         {
-          "description": "KVM Only: true if template is directly downloaded to Primary Storage bypassing Secondary Storage",
-          "name": "directdownload",
+          "description": "true if the template is ready to be deployed from, false otherwise.",
+          "name": "isready",
           "type": "boolean"
         },
         {
-          "description": "the hypervisor on which the template runs",
-          "name": "hypervisor",
+          "description": "the format of the template.",
+          "name": "format",
+          "type": "imageformat"
+        },
+        {
+          "description": "the status of the template",
+          "name": "status",
           "type": "string"
         },
         {
-          "description": "the tag of this template",
-          "name": "templatetag",
+          "description": "the processor bit size",
+          "name": "bits",
+          "type": "int"
+        },
+        {
+          "description": "checksum of the template",
+          "name": "checksum",
           "type": "string"
         },
         {
-          "description": "the project name of the template",
-          "name": "project",
+          "description": "true if this template is a public template, false otherwise",
+          "name": "ispublic",
+          "type": "boolean"
+        },
+        {
+          "description": "the template ID of the parent template if present",
+          "name": "sourcetemplateid",
           "type": "string"
         },
         {
-          "description": "additional key/value details tied with template",
-          "name": "details",
-          "type": "map"
+          "description": "the date this template was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "true if the template is extractable, false otherwise",
-          "name": "isextractable",
-          "type": "boolean"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
-          "description": "the template ID",
-          "name": "id",
+          "description": "the ID of the domain to which the template belongs",
+          "name": "domainid",
           "type": "string"
         },
         {
-          "description": "the ID of the zone for this template",
-          "name": "zoneid",
+          "description": "the name of the secondary storage host for the template",
+          "name": "hostname",
           "type": "string"
         },
         {
-          "description": "the list of resource tags associated",
-          "name": "tags",
-          "response": [
-            {
-              "description": "the project name where tag belongs to",
-              "name": "project",
-              "type": "string"
-            },
-            {
-              "description": "tag key name",
-              "name": "key",
+          "description": "the URL which the template/iso is registered from",
+          "name": "url",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the secondary storage host for the template",
+          "name": "hostid",
+          "type": "string"
+        },
+        {
+          "description": "true if the reset password feature is enabled, false otherwise",
+          "name": "passwordenabled",
+          "type": "boolean"
+        },
+        {
+          "description": "the template ID",
+          "name": "id",
+          "type": "string"
+        },
+        {
+          "description": "the size of the template",
+          "name": "size",
+          "type": "long"
+        },
+        {
+          "description": "the account id to which the template belongs",
+          "name": "accountid",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the OS type for this template.",
+          "name": "ostypeid",
+          "type": "string"
+        },
+        {
+          "description": "the project id of the template",
+          "name": "projectid",
+          "type": "string"
+        },
+        {
+          "description": "true if the template is managed across all Zones, false otherwise",
+          "name": "crossZones",
+          "type": "boolean"
+        },
+        {
+          "description": "VMware only: true if template is deployed without orchestrating disks and networks but \"as-is\" defined in the template.",
+          "name": "deployasis",
+          "type": "boolean"
+        },
+        {
+          "description": "if Datadisk template, then id of the root disk template this template belongs to",
+          "name": "parenttemplateid",
+          "type": "string"
+        },
+        {
+          "description": "the list of resource tags associated",
+          "name": "tags",
+          "response": [
+            {
+              "description": "the ID of the domain associated with the tag",
+              "name": "domainid",
               "type": "string"
             },
             {
-              "description": "resource type",
-              "name": "resourcetype",
+              "description": "tag value",
+              "name": "value",
               "type": "string"
             },
             {
-              "description": "the domain associated with the tag",
-              "name": "domain",
+              "description": "resource type",
+              "name": "resourcetype",
               "type": "string"
             },
             {
@@ -1064,92 +1241,78 @@
               "type": "string"
             },
             {
-              "description": "the project id the tag belongs to",
-              "name": "projectid",
+              "description": "the domain associated with the tag",
+              "name": "domain",
               "type": "string"
             },
             {
-              "description": "the account associated with the tag",
-              "name": "account",
+              "description": "tag key name",
+              "name": "key",
               "type": "string"
             },
             {
-              "description": "the ID of the domain associated with the tag",
-              "name": "domainid",
+              "description": "id of the resource",
+              "name": "resourceid",
               "type": "string"
             },
             {
-              "description": "tag value",
-              "name": "value",
+              "description": "the project id the tag belongs to",
+              "name": "projectid",
               "type": "string"
             },
             {
-              "description": "id of the resource",
-              "name": "resourceid",
+              "description": "the account associated with the tag",
+              "name": "account",
+              "type": "string"
+            },
+            {
+              "description": "the project name where tag belongs to",
+              "name": "project",
               "type": "string"
             }
           ],
           "type": "set"
         },
         {
-          "description": "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory",
-          "name": "isdynamicallyscalable",
-          "type": "boolean"
-        },
-        {
-          "description": "checksum of the template",
-          "name": "checksum",
-          "type": "string"
-        },
-        {
-          "description": "VMware only: true if template is deployed without orchestrating disks and networks but \"as-is\" defined in the template.",
-          "name": "deployasis",
-          "type": "boolean"
-        },
-        {
           "description": "the name of the zone for this template",
           "name": "zonename",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
-          "description": "the physical size of the template",
-          "name": "physicalsize",
-          "type": "long"
+          "description": "VMware only: additional key/value details tied with deploy-as-is template",
+          "name": "deployasisdetails",
+          "type": "map"
         },
         {
-          "description": "the date this template was created",
-          "name": "created",
-          "type": "date"
+          "description": "true if this template is a featured template, false otherwise",
+          "name": "isfeatured",
+          "type": "boolean"
         },
+        {},
         {
-          "description": "the format of the template.",
-          "name": "format",
-          "type": "imageformat"
+          "description": "the name of the OS type for this template.",
+          "name": "ostypename",
+          "type": "string"
         },
         {
-          "description": "true if this template is a featured template, false otherwise",
-          "name": "isfeatured",
+          "description": "true if the template is extractable, false otherwise",
+          "name": "isextractable",
           "type": "boolean"
         },
         {
-          "description": "the date this template was removed",
-          "name": "removed",
-          "type": "date"
+          "description": "the account name to which the template belongs",
+          "name": "account",
+          "type": "string"
         },
         {
-          "description": "the name of the domain to which the template belongs",
-          "name": "domain",
+          "description": "the project name of the template",
+          "name": "project",
           "type": "string"
         },
         {
-          "description": "the account id to which the template belongs",
-          "name": "accountid",
-          "type": "string"
+          "description": "true if template is sshkey enabled, false otherwise",
+          "name": "sshkeyenabled",
+          "type": "boolean"
         },
         {
           "description": "if root disk template, then ids of the datas disk templates this template owns",
@@ -1157,121 +1320,114 @@
           "type": "set"
         },
         {
-          "description": "Lists the download progress of a template across all secondary storages",
-          "name": "downloaddetails",
-          "type": "list"
-        },
-        {
-          "description": "the ID of the domain to which the template belongs",
-          "name": "domainid",
-          "type": "string"
-        },
-        {
-          "description": "the name of the secondary storage host for the template",
-          "name": "hostname",
+          "description": "the template display text",
+          "name": "displaytext",
           "type": "string"
         },
+        {},
         {
-          "description": "true if template requires HVM enabled, false otherwise",
-          "name": "requireshvm",
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
           "type": "boolean"
         },
         {
-          "description": "the template display text",
-          "name": "displaytext",
-          "type": "string"
+          "description": "the physical size of the template",
+          "name": "physicalsize",
+          "type": "long"
         },
         {
-          "description": "if Datadisk template, then id of the root disk template this template belongs to",
-          "name": "parenttemplateid",
+          "description": "the name of the domain to which the template belongs",
+          "name": "domain",
           "type": "string"
         },
-        {},
         {
-          "description": "true if the template is managed across all Zones, false otherwise",
-          "name": "crossZones",
-          "type": "boolean"
+          "description": "Base64 string representation of the resource icon",
+          "name": "icon",
+          "type": "resourceiconresponse"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the template name",
+          "name": "name",
           "type": "string"
         },
         {
-          "description": "the URL which the template/iso is registered from",
-          "name": "url",
+          "description": "the tag of this template",
+          "name": "templatetag",
           "type": "string"
         },
         {
-          "description": "the size of the template",
-          "name": "size",
-          "type": "long"
-        },
-        {
-          "description": "the ID of the secondary storage host for the template",
-          "name": "hostid",
+          "description": "the ID of the zone for this template",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "true if this template is a public template, false otherwise",
-          "name": "ispublic",
+          "description": "true if template requires HVM enabled, false otherwise",
+          "name": "requireshvm",
           "type": "boolean"
         },
-        {},
         {
-          "description": "true if template is sshkey enabled, false otherwise",
-          "name": "sshkeyenabled",
+          "description": "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory",
+          "name": "isdynamicallyscalable",
           "type": "boolean"
         },
         {
-          "description": "the processor bit size",
-          "name": "bits",
-          "type": "int"
-        },
-        {
-          "description": "true if the template is ready to be deployed from, false otherwise.",
-          "name": "isready",
+          "description": "true if the ISO is bootable, false otherwise",
+          "name": "bootable",
           "type": "boolean"
         },
         {
-          "description": "true if the reset password feature is enabled, false otherwise",
-          "name": "passwordenabled",
-          "type": "boolean"
+          "description": "the date this template was removed",
+          "name": "removed",
+          "type": "date"
         },
         {
-          "description": "VMware only: additional key/value details tied with deploy-as-is template",
-          "name": "deployasisdetails",
-          "type": "map"
+          "description": "KVM Only: true if template is directly downloaded to Primary Storage bypassing Secondary Storage",
+          "name": "directdownload",
+          "type": "boolean"
         },
         {
-          "description": "the ID of the OS type for this template.",
-          "name": "ostypeid",
+          "description": "the hypervisor on which the template runs",
+          "name": "hypervisor",
           "type": "string"
-        },
+        }
+      ]
+    },
+    {
+      "description": "Deletes a autoscale vm profile.",
+      "isasync": true,
+      "name": "deleteAutoScaleVmProfile",
+      "params": [
         {
-          "description": "the project id of the template",
-          "name": "projectid",
-          "type": "string"
-        },
+          "description": "the ID of the autoscale profile",
+          "length": 255,
+          "name": "id",
+          "related": "createAutoScaleVmProfile,listAutoScaleVmProfiles,updateAutoScaleVmProfile",
+          "required": true,
+          "type": "uuid"
+        }
+      ],
+      "response": [
         {
-          "description": "true if the ISO is bootable, false otherwise",
-          "name": "bootable",
-          "type": "boolean"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
+        {},
+        {},
         {
-          "description": "the template ID of the parent template if present",
-          "name": "sourcetemplateid",
+          "description": "any text associated with the success or failure",
+          "name": "displaytext",
           "type": "string"
         },
         {
-          "description": "the template name",
-          "name": "name",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "the status of the template",
-          "name": "status",
-          "type": "string"
+          "description": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
         }
       ]
     },
@@ -1288,62 +1444,27 @@
           "type": "string"
         },
         {
-          "description": "The host/agent uuid to which the certificate has to be provisioned (issued and propagated)",
-          "length": 255,
-          "name": "hostid",
-          "related": "addHost,cancelHostMaintenance,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
-          "required": true,
-          "type": "uuid"
-        },
-        {
           "description": "Whether to attempt reconnection with host/agent after successful deployment of certificate. When option is not provided, configured global setting is used",
           "length": 255,
           "name": "reconnect",
           "required": false,
           "type": "boolean"
-        }
-      ],
-      "response": [
-        {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {},
-        {},
-        {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
-        },
-        {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
         },
         {
-          "description": "any text associated with the success or failure",
-          "name": "displaytext",
-          "type": "string"
-        }
-      ],
-      "since": "4.11.0"
-    },
-    {
-      "description": "Deletes a autoscale vm profile.",
-      "isasync": true,
-      "name": "deleteAutoScaleVmProfile",
-      "params": [
-        {
-          "description": "the ID of the autoscale profile",
+          "description": "The host/agent uuid to which the certificate has to be provisioned (issued and propagated)",
           "length": 255,
-          "name": "id",
-          "related": "createAutoScaleVmProfile,listAutoScaleVmProfiles,updateAutoScaleVmProfile",
+          "name": "hostid",
+          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
           "required": true,
           "type": "uuid"
         }
       ],
       "response": [
+        {
+          "description": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
+        },
         {},
         {
           "description": "the UUID of the latest async job acting on this object",
@@ -1351,22 +1472,18 @@
           "type": "string"
         },
         {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
-        },
-        {
           "description": "the current status of the latest async job acting on this object",
           "name": "jobstatus",
           "type": "integer"
         },
-        {},
         {
           "description": "any text associated with the success or failure",
           "name": "displaytext",
           "type": "string"
-        }
-      ]
+        },
+        {}
+      ],
+      "since": "4.11.0"
     },
     {
       "description": "Adds an external firewall appliance",
@@ -1374,9 +1491,9 @@
       "name": "addExternalFirewall",
       "params": [
         {
-          "description": "URL of the external firewall appliance.",
+          "description": "Username of the external firewall appliance.",
           "length": 255,
-          "name": "url",
+          "name": "username",
           "required": true,
           "type": "string"
         },
@@ -1396,9 +1513,9 @@
           "type": "string"
         },
         {
-          "description": "Username of the external firewall appliance.",
+          "description": "URL of the external firewall appliance.",
           "length": 255,
-          "name": "username",
+          "name": "url",
           "required": true,
           "type": "string"
         }
@@ -1406,19 +1523,20 @@
       "related": "listExternalFirewalls",
       "response": [
         {
-          "description": "the username that's used to log in to the external firewall",
-          "name": "username",
+          "description": "the timeout (in seconds) for requests to the external firewall",
+          "name": "timeout",
           "type": "string"
         },
+        {},
         {
-          "description": "the public security zone of the external firewall",
-          "name": "publiczone",
+          "description": "the number of times to retry requests to the external firewall",
+          "name": "numretries",
           "type": "string"
         },
         {
-          "description": "the zone ID of the external firewall",
-          "name": "zoneid",
-          "type": "string"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
           "description": "the UUID of the latest async job acting on this object",
@@ -1426,15 +1544,13 @@
           "type": "string"
         },
         {
-          "description": "the private interface of the external firewall",
-          "name": "privateinterface",
+          "description": "the zone ID of the external firewall",
+          "name": "zoneid",
           "type": "string"
         },
-        {},
-        {},
         {
-          "description": "the ID of the external firewall",
-          "name": "id",
+          "description": "the private security zone of the external firewall",
+          "name": "privatezone",
           "type": "string"
         },
         {
@@ -1442,39 +1558,40 @@
           "name": "ipaddress",
           "type": "string"
         },
+        {},
         {
-          "description": "the public interface of the external firewall",
-          "name": "publicinterface",
+          "description": "the username that's used to log in to the external firewall",
+          "name": "username",
           "type": "string"
         },
         {
-          "description": "the timeout (in seconds) for requests to the external firewall",
-          "name": "timeout",
+          "description": "the ID of the network device",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "the usage interface of the external firewall",
-          "name": "usageinterface",
+          "description": "the public security zone of the external firewall",
+          "name": "publiczone",
           "type": "string"
         },
         {
-          "description": "the private security zone of the external firewall",
-          "name": "privatezone",
+          "description": "the ID of the external firewall",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "the ID of the network device",
-          "name": "id",
+          "description": "the usage interface of the external firewall",
+          "name": "usageinterface",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the private interface of the external firewall",
+          "name": "privateinterface",
+          "type": "string"
         },
         {
-          "description": "the number of times to retry requests to the external firewall",
-          "name": "numretries",
+          "description": "the public interface of the external firewall",
+          "name": "publicinterface",
           "type": "string"
         }
       ]
@@ -1488,33 +1605,33 @@
           "description": "Id of the external loadbalancer appliance.",
           "length": 255,
           "name": "id",
-          "related": "addHost,cancelHostMaintenance,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
+          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
           "required": true,
           "type": "uuid"
         }
       ],
       "response": [
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
           "description": "the UUID of the latest async job acting on this object",
           "name": "jobid",
           "type": "string"
         },
         {},
-        {},
         {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
+        {},
         {
           "description": "any text associated with the success or failure",
           "name": "displaytext",
           "type": "string"
+        },
+        {
+          "description": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
         }
       ]
     },
@@ -1524,43 +1641,50 @@
       "name": "listVirtualMachinesMetrics",
       "params": [
         {
-          "description": "list objects by project",
+          "description": "comma separated list of host details requested, value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp]. If no parameter is passed in, the details will be defaulted to all",
           "length": 255,
-          "name": "projectid",
-          "related": "listProjectAccounts,activateProject,createProject,listProjects,suspendProject,updateProject",
+          "name": "details",
           "required": false,
-          "type": "uuid"
+          "type": "list"
         },
         {
-          "description": "",
+          "description": "list vms by iso",
           "length": 255,
-          "name": "pagesize",
+          "name": "isoid",
           "required": false,
-          "type": "integer"
+          "type": "uuid"
         },
         {
-          "description": "the group ID",
+          "description": "the target hypervisor for the template",
           "length": 255,
-          "name": "groupid",
-          "related": "createInstanceGroup,listInstanceGroups,updateInstanceGroup",
+          "name": "hypervisor",
           "required": false,
-          "type": "uuid"
+          "type": "string"
         },
         {
-          "description": "list vms by iso",
+          "description": "the availability zone ID",
           "length": 255,
-          "name": "isoid",
+          "name": "zoneid",
+          "related": "createZone,updateZone,listZones,listZones",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "state of the virtual machine. Possible values are: Running, Stopped, Present, Destroyed, Expunged. Present is used for the state equal not destroyed.",
+          "description": "list resources by account. Must be used with the domainId parameter.",
           "length": 255,
-          "name": "state",
+          "name": "account",
           "required": false,
           "type": "string"
         },
         {
+          "description": "the user ID that created the VM and is under the account that owns the VM",
+          "length": 255,
+          "name": "userid",
+          "related": "createUser,disableUser,enableUser,getUser,listUsers,lockUser,updateUser",
+          "required": false,
+          "type": "uuid"
+        },
+        {
           "description": "list vms by affinity group",
           "length": 255,
           "name": "affinitygroupid",
@@ -1569,40 +1693,49 @@
           "type": "uuid"
         },
         {
-          "description": "defaults to false, but if true, lists all resources from the parent specified by the domainId till leaves.",
+          "description": "List by keyword",
           "length": 255,
-          "name": "isrecursive",
+          "name": "keyword",
           "required": false,
-          "type": "boolean"
+          "type": "string"
         },
         {
-          "description": "list vms by ssh keypair name",
+          "description": "list resources by display flag; only ROOT admin is eligible to pass this parameter",
           "length": 255,
-          "name": "keypair",
+          "name": "displayvm",
           "required": false,
-          "type": "string"
+          "since": "4.4",
+          "type": "boolean"
         },
         {
-          "description": "the user ID that created the VM and is under the account that owns the VM",
+          "description": "list only resources belonging to the domain specified",
           "length": 255,
-          "name": "userid",
-          "related": "createUser,disableUser,enableUser,getUser,listUsers,lockUser,updateUser",
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "List resources by tags (key/value pairs)",
+          "description": "If set to false, list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false",
           "length": 255,
-          "name": "tags",
+          "name": "listall",
           "required": false,
-          "type": "map"
+          "type": "boolean"
         },
         {
-          "description": "comma separated list of host details requested, value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp]. If no parameter is passed in, the details will be defaulted to all",
+          "description": "",
           "length": 255,
-          "name": "details",
+          "name": "pagesize",
           "required": false,
-          "type": "list"
+          "type": "integer"
+        },
+        {
+          "description": "the host ID",
+          "length": 255,
+          "name": "hostid",
+          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
+          "required": false,
+          "type": "uuid"
         },
         {
           "description": "list by the service offering",
@@ -1614,54 +1747,77 @@
           "type": "uuid"
         },
         {
-          "description": "the storage ID where vm's volumes belong to",
+          "description": "the security group ID",
           "length": 255,
-          "name": "storageid",
-          "related": "listVsphereStoragePolicyCompatiblePools,cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool",
+          "name": "securitygroupid",
+          "related": "createSecurityGroup,listSecurityGroups,updateSecurityGroup",
           "required": false,
+          "since": "4.15",
           "type": "uuid"
         },
         {
-          "description": "the target hypervisor for the template",
+          "description": "list vms by vpc",
           "length": 255,
-          "name": "hypervisor",
+          "name": "vpcid",
+          "related": "createVPC,listVPCs,updateVPC,createVPC,listVPCs,updateVPC,migrateVPC",
           "required": false,
-          "type": "string"
+          "type": "uuid"
         },
         {
-          "description": "list only resources belonging to the domain specified",
+          "description": "the IDs of the virtual machines, mutually exclusive with id",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "ids",
+          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
           "required": false,
-          "type": "uuid"
+          "since": "4.4",
+          "type": "list"
         },
         {
-          "description": "the security group ID",
+          "description": "list vms by template",
           "length": 255,
-          "name": "securitygroupid",
-          "related": "createSecurityGroup,listSecurityGroups,updateSecurityGroup",
+          "name": "templateid",
+          "related": "prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos",
           "required": false,
-          "since": "4.15",
           "type": "uuid"
         },
         {
-          "description": "the availability zone ID",
+          "description": "list objects by project",
           "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
+          "name": "projectid",
+          "related": "listProjectAccounts,activateProject,createProject,listProjects,suspendProject,updateProject",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "list by network id",
+          "description": "the ID of the virtual machine",
           "length": 255,
-          "name": "networkid",
-          "related": "createNetwork,listNetworks,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
+          "name": "id",
+          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
           "required": false,
           "type": "uuid"
         },
         {
+          "description": "",
+          "length": 255,
+          "name": "page",
+          "required": false,
+          "type": "integer"
+        },
+        {
+          "description": "list vms by ssh keypair name",
+          "length": 255,
+          "name": "keypair",
+          "required": false,
+          "type": "string"
+        },
+        {
+          "description": "name of the virtual machine (a substring match is made against the parameter value, data for all matching VMs will be returned)",
+          "length": 255,
+          "name": "name",
+          "required": false,
+          "type": "string"
+        },
+        {
           "description": "list by network type; true if need to list vms using Virtual Network, false otherwise",
           "length": 255,
           "name": "forvirtualnetwork",
@@ -1669,40 +1825,40 @@
           "type": "boolean"
         },
         {
-          "description": "the host ID",
+          "description": "flag to display the resource icon for VMs",
           "length": 255,
-          "name": "hostid",
-          "related": "addHost,cancelHostMaintenance,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
+          "name": "showicon",
           "required": false,
-          "type": "uuid"
+          "since": "4.16.0.0",
+          "type": "boolean"
         },
         {
-          "description": "List by keyword",
+          "description": "the group ID",
           "length": 255,
-          "name": "keyword",
+          "name": "groupid",
+          "related": "createInstanceGroup,listInstanceGroups,updateInstanceGroup",
           "required": false,
-          "type": "string"
+          "type": "uuid"
         },
         {
-          "description": "the ID of the virtual machine",
+          "description": "list by network id",
           "length": 255,
-          "name": "id",
-          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtualMachine,revertToVMS [...]
+          "name": "networkid",
+          "related": "createNetwork,listNetworks,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "list vms by template",
+          "description": "List resources by tags (key/value pairs)",
           "length": 255,
-          "name": "templateid",
... 160010 lines suppressed ...