Merge remote-tracking branch 'origin/4.11'
diff --git a/.travis.yml b/.travis.yml
index d5fd173..e89d4cb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,31 +17,38 @@
 sudo: required
 dist: trusty
 group: edge
+
 language: java
 jdk:
-- oraclejdk8
+  - oraclejdk8
 python:
   - "2.7"
+
 cache:
   directories:
-  - $HOME/.m2
+    - $HOME/.m2
   timeout: 500
+
 notifications:
   email: false
+
 env:
   global:
      - PATH=$HOME/.local/bin:$PATH
   matrix:
     # Keep the TESTS sorted by name and grouped by type
+    - TESTS="smoke/test_certauthority_root"
+
     - TESTS="smoke/test_accounts
              smoke/test_affinity_groups
              smoke/test_affinity_groups_projects
-             smoke/test_certauthority_root
+             smoke/test_async_job
              smoke/test_deploy_vgpu_enabled_vm
              smoke/test_deploy_vm_iso
              smoke/test_deploy_vm_root_resize
              smoke/test_deploy_vm_with_userdata
              smoke/test_deploy_vms_with_varied_deploymentplanners
+             smoke/test_diagnostics
              smoke/test_disk_offerings
              smoke/test_dynamicroles
              smoke/test_global_settings
@@ -70,9 +77,10 @@
              smoke/test_password_server
              smoke/test_portable_publicip
              smoke/test_portforwardingrules"
-
-    - TESTS="smoke/test_primary_storage
-             smoke/test_privategw_acl
+    
+    - TESTS="smoke/test_primary_storage"
+    
+    - TESTS="smoke/test_privategw_acl
              smoke/test_projects
              smoke/test_public_ip_range
              smoke/test_pvlan
@@ -169,3 +177,46 @@
 after_success: ./tools/travis/after_success.sh
 after_failure: ./tools/travis/after_failure.sh
 after_script: ./tools/travis/after_script.sh
+
+# Packaging job definition, will be reused
+.package_job: &package_job
+  before_install: docker pull ${IMAGE}
+  install: true
+  before_script: true
+  script: |
+    docker run \
+     --volume ${TRAVIS_BUILD_DIR}:/mnt/build/cloudstack \
+     --volume $HOME/.m2:/root/.m2 \
+     --rm \
+     ${IMAGE} ${PARAMS}
+  after_script: true
+  after_success: true
+  after_failure: true
+
+jobs:
+  include:
+    - stage: package
+      services: docker
+      env: IMAGE=khos2ow/cloudstack-rpm-builder:centos7 PARAMS="--distribution centos7 --pack oss"
+      <<: *package_job
+
+    - stage: package
+      services: docker
+      env: IMAGE=khos2ow/cloudstack-rpm-builder:centos6 PARAMS="--distribution centos63 --pack oss"
+      <<: *package_job
+
+    - stage: package
+      services: docker
+      env: IMAGE=khos2ow/cloudstack-deb-builder:ubuntu1804 PARAMS=""
+      <<: *package_job
+
+    - stage: package
+      services: docker
+      env: IMAGE=khos2ow/cloudstack-deb-builder:ubuntu1604 PARAMS=""
+      <<: *package_job
+
+    - stage: package
+      services: docker
+      env: IMAGE=khos2ow/cloudstack-deb-builder:ubuntu1404 PARAMS=""
+      <<: *package_job
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6ac3ad5..2f9bc4b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -24,6 +24,15 @@
 PR will only be merged when master is open, will be held otherwise until master is open again. 
 No back porting / cherry-picking features to existing branches!
 
+PendingReleaseNotes file
+------------------------
+When developing a new feature or making a (major) change to a existing feature you are encouraged to append this to the PendingReleaseNotes file so that the Release Manager can
+use this file as a source of information when compiling the Release Notes for a new release.
+
+When adding information to the PendingReleaseNotes file make sure that you write a good and understandable description of the new feature or change which you have developed.
+
+Updating the PendingReleaseNotes file is preferably a part of the original Pull Request, but that is up to the developers' discretion.
+
 Fork the code 
 -------------
 
diff --git a/INSTALL.md b/INSTALL.md
index 626df91..281707e 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -44,12 +44,10 @@
 
 Following installation, execute the following commands to configure jenv and pyenv for use with CloudStack development:
 
-'''
-  # pyenv install 2.7.11                                          # Install Python 2.7.11
-  # pyenv virtualenv 2.7.11 cloudstack                            # Create a cloidstack virtualenv using Python 2.7.11
-  # pip install -r <root CloudStack source tree>/requirements.txt # Install cloudstack Python dependencies
-  # jenv add <path to JDK 1.7 installation>                       # Add Java7 to jenv
-'''
+    # pyenv install 2.7.11                                          ## Install Python 2.7.11
+    # pyenv virtualenv 2.7.11 cloudstack                            ## Create a cloudstack virtualenv using Python 2.7.11
+    # pip install -r <root CloudStack source tree>/requirements.txt ## Install cloudstack Python dependencies
+    # jenv add <path to JDK 1.7 installation>                       ## Add Java7 to jenv
 
 *N.B.* If you are running Linux, you may need to install additional packages to allow pyenv to build Python.
 
@@ -59,7 +57,7 @@
 
 You may get the source code from the repository hosted on Apache:
 
-    $ git clone https://git-wip-us.apache.org/repos/asf/cloudstack.git
+    $ git clone https://gitbox.apache.org/repos/asf/cloudstack.git
 
 Or, you may fork the repository from the official Apache CloudStack mirror on [Github](https://github.com/apache/cloudstack)
 
@@ -97,13 +95,13 @@
 
 ## Building with non-redistributable plugins
 
-CloudStack supports several plugins that depend on libraries with distribution restrictions. 
-Because of this they are not included in the default build. Enable these additional plugins 
+CloudStack supports several plugins that depend on libraries with distribution restrictions.
+Because of this they are not included in the default build. Enable these additional plugins
 activate their respective profiles. For convenience adding -Dnoredist will enable all plugins
-that depend on libraries with distribution restrictions. The build procedure expects that the 
-required libraries are present in the maven repository. 
+that depend on libraries with distribution restrictions. The build procedure expects that the
+required libraries are present in the maven repository.
 
-The following procedure can be used to add the libraries to the local maven repository. Details 
+The following procedure can be used to add the libraries to the local maven repository. Details
 on obtaining the required libraries can be found in this file. Note that this will vary between
 releases of CloudStack
 
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..2162732
--- /dev/null
+++ b/ISSUE_TEMPLATE.md
@@ -0,0 +1,76 @@
+<!--
+Verify first that your issue/request is not already reported on GitHub.
+Also test if the latest release and master branch are affected too.
+Always add information AFTER of these HTML comments, but no need to delete the comments.
+-->
+
+##### ISSUE TYPE
+<!-- Pick one below and delete the rest -->
+ * Bug Report
+ * Improvement Request
+ * Enhancement Request
+ * Feature Idea
+ * Documentation Report
+ * Other
+
+##### COMPONENT NAME
+<!--
+Categorize the issue, e.g. API, VR, VPN, UI, etc.
+-->
+~~~
+
+~~~
+
+##### CLOUDSTACK VERSION
+<!--
+New line separated list of affected versions, commit ID for issues on master branch.
+-->
+
+~~~
+
+~~~
+
+##### CONFIGURATION
+<!--
+Information about the configuration if relevant, e.g. basic network, advanced networking, etc.  N/A otherwise
+-->
+
+
+##### OS / ENVIRONMENT
+<!--
+Information about the environment if relevant, N/A otherwise
+-->
+
+
+##### SUMMARY
+<!-- Explain the problem/feature briefly -->
+
+
+##### STEPS TO REPRODUCE
+<!--
+For bugs, show exactly how to reproduce the problem, using a minimal test-case. Use Screenshots if accurate.
+
+For new features, show how the feature would be used.
+-->
+
+<!-- Paste example playbooks or commands between quotes below -->
+~~~
+
+~~~
+
+<!-- You can also paste gist.github.com links for larger files -->
+
+##### EXPECTED RESULTS
+<!-- What did you expect to happen when running the steps above? -->
+
+~~~
+
+~~~
+
+##### ACTUAL RESULTS
+<!-- What actually happened? -->
+
+<!-- Paste verbatim command output between quotes below -->
+~~~
+
+~~~
diff --git a/LICENSE b/LICENSE
index 0dcb45c..48d8526 100644
--- a/LICENSE
+++ b/LICENSE
@@ -612,13 +612,13 @@
             qunit.css  from http://docs.jquery.com/QUnit
             qunit.js  from http://docs.jquery.com/QUnit
 
-Within the utils/src/com/cloud/utils/db directory
+Within the utils/src/main/java/com/cloud/utils/db directory
     licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt  (as above)
     Copyright (c) 2004 Clinton Begin
         from Clinton Begin  http://code.google.com/p/mybatis/ 
             ScriptRunner.java  from http://code.google.com/p/mybatis/
 
-Within the utils/src/org/apache/commons/httpclient/contrib/ssl directory
+Within the utils/src/main/java/org/apache/commons/httpclient/contrib/ssl directory
     licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt  (as above)
     Copyright (c) 2007 The Apache Software Foundation
         from The Apache Software Foundation  http://www.apache.org/ 
diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md
index 17adfe6..cf1f6a2 100644
--- a/PULL_REQUEST_TEMPLATE.md
+++ b/PULL_REQUEST_TEMPLATE.md
@@ -34,6 +34,8 @@
 - [ ] My code follows the code style of this project.
 - [ ] My change requires a change to the documentation.
 - [ ] I have updated the documentation accordingly.
+Testing
 - [ ] I have added tests to cover my changes.
-- [ ] All new and existing tests passed.
+- [ ] All relevant new and existing integration tests have passed.
+- [ ] A full integration testsuite with all test that can run on my environment has passed.
 
diff --git a/PendingReleaseNotes b/PendingReleaseNotes
new file mode 100644
index 0000000..9670b6e
--- /dev/null
+++ b/PendingReleaseNotes
@@ -0,0 +1,41 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+# PENDING RELEASE NOTES
+#
+# WHEN DEVELOPING A NEW FEATURE OR MAKING A (MAJOR) CHANGE TO
+# AN EXISTING FEATURE DEVELOPERS ARE ENCOURAGED TO UPDATED THIS
+# FILE WITH THE CHANGES THEY MADE.
+#
+# THE RELEASE MANAGER CAN USE THIS FILE AS A SOURCE OF INFORMATION
+# WHEN COMPILING THE RELEASE NOTES FOR A NEW RELEASE.
+#
+# THIS FILE IS TRUNCATED AFTER THE RELEASE OF THE NEW VERSION
+#
+#
+
+
+example.ver.1 > example.ver.2:
+  * VirtualRouters are now deployed with the latest version of ExampleLinux
+    and wil also use a new MyFirstDHCPServer instead of dnsmasq to provide
+    faster and more robust deployment of new Instances
+
+  * ISOs are no longer supported and will be replaced by 2.88MB Floppy Drives
+    which can now be attached to Instances. This is to prevent the Secondary
+    Storage to grow to enormous sizes as Linux Distributions keep growing in
+    size while a stripped down Linux should fit on a 2.88MB floppy.
diff --git a/README.md b/README.md
index 17a7a8f..471672f 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,7 @@
 participation from anybody willing to work [The Apache Way](http://theapacheway.com) and make a
 contribution. Note that you do not have to be a developer in order to contribute
 to Apache CloudStack. We need folks to help with documentation, translation,
-promotion etc.See our contribution [page](http://cloudstack.apache.org/contribute.html).
+promotion etc. See our contribution [page](http://cloudstack.apache.org/contribute.html).
 
 If you're interested in learning more or participating in the Apache CloudStack
 project, the mailing lists are the best way to do that. While the project has
@@ -100,7 +100,7 @@
 released version of CloudStack, please report it to `security@cloudstack.apache.org` with details about the vulnerability, how it
 might be exploited, and any additional information that might be useful.
 
-For more details, please visit our security [page](http://cloudstack.apache.org/security.html)
+For more details, please visit our security [page](http://cloudstack.apache.org/security.html).
 
 ## License
 
@@ -143,7 +143,7 @@
 
 The following provides more details on the included cryptographic software:
 
-* CloudStack makes use of JaSypt cryptographic libraries
+* CloudStack makes use of JaSypt cryptographic libraries.
 * CloudStack has a system requirement of MySQL, and uses native database encryption functionality.
 * CloudStack makes use of the Bouncy Castle general-purpose encryption library.
 * CloudStack can optionally interacts with and controls OpenSwan-based VPNs.
diff --git a/agent/pom.xml b/agent/pom.xml
index 2c54d84..8d6e278 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -1,120 +1,113 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-agent</artifactId>
-  <name>Apache CloudStack Agents</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${cs.commons-io.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>commons-daemon</groupId>
-        <artifactId>commons-daemon</artifactId>
-    </dependency>    
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy
-                  todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/conf">
-                    <include name="agent.properties" />
-                  </fileset>
-                </copy>
-                <copy overwrite="true"
-                  todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader
-                      classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile"
-                        value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy overwrite="true"
-                  todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/bindir">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader
-                      classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile"
-                        value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-              <includeScope>runtime</includeScope>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-agent</artifactId>
+    <name>Apache CloudStack Agents</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-daemon</groupId>
+            <artifactId>commons-daemon</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-resource</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <copy todir="${basedir}/target/transformed">
+                                    <fileset dir="${basedir}/conf">
+                                        <include name="agent.properties" />
+                                    </fileset>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/transformed">
+                                    <fileset dir="${basedir}/conf">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/transformed">
+                                    <fileset dir="${basedir}/bindir">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+                            <includeScope>runtime</includeScope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/agent/src/com/cloud/agent/Agent.java b/agent/src/main/java/com/cloud/agent/Agent.java
similarity index 100%
rename from agent/src/com/cloud/agent/Agent.java
rename to agent/src/main/java/com/cloud/agent/Agent.java
diff --git a/agent/src/com/cloud/agent/AgentShell.java b/agent/src/main/java/com/cloud/agent/AgentShell.java
similarity index 100%
rename from agent/src/com/cloud/agent/AgentShell.java
rename to agent/src/main/java/com/cloud/agent/AgentShell.java
diff --git a/agent/src/com/cloud/agent/IAgentShell.java b/agent/src/main/java/com/cloud/agent/IAgentShell.java
similarity index 100%
rename from agent/src/com/cloud/agent/IAgentShell.java
rename to agent/src/main/java/com/cloud/agent/IAgentShell.java
diff --git a/agent/src/com/cloud/agent/dao/StorageComponent.java b/agent/src/main/java/com/cloud/agent/dao/StorageComponent.java
similarity index 100%
rename from agent/src/com/cloud/agent/dao/StorageComponent.java
rename to agent/src/main/java/com/cloud/agent/dao/StorageComponent.java
diff --git a/agent/src/com/cloud/agent/dao/impl/PropertiesStorage.java b/agent/src/main/java/com/cloud/agent/dao/impl/PropertiesStorage.java
similarity index 100%
rename from agent/src/com/cloud/agent/dao/impl/PropertiesStorage.java
rename to agent/src/main/java/com/cloud/agent/dao/impl/PropertiesStorage.java
diff --git a/agent/src/com/cloud/agent/dhcp/DhcpProtocolParserServer.java b/agent/src/main/java/com/cloud/agent/dhcp/DhcpProtocolParserServer.java
similarity index 100%
rename from agent/src/com/cloud/agent/dhcp/DhcpProtocolParserServer.java
rename to agent/src/main/java/com/cloud/agent/dhcp/DhcpProtocolParserServer.java
diff --git a/agent/src/com/cloud/agent/dhcp/DhcpSnooper.java b/agent/src/main/java/com/cloud/agent/dhcp/DhcpSnooper.java
similarity index 100%
rename from agent/src/com/cloud/agent/dhcp/DhcpSnooper.java
rename to agent/src/main/java/com/cloud/agent/dhcp/DhcpSnooper.java
diff --git a/agent/src/com/cloud/agent/dhcp/FakeDhcpSnooper.java b/agent/src/main/java/com/cloud/agent/dhcp/FakeDhcpSnooper.java
similarity index 100%
rename from agent/src/com/cloud/agent/dhcp/FakeDhcpSnooper.java
rename to agent/src/main/java/com/cloud/agent/dhcp/FakeDhcpSnooper.java
diff --git a/agent/src/com/cloud/agent/direct/download/DirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloader.java
similarity index 100%
rename from agent/src/com/cloud/agent/direct/download/DirectTemplateDownloader.java
rename to agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloader.java
diff --git a/agent/src/com/cloud/agent/direct/download/DirectTemplateDownloaderImpl.java b/agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImpl.java
similarity index 100%
rename from agent/src/com/cloud/agent/direct/download/DirectTemplateDownloaderImpl.java
rename to agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImpl.java
diff --git a/agent/src/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java
similarity index 100%
rename from agent/src/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java
rename to agent/src/main/java/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java
diff --git a/agent/src/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java
similarity index 100%
rename from agent/src/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java
rename to agent/src/main/java/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java
diff --git a/agent/src/com/cloud/agent/direct/download/MetalinkDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/MetalinkDirectTemplateDownloader.java
similarity index 100%
rename from agent/src/com/cloud/agent/direct/download/MetalinkDirectTemplateDownloader.java
rename to agent/src/main/java/com/cloud/agent/direct/download/MetalinkDirectTemplateDownloader.java
diff --git a/agent/src/com/cloud/agent/direct/download/NfsDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/NfsDirectTemplateDownloader.java
similarity index 100%
rename from agent/src/com/cloud/agent/direct/download/NfsDirectTemplateDownloader.java
rename to agent/src/main/java/com/cloud/agent/direct/download/NfsDirectTemplateDownloader.java
diff --git a/agent/src/com/cloud/agent/mockvm/MockVm.java b/agent/src/main/java/com/cloud/agent/mockvm/MockVm.java
similarity index 100%
rename from agent/src/com/cloud/agent/mockvm/MockVm.java
rename to agent/src/main/java/com/cloud/agent/mockvm/MockVm.java
diff --git a/agent/src/com/cloud/agent/mockvm/MockVmMgr.java b/agent/src/main/java/com/cloud/agent/mockvm/MockVmMgr.java
similarity index 100%
rename from agent/src/com/cloud/agent/mockvm/MockVmMgr.java
rename to agent/src/main/java/com/cloud/agent/mockvm/MockVmMgr.java
diff --git a/agent/src/com/cloud/agent/mockvm/VmMgr.java b/agent/src/main/java/com/cloud/agent/mockvm/VmMgr.java
similarity index 100%
rename from agent/src/com/cloud/agent/mockvm/VmMgr.java
rename to agent/src/main/java/com/cloud/agent/mockvm/VmMgr.java
diff --git a/agent/src/com/cloud/agent/resource/DummyResource.java b/agent/src/main/java/com/cloud/agent/resource/DummyResource.java
similarity index 100%
rename from agent/src/com/cloud/agent/resource/DummyResource.java
rename to agent/src/main/java/com/cloud/agent/resource/DummyResource.java
diff --git a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyAuthenticationResult.java b/agent/src/main/java/com/cloud/agent/resource/consoleproxy/ConsoleProxyAuthenticationResult.java
similarity index 100%
rename from agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyAuthenticationResult.java
rename to agent/src/main/java/com/cloud/agent/resource/consoleproxy/ConsoleProxyAuthenticationResult.java
diff --git a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java b/agent/src/main/java/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
similarity index 99%
rename from agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
rename to agent/src/main/java/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
index b3b17e7..fb5e327 100644
--- a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
+++ b/agent/src/main/java/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
@@ -246,7 +246,7 @@
                 }
                 String internalDns1 = (String) params.get("internaldns1");
                 if (internalDns1 == null) {
-                    s_logger.warn("No DNS entry found during configuration of NfsSecondaryStorage");
+                    s_logger.warn("No DNS entry found during configuration of ConsoleProxy");
                 } else {
                     addRouteToInternalIpOrCidr(_localgw, _eth1ip, _eth1mask, internalDns1);
                 }
diff --git a/agent/src/com/cloud/agent/vmdata/VmDataServer.java b/agent/src/main/java/com/cloud/agent/vmdata/VmDataServer.java
similarity index 100%
rename from agent/src/com/cloud/agent/vmdata/VmDataServer.java
rename to agent/src/main/java/com/cloud/agent/vmdata/VmDataServer.java
diff --git a/agent/test/com/cloud/agent/AgentShellTest.java b/agent/src/test/java/com/cloud/agent/AgentShellTest.java
similarity index 100%
rename from agent/test/com/cloud/agent/AgentShellTest.java
rename to agent/src/test/java/com/cloud/agent/AgentShellTest.java
diff --git a/agent/test/com/cloud/agent/dao/impl/PropertiesStorageTest.java b/agent/src/test/java/com/cloud/agent/dao/impl/PropertiesStorageTest.java
similarity index 100%
rename from agent/test/com/cloud/agent/dao/impl/PropertiesStorageTest.java
rename to agent/src/test/java/com/cloud/agent/dao/impl/PropertiesStorageTest.java
diff --git a/agent/test/com/cloud/agent/direct/download/DirectTemplateDownloaderImplTest.java b/agent/src/test/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImplTest.java
similarity index 100%
rename from agent/test/com/cloud/agent/direct/download/DirectTemplateDownloaderImplTest.java
rename to agent/src/test/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImplTest.java
diff --git a/api/pom.xml b/api/pom.xml
index 97a6177..4c1f0c4 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -1,85 +1,85 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-api</artifactId>
-  <name>Apache CloudStack API</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>${cs.servlet.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ca</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>${cs.commons-lang3.version}</version>
-    </dependency>
-    <dependency>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-api</artifactId>
+    <name>Apache CloudStack API</name>
+    <parent>
         <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-framework-direct-download</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ca</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>${cs.commons-lang3.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-direct-download</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/api/src/com/cloud/agent/api/Answer.java b/api/src/main/java/com/cloud/agent/api/Answer.java
similarity index 100%
rename from api/src/com/cloud/agent/api/Answer.java
rename to api/src/main/java/com/cloud/agent/api/Answer.java
diff --git a/api/src/com/cloud/agent/api/BadCommand.java b/api/src/main/java/com/cloud/agent/api/BadCommand.java
similarity index 100%
rename from api/src/com/cloud/agent/api/BadCommand.java
rename to api/src/main/java/com/cloud/agent/api/BadCommand.java
diff --git a/api/src/com/cloud/agent/api/Command.java b/api/src/main/java/com/cloud/agent/api/Command.java
similarity index 100%
rename from api/src/com/cloud/agent/api/Command.java
rename to api/src/main/java/com/cloud/agent/api/Command.java
diff --git a/api/src/com/cloud/agent/api/HostVmStateReportEntry.java b/api/src/main/java/com/cloud/agent/api/HostVmStateReportEntry.java
similarity index 100%
rename from api/src/com/cloud/agent/api/HostVmStateReportEntry.java
rename to api/src/main/java/com/cloud/agent/api/HostVmStateReportEntry.java
diff --git a/api/src/com/cloud/agent/api/LogLevel.java b/api/src/main/java/com/cloud/agent/api/LogLevel.java
similarity index 100%
rename from api/src/com/cloud/agent/api/LogLevel.java
rename to api/src/main/java/com/cloud/agent/api/LogLevel.java
diff --git a/api/src/com/cloud/agent/api/PvlanSetupCommand.java b/api/src/main/java/com/cloud/agent/api/PvlanSetupCommand.java
similarity index 100%
rename from api/src/com/cloud/agent/api/PvlanSetupCommand.java
rename to api/src/main/java/com/cloud/agent/api/PvlanSetupCommand.java
diff --git a/api/src/com/cloud/agent/api/StoragePoolInfo.java b/api/src/main/java/com/cloud/agent/api/StoragePoolInfo.java
similarity index 100%
rename from api/src/com/cloud/agent/api/StoragePoolInfo.java
rename to api/src/main/java/com/cloud/agent/api/StoragePoolInfo.java
diff --git a/api/src/com/cloud/agent/api/UnsupportedAnswer.java b/api/src/main/java/com/cloud/agent/api/UnsupportedAnswer.java
similarity index 100%
rename from api/src/com/cloud/agent/api/UnsupportedAnswer.java
rename to api/src/main/java/com/cloud/agent/api/UnsupportedAnswer.java
diff --git a/api/src/com/cloud/agent/api/VgpuTypesInfo.java b/api/src/main/java/com/cloud/agent/api/VgpuTypesInfo.java
similarity index 100%
rename from api/src/com/cloud/agent/api/VgpuTypesInfo.java
rename to api/src/main/java/com/cloud/agent/api/VgpuTypesInfo.java
diff --git a/api/src/com/cloud/agent/api/storage/CopyTemplateToPrimaryStorageAnswer.java b/api/src/main/java/com/cloud/agent/api/storage/CopyTemplateToPrimaryStorageAnswer.java
similarity index 100%
rename from api/src/com/cloud/agent/api/storage/CopyTemplateToPrimaryStorageAnswer.java
rename to api/src/main/java/com/cloud/agent/api/storage/CopyTemplateToPrimaryStorageAnswer.java
diff --git a/api/src/com/cloud/agent/api/storage/CreateVolumeOVACommand.java b/api/src/main/java/com/cloud/agent/api/storage/CreateVolumeOVACommand.java
similarity index 100%
rename from api/src/com/cloud/agent/api/storage/CreateVolumeOVACommand.java
rename to api/src/main/java/com/cloud/agent/api/storage/CreateVolumeOVACommand.java
diff --git a/api/src/com/cloud/agent/api/storage/OVFHelper.java b/api/src/main/java/com/cloud/agent/api/storage/OVFHelper.java
similarity index 100%
rename from api/src/com/cloud/agent/api/storage/OVFHelper.java
rename to api/src/main/java/com/cloud/agent/api/storage/OVFHelper.java
diff --git a/api/src/com/cloud/agent/api/storage/PasswordAuth.java b/api/src/main/java/com/cloud/agent/api/storage/PasswordAuth.java
similarity index 100%
rename from api/src/com/cloud/agent/api/storage/PasswordAuth.java
rename to api/src/main/java/com/cloud/agent/api/storage/PasswordAuth.java
diff --git a/api/src/com/cloud/agent/api/storage/PrepareOVAPackingCommand.java b/api/src/main/java/com/cloud/agent/api/storage/PrepareOVAPackingCommand.java
similarity index 100%
rename from api/src/com/cloud/agent/api/storage/PrepareOVAPackingCommand.java
rename to api/src/main/java/com/cloud/agent/api/storage/PrepareOVAPackingCommand.java
diff --git a/api/src/com/cloud/agent/api/to/DataObjectType.java b/api/src/main/java/com/cloud/agent/api/to/DataObjectType.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/DataObjectType.java
rename to api/src/main/java/com/cloud/agent/api/to/DataObjectType.java
diff --git a/api/src/com/cloud/agent/api/to/DataStoreTO.java b/api/src/main/java/com/cloud/agent/api/to/DataStoreTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/DataStoreTO.java
rename to api/src/main/java/com/cloud/agent/api/to/DataStoreTO.java
diff --git a/api/src/com/cloud/agent/api/to/DataTO.java b/api/src/main/java/com/cloud/agent/api/to/DataTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/DataTO.java
rename to api/src/main/java/com/cloud/agent/api/to/DataTO.java
diff --git a/api/src/com/cloud/agent/api/to/DatadiskTO.java b/api/src/main/java/com/cloud/agent/api/to/DatadiskTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/DatadiskTO.java
rename to api/src/main/java/com/cloud/agent/api/to/DatadiskTO.java
diff --git a/api/src/com/cloud/agent/api/to/DhcpTO.java b/api/src/main/java/com/cloud/agent/api/to/DhcpTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/DhcpTO.java
rename to api/src/main/java/com/cloud/agent/api/to/DhcpTO.java
diff --git a/api/src/com/cloud/agent/api/to/DiskTO.java b/api/src/main/java/com/cloud/agent/api/to/DiskTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/DiskTO.java
rename to api/src/main/java/com/cloud/agent/api/to/DiskTO.java
diff --git a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java b/api/src/main/java/com/cloud/agent/api/to/FirewallRuleTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/FirewallRuleTO.java
rename to api/src/main/java/com/cloud/agent/api/to/FirewallRuleTO.java
diff --git a/api/src/com/cloud/agent/api/to/GPUDeviceTO.java b/api/src/main/java/com/cloud/agent/api/to/GPUDeviceTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/GPUDeviceTO.java
rename to api/src/main/java/com/cloud/agent/api/to/GPUDeviceTO.java
diff --git a/api/src/com/cloud/agent/api/to/HostTO.java b/api/src/main/java/com/cloud/agent/api/to/HostTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/HostTO.java
rename to api/src/main/java/com/cloud/agent/api/to/HostTO.java
diff --git a/api/src/com/cloud/agent/api/to/IpAddressTO.java b/api/src/main/java/com/cloud/agent/api/to/IpAddressTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/IpAddressTO.java
rename to api/src/main/java/com/cloud/agent/api/to/IpAddressTO.java
diff --git a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java b/api/src/main/java/com/cloud/agent/api/to/LoadBalancerTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/LoadBalancerTO.java
rename to api/src/main/java/com/cloud/agent/api/to/LoadBalancerTO.java
diff --git a/api/src/com/cloud/agent/api/to/MonitorServiceTO.java b/api/src/main/java/com/cloud/agent/api/to/MonitorServiceTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/MonitorServiceTO.java
rename to api/src/main/java/com/cloud/agent/api/to/MonitorServiceTO.java
diff --git a/api/src/com/cloud/agent/api/to/NetworkACLTO.java b/api/src/main/java/com/cloud/agent/api/to/NetworkACLTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/NetworkACLTO.java
rename to api/src/main/java/com/cloud/agent/api/to/NetworkACLTO.java
diff --git a/api/src/com/cloud/agent/api/to/NetworkTO.java b/api/src/main/java/com/cloud/agent/api/to/NetworkTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/NetworkTO.java
rename to api/src/main/java/com/cloud/agent/api/to/NetworkTO.java
diff --git a/api/src/com/cloud/agent/api/to/NfsTO.java b/api/src/main/java/com/cloud/agent/api/to/NfsTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/NfsTO.java
rename to api/src/main/java/com/cloud/agent/api/to/NfsTO.java
diff --git a/api/src/com/cloud/agent/api/to/NicTO.java b/api/src/main/java/com/cloud/agent/api/to/NicTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/NicTO.java
rename to api/src/main/java/com/cloud/agent/api/to/NicTO.java
diff --git a/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java b/api/src/main/java/com/cloud/agent/api/to/PortForwardingRuleTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java
rename to api/src/main/java/com/cloud/agent/api/to/PortForwardingRuleTO.java
diff --git a/api/src/com/cloud/agent/api/to/S3TO.java b/api/src/main/java/com/cloud/agent/api/to/S3TO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/S3TO.java
rename to api/src/main/java/com/cloud/agent/api/to/S3TO.java
diff --git a/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java b/api/src/main/java/com/cloud/agent/api/to/StaticNatRuleTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/StaticNatRuleTO.java
rename to api/src/main/java/com/cloud/agent/api/to/StaticNatRuleTO.java
diff --git a/api/src/com/cloud/agent/api/to/StorageFilerTO.java b/api/src/main/java/com/cloud/agent/api/to/StorageFilerTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/StorageFilerTO.java
rename to api/src/main/java/com/cloud/agent/api/to/StorageFilerTO.java
diff --git a/api/src/com/cloud/agent/api/to/SwiftTO.java b/api/src/main/java/com/cloud/agent/api/to/SwiftTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/SwiftTO.java
rename to api/src/main/java/com/cloud/agent/api/to/SwiftTO.java
diff --git a/api/src/com/cloud/agent/api/to/TemplateTO.java b/api/src/main/java/com/cloud/agent/api/to/TemplateTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/TemplateTO.java
rename to api/src/main/java/com/cloud/agent/api/to/TemplateTO.java
diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/VirtualMachineTO.java
rename to api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java
diff --git a/api/src/com/cloud/agent/api/to/VolumeTO.java b/api/src/main/java/com/cloud/agent/api/to/VolumeTO.java
similarity index 100%
rename from api/src/com/cloud/agent/api/to/VolumeTO.java
rename to api/src/main/java/com/cloud/agent/api/to/VolumeTO.java
diff --git a/api/src/com/cloud/agent/manager/allocator/HostAllocator.java b/api/src/main/java/com/cloud/agent/manager/allocator/HostAllocator.java
similarity index 100%
rename from api/src/com/cloud/agent/manager/allocator/HostAllocator.java
rename to api/src/main/java/com/cloud/agent/manager/allocator/HostAllocator.java
diff --git a/api/src/com/cloud/agent/manager/allocator/PodAllocator.java b/api/src/main/java/com/cloud/agent/manager/allocator/PodAllocator.java
similarity index 100%
rename from api/src/com/cloud/agent/manager/allocator/PodAllocator.java
rename to api/src/main/java/com/cloud/agent/manager/allocator/PodAllocator.java
diff --git a/api/src/com/cloud/alert/Alert.java b/api/src/main/java/com/cloud/alert/Alert.java
similarity index 97%
rename from api/src/com/cloud/alert/Alert.java
rename to api/src/main/java/com/cloud/alert/Alert.java
index f774420..d85dca5 100644
--- a/api/src/com/cloud/alert/Alert.java
+++ b/api/src/main/java/com/cloud/alert/Alert.java
@@ -41,4 +41,6 @@
     boolean getArchived();
 
     String getName();
+
+    String getContent();
 }
diff --git a/api/src/com/cloud/alert/AlertAdapter.java b/api/src/main/java/com/cloud/alert/AlertAdapter.java
similarity index 100%
rename from api/src/com/cloud/alert/AlertAdapter.java
rename to api/src/main/java/com/cloud/alert/AlertAdapter.java
diff --git a/api/src/com/cloud/api/commands/.gitignore b/api/src/main/java/com/cloud/api/commands/.gitignore
similarity index 100%
rename from api/src/com/cloud/api/commands/.gitignore
rename to api/src/main/java/com/cloud/api/commands/.gitignore
diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/main/java/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java
similarity index 100%
rename from api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java
rename to api/src/main/java/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java
diff --git a/api/src/com/cloud/capacity/Capacity.java b/api/src/main/java/com/cloud/capacity/Capacity.java
similarity index 100%
rename from api/src/com/cloud/capacity/Capacity.java
rename to api/src/main/java/com/cloud/capacity/Capacity.java
diff --git a/api/src/com/cloud/capacity/CapacityState.java b/api/src/main/java/com/cloud/capacity/CapacityState.java
similarity index 100%
rename from api/src/com/cloud/capacity/CapacityState.java
rename to api/src/main/java/com/cloud/capacity/CapacityState.java
diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/main/java/com/cloud/configuration/ConfigurationService.java
similarity index 100%
rename from api/src/com/cloud/configuration/ConfigurationService.java
rename to api/src/main/java/com/cloud/configuration/ConfigurationService.java
diff --git a/api/src/com/cloud/configuration/Resource.java b/api/src/main/java/com/cloud/configuration/Resource.java
similarity index 100%
rename from api/src/com/cloud/configuration/Resource.java
rename to api/src/main/java/com/cloud/configuration/Resource.java
diff --git a/api/src/com/cloud/configuration/ResourceCount.java b/api/src/main/java/com/cloud/configuration/ResourceCount.java
similarity index 100%
rename from api/src/com/cloud/configuration/ResourceCount.java
rename to api/src/main/java/com/cloud/configuration/ResourceCount.java
diff --git a/api/src/com/cloud/configuration/ResourceLimit.java b/api/src/main/java/com/cloud/configuration/ResourceLimit.java
similarity index 100%
rename from api/src/com/cloud/configuration/ResourceLimit.java
rename to api/src/main/java/com/cloud/configuration/ResourceLimit.java
diff --git a/api/src/com/cloud/consoleproxy/ConsoleProxyAllocator.java b/api/src/main/java/com/cloud/consoleproxy/ConsoleProxyAllocator.java
similarity index 100%
rename from api/src/com/cloud/consoleproxy/ConsoleProxyAllocator.java
rename to api/src/main/java/com/cloud/consoleproxy/ConsoleProxyAllocator.java
diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/main/java/com/cloud/dc/DataCenter.java
similarity index 100%
rename from api/src/com/cloud/dc/DataCenter.java
rename to api/src/main/java/com/cloud/dc/DataCenter.java
diff --git a/api/src/com/cloud/dc/DedicatedResources.java b/api/src/main/java/com/cloud/dc/DedicatedResources.java
similarity index 100%
rename from api/src/com/cloud/dc/DedicatedResources.java
rename to api/src/main/java/com/cloud/dc/DedicatedResources.java
diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/main/java/com/cloud/dc/Pod.java
similarity index 100%
rename from api/src/com/cloud/dc/Pod.java
rename to api/src/main/java/com/cloud/dc/Pod.java
diff --git a/api/src/com/cloud/dc/StorageNetworkIpRange.java b/api/src/main/java/com/cloud/dc/StorageNetworkIpRange.java
similarity index 100%
rename from api/src/com/cloud/dc/StorageNetworkIpRange.java
rename to api/src/main/java/com/cloud/dc/StorageNetworkIpRange.java
diff --git a/api/src/com/cloud/dc/Vlan.java b/api/src/main/java/com/cloud/dc/Vlan.java
similarity index 100%
rename from api/src/com/cloud/dc/Vlan.java
rename to api/src/main/java/com/cloud/dc/Vlan.java
diff --git a/api/src/com/cloud/deploy/DataCenterDeployment.java b/api/src/main/java/com/cloud/deploy/DataCenterDeployment.java
similarity index 100%
rename from api/src/com/cloud/deploy/DataCenterDeployment.java
rename to api/src/main/java/com/cloud/deploy/DataCenterDeployment.java
diff --git a/api/src/com/cloud/deploy/DeployDestination.java b/api/src/main/java/com/cloud/deploy/DeployDestination.java
similarity index 100%
rename from api/src/com/cloud/deploy/DeployDestination.java
rename to api/src/main/java/com/cloud/deploy/DeployDestination.java
diff --git a/api/src/com/cloud/deploy/DeploymentClusterPlanner.java b/api/src/main/java/com/cloud/deploy/DeploymentClusterPlanner.java
similarity index 100%
rename from api/src/com/cloud/deploy/DeploymentClusterPlanner.java
rename to api/src/main/java/com/cloud/deploy/DeploymentClusterPlanner.java
diff --git a/api/src/com/cloud/deploy/DeploymentPlan.java b/api/src/main/java/com/cloud/deploy/DeploymentPlan.java
similarity index 100%
rename from api/src/com/cloud/deploy/DeploymentPlan.java
rename to api/src/main/java/com/cloud/deploy/DeploymentPlan.java
diff --git a/api/src/com/cloud/deploy/DeploymentPlanner.java b/api/src/main/java/com/cloud/deploy/DeploymentPlanner.java
similarity index 100%
rename from api/src/com/cloud/deploy/DeploymentPlanner.java
rename to api/src/main/java/com/cloud/deploy/DeploymentPlanner.java
diff --git a/api/src/com/cloud/deploy/HAPlanner.java b/api/src/main/java/com/cloud/deploy/HAPlanner.java
similarity index 100%
rename from api/src/com/cloud/deploy/HAPlanner.java
rename to api/src/main/java/com/cloud/deploy/HAPlanner.java
diff --git a/api/src/com/cloud/domain/Domain.java b/api/src/main/java/com/cloud/domain/Domain.java
similarity index 100%
rename from api/src/com/cloud/domain/Domain.java
rename to api/src/main/java/com/cloud/domain/Domain.java
diff --git a/api/src/com/cloud/domain/PartOf.java b/api/src/main/java/com/cloud/domain/PartOf.java
similarity index 100%
rename from api/src/com/cloud/domain/PartOf.java
rename to api/src/main/java/com/cloud/domain/PartOf.java
diff --git a/api/src/com/cloud/event/ActionEvent.java b/api/src/main/java/com/cloud/event/ActionEvent.java
similarity index 100%
rename from api/src/com/cloud/event/ActionEvent.java
rename to api/src/main/java/com/cloud/event/ActionEvent.java
diff --git a/api/src/com/cloud/event/ActionEvents.java b/api/src/main/java/com/cloud/event/ActionEvents.java
similarity index 100%
rename from api/src/com/cloud/event/ActionEvents.java
rename to api/src/main/java/com/cloud/event/ActionEvents.java
diff --git a/api/src/com/cloud/event/Event.java b/api/src/main/java/com/cloud/event/Event.java
similarity index 100%
rename from api/src/com/cloud/event/Event.java
rename to api/src/main/java/com/cloud/event/Event.java
diff --git a/api/src/com/cloud/event/EventCategory.java b/api/src/main/java/com/cloud/event/EventCategory.java
similarity index 100%
rename from api/src/com/cloud/event/EventCategory.java
rename to api/src/main/java/com/cloud/event/EventCategory.java
diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/main/java/com/cloud/event/EventTypes.java
similarity index 100%
rename from api/src/com/cloud/event/EventTypes.java
rename to api/src/main/java/com/cloud/event/EventTypes.java
diff --git a/api/src/com/cloud/event/UsageEvent.java b/api/src/main/java/com/cloud/event/UsageEvent.java
similarity index 100%
rename from api/src/com/cloud/event/UsageEvent.java
rename to api/src/main/java/com/cloud/event/UsageEvent.java
diff --git a/api/src/com/cloud/exception/AccountLimitException.java b/api/src/main/java/com/cloud/exception/AccountLimitException.java
similarity index 100%
rename from api/src/com/cloud/exception/AccountLimitException.java
rename to api/src/main/java/com/cloud/exception/AccountLimitException.java
diff --git a/api/src/com/cloud/exception/AffinityConflictException.java b/api/src/main/java/com/cloud/exception/AffinityConflictException.java
similarity index 100%
rename from api/src/com/cloud/exception/AffinityConflictException.java
rename to api/src/main/java/com/cloud/exception/AffinityConflictException.java
diff --git a/api/src/com/cloud/exception/AgentControlChannelException.java b/api/src/main/java/com/cloud/exception/AgentControlChannelException.java
similarity index 100%
rename from api/src/com/cloud/exception/AgentControlChannelException.java
rename to api/src/main/java/com/cloud/exception/AgentControlChannelException.java
diff --git a/api/src/com/cloud/exception/AgentUnavailableException.java b/api/src/main/java/com/cloud/exception/AgentUnavailableException.java
similarity index 100%
rename from api/src/com/cloud/exception/AgentUnavailableException.java
rename to api/src/main/java/com/cloud/exception/AgentUnavailableException.java
diff --git a/api/src/com/cloud/exception/CloudAuthenticationException.java b/api/src/main/java/com/cloud/exception/CloudAuthenticationException.java
similarity index 100%
rename from api/src/com/cloud/exception/CloudAuthenticationException.java
rename to api/src/main/java/com/cloud/exception/CloudAuthenticationException.java
diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/main/java/com/cloud/exception/CloudException.java
similarity index 100%
rename from api/src/com/cloud/exception/CloudException.java
rename to api/src/main/java/com/cloud/exception/CloudException.java
diff --git a/api/src/com/cloud/exception/ConcurrentOperationException.java b/api/src/main/java/com/cloud/exception/ConcurrentOperationException.java
similarity index 100%
rename from api/src/com/cloud/exception/ConcurrentOperationException.java
rename to api/src/main/java/com/cloud/exception/ConcurrentOperationException.java
diff --git a/api/src/com/cloud/exception/ConflictingNetworkSettingsException.java b/api/src/main/java/com/cloud/exception/ConflictingNetworkSettingsException.java
similarity index 100%
rename from api/src/com/cloud/exception/ConflictingNetworkSettingsException.java
rename to api/src/main/java/com/cloud/exception/ConflictingNetworkSettingsException.java
diff --git a/api/src/com/cloud/exception/ConnectionException.java b/api/src/main/java/com/cloud/exception/ConnectionException.java
similarity index 100%
rename from api/src/com/cloud/exception/ConnectionException.java
rename to api/src/main/java/com/cloud/exception/ConnectionException.java
diff --git a/api/src/com/cloud/exception/DiscoveredWithErrorException.java b/api/src/main/java/com/cloud/exception/DiscoveredWithErrorException.java
similarity index 100%
rename from api/src/com/cloud/exception/DiscoveredWithErrorException.java
rename to api/src/main/java/com/cloud/exception/DiscoveredWithErrorException.java
diff --git a/api/src/com/cloud/exception/DiscoveryException.java b/api/src/main/java/com/cloud/exception/DiscoveryException.java
similarity index 100%
rename from api/src/com/cloud/exception/DiscoveryException.java
rename to api/src/main/java/com/cloud/exception/DiscoveryException.java
diff --git a/api/src/com/cloud/exception/HAStateException.java b/api/src/main/java/com/cloud/exception/HAStateException.java
similarity index 100%
rename from api/src/com/cloud/exception/HAStateException.java
rename to api/src/main/java/com/cloud/exception/HAStateException.java
diff --git a/api/src/com/cloud/exception/InsufficientAddressCapacityException.java b/api/src/main/java/com/cloud/exception/InsufficientAddressCapacityException.java
similarity index 100%
rename from api/src/com/cloud/exception/InsufficientAddressCapacityException.java
rename to api/src/main/java/com/cloud/exception/InsufficientAddressCapacityException.java
diff --git a/api/src/com/cloud/exception/InsufficientCapacityException.java b/api/src/main/java/com/cloud/exception/InsufficientCapacityException.java
similarity index 100%
rename from api/src/com/cloud/exception/InsufficientCapacityException.java
rename to api/src/main/java/com/cloud/exception/InsufficientCapacityException.java
diff --git a/api/src/com/cloud/exception/InsufficientNetworkCapacityException.java b/api/src/main/java/com/cloud/exception/InsufficientNetworkCapacityException.java
similarity index 100%
rename from api/src/com/cloud/exception/InsufficientNetworkCapacityException.java
rename to api/src/main/java/com/cloud/exception/InsufficientNetworkCapacityException.java
diff --git a/api/src/com/cloud/exception/InsufficientServerCapacityException.java b/api/src/main/java/com/cloud/exception/InsufficientServerCapacityException.java
similarity index 100%
rename from api/src/com/cloud/exception/InsufficientServerCapacityException.java
rename to api/src/main/java/com/cloud/exception/InsufficientServerCapacityException.java
diff --git a/api/src/com/cloud/exception/InsufficientStorageCapacityException.java b/api/src/main/java/com/cloud/exception/InsufficientStorageCapacityException.java
similarity index 100%
rename from api/src/com/cloud/exception/InsufficientStorageCapacityException.java
rename to api/src/main/java/com/cloud/exception/InsufficientStorageCapacityException.java
diff --git a/api/src/com/cloud/exception/InsufficientVirtualNetworkCapacityException.java b/api/src/main/java/com/cloud/exception/InsufficientVirtualNetworkCapacityException.java
similarity index 100%
rename from api/src/com/cloud/exception/InsufficientVirtualNetworkCapacityException.java
rename to api/src/main/java/com/cloud/exception/InsufficientVirtualNetworkCapacityException.java
diff --git a/api/src/com/cloud/exception/InternalErrorException.java b/api/src/main/java/com/cloud/exception/InternalErrorException.java
similarity index 100%
rename from api/src/com/cloud/exception/InternalErrorException.java
rename to api/src/main/java/com/cloud/exception/InternalErrorException.java
diff --git a/api/src/com/cloud/exception/InvalidParameterValueException.java b/api/src/main/java/com/cloud/exception/InvalidParameterValueException.java
similarity index 100%
rename from api/src/com/cloud/exception/InvalidParameterValueException.java
rename to api/src/main/java/com/cloud/exception/InvalidParameterValueException.java
diff --git a/api/src/com/cloud/exception/ManagementServerException.java b/api/src/main/java/com/cloud/exception/ManagementServerException.java
similarity index 100%
rename from api/src/com/cloud/exception/ManagementServerException.java
rename to api/src/main/java/com/cloud/exception/ManagementServerException.java
diff --git a/api/src/com/cloud/exception/NetworkRuleConflictException.java b/api/src/main/java/com/cloud/exception/NetworkRuleConflictException.java
similarity index 100%
rename from api/src/com/cloud/exception/NetworkRuleConflictException.java
rename to api/src/main/java/com/cloud/exception/NetworkRuleConflictException.java
diff --git a/api/src/com/cloud/exception/OperationTimedoutException.java b/api/src/main/java/com/cloud/exception/OperationTimedoutException.java
similarity index 100%
rename from api/src/com/cloud/exception/OperationTimedoutException.java
rename to api/src/main/java/com/cloud/exception/OperationTimedoutException.java
diff --git a/api/src/com/cloud/exception/PermissionDeniedException.java b/api/src/main/java/com/cloud/exception/PermissionDeniedException.java
similarity index 100%
rename from api/src/com/cloud/exception/PermissionDeniedException.java
rename to api/src/main/java/com/cloud/exception/PermissionDeniedException.java
diff --git a/api/src/com/cloud/exception/RequestLimitException.java b/api/src/main/java/com/cloud/exception/RequestLimitException.java
similarity index 100%
rename from api/src/com/cloud/exception/RequestLimitException.java
rename to api/src/main/java/com/cloud/exception/RequestLimitException.java
diff --git a/api/src/com/cloud/exception/ResourceAllocationException.java b/api/src/main/java/com/cloud/exception/ResourceAllocationException.java
similarity index 100%
rename from api/src/com/cloud/exception/ResourceAllocationException.java
rename to api/src/main/java/com/cloud/exception/ResourceAllocationException.java
diff --git a/api/src/com/cloud/exception/ResourceInUseException.java b/api/src/main/java/com/cloud/exception/ResourceInUseException.java
similarity index 100%
rename from api/src/com/cloud/exception/ResourceInUseException.java
rename to api/src/main/java/com/cloud/exception/ResourceInUseException.java
diff --git a/api/src/com/cloud/exception/ResourceUnavailableException.java b/api/src/main/java/com/cloud/exception/ResourceUnavailableException.java
similarity index 100%
rename from api/src/com/cloud/exception/ResourceUnavailableException.java
rename to api/src/main/java/com/cloud/exception/ResourceUnavailableException.java
diff --git a/api/src/com/cloud/exception/StorageConflictException.java b/api/src/main/java/com/cloud/exception/StorageConflictException.java
similarity index 100%
rename from api/src/com/cloud/exception/StorageConflictException.java
rename to api/src/main/java/com/cloud/exception/StorageConflictException.java
diff --git a/api/src/com/cloud/exception/StorageUnavailableException.java b/api/src/main/java/com/cloud/exception/StorageUnavailableException.java
similarity index 100%
rename from api/src/com/cloud/exception/StorageUnavailableException.java
rename to api/src/main/java/com/cloud/exception/StorageUnavailableException.java
diff --git a/api/src/com/cloud/exception/UnavailableCommandException.java b/api/src/main/java/com/cloud/exception/UnavailableCommandException.java
similarity index 100%
rename from api/src/com/cloud/exception/UnavailableCommandException.java
rename to api/src/main/java/com/cloud/exception/UnavailableCommandException.java
diff --git a/api/src/com/cloud/exception/UnsupportedServiceException.java b/api/src/main/java/com/cloud/exception/UnsupportedServiceException.java
similarity index 100%
rename from api/src/com/cloud/exception/UnsupportedServiceException.java
rename to api/src/main/java/com/cloud/exception/UnsupportedServiceException.java
diff --git a/api/src/com/cloud/exception/VirtualMachineMigrationException.java b/api/src/main/java/com/cloud/exception/VirtualMachineMigrationException.java
similarity index 100%
rename from api/src/com/cloud/exception/VirtualMachineMigrationException.java
rename to api/src/main/java/com/cloud/exception/VirtualMachineMigrationException.java
diff --git a/api/src/com/cloud/gpu/GPU.java b/api/src/main/java/com/cloud/gpu/GPU.java
similarity index 100%
rename from api/src/com/cloud/gpu/GPU.java
rename to api/src/main/java/com/cloud/gpu/GPU.java
diff --git a/api/src/com/cloud/ha/FenceBuilder.java b/api/src/main/java/com/cloud/ha/FenceBuilder.java
similarity index 100%
rename from api/src/com/cloud/ha/FenceBuilder.java
rename to api/src/main/java/com/cloud/ha/FenceBuilder.java
diff --git a/api/src/com/cloud/ha/Investigator.java b/api/src/main/java/com/cloud/ha/Investigator.java
similarity index 100%
rename from api/src/com/cloud/ha/Investigator.java
rename to api/src/main/java/com/cloud/ha/Investigator.java
diff --git a/api/src/com/cloud/host/Host.java b/api/src/main/java/com/cloud/host/Host.java
similarity index 100%
rename from api/src/com/cloud/host/Host.java
rename to api/src/main/java/com/cloud/host/Host.java
diff --git a/api/src/com/cloud/host/HostEnvironment.java b/api/src/main/java/com/cloud/host/HostEnvironment.java
similarity index 100%
rename from api/src/com/cloud/host/HostEnvironment.java
rename to api/src/main/java/com/cloud/host/HostEnvironment.java
diff --git a/api/src/com/cloud/host/HostStats.java b/api/src/main/java/com/cloud/host/HostStats.java
similarity index 100%
rename from api/src/com/cloud/host/HostStats.java
rename to api/src/main/java/com/cloud/host/HostStats.java
diff --git a/api/src/com/cloud/host/Status.java b/api/src/main/java/com/cloud/host/Status.java
similarity index 100%
rename from api/src/com/cloud/host/Status.java
rename to api/src/main/java/com/cloud/host/Status.java
diff --git a/api/src/com/cloud/hypervisor/Hypervisor.java b/api/src/main/java/com/cloud/hypervisor/Hypervisor.java
similarity index 100%
rename from api/src/com/cloud/hypervisor/Hypervisor.java
rename to api/src/main/java/com/cloud/hypervisor/Hypervisor.java
diff --git a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java b/api/src/main/java/com/cloud/hypervisor/HypervisorCapabilities.java
similarity index 100%
rename from api/src/com/cloud/hypervisor/HypervisorCapabilities.java
rename to api/src/main/java/com/cloud/hypervisor/HypervisorCapabilities.java
diff --git a/api/src/com/cloud/hypervisor/HypervisorGuru.java b/api/src/main/java/com/cloud/hypervisor/HypervisorGuru.java
similarity index 100%
rename from api/src/com/cloud/hypervisor/HypervisorGuru.java
rename to api/src/main/java/com/cloud/hypervisor/HypervisorGuru.java
diff --git a/api/src/com/cloud/info/ConsoleProxyLoadInfo.java b/api/src/main/java/com/cloud/info/ConsoleProxyLoadInfo.java
similarity index 100%
rename from api/src/com/cloud/info/ConsoleProxyLoadInfo.java
rename to api/src/main/java/com/cloud/info/ConsoleProxyLoadInfo.java
diff --git a/api/src/com/cloud/info/RunningHostCountInfo.java b/api/src/main/java/com/cloud/info/RunningHostCountInfo.java
similarity index 100%
rename from api/src/com/cloud/info/RunningHostCountInfo.java
rename to api/src/main/java/com/cloud/info/RunningHostCountInfo.java
diff --git a/api/src/com/cloud/network/GuestVlan.java b/api/src/main/java/com/cloud/network/GuestVlan.java
similarity index 100%
rename from api/src/com/cloud/network/GuestVlan.java
rename to api/src/main/java/com/cloud/network/GuestVlan.java
diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/main/java/com/cloud/network/IpAddress.java
similarity index 100%
rename from api/src/com/cloud/network/IpAddress.java
rename to api/src/main/java/com/cloud/network/IpAddress.java
diff --git a/api/src/com/cloud/network/MonitoringService.java b/api/src/main/java/com/cloud/network/MonitoringService.java
similarity index 100%
rename from api/src/com/cloud/network/MonitoringService.java
rename to api/src/main/java/com/cloud/network/MonitoringService.java
diff --git a/api/src/com/cloud/network/Network.java b/api/src/main/java/com/cloud/network/Network.java
similarity index 100%
rename from api/src/com/cloud/network/Network.java
rename to api/src/main/java/com/cloud/network/Network.java
diff --git a/api/src/com/cloud/network/NetworkMigrationResponder.java b/api/src/main/java/com/cloud/network/NetworkMigrationResponder.java
similarity index 100%
rename from api/src/com/cloud/network/NetworkMigrationResponder.java
rename to api/src/main/java/com/cloud/network/NetworkMigrationResponder.java
diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/main/java/com/cloud/network/NetworkModel.java
similarity index 100%
rename from api/src/com/cloud/network/NetworkModel.java
rename to api/src/main/java/com/cloud/network/NetworkModel.java
diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/main/java/com/cloud/network/NetworkProfile.java
similarity index 100%
rename from api/src/com/cloud/network/NetworkProfile.java
rename to api/src/main/java/com/cloud/network/NetworkProfile.java
diff --git a/api/src/com/cloud/network/NetworkRuleApplier.java b/api/src/main/java/com/cloud/network/NetworkRuleApplier.java
similarity index 100%
rename from api/src/com/cloud/network/NetworkRuleApplier.java
rename to api/src/main/java/com/cloud/network/NetworkRuleApplier.java
diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/main/java/com/cloud/network/NetworkService.java
similarity index 100%
rename from api/src/com/cloud/network/NetworkService.java
rename to api/src/main/java/com/cloud/network/NetworkService.java
diff --git a/api/src/com/cloud/network/NetworkUsageService.java b/api/src/main/java/com/cloud/network/NetworkUsageService.java
similarity index 100%
rename from api/src/com/cloud/network/NetworkUsageService.java
rename to api/src/main/java/com/cloud/network/NetworkUsageService.java
diff --git a/api/src/com/cloud/network/Networks.java b/api/src/main/java/com/cloud/network/Networks.java
similarity index 100%
rename from api/src/com/cloud/network/Networks.java
rename to api/src/main/java/com/cloud/network/Networks.java
diff --git a/api/src/com/cloud/network/OvsProvider.java b/api/src/main/java/com/cloud/network/OvsProvider.java
similarity index 100%
rename from api/src/com/cloud/network/OvsProvider.java
rename to api/src/main/java/com/cloud/network/OvsProvider.java
diff --git a/api/src/com/cloud/network/PhysicalNetwork.java b/api/src/main/java/com/cloud/network/PhysicalNetwork.java
similarity index 100%
rename from api/src/com/cloud/network/PhysicalNetwork.java
rename to api/src/main/java/com/cloud/network/PhysicalNetwork.java
diff --git a/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java b/api/src/main/java/com/cloud/network/PhysicalNetworkServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/PhysicalNetworkServiceProvider.java
rename to api/src/main/java/com/cloud/network/PhysicalNetworkServiceProvider.java
diff --git a/api/src/com/cloud/network/PhysicalNetworkSetupInfo.java b/api/src/main/java/com/cloud/network/PhysicalNetworkSetupInfo.java
similarity index 100%
rename from api/src/com/cloud/network/PhysicalNetworkSetupInfo.java
rename to api/src/main/java/com/cloud/network/PhysicalNetworkSetupInfo.java
diff --git a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java b/api/src/main/java/com/cloud/network/PhysicalNetworkTrafficType.java
similarity index 100%
rename from api/src/com/cloud/network/PhysicalNetworkTrafficType.java
rename to api/src/main/java/com/cloud/network/PhysicalNetworkTrafficType.java
diff --git a/api/src/com/cloud/network/PublicIpAddress.java b/api/src/main/java/com/cloud/network/PublicIpAddress.java
similarity index 100%
rename from api/src/com/cloud/network/PublicIpAddress.java
rename to api/src/main/java/com/cloud/network/PublicIpAddress.java
diff --git a/api/src/com/cloud/network/RemoteAccessVpn.java b/api/src/main/java/com/cloud/network/RemoteAccessVpn.java
similarity index 100%
rename from api/src/com/cloud/network/RemoteAccessVpn.java
rename to api/src/main/java/com/cloud/network/RemoteAccessVpn.java
diff --git a/api/src/com/cloud/network/Site2SiteCustomerGateway.java b/api/src/main/java/com/cloud/network/Site2SiteCustomerGateway.java
similarity index 100%
rename from api/src/com/cloud/network/Site2SiteCustomerGateway.java
rename to api/src/main/java/com/cloud/network/Site2SiteCustomerGateway.java
diff --git a/api/src/com/cloud/network/Site2SiteVpnConnection.java b/api/src/main/java/com/cloud/network/Site2SiteVpnConnection.java
similarity index 100%
rename from api/src/com/cloud/network/Site2SiteVpnConnection.java
rename to api/src/main/java/com/cloud/network/Site2SiteVpnConnection.java
diff --git a/api/src/com/cloud/network/Site2SiteVpnGateway.java b/api/src/main/java/com/cloud/network/Site2SiteVpnGateway.java
similarity index 100%
rename from api/src/com/cloud/network/Site2SiteVpnGateway.java
rename to api/src/main/java/com/cloud/network/Site2SiteVpnGateway.java
diff --git a/api/src/com/cloud/network/StorageNetworkService.java b/api/src/main/java/com/cloud/network/StorageNetworkService.java
similarity index 100%
rename from api/src/com/cloud/network/StorageNetworkService.java
rename to api/src/main/java/com/cloud/network/StorageNetworkService.java
diff --git a/api/src/com/cloud/network/TrafficLabel.java b/api/src/main/java/com/cloud/network/TrafficLabel.java
similarity index 100%
rename from api/src/com/cloud/network/TrafficLabel.java
rename to api/src/main/java/com/cloud/network/TrafficLabel.java
diff --git a/api/src/com/cloud/network/UserIpv6Address.java b/api/src/main/java/com/cloud/network/UserIpv6Address.java
similarity index 100%
rename from api/src/com/cloud/network/UserIpv6Address.java
rename to api/src/main/java/com/cloud/network/UserIpv6Address.java
diff --git a/api/src/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java
similarity index 100%
rename from api/src/com/cloud/network/VirtualNetworkApplianceService.java
rename to api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java
diff --git a/api/src/com/cloud/network/VirtualRouterProvider.java b/api/src/main/java/com/cloud/network/VirtualRouterProvider.java
similarity index 100%
rename from api/src/com/cloud/network/VirtualRouterProvider.java
rename to api/src/main/java/com/cloud/network/VirtualRouterProvider.java
diff --git a/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java b/api/src/main/java/com/cloud/network/VpcVirtualNetworkApplianceService.java
similarity index 100%
rename from api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java
rename to api/src/main/java/com/cloud/network/VpcVirtualNetworkApplianceService.java
diff --git a/api/src/com/cloud/network/VpnUser.java b/api/src/main/java/com/cloud/network/VpnUser.java
similarity index 100%
rename from api/src/com/cloud/network/VpnUser.java
rename to api/src/main/java/com/cloud/network/VpnUser.java
diff --git a/api/src/com/cloud/network/as/AutoScaleCounter.java b/api/src/main/java/com/cloud/network/as/AutoScaleCounter.java
similarity index 100%
rename from api/src/com/cloud/network/as/AutoScaleCounter.java
rename to api/src/main/java/com/cloud/network/as/AutoScaleCounter.java
diff --git a/api/src/com/cloud/network/as/AutoScalePolicy.java b/api/src/main/java/com/cloud/network/as/AutoScalePolicy.java
similarity index 100%
rename from api/src/com/cloud/network/as/AutoScalePolicy.java
rename to api/src/main/java/com/cloud/network/as/AutoScalePolicy.java
diff --git a/api/src/com/cloud/network/as/AutoScaleService.java b/api/src/main/java/com/cloud/network/as/AutoScaleService.java
similarity index 100%
rename from api/src/com/cloud/network/as/AutoScaleService.java
rename to api/src/main/java/com/cloud/network/as/AutoScaleService.java
diff --git a/api/src/com/cloud/network/as/AutoScaleVmGroup.java b/api/src/main/java/com/cloud/network/as/AutoScaleVmGroup.java
similarity index 100%
rename from api/src/com/cloud/network/as/AutoScaleVmGroup.java
rename to api/src/main/java/com/cloud/network/as/AutoScaleVmGroup.java
diff --git a/api/src/com/cloud/network/as/AutoScaleVmProfile.java b/api/src/main/java/com/cloud/network/as/AutoScaleVmProfile.java
similarity index 100%
rename from api/src/com/cloud/network/as/AutoScaleVmProfile.java
rename to api/src/main/java/com/cloud/network/as/AutoScaleVmProfile.java
diff --git a/api/src/com/cloud/network/as/Condition.java b/api/src/main/java/com/cloud/network/as/Condition.java
similarity index 100%
rename from api/src/com/cloud/network/as/Condition.java
rename to api/src/main/java/com/cloud/network/as/Condition.java
diff --git a/api/src/com/cloud/network/as/Counter.java b/api/src/main/java/com/cloud/network/as/Counter.java
similarity index 100%
rename from api/src/com/cloud/network/as/Counter.java
rename to api/src/main/java/com/cloud/network/as/Counter.java
diff --git a/api/src/com/cloud/network/element/AggregatedCommandExecutor.java b/api/src/main/java/com/cloud/network/element/AggregatedCommandExecutor.java
similarity index 100%
rename from api/src/com/cloud/network/element/AggregatedCommandExecutor.java
rename to api/src/main/java/com/cloud/network/element/AggregatedCommandExecutor.java
diff --git a/api/src/com/cloud/network/element/ConnectivityProvider.java b/api/src/main/java/com/cloud/network/element/ConnectivityProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/ConnectivityProvider.java
rename to api/src/main/java/com/cloud/network/element/ConnectivityProvider.java
diff --git a/api/src/com/cloud/network/element/DhcpServiceProvider.java b/api/src/main/java/com/cloud/network/element/DhcpServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/DhcpServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/DhcpServiceProvider.java
diff --git a/api/src/com/cloud/network/element/DnsServiceProvider.java b/api/src/main/java/com/cloud/network/element/DnsServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/DnsServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/DnsServiceProvider.java
diff --git a/api/src/com/cloud/network/element/FirewallServiceProvider.java b/api/src/main/java/com/cloud/network/element/FirewallServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/FirewallServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/FirewallServiceProvider.java
diff --git a/api/src/com/cloud/network/element/IpDeployer.java b/api/src/main/java/com/cloud/network/element/IpDeployer.java
similarity index 100%
rename from api/src/com/cloud/network/element/IpDeployer.java
rename to api/src/main/java/com/cloud/network/element/IpDeployer.java
diff --git a/api/src/com/cloud/network/element/IpDeployingRequester.java b/api/src/main/java/com/cloud/network/element/IpDeployingRequester.java
similarity index 100%
rename from api/src/com/cloud/network/element/IpDeployingRequester.java
rename to api/src/main/java/com/cloud/network/element/IpDeployingRequester.java
diff --git a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java b/api/src/main/java/com/cloud/network/element/LoadBalancingServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/LoadBalancingServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/LoadBalancingServiceProvider.java
diff --git a/api/src/com/cloud/network/element/NetworkACLServiceProvider.java b/api/src/main/java/com/cloud/network/element/NetworkACLServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/NetworkACLServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/NetworkACLServiceProvider.java
diff --git a/api/src/com/cloud/network/element/NetworkElement.java b/api/src/main/java/com/cloud/network/element/NetworkElement.java
similarity index 100%
rename from api/src/com/cloud/network/element/NetworkElement.java
rename to api/src/main/java/com/cloud/network/element/NetworkElement.java
diff --git a/api/src/com/cloud/network/element/PortForwardingServiceProvider.java b/api/src/main/java/com/cloud/network/element/PortForwardingServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/PortForwardingServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/PortForwardingServiceProvider.java
diff --git a/api/src/com/cloud/network/element/RedundantResource.java b/api/src/main/java/com/cloud/network/element/RedundantResource.java
similarity index 100%
rename from api/src/com/cloud/network/element/RedundantResource.java
rename to api/src/main/java/com/cloud/network/element/RedundantResource.java
diff --git a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java b/api/src/main/java/com/cloud/network/element/RemoteAccessVPNServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/RemoteAccessVPNServiceProvider.java
diff --git a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java b/api/src/main/java/com/cloud/network/element/Site2SiteVpnServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/Site2SiteVpnServiceProvider.java
diff --git a/api/src/com/cloud/network/element/SourceNatServiceProvider.java b/api/src/main/java/com/cloud/network/element/SourceNatServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/SourceNatServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/SourceNatServiceProvider.java
diff --git a/api/src/com/cloud/network/element/StaticNatServiceProvider.java b/api/src/main/java/com/cloud/network/element/StaticNatServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/StaticNatServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/StaticNatServiceProvider.java
diff --git a/api/src/com/cloud/network/element/UserDataServiceProvider.java b/api/src/main/java/com/cloud/network/element/UserDataServiceProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/UserDataServiceProvider.java
rename to api/src/main/java/com/cloud/network/element/UserDataServiceProvider.java
diff --git a/api/src/com/cloud/network/element/VirtualRouterElementService.java b/api/src/main/java/com/cloud/network/element/VirtualRouterElementService.java
similarity index 100%
rename from api/src/com/cloud/network/element/VirtualRouterElementService.java
rename to api/src/main/java/com/cloud/network/element/VirtualRouterElementService.java
diff --git a/api/src/com/cloud/network/element/VpcProvider.java b/api/src/main/java/com/cloud/network/element/VpcProvider.java
similarity index 100%
rename from api/src/com/cloud/network/element/VpcProvider.java
rename to api/src/main/java/com/cloud/network/element/VpcProvider.java
diff --git a/api/src/com/cloud/network/firewall/FirewallService.java b/api/src/main/java/com/cloud/network/firewall/FirewallService.java
similarity index 100%
rename from api/src/com/cloud/network/firewall/FirewallService.java
rename to api/src/main/java/com/cloud/network/firewall/FirewallService.java
diff --git a/api/src/com/cloud/network/guru/NetworkGuru.java b/api/src/main/java/com/cloud/network/guru/NetworkGuru.java
similarity index 100%
rename from api/src/com/cloud/network/guru/NetworkGuru.java
rename to api/src/main/java/com/cloud/network/guru/NetworkGuru.java
diff --git a/api/src/com/cloud/network/guru/NetworkGuruAdditionalFunctions.java b/api/src/main/java/com/cloud/network/guru/NetworkGuruAdditionalFunctions.java
similarity index 100%
rename from api/src/com/cloud/network/guru/NetworkGuruAdditionalFunctions.java
rename to api/src/main/java/com/cloud/network/guru/NetworkGuruAdditionalFunctions.java
diff --git a/api/src/com/cloud/network/lb/LoadBalancingRule.java b/api/src/main/java/com/cloud/network/lb/LoadBalancingRule.java
similarity index 100%
rename from api/src/com/cloud/network/lb/LoadBalancingRule.java
rename to api/src/main/java/com/cloud/network/lb/LoadBalancingRule.java
diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/main/java/com/cloud/network/lb/LoadBalancingRulesService.java
similarity index 100%
rename from api/src/com/cloud/network/lb/LoadBalancingRulesService.java
rename to api/src/main/java/com/cloud/network/lb/LoadBalancingRulesService.java
diff --git a/api/src/com/cloud/network/router/VirtualRouter.java b/api/src/main/java/com/cloud/network/router/VirtualRouter.java
similarity index 100%
rename from api/src/com/cloud/network/router/VirtualRouter.java
rename to api/src/main/java/com/cloud/network/router/VirtualRouter.java
diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/main/java/com/cloud/network/rules/FirewallRule.java
similarity index 100%
rename from api/src/com/cloud/network/rules/FirewallRule.java
rename to api/src/main/java/com/cloud/network/rules/FirewallRule.java
diff --git a/api/src/com/cloud/network/rules/HealthCheckPolicy.java b/api/src/main/java/com/cloud/network/rules/HealthCheckPolicy.java
similarity index 100%
rename from api/src/com/cloud/network/rules/HealthCheckPolicy.java
rename to api/src/main/java/com/cloud/network/rules/HealthCheckPolicy.java
diff --git a/api/src/com/cloud/network/rules/LbStickinessMethod.java b/api/src/main/java/com/cloud/network/rules/LbStickinessMethod.java
similarity index 100%
rename from api/src/com/cloud/network/rules/LbStickinessMethod.java
rename to api/src/main/java/com/cloud/network/rules/LbStickinessMethod.java
diff --git a/api/src/com/cloud/network/rules/LoadBalancer.java b/api/src/main/java/com/cloud/network/rules/LoadBalancer.java
similarity index 100%
rename from api/src/com/cloud/network/rules/LoadBalancer.java
rename to api/src/main/java/com/cloud/network/rules/LoadBalancer.java
diff --git a/api/src/com/cloud/network/rules/LoadBalancerContainer.java b/api/src/main/java/com/cloud/network/rules/LoadBalancerContainer.java
similarity index 100%
rename from api/src/com/cloud/network/rules/LoadBalancerContainer.java
rename to api/src/main/java/com/cloud/network/rules/LoadBalancerContainer.java
diff --git a/api/src/com/cloud/network/rules/PortForwardingRule.java b/api/src/main/java/com/cloud/network/rules/PortForwardingRule.java
similarity index 100%
rename from api/src/com/cloud/network/rules/PortForwardingRule.java
rename to api/src/main/java/com/cloud/network/rules/PortForwardingRule.java
diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/main/java/com/cloud/network/rules/RulesService.java
similarity index 100%
rename from api/src/com/cloud/network/rules/RulesService.java
rename to api/src/main/java/com/cloud/network/rules/RulesService.java
diff --git a/api/src/com/cloud/network/rules/StaticNat.java b/api/src/main/java/com/cloud/network/rules/StaticNat.java
similarity index 100%
rename from api/src/com/cloud/network/rules/StaticNat.java
rename to api/src/main/java/com/cloud/network/rules/StaticNat.java
diff --git a/api/src/com/cloud/network/rules/StaticNatRule.java b/api/src/main/java/com/cloud/network/rules/StaticNatRule.java
similarity index 100%
rename from api/src/com/cloud/network/rules/StaticNatRule.java
rename to api/src/main/java/com/cloud/network/rules/StaticNatRule.java
diff --git a/api/src/com/cloud/network/rules/StickinessPolicy.java b/api/src/main/java/com/cloud/network/rules/StickinessPolicy.java
similarity index 100%
rename from api/src/com/cloud/network/rules/StickinessPolicy.java
rename to api/src/main/java/com/cloud/network/rules/StickinessPolicy.java
diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/main/java/com/cloud/network/security/SecurityGroup.java
similarity index 100%
rename from api/src/com/cloud/network/security/SecurityGroup.java
rename to api/src/main/java/com/cloud/network/security/SecurityGroup.java
diff --git a/api/src/com/cloud/network/security/SecurityGroupRules.java b/api/src/main/java/com/cloud/network/security/SecurityGroupRules.java
similarity index 100%
rename from api/src/com/cloud/network/security/SecurityGroupRules.java
rename to api/src/main/java/com/cloud/network/security/SecurityGroupRules.java
diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/main/java/com/cloud/network/security/SecurityGroupService.java
similarity index 100%
rename from api/src/com/cloud/network/security/SecurityGroupService.java
rename to api/src/main/java/com/cloud/network/security/SecurityGroupService.java
diff --git a/api/src/com/cloud/network/security/SecurityRule.java b/api/src/main/java/com/cloud/network/security/SecurityRule.java
similarity index 100%
rename from api/src/com/cloud/network/security/SecurityRule.java
rename to api/src/main/java/com/cloud/network/security/SecurityRule.java
diff --git a/api/src/com/cloud/network/vpc/NetworkACL.java b/api/src/main/java/com/cloud/network/vpc/NetworkACL.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/NetworkACL.java
rename to api/src/main/java/com/cloud/network/vpc/NetworkACL.java
diff --git a/api/src/com/cloud/network/vpc/NetworkACLItem.java b/api/src/main/java/com/cloud/network/vpc/NetworkACLItem.java
similarity index 95%
rename from api/src/com/cloud/network/vpc/NetworkACLItem.java
rename to api/src/main/java/com/cloud/network/vpc/NetworkACLItem.java
index 75153fd..eeca375 100644
--- a/api/src/com/cloud/network/vpc/NetworkACLItem.java
+++ b/api/src/main/java/com/cloud/network/vpc/NetworkACLItem.java
@@ -24,6 +24,7 @@
 
 public interface NetworkACLItem extends InternalIdentity, Identity, Displayable {
 
+    @Override
     String getUuid();
 
     Action getAction();
@@ -51,7 +52,7 @@
     Integer getSourcePortStart();
 
     /**
-     * @return last port of the source prot range.  If this is null, that means only one port is mapped.
+     * @return last port of the source port range.  If this is null, that means only one port is mapped.
      */
     Integer getSourcePortEnd();
 
@@ -70,12 +71,10 @@
 
     List<String> getSourceCidrList();
 
-    /**
-     * @return
-     */
     TrafficType getTrafficType();
 
     @Override
     boolean isDisplay();
 
+    String getReason();
 }
diff --git a/api/src/com/cloud/network/vpc/NetworkACLService.java b/api/src/main/java/com/cloud/network/vpc/NetworkACLService.java
similarity index 65%
rename from api/src/com/cloud/network/vpc/NetworkACLService.java
rename to api/src/main/java/com/cloud/network/vpc/NetworkACLService.java
index f08fff5..7c4e8b4 100644
--- a/api/src/com/cloud/network/vpc/NetworkACLService.java
+++ b/api/src/main/java/com/cloud/network/vpc/NetworkACLService.java
@@ -21,116 +21,79 @@
 import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
+import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
 
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.utils.Pair;
 
 public interface NetworkACLService {
+
     /**
      * Creates Network ACL for the specified VPC
-     * @param name
-     * @param description
-     * @param vpcId
-     * @param forDisplay TODO
-     * @return
      */
     NetworkACL createNetworkACL(String name, String description, long vpcId, Boolean forDisplay);
 
     /**
      * Get Network ACL with specified Id
-     * @param id
-     * @return
      */
     NetworkACL getNetworkACL(long id);
 
     /**
-     * List NetworkACLs by Id/Name/Network or Vpc it belongs to
-     * @param cmd
-     * @return
+     * List NetworkACLs by Id/Name/Network or VPC it belongs to
      */
     Pair<List<? extends NetworkACL>, Integer> listNetworkACLs(ListNetworkACLListsCmd cmd);
 
     /**
      * Delete specified network ACL. Deletion fails if the list is not empty
-     * @param id
-     * @return
      */
     boolean deleteNetworkACL(long id);
 
     /**
      * Associates ACL with specified Network
-     * @param aclId
-     * @param networkId
-     * @return
-     * @throws ResourceUnavailableException
      */
     boolean replaceNetworkACL(long aclId, long networkId) throws ResourceUnavailableException;
 
     /**
      * Applied ACL to associated networks
-     * @param aclId
-     * @return
-     * @throws ResourceUnavailableException
      */
     boolean applyNetworkACL(long aclId) throws ResourceUnavailableException;
 
     /**
      * Creates a Network ACL Item within an ACL and applies the ACL to associated networks
-     * @param createNetworkACLCmd
-     * @return
      */
     NetworkACLItem createNetworkACLItem(CreateNetworkACLCmd aclItemCmd);
 
     /**
      * Return ACL item with specified Id
-     * @param ruleId
-     * @return
      */
     NetworkACLItem getNetworkACLItem(long ruleId);
 
     /**
      * Lists Network ACL Items by Id, Network, ACLId, Traffic Type, protocol
-     * @param listNetworkACLsCmd
-     * @return
      */
     Pair<List<? extends NetworkACLItem>, Integer> listNetworkACLItems(ListNetworkACLsCmd cmd);
 
     /**
      * Revoke ACL Item with specified Id
-     * @param ruleId
-     * @return
      */
     boolean revokeNetworkACLItem(long ruleId);
 
     /**
      * Updates existing aclItem applies to associated networks
-     * @param id
-     * @param protocol
-     * @param sourceCidrList
-     * @param trafficType
-     * @param action
-     * @param number
-     * @param sourcePortStart
-     * @param sourcePortEnd
-     * @param icmpCode
-     * @param icmpType
-     * @param newUUID TODO
-     * @param forDisplay TODO
-     * @return
-     * @throws ResourceUnavailableException
      */
-    NetworkACLItem updateNetworkACLItem(Long id, String protocol, List<String> sourceCidrList, NetworkACLItem.TrafficType trafficType, String action, Integer number,
-            Integer sourcePortStart, Integer sourcePortEnd, Integer icmpCode, Integer icmpType, String newUUID, Boolean forDisplay) throws ResourceUnavailableException;
+    NetworkACLItem updateNetworkACLItem(UpdateNetworkACLItemCmd updateNetworkACLItemCmd) throws ResourceUnavailableException;
 
     /**
      * Associates ACL with specified Network
-     * @param aclId
-     * @param privateGatewayId
-     * @return
-     * @throws ResourceUnavailableException
      */
     boolean replaceNetworkACLonPrivateGw(long aclId, long privateGatewayId) throws ResourceUnavailableException;
 
-    NetworkACL updateNetworkACL(Long id, String customId, Boolean forDisplay);
+    NetworkACL updateNetworkACL(UpdateNetworkACLListCmd updateNetworkACLListCmd);
 
-}
+    /**
+     * Updates a network item ACL to a new position. This method allows users to inform between which ACLs the given ACL will be placed. Therefore, the 'number' field will be filled out by the system in the best way possible to place the ACL accordingly.
+     */
+    NetworkACLItem moveNetworkAclRuleToNewPosition(MoveNetworkAclItemCmd moveNetworkAclItemCmd);
+}
\ No newline at end of file
diff --git a/api/src/com/cloud/network/vpc/PrivateGateway.java b/api/src/main/java/com/cloud/network/vpc/PrivateGateway.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/PrivateGateway.java
rename to api/src/main/java/com/cloud/network/vpc/PrivateGateway.java
diff --git a/api/src/com/cloud/network/vpc/PrivateIp.java b/api/src/main/java/com/cloud/network/vpc/PrivateIp.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/PrivateIp.java
rename to api/src/main/java/com/cloud/network/vpc/PrivateIp.java
diff --git a/api/src/com/cloud/network/vpc/StaticRoute.java b/api/src/main/java/com/cloud/network/vpc/StaticRoute.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/StaticRoute.java
rename to api/src/main/java/com/cloud/network/vpc/StaticRoute.java
diff --git a/api/src/com/cloud/network/vpc/StaticRouteProfile.java b/api/src/main/java/com/cloud/network/vpc/StaticRouteProfile.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/StaticRouteProfile.java
rename to api/src/main/java/com/cloud/network/vpc/StaticRouteProfile.java
diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/main/java/com/cloud/network/vpc/Vpc.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/Vpc.java
rename to api/src/main/java/com/cloud/network/vpc/Vpc.java
diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/main/java/com/cloud/network/vpc/VpcGateway.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/VpcGateway.java
rename to api/src/main/java/com/cloud/network/vpc/VpcGateway.java
diff --git a/api/src/com/cloud/network/vpc/VpcOffering.java b/api/src/main/java/com/cloud/network/vpc/VpcOffering.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/VpcOffering.java
rename to api/src/main/java/com/cloud/network/vpc/VpcOffering.java
diff --git a/api/src/com/cloud/network/vpc/VpcProvisioningService.java b/api/src/main/java/com/cloud/network/vpc/VpcProvisioningService.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/VpcProvisioningService.java
rename to api/src/main/java/com/cloud/network/vpc/VpcProvisioningService.java
diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/main/java/com/cloud/network/vpc/VpcService.java
similarity index 100%
rename from api/src/com/cloud/network/vpc/VpcService.java
rename to api/src/main/java/com/cloud/network/vpc/VpcService.java
diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/main/java/com/cloud/network/vpn/RemoteAccessVpnService.java
similarity index 100%
rename from api/src/com/cloud/network/vpn/RemoteAccessVpnService.java
rename to api/src/main/java/com/cloud/network/vpn/RemoteAccessVpnService.java
diff --git a/api/src/com/cloud/network/vpn/Site2SiteVpnService.java b/api/src/main/java/com/cloud/network/vpn/Site2SiteVpnService.java
similarity index 100%
rename from api/src/com/cloud/network/vpn/Site2SiteVpnService.java
rename to api/src/main/java/com/cloud/network/vpn/Site2SiteVpnService.java
diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/main/java/com/cloud/offering/DiskOffering.java
similarity index 100%
rename from api/src/com/cloud/offering/DiskOffering.java
rename to api/src/main/java/com/cloud/offering/DiskOffering.java
diff --git a/api/src/com/cloud/offering/DiskOfferingInfo.java b/api/src/main/java/com/cloud/offering/DiskOfferingInfo.java
similarity index 100%
rename from api/src/com/cloud/offering/DiskOfferingInfo.java
rename to api/src/main/java/com/cloud/offering/DiskOfferingInfo.java
diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/main/java/com/cloud/offering/NetworkOffering.java
similarity index 100%
rename from api/src/com/cloud/offering/NetworkOffering.java
rename to api/src/main/java/com/cloud/offering/NetworkOffering.java
diff --git a/api/src/com/cloud/offering/OfferingManager.java b/api/src/main/java/com/cloud/offering/OfferingManager.java
similarity index 100%
rename from api/src/com/cloud/offering/OfferingManager.java
rename to api/src/main/java/com/cloud/offering/OfferingManager.java
diff --git a/api/src/com/cloud/offering/ServiceOffering.java b/api/src/main/java/com/cloud/offering/ServiceOffering.java
similarity index 100%
rename from api/src/com/cloud/offering/ServiceOffering.java
rename to api/src/main/java/com/cloud/offering/ServiceOffering.java
diff --git a/api/src/com/cloud/org/Cluster.java b/api/src/main/java/com/cloud/org/Cluster.java
similarity index 100%
rename from api/src/com/cloud/org/Cluster.java
rename to api/src/main/java/com/cloud/org/Cluster.java
diff --git a/api/src/com/cloud/org/Grouping.java b/api/src/main/java/com/cloud/org/Grouping.java
similarity index 100%
rename from api/src/com/cloud/org/Grouping.java
rename to api/src/main/java/com/cloud/org/Grouping.java
diff --git a/api/src/com/cloud/org/Managed.java b/api/src/main/java/com/cloud/org/Managed.java
similarity index 100%
rename from api/src/com/cloud/org/Managed.java
rename to api/src/main/java/com/cloud/org/Managed.java
diff --git a/api/src/com/cloud/org/RunningIn.java b/api/src/main/java/com/cloud/org/RunningIn.java
similarity index 100%
rename from api/src/com/cloud/org/RunningIn.java
rename to api/src/main/java/com/cloud/org/RunningIn.java
diff --git a/api/src/com/cloud/projects/Project.java b/api/src/main/java/com/cloud/projects/Project.java
similarity index 100%
rename from api/src/com/cloud/projects/Project.java
rename to api/src/main/java/com/cloud/projects/Project.java
diff --git a/api/src/com/cloud/projects/ProjectAccount.java b/api/src/main/java/com/cloud/projects/ProjectAccount.java
similarity index 100%
rename from api/src/com/cloud/projects/ProjectAccount.java
rename to api/src/main/java/com/cloud/projects/ProjectAccount.java
diff --git a/api/src/com/cloud/projects/ProjectInvitation.java b/api/src/main/java/com/cloud/projects/ProjectInvitation.java
similarity index 100%
rename from api/src/com/cloud/projects/ProjectInvitation.java
rename to api/src/main/java/com/cloud/projects/ProjectInvitation.java
diff --git a/api/src/com/cloud/projects/ProjectService.java b/api/src/main/java/com/cloud/projects/ProjectService.java
similarity index 100%
rename from api/src/com/cloud/projects/ProjectService.java
rename to api/src/main/java/com/cloud/projects/ProjectService.java
diff --git a/api/src/com/cloud/region/ha/GlobalLoadBalancerRule.java b/api/src/main/java/com/cloud/region/ha/GlobalLoadBalancerRule.java
similarity index 100%
rename from api/src/com/cloud/region/ha/GlobalLoadBalancerRule.java
rename to api/src/main/java/com/cloud/region/ha/GlobalLoadBalancerRule.java
diff --git a/api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java b/api/src/main/java/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
similarity index 100%
rename from api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
rename to api/src/main/java/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/main/java/com/cloud/resource/ResourceService.java
similarity index 89%
rename from api/src/com/cloud/resource/ResourceService.java
rename to api/src/main/java/com/cloud/resource/ResourceService.java
index 854b535..7082308 100644
--- a/api/src/com/cloud/resource/ResourceService.java
+++ b/api/src/main/java/com/cloud/resource/ResourceService.java
@@ -18,7 +18,6 @@
 
 import java.util.List;
 
-import com.cloud.dc.DataCenter;
 import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd;
 import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;
 import org.apache.cloudstack.api.command.admin.host.AddHostCmd;
@@ -29,6 +28,8 @@
 import org.apache.cloudstack.api.command.admin.host.UpdateHostCmd;
 import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;
 
+import com.cloud.dc.DataCenter;
+import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.DiscoveryException;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceInUseException;
@@ -41,25 +42,17 @@
     /**
      * Updates a host
      *
-     * @param cmd
-     *            - the command specifying hostId
-     * @return hostObject
-     * @throws NoTransitionException
+     * @param cmd - the command specifying hostId
      */
     Host updateHost(UpdateHostCmd cmd) throws NoTransitionException;
 
     Host cancelMaintenance(CancelMaintenanceCmd cmd);
 
-    Host reconnectHost(ReconnectHostCmd cmd);
+    Host reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException;
 
     /**
      * We will automatically create an Apache CloudStack cluster to attach to the external cluster and return a hyper host to perform
      * host related operation within the cluster
-     *
-     * @param cmd
-     * @return
-     * @throws IllegalArgumentException
-     * @throws DiscoveryException
      */
     List<? extends Cluster> discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, DiscoveryException, ResourceInUseException;
 
@@ -75,12 +68,6 @@
 
     /**
      * Deletes a host
-     *
-     * @param hostId
-     *            TODO
-     * @param isForced
-     *            TODO
-     *
      * @param true if deleted, false otherwise
      */
     boolean deleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage);
diff --git a/api/src/com/cloud/resource/ResourceState.java b/api/src/main/java/com/cloud/resource/ResourceState.java
similarity index 100%
rename from api/src/com/cloud/resource/ResourceState.java
rename to api/src/main/java/com/cloud/resource/ResourceState.java
diff --git a/api/src/com/cloud/resource/UnableDeleteHostException.java b/api/src/main/java/com/cloud/resource/UnableDeleteHostException.java
similarity index 100%
rename from api/src/com/cloud/resource/UnableDeleteHostException.java
rename to api/src/main/java/com/cloud/resource/UnableDeleteHostException.java
diff --git a/api/src/com/cloud/serializer/Param.java b/api/src/main/java/com/cloud/serializer/Param.java
similarity index 100%
rename from api/src/com/cloud/serializer/Param.java
rename to api/src/main/java/com/cloud/serializer/Param.java
diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/main/java/com/cloud/server/ManagementService.java
similarity index 100%
rename from api/src/com/cloud/server/ManagementService.java
rename to api/src/main/java/com/cloud/server/ManagementService.java
diff --git a/api/src/com/cloud/server/ResourceMetaDataService.java b/api/src/main/java/com/cloud/server/ResourceMetaDataService.java
similarity index 100%
rename from api/src/com/cloud/server/ResourceMetaDataService.java
rename to api/src/main/java/com/cloud/server/ResourceMetaDataService.java
diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/main/java/com/cloud/server/ResourceTag.java
similarity index 100%
rename from api/src/com/cloud/server/ResourceTag.java
rename to api/src/main/java/com/cloud/server/ResourceTag.java
diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/main/java/com/cloud/server/TaggedResourceService.java
similarity index 100%
rename from api/src/com/cloud/server/TaggedResourceService.java
rename to api/src/main/java/com/cloud/server/TaggedResourceService.java
diff --git a/api/src/com/cloud/storage/DataStoreProviderApiService.java b/api/src/main/java/com/cloud/storage/DataStoreProviderApiService.java
similarity index 100%
rename from api/src/com/cloud/storage/DataStoreProviderApiService.java
rename to api/src/main/java/com/cloud/storage/DataStoreProviderApiService.java
diff --git a/api/src/com/cloud/storage/DataStoreRole.java b/api/src/main/java/com/cloud/storage/DataStoreRole.java
similarity index 100%
rename from api/src/com/cloud/storage/DataStoreRole.java
rename to api/src/main/java/com/cloud/storage/DataStoreRole.java
diff --git a/api/src/com/cloud/storage/GuestOS.java b/api/src/main/java/com/cloud/storage/GuestOS.java
similarity index 100%
rename from api/src/com/cloud/storage/GuestOS.java
rename to api/src/main/java/com/cloud/storage/GuestOS.java
diff --git a/api/src/com/cloud/storage/GuestOSHypervisor.java b/api/src/main/java/com/cloud/storage/GuestOSHypervisor.java
similarity index 100%
rename from api/src/com/cloud/storage/GuestOSHypervisor.java
rename to api/src/main/java/com/cloud/storage/GuestOSHypervisor.java
diff --git a/api/src/com/cloud/storage/GuestOsCategory.java b/api/src/main/java/com/cloud/storage/GuestOsCategory.java
similarity index 100%
rename from api/src/com/cloud/storage/GuestOsCategory.java
rename to api/src/main/java/com/cloud/storage/GuestOsCategory.java
diff --git a/api/src/com/cloud/storage/ImageStore.java b/api/src/main/java/com/cloud/storage/ImageStore.java
similarity index 100%
rename from api/src/com/cloud/storage/ImageStore.java
rename to api/src/main/java/com/cloud/storage/ImageStore.java
diff --git a/api/src/com/cloud/storage/ScopeType.java b/api/src/main/java/com/cloud/storage/ScopeType.java
similarity index 100%
rename from api/src/com/cloud/storage/ScopeType.java
rename to api/src/main/java/com/cloud/storage/ScopeType.java
diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/main/java/com/cloud/storage/Snapshot.java
similarity index 100%
rename from api/src/com/cloud/storage/Snapshot.java
rename to api/src/main/java/com/cloud/storage/Snapshot.java
diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/main/java/com/cloud/storage/Storage.java
similarity index 100%
rename from api/src/com/cloud/storage/Storage.java
rename to api/src/main/java/com/cloud/storage/Storage.java
diff --git a/api/src/com/cloud/storage/StorageGuru.java b/api/src/main/java/com/cloud/storage/StorageGuru.java
similarity index 100%
rename from api/src/com/cloud/storage/StorageGuru.java
rename to api/src/main/java/com/cloud/storage/StorageGuru.java
diff --git a/api/src/com/cloud/storage/StoragePool.java b/api/src/main/java/com/cloud/storage/StoragePool.java
similarity index 100%
rename from api/src/com/cloud/storage/StoragePool.java
rename to api/src/main/java/com/cloud/storage/StoragePool.java
diff --git a/api/src/com/cloud/storage/StoragePoolDiscoverer.java b/api/src/main/java/com/cloud/storage/StoragePoolDiscoverer.java
similarity index 100%
rename from api/src/com/cloud/storage/StoragePoolDiscoverer.java
rename to api/src/main/java/com/cloud/storage/StoragePoolDiscoverer.java
diff --git a/api/src/com/cloud/storage/StoragePoolStatus.java b/api/src/main/java/com/cloud/storage/StoragePoolStatus.java
similarity index 100%
rename from api/src/com/cloud/storage/StoragePoolStatus.java
rename to api/src/main/java/com/cloud/storage/StoragePoolStatus.java
diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/main/java/com/cloud/storage/StorageService.java
similarity index 91%
rename from api/src/com/cloud/storage/StorageService.java
rename to api/src/main/java/com/cloud/storage/StorageService.java
index e40b1e6..aebbbcd 100644
--- a/api/src/com/cloud/storage/StorageService.java
+++ b/api/src/main/java/com/cloud/storage/StorageService.java
@@ -90,23 +90,16 @@
 
     boolean deleteSecondaryStagingStore(DeleteSecondaryStagingStoreCmd cmd);
 
-    ImageStore discoverImageStore(String name, String url, String providerName, Long zoneId, Map details) throws IllegalArgumentException, DiscoveryException,
-            InvalidParameterValueException;
+    ImageStore discoverImageStore(String name, String url, String providerName, Long zoneId, Map details) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException;
 
-
-        /**
+    /**
      * Migrate existing NFS to use object store.
      * @param name object store name.
-     * @param url object store url.
+     * @param url object store URL.
      * @param providerName object store provider Name.
      * @param details object store other details
      * @return Object store created.
-     * @throws IllegalArgumentException
-     * @throws DiscoveryException
-     * @throws InvalidParameterValueException
      */
-    ImageStore migrateToObjectStore(String name, String url, String providerName, Map details) throws IllegalArgumentException, DiscoveryException,
-            InvalidParameterValueException;
-
+    ImageStore migrateToObjectStore(String name, String url, String providerName, Map<String, String> details) throws DiscoveryException;
 
 }
diff --git a/api/src/com/cloud/storage/StorageStats.java b/api/src/main/java/com/cloud/storage/StorageStats.java
similarity index 100%
rename from api/src/com/cloud/storage/StorageStats.java
rename to api/src/main/java/com/cloud/storage/StorageStats.java
diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/main/java/com/cloud/storage/Upload.java
similarity index 100%
rename from api/src/com/cloud/storage/Upload.java
rename to api/src/main/java/com/cloud/storage/Upload.java
diff --git a/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java b/api/src/main/java/com/cloud/storage/VMTemplateStorageResourceAssoc.java
similarity index 100%
rename from api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java
rename to api/src/main/java/com/cloud/storage/VMTemplateStorageResourceAssoc.java
diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/main/java/com/cloud/storage/Volume.java
similarity index 100%
rename from api/src/com/cloud/storage/Volume.java
rename to api/src/main/java/com/cloud/storage/Volume.java
diff --git a/api/src/com/cloud/storage/VolumeApiService.java b/api/src/main/java/com/cloud/storage/VolumeApiService.java
similarity index 76%
rename from api/src/com/cloud/storage/VolumeApiService.java
rename to api/src/main/java/com/cloud/storage/VolumeApiService.java
index cf13cd6..ec20c33 100644
--- a/api/src/com/cloud/storage/VolumeApiService.java
+++ b/api/src/main/java/com/cloud/storage/VolumeApiService.java
@@ -102,4 +102,37 @@
     void updateDisplay(Volume volume, Boolean displayVolume);
 
     Snapshot allocSnapshotForVm(Long vmId, Long volumeId, String snapshotName) throws ResourceAllocationException;
-}
+
+    /**
+     *  Checks if the target storage supports the disk offering.
+     *  This validation is consistent with the mechanism used to select a storage pool to deploy a volume when a virtual machine is deployed or when a data disk is allocated.
+     *
+     *  The scenarios when this method returns true or false is presented in the following table.
+     *   <table border="1">
+     *      <tr>
+     *          <th>#</th><th>Disk offering tags</th><th>Storage tags</th><th>Does the storage support the disk offering?</th>
+     *      </tr>
+     *      <body>
+     *      <tr>
+     *          <td>1</td><td>A,B</td><td>A</td><td>NO</td>
+     *      </tr>
+     *      <tr>
+     *          <td>2</td><td>A,B,C</td><td>A,B,C,D,X</td><td>YES</td>
+     *      </tr>
+     *      <tr>
+     *          <td>3</td><td>A,B,C</td><td>X,Y,Z</td><td>NO</td>
+     *      </tr>
+     *      <tr>
+     *          <td>4</td><td>null</td><td>A,S,D</td><td>YES</td>
+     *      </tr>
+     *      <tr>
+     *          <td>5</td><td>A</td><td>null</td><td>NO</td>
+     *      </tr>
+     *      <tr>
+     *          <td>6</td><td>null</td><td>null</td><td>YES</td>
+     *      </tr>
+     *      </body>
+     *   </table>
+     */
+    boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, String diskOfferingTags);
+}
\ No newline at end of file
diff --git a/api/src/com/cloud/storage/VolumeStats.java b/api/src/main/java/com/cloud/storage/VolumeStats.java
similarity index 100%
rename from api/src/com/cloud/storage/VolumeStats.java
rename to api/src/main/java/com/cloud/storage/VolumeStats.java
diff --git a/api/src/com/cloud/storage/snapshot/SnapshotApiService.java b/api/src/main/java/com/cloud/storage/snapshot/SnapshotApiService.java
similarity index 95%
rename from api/src/com/cloud/storage/snapshot/SnapshotApiService.java
rename to api/src/main/java/com/cloud/storage/snapshot/SnapshotApiService.java
index eb13935..a80391b 100644
--- a/api/src/com/cloud/storage/snapshot/SnapshotApiService.java
+++ b/api/src/main/java/com/cloud/storage/snapshot/SnapshotApiService.java
@@ -101,6 +101,13 @@
     Snapshot createSnapshot(Long volumeId, Long policyId, Long snapshotId, Account snapshotOwner);
 
     /**
+     * Archives a snapshot from primary storage to secondary storage.
+     * @param id Snapshot ID
+     * @return Archived Snapshot object
+     */
+    Snapshot archiveSnapshot(Long id);
+
+    /**
      * @param vol
      * @return
      */
diff --git a/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java b/api/src/main/java/com/cloud/storage/snapshot/SnapshotPolicy.java
similarity index 100%
rename from api/src/com/cloud/storage/snapshot/SnapshotPolicy.java
rename to api/src/main/java/com/cloud/storage/snapshot/SnapshotPolicy.java
diff --git a/api/src/com/cloud/storage/snapshot/SnapshotSchedule.java b/api/src/main/java/com/cloud/storage/snapshot/SnapshotSchedule.java
similarity index 100%
rename from api/src/com/cloud/storage/snapshot/SnapshotSchedule.java
rename to api/src/main/java/com/cloud/storage/snapshot/SnapshotSchedule.java
diff --git a/api/src/com/cloud/storage/template/TemplateProp.java b/api/src/main/java/com/cloud/storage/template/TemplateProp.java
similarity index 100%
rename from api/src/com/cloud/storage/template/TemplateProp.java
rename to api/src/main/java/com/cloud/storage/template/TemplateProp.java
diff --git a/api/src/com/cloud/template/BasedOn.java b/api/src/main/java/com/cloud/template/BasedOn.java
similarity index 100%
rename from api/src/com/cloud/template/BasedOn.java
rename to api/src/main/java/com/cloud/template/BasedOn.java
diff --git a/api/src/com/cloud/template/TemplateApiService.java b/api/src/main/java/com/cloud/template/TemplateApiService.java
similarity index 100%
rename from api/src/com/cloud/template/TemplateApiService.java
rename to api/src/main/java/com/cloud/template/TemplateApiService.java
diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/main/java/com/cloud/template/VirtualMachineTemplate.java
similarity index 100%
rename from api/src/com/cloud/template/VirtualMachineTemplate.java
rename to api/src/main/java/com/cloud/template/VirtualMachineTemplate.java
diff --git a/api/src/com/cloud/user/Account.java b/api/src/main/java/com/cloud/user/Account.java
similarity index 100%
rename from api/src/com/cloud/user/Account.java
rename to api/src/main/java/com/cloud/user/Account.java
diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/main/java/com/cloud/user/AccountService.java
similarity index 77%
rename from api/src/com/cloud/user/AccountService.java
rename to api/src/main/java/com/cloud/user/AccountService.java
index 9683d9f..060861d 100644
--- a/api/src/com/cloud/user/AccountService.java
+++ b/api/src/main/java/com/cloud/user/AccountService.java
@@ -23,53 +23,28 @@
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.command.admin.user.GetUserKeysCmd;
 import org.apache.cloudstack.api.command.admin.user.RegisterCmd;
+import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
 
 import com.cloud.domain.Domain;
 import com.cloud.exception.PermissionDeniedException;
 import com.cloud.offering.DiskOffering;
 import com.cloud.offering.ServiceOffering;
 
-
 public interface AccountService {
 
     /**
      * Creates a new user and account, stores the password as is so encrypted passwords are recommended.
-     *
-     * @param userName
-     *            TODO
-     * @param password
-     *            TODO
-     * @param firstName
-     *            TODO
-     * @param lastName
-     *            TODO
-     * @param email
-     *            TODO
-     * @param timezone
-     *            TODO
-     * @param accountName
-     *            TODO
-     * @param accountType
-     *            TODO
-     * @param domainId
-     *            TODO
-     * @param networkDomain
-     *            TODO
-     *
      * @return the user if created successfully, null otherwise
      */
-    UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName,
-        short accountType, Long roleId, Long domainId, String networkDomain, Map<String, String> details, String accountUUID, String userUUID);
+    UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName, short accountType, Long roleId, Long domainId,
+            String networkDomain, Map<String, String> details, String accountUUID, String userUUID);
 
-    UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName, short accountType, Long roleId, Long domainId, String networkDomain,
-                                  Map<String, String> details, String accountUUID, String userUUID, User.Source source);
+    UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName, short accountType, Long roleId, Long domainId,
+            String networkDomain, Map<String, String> details, String accountUUID, String userUUID, User.Source source);
 
     /**
      * Locks a user by userId. A locked user cannot access the API, but will still have running VMs/IP addresses
      * allocated/etc.
-     *
-     * @param userId
-     * @return UserAccount object
      */
     UserAccount lockUser(long userId);
 
@@ -79,8 +54,7 @@
 
     User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID);
 
-    User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID,
-                    User.Source source);
+    User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID, User.Source source);
 
     boolean isAdmin(Long accountId);
 
@@ -90,7 +64,7 @@
 
     UserAccount getActiveUserAccount(String username, Long domainId);
 
-    UserAccount updateUser(Long userId, String firstName, String lastName, String email, String userName, String password, String apiKey, String secretKey, String timeZone);
+    UserAccount updateUser(UpdateUserCmd updateUserCmd);
 
     Account getActiveAccountById(long accountId);
 
@@ -128,15 +102,14 @@
 
     void checkAccess(User user, ControlledEntity entity);
 
-    void checkAccess(Account account, AccessType accessType, boolean sameOwner, String apiName,
-            ControlledEntity... entities) throws PermissionDeniedException;
+    void checkAccess(Account account, AccessType accessType, boolean sameOwner, String apiName, ControlledEntity... entities) throws PermissionDeniedException;
 
     Long finalyzeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly);
 
     /**
      * returns the user account object for a given user id
      * @param userId user id
-     * @return useraccount object if it exists else null
+     * @return {@link UserAccount} object if it exists else null
      */
     UserAccount getUserAccountById(Long userId);
 
diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/main/java/com/cloud/user/DomainService.java
similarity index 100%
rename from api/src/com/cloud/user/DomainService.java
rename to api/src/main/java/com/cloud/user/DomainService.java
diff --git a/api/src/com/cloud/user/OwnedBy.java b/api/src/main/java/com/cloud/user/OwnedBy.java
similarity index 100%
rename from api/src/com/cloud/user/OwnedBy.java
rename to api/src/main/java/com/cloud/user/OwnedBy.java
diff --git a/api/src/com/cloud/user/ResourceLimitService.java b/api/src/main/java/com/cloud/user/ResourceLimitService.java
similarity index 100%
rename from api/src/com/cloud/user/ResourceLimitService.java
rename to api/src/main/java/com/cloud/user/ResourceLimitService.java
diff --git a/api/src/com/cloud/user/SSHKeyPair.java b/api/src/main/java/com/cloud/user/SSHKeyPair.java
similarity index 100%
rename from api/src/com/cloud/user/SSHKeyPair.java
rename to api/src/main/java/com/cloud/user/SSHKeyPair.java
diff --git a/api/src/com/cloud/user/User.java b/api/src/main/java/com/cloud/user/User.java
similarity index 100%
rename from api/src/com/cloud/user/User.java
rename to api/src/main/java/com/cloud/user/User.java
diff --git a/api/src/com/cloud/user/UserAccount.java b/api/src/main/java/com/cloud/user/UserAccount.java
similarity index 100%
rename from api/src/com/cloud/user/UserAccount.java
rename to api/src/main/java/com/cloud/user/UserAccount.java
diff --git a/api/src/com/cloud/uservm/UserVm.java b/api/src/main/java/com/cloud/uservm/UserVm.java
similarity index 100%
rename from api/src/com/cloud/uservm/UserVm.java
rename to api/src/main/java/com/cloud/uservm/UserVm.java
diff --git a/api/src/com/cloud/vm/BareMetalVmService.java b/api/src/main/java/com/cloud/vm/BareMetalVmService.java
similarity index 100%
rename from api/src/com/cloud/vm/BareMetalVmService.java
rename to api/src/main/java/com/cloud/vm/BareMetalVmService.java
diff --git a/api/src/com/cloud/vm/ConsoleProxy.java b/api/src/main/java/com/cloud/vm/ConsoleProxy.java
similarity index 100%
rename from api/src/com/cloud/vm/ConsoleProxy.java
rename to api/src/main/java/com/cloud/vm/ConsoleProxy.java
diff --git a/api/src/com/cloud/vm/DiskProfile.java b/api/src/main/java/com/cloud/vm/DiskProfile.java
similarity index 100%
rename from api/src/com/cloud/vm/DiskProfile.java
rename to api/src/main/java/com/cloud/vm/DiskProfile.java
diff --git a/api/src/com/cloud/vm/InstanceGroup.java b/api/src/main/java/com/cloud/vm/InstanceGroup.java
similarity index 100%
rename from api/src/com/cloud/vm/InstanceGroup.java
rename to api/src/main/java/com/cloud/vm/InstanceGroup.java
diff --git a/api/src/com/cloud/vm/Nic.java b/api/src/main/java/com/cloud/vm/Nic.java
similarity index 100%
rename from api/src/com/cloud/vm/Nic.java
rename to api/src/main/java/com/cloud/vm/Nic.java
diff --git a/api/src/com/cloud/vm/NicExtraDhcpOption.java b/api/src/main/java/com/cloud/vm/NicExtraDhcpOption.java
similarity index 100%
rename from api/src/com/cloud/vm/NicExtraDhcpOption.java
rename to api/src/main/java/com/cloud/vm/NicExtraDhcpOption.java
diff --git a/api/src/com/cloud/vm/NicIpAlias.java b/api/src/main/java/com/cloud/vm/NicIpAlias.java
similarity index 100%
rename from api/src/com/cloud/vm/NicIpAlias.java
rename to api/src/main/java/com/cloud/vm/NicIpAlias.java
diff --git a/api/src/com/cloud/vm/NicProfile.java b/api/src/main/java/com/cloud/vm/NicProfile.java
similarity index 100%
rename from api/src/com/cloud/vm/NicProfile.java
rename to api/src/main/java/com/cloud/vm/NicProfile.java
diff --git a/api/src/com/cloud/vm/NicSecondaryIp.java b/api/src/main/java/com/cloud/vm/NicSecondaryIp.java
similarity index 100%
rename from api/src/com/cloud/vm/NicSecondaryIp.java
rename to api/src/main/java/com/cloud/vm/NicSecondaryIp.java
diff --git a/api/src/com/cloud/vm/ReservationContext.java b/api/src/main/java/com/cloud/vm/ReservationContext.java
similarity index 100%
rename from api/src/com/cloud/vm/ReservationContext.java
rename to api/src/main/java/com/cloud/vm/ReservationContext.java
diff --git a/api/src/com/cloud/vm/RunningOn.java b/api/src/main/java/com/cloud/vm/RunningOn.java
similarity index 100%
rename from api/src/com/cloud/vm/RunningOn.java
rename to api/src/main/java/com/cloud/vm/RunningOn.java
diff --git a/api/src/com/cloud/vm/SecondaryStorageVm.java b/api/src/main/java/com/cloud/vm/SecondaryStorageVm.java
similarity index 100%
rename from api/src/com/cloud/vm/SecondaryStorageVm.java
rename to api/src/main/java/com/cloud/vm/SecondaryStorageVm.java
diff --git a/api/src/com/cloud/vm/SystemVm.java b/api/src/main/java/com/cloud/vm/SystemVm.java
similarity index 100%
rename from api/src/com/cloud/vm/SystemVm.java
rename to api/src/main/java/com/cloud/vm/SystemVm.java
diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/main/java/com/cloud/vm/UserVmService.java
similarity index 100%
rename from api/src/com/cloud/vm/UserVmService.java
rename to api/src/main/java/com/cloud/vm/UserVmService.java
diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/main/java/com/cloud/vm/VirtualMachine.java
similarity index 100%
rename from api/src/com/cloud/vm/VirtualMachine.java
rename to api/src/main/java/com/cloud/vm/VirtualMachine.java
diff --git a/api/src/com/cloud/vm/VirtualMachineName.java b/api/src/main/java/com/cloud/vm/VirtualMachineName.java
similarity index 100%
rename from api/src/com/cloud/vm/VirtualMachineName.java
rename to api/src/main/java/com/cloud/vm/VirtualMachineName.java
diff --git a/api/src/com/cloud/vm/VirtualMachineProfile.java b/api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
similarity index 100%
rename from api/src/com/cloud/vm/VirtualMachineProfile.java
rename to api/src/main/java/com/cloud/vm/VirtualMachineProfile.java
diff --git a/api/src/com/cloud/vm/VmDetailConstants.java b/api/src/main/java/com/cloud/vm/VmDetailConstants.java
similarity index 100%
rename from api/src/com/cloud/vm/VmDetailConstants.java
rename to api/src/main/java/com/cloud/vm/VmDetailConstants.java
diff --git a/api/src/com/cloud/vm/VmDiskStats.java b/api/src/main/java/com/cloud/vm/VmDiskStats.java
similarity index 100%
rename from api/src/com/cloud/vm/VmDiskStats.java
rename to api/src/main/java/com/cloud/vm/VmDiskStats.java
diff --git a/api/src/com/cloud/vm/VmNetworkStats.java b/api/src/main/java/com/cloud/vm/VmNetworkStats.java
similarity index 100%
rename from api/src/com/cloud/vm/VmNetworkStats.java
rename to api/src/main/java/com/cloud/vm/VmNetworkStats.java
diff --git a/api/src/com/cloud/vm/VmStats.java b/api/src/main/java/com/cloud/vm/VmStats.java
similarity index 100%
rename from api/src/com/cloud/vm/VmStats.java
rename to api/src/main/java/com/cloud/vm/VmStats.java
diff --git a/api/src/com/cloud/vm/snapshot/VMSnapshot.java b/api/src/main/java/com/cloud/vm/snapshot/VMSnapshot.java
similarity index 100%
rename from api/src/com/cloud/vm/snapshot/VMSnapshot.java
rename to api/src/main/java/com/cloud/vm/snapshot/VMSnapshot.java
diff --git a/api/src/com/cloud/vm/snapshot/VMSnapshotService.java b/api/src/main/java/com/cloud/vm/snapshot/VMSnapshotService.java
similarity index 100%
rename from api/src/com/cloud/vm/snapshot/VMSnapshotService.java
rename to api/src/main/java/com/cloud/vm/snapshot/VMSnapshotService.java
diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/main/java/org/apache/cloudstack/acl/APIChecker.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/APIChecker.java
rename to api/src/main/java/org/apache/cloudstack/acl/APIChecker.java
diff --git a/api/src/org/apache/cloudstack/acl/APILimitChecker.java b/api/src/main/java/org/apache/cloudstack/acl/APILimitChecker.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/APILimitChecker.java
rename to api/src/main/java/org/apache/cloudstack/acl/APILimitChecker.java
diff --git a/api/src/org/apache/cloudstack/acl/ControlledEntity.java b/api/src/main/java/org/apache/cloudstack/acl/ControlledEntity.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/ControlledEntity.java
rename to api/src/main/java/org/apache/cloudstack/acl/ControlledEntity.java
diff --git a/api/src/org/apache/cloudstack/acl/InfrastructureEntity.java b/api/src/main/java/org/apache/cloudstack/acl/InfrastructureEntity.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/InfrastructureEntity.java
rename to api/src/main/java/org/apache/cloudstack/acl/InfrastructureEntity.java
diff --git a/api/src/org/apache/cloudstack/acl/PermissionScope.java b/api/src/main/java/org/apache/cloudstack/acl/PermissionScope.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/PermissionScope.java
rename to api/src/main/java/org/apache/cloudstack/acl/PermissionScope.java
diff --git a/api/src/org/apache/cloudstack/acl/QuerySelector.java b/api/src/main/java/org/apache/cloudstack/acl/QuerySelector.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/QuerySelector.java
rename to api/src/main/java/org/apache/cloudstack/acl/QuerySelector.java
diff --git a/api/src/org/apache/cloudstack/acl/Role.java b/api/src/main/java/org/apache/cloudstack/acl/Role.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/Role.java
rename to api/src/main/java/org/apache/cloudstack/acl/Role.java
diff --git a/api/src/org/apache/cloudstack/acl/RolePermission.java b/api/src/main/java/org/apache/cloudstack/acl/RolePermission.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/RolePermission.java
rename to api/src/main/java/org/apache/cloudstack/acl/RolePermission.java
diff --git a/api/src/org/apache/cloudstack/acl/RoleService.java b/api/src/main/java/org/apache/cloudstack/acl/RoleService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/RoleService.java
rename to api/src/main/java/org/apache/cloudstack/acl/RoleService.java
diff --git a/api/src/org/apache/cloudstack/acl/RoleType.java b/api/src/main/java/org/apache/cloudstack/acl/RoleType.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/RoleType.java
rename to api/src/main/java/org/apache/cloudstack/acl/RoleType.java
diff --git a/api/src/org/apache/cloudstack/acl/Rule.java b/api/src/main/java/org/apache/cloudstack/acl/Rule.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/Rule.java
rename to api/src/main/java/org/apache/cloudstack/acl/Rule.java
diff --git a/api/src/org/apache/cloudstack/acl/SecurityChecker.java b/api/src/main/java/org/apache/cloudstack/acl/SecurityChecker.java
similarity index 100%
rename from api/src/org/apache/cloudstack/acl/SecurityChecker.java
rename to api/src/main/java/org/apache/cloudstack/acl/SecurityChecker.java
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroup.java b/api/src/main/java/org/apache/cloudstack/affinity/AffinityGroup.java
similarity index 100%
rename from api/src/org/apache/cloudstack/affinity/AffinityGroup.java
rename to api/src/main/java/org/apache/cloudstack/affinity/AffinityGroup.java
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroupProcessor.java b/api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupProcessor.java
similarity index 100%
rename from api/src/org/apache/cloudstack/affinity/AffinityGroupProcessor.java
rename to api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupProcessor.java
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroupResponse.java b/api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/affinity/AffinityGroupResponse.java
rename to api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupResponse.java
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java b/api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/affinity/AffinityGroupService.java
rename to api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupService.java
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroupTypeResponse.java b/api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupTypeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/affinity/AffinityGroupTypeResponse.java
rename to api/src/main/java/org/apache/cloudstack/affinity/AffinityGroupTypeResponse.java
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityProcessorBase.java b/api/src/main/java/org/apache/cloudstack/affinity/AffinityProcessorBase.java
similarity index 100%
rename from api/src/org/apache/cloudstack/affinity/AffinityProcessorBase.java
rename to api/src/main/java/org/apache/cloudstack/affinity/AffinityProcessorBase.java
diff --git a/api/src/org/apache/cloudstack/alert/AlertService.java b/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/alert/AlertService.java
rename to api/src/main/java/org/apache/cloudstack/alert/AlertService.java
diff --git a/api/src/org/apache/cloudstack/annotation/Annotation.java b/api/src/main/java/org/apache/cloudstack/annotation/Annotation.java
similarity index 100%
rename from api/src/org/apache/cloudstack/annotation/Annotation.java
rename to api/src/main/java/org/apache/cloudstack/annotation/Annotation.java
diff --git a/api/src/org/apache/cloudstack/annotation/AnnotationService.java b/api/src/main/java/org/apache/cloudstack/annotation/AnnotationService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/annotation/AnnotationService.java
rename to api/src/main/java/org/apache/cloudstack/annotation/AnnotationService.java
diff --git a/api/src/org/apache/cloudstack/api/ACL.java b/api/src/main/java/org/apache/cloudstack/api/ACL.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ACL.java
rename to api/src/main/java/org/apache/cloudstack/api/ACL.java
diff --git a/api/src/org/apache/cloudstack/api/APICommand.java b/api/src/main/java/org/apache/cloudstack/api/APICommand.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/APICommand.java
rename to api/src/main/java/org/apache/cloudstack/api/APICommand.java
diff --git a/api/src/org/apache/cloudstack/api/AbstractGetUploadParamsCmd.java b/api/src/main/java/org/apache/cloudstack/api/AbstractGetUploadParamsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/AbstractGetUploadParamsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/AbstractGetUploadParamsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/ApiArgValidator.java b/api/src/main/java/org/apache/cloudstack/api/ApiArgValidator.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ApiArgValidator.java
rename to api/src/main/java/org/apache/cloudstack/api/ApiArgValidator.java
diff --git a/api/src/org/apache/cloudstack/api/ApiCommandJobType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ApiCommandJobType.java
rename to api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/ApiConstants.java
rename to api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
index 03ee7fc..f03ddc7 100644
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
@@ -86,6 +86,7 @@
     public static final String DEVICE_ID = "deviceid";
     public static final String DIRECT_DOWNLOAD = "directdownload";
     public static final String DISK_OFFERING_ID = "diskofferingid";
+    public static final String NEW_DISK_OFFERING_ID = "newdiskofferingid";
     public static final String DISK_SIZE = "disksize";
     public static final String UTILIZATION = "utilization";
     public static final String DRIVER = "driver";
@@ -152,6 +153,9 @@
     public static final String ICMP_TYPE = "icmptype";
     public static final String ID = "id";
     public static final String IDS = "ids";
+    public static final String PREVIOUS_ACL_RULE_ID = "previousaclruleid";
+    public static final String NEXT_ACL_RULE_ID = "nextaclruleid";
+    public static final String MOVE_ACL_CONSISTENCY_HASH = "aclconsistencyhash";
     public static final String INTERNAL_DNS1 = "internaldns1";
     public static final String INTERNAL_DNS2 = "internaldns2";
     public static final String INTERVAL_TYPE = "intervaltype";
@@ -212,8 +216,8 @@
     public static final String PARENT_DOMAIN_ID = "parentdomainid";
     public static final String PARENT_TEMPLATE_ID = "parenttemplateid";
     public static final String PASSWORD = "password";
+    public static final String CURRENT_PASSWORD = "currentpassword";
     public static final String SHOULD_UPDATE_PASSWORD = "update_passwd_on_host";
-    public static final String NEW_PASSWORD = "new_password";
     public static final String PASSWORD_ENABLED = "passwordenabled";
     public static final String SSHKEY_ENABLED = "sshkeyenabled";
     public static final String PATH = "path";
@@ -310,7 +314,7 @@
     public static final String USERNAME = "username";
     public static final String USER_SECURITY_GROUP_LIST = "usersecuritygrouplist";
     public static final String USE_VIRTUAL_NETWORK = "usevirtualnetwork";
-    public static final String Update_IN_SEQUENCE ="updateinsequence";
+    public static final String Update_IN_SEQUENCE = "updateinsequence";
     public static final String VALUE = "value";
     public static final String VIRTUAL_MACHINE_ID = "virtualmachineid";
     public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids";
@@ -453,6 +457,8 @@
     public static final String SUPPORTED_SERVICES = "supportedservices";
     public static final String NSP_ID = "nspid";
     public static final String ACL_TYPE = "acltype";
+    public static final String ACL_REASON = "reason";
+    public static final String ACL_RULE_PARTIAL_UPGRADE = "partialupgrade";
     public static final String SUBDOMAIN_ACCESS = "subdomainaccess";
     public static final String LOAD_BALANCER_DEVICE_ID = "lbdeviceid";
     public static final String LOAD_BALANCER_DEVICE_NAME = "lbdevicename";
@@ -543,6 +549,7 @@
     public static final String IPSEC_PSK = "ipsecpsk";
     public static final String GUEST_IP = "guestip";
     public static final String REMOVED = "removed";
+    public static final String COMPLETED = "completed";
     public static final String IKE_POLICY = "ikepolicy";
     public static final String ESP_POLICY = "esppolicy";
     public static final String IKE_LIFETIME = "ikelifetime";
@@ -708,13 +715,16 @@
             + " and just a plain ascii/utf8 representation of a hexadecimal string. If it is required to\n"
             + " use another algorithm the hexadecimal string is to be prefixed with a string of the form,\n"
             + " \"{<algorithm>}\", not including the double quotes. In this <algorithm> is the exact string\n"
-            + " representing the java supported algorithm, i.e. MD5 or SHA-256. Note that java does not\n"
-            + " contain an algorithm called SHA256 or one called sha-256, only SHA-256.";
+            + " representing the java supported algorithm, i.e. MD5 or SHA-256. Note that java does not\n" + " contain an algorithm called SHA256 or one called sha-256, only SHA-256.";
 
     public static final String HAS_ANNOTATION = "hasannotation";
     public static final String LAST_ANNOTATED = "lastannotated";
     public static final String LDAP_DOMAIN = "ldapdomain";
 
+    public static final String STDOUT = "stdout";
+    public static final String STDERR = "stderr";
+    public static final String EXITCODE = "exitcode";
+    public static final String TARGET_ID = "targetid";
 
     public enum HostDetails {
         all, capacity, events, stats, min;
@@ -727,4 +737,4 @@
     public enum DomainDetails {
         all, resource, min;
     }
-}
+}
\ No newline at end of file
diff --git a/api/src/org/apache/cloudstack/api/ApiErrorCode.java b/api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ApiErrorCode.java
rename to api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java
diff --git a/api/src/org/apache/cloudstack/api/ApiServerService.java b/api/src/main/java/org/apache/cloudstack/api/ApiServerService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ApiServerService.java
rename to api/src/main/java/org/apache/cloudstack/api/ApiServerService.java
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseAsyncCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCustomIdCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCreateCustomIdCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseAsyncCreateCustomIdCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseAsyncCreateCustomIdCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCustomIdCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseAsyncCustomIdCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseAsyncCustomIdCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseAsyncCustomIdCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseCustomIdCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseCustomIdCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseCustomIdCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseCustomIdCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseListCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseListCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseListCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseResponse.java b/api/src/main/java/org/apache/cloudstack/api/BaseResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseResponse.java
diff --git a/api/src/org/apache/cloudstack/api/BaseResponseWithTagInformation.java b/api/src/main/java/org/apache/cloudstack/api/BaseResponseWithTagInformation.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseResponseWithTagInformation.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseResponseWithTagInformation.java
diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/Displayable.java b/api/src/main/java/org/apache/cloudstack/api/Displayable.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/Displayable.java
rename to api/src/main/java/org/apache/cloudstack/api/Displayable.java
diff --git a/api/src/org/apache/cloudstack/api/EntityReference.java b/api/src/main/java/org/apache/cloudstack/api/EntityReference.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/EntityReference.java
rename to api/src/main/java/org/apache/cloudstack/api/EntityReference.java
diff --git a/api/src/org/apache/cloudstack/api/IBaseListAccountResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/IBaseListAccountResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/IBaseListAccountResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/IBaseListAccountResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/IBaseListCmd.java b/api/src/main/java/org/apache/cloudstack/api/IBaseListCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/IBaseListCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/IBaseListCmd.java
diff --git a/api/src/org/apache/cloudstack/api/IBaseListDomainResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/IBaseListDomainResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/IBaseListDomainResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/IBaseListDomainResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/IBaseListProjectAndAccountResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/IBaseListProjectAndAccountResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/IBaseListProjectAndAccountResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/IBaseListProjectAndAccountResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/IBaseListTaggedResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/IBaseListTaggedResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/IBaseListTaggedResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/IBaseListTaggedResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/Identity.java b/api/src/main/java/org/apache/cloudstack/api/Identity.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/Identity.java
rename to api/src/main/java/org/apache/cloudstack/api/Identity.java
diff --git a/api/src/org/apache/cloudstack/api/InternalIdentity.java b/api/src/main/java/org/apache/cloudstack/api/InternalIdentity.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/InternalIdentity.java
rename to api/src/main/java/org/apache/cloudstack/api/InternalIdentity.java
diff --git a/api/src/org/apache/cloudstack/api/LdapValidator.java b/api/src/main/java/org/apache/cloudstack/api/LdapValidator.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/LdapValidator.java
rename to api/src/main/java/org/apache/cloudstack/api/LdapValidator.java
diff --git a/api/src/org/apache/cloudstack/api/Parameter.java b/api/src/main/java/org/apache/cloudstack/api/Parameter.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/Parameter.java
rename to api/src/main/java/org/apache/cloudstack/api/Parameter.java
diff --git a/api/src/org/apache/cloudstack/api/ResourceDetail.java b/api/src/main/java/org/apache/cloudstack/api/ResourceDetail.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ResourceDetail.java
rename to api/src/main/java/org/apache/cloudstack/api/ResourceDetail.java
diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ResponseGenerator.java
rename to api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java
diff --git a/api/src/org/apache/cloudstack/api/ResponseObject.java b/api/src/main/java/org/apache/cloudstack/api/ResponseObject.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ResponseObject.java
rename to api/src/main/java/org/apache/cloudstack/api/ResponseObject.java
diff --git a/api/src/org/apache/cloudstack/api/ServerApiException.java b/api/src/main/java/org/apache/cloudstack/api/ServerApiException.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/ServerApiException.java
rename to api/src/main/java/org/apache/cloudstack/api/ServerApiException.java
diff --git a/api/src/org/apache/cloudstack/api/Validate.java b/api/src/main/java/org/apache/cloudstack/api/Validate.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/Validate.java
rename to api/src/main/java/org/apache/cloudstack/api/Validate.java
diff --git a/api/src/org/apache/cloudstack/api/auth/APIAuthenticationManager.java b/api/src/main/java/org/apache/cloudstack/api/auth/APIAuthenticationManager.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/auth/APIAuthenticationManager.java
rename to api/src/main/java/org/apache/cloudstack/api/auth/APIAuthenticationManager.java
diff --git a/api/src/org/apache/cloudstack/api/auth/APIAuthenticationType.java b/api/src/main/java/org/apache/cloudstack/api/auth/APIAuthenticationType.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/auth/APIAuthenticationType.java
rename to api/src/main/java/org/apache/cloudstack/api/auth/APIAuthenticationType.java
diff --git a/api/src/org/apache/cloudstack/api/auth/APIAuthenticator.java b/api/src/main/java/org/apache/cloudstack/api/auth/APIAuthenticator.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/auth/APIAuthenticator.java
rename to api/src/main/java/org/apache/cloudstack/api/auth/APIAuthenticator.java
diff --git a/api/src/org/apache/cloudstack/api/auth/PluggableAPIAuthenticator.java b/api/src/main/java/org/apache/cloudstack/api/auth/PluggableAPIAuthenticator.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/auth/PluggableAPIAuthenticator.java
rename to api/src/main/java/org/apache/cloudstack/api/auth/PluggableAPIAuthenticator.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/ListAccountsCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/ListAccountsCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/ListAccountsCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/ListAccountsCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/CreateRoleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/CreateRoleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/CreateRoleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/CreateRoleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/CreateRolePermissionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/CreateRolePermissionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/CreateRolePermissionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/CreateRolePermissionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/DeleteRoleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/DeleteRoleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/DeleteRoleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/DeleteRoleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/DeleteRolePermissionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/DeleteRolePermissionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/DeleteRolePermissionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/DeleteRolePermissionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/ListRolePermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/ListRolePermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/ListRolePermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/ListRolePermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/ListRolesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/ListRolesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/ListRolesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/ListRolesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/RoleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/RoleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/RoleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/RoleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/UpdateRoleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/UpdateRoleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/UpdateRoleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/UpdateRoleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/acl/UpdateRolePermissionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/UpdateRolePermissionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/acl/UpdateRolePermissionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/acl/UpdateRolePermissionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/address/AcquirePodIpCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/address/AcquirePodIpCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/address/AcquirePodIpCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/address/AcquirePodIpCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/address/AssociateIPAddrCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/address/AssociateIPAddrCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/address/AssociateIPAddrCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/address/AssociateIPAddrCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/address/ListPublicIpAddressesCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/address/ListPublicIpAddressesCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/address/ListPublicIpAddressesCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/address/ListPublicIpAddressesCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/address/ReleasePodIpCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/address/ReleasePodIpCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/address/ReleasePodIpCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/address/ReleasePodIpCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/affinitygroup/UpdateVMAffinityGroupCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/affinitygroup/UpdateVMAffinityGroupCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/affinitygroup/UpdateVMAffinityGroupCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/affinitygroup/UpdateVMAffinityGroupCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/alert/GenerateAlertCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/alert/GenerateAlertCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/alert/GenerateAlertCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/alert/GenerateAlertCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/annotation/ListAnnotationsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/annotation/ListAnnotationsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/annotation/ListAnnotationsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/annotation/ListAnnotationsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/annotation/RemoveAnnotationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/annotation/RemoveAnnotationCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/annotation/RemoveAnnotationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/annotation/RemoveAnnotationCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ca/IssueCertificateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/IssueCertificateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ca/IssueCertificateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ca/IssueCertificateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ca/ListCAProvidersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ListCAProvidersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ca/ListCAProvidersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ListCAProvidersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ca/ListCaCertificateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ListCaCertificateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ca/ListCaCertificateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ListCaCertificateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ca/ProvisionCertificateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ca/RevokeCertificateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ca/RevokeCertificateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ca/RevokeCertificateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ca/RevokeCertificateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListDeploymentPlannersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/config/ListDeploymentPlannersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/config/ListDeploymentPlannersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/config/ListDeploymentPlannersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java
new file mode 100644
index 0000000..bb1ddf5
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/diagnostics/RunDiagnosticsCmd.java
@@ -0,0 +1,136 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.diagnostics;
+
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.user.Account;
+import com.cloud.vm.VirtualMachine;
+import org.apache.cloudstack.acl.RoleType;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.RunDiagnosticsResponse;
+import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.diagnostics.DiagnosticsService;
+import org.apache.cloudstack.diagnostics.DiagnosticsType;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.log4j.Logger;
+
+import javax.inject.Inject;
+import java.util.Collections;
+import java.util.Map;
+
+@APICommand(name = RunDiagnosticsCmd.APINAME, responseObject = RunDiagnosticsResponse.class, entityType = {VirtualMachine.class},
+        responseHasSensitiveInfo = false,
+        requestHasSensitiveInfo = false,
+        description = "Execute network-utility command (ping/arping/tracert) on system VMs remotely",
+        authorized = {RoleType.Admin},
+        since = "4.12.0.0")
+public class RunDiagnosticsCmd extends BaseCmd {
+    private static final Logger LOGGER = Logger.getLogger(RunDiagnosticsCmd.class);
+    public static final String APINAME = "runDiagnostics";
+
+    @Inject
+    private DiagnosticsService diagnosticsService;
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+    @Parameter(name = ApiConstants.TARGET_ID, type = CommandType.UUID, required = true, entityType = SystemVmResponse.class,
+            validations = {ApiArgValidator.PositiveNumber},
+            description = "The ID of the system VM instance to diagnose")
+    private Long id;
+
+    @Parameter(name = ApiConstants.IP_ADDRESS, type = CommandType.STRING, required = true,
+            validations = {ApiArgValidator.NotNullOrEmpty},
+            description = "The IP/Domain address to test connection to")
+    private String address;
+
+    @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, required = true,
+            validations = {ApiArgValidator.NotNullOrEmpty},
+            description = "The system VM diagnostics type  valid options are: ping, traceroute, arping")
+    private String type;
+
+    @Parameter(name = ApiConstants.PARAMS, type = CommandType.STRING,
+            authorized = {RoleType.Admin},
+            description = "Additional command line options that apply for each command")
+    private String optionalArguments;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+    public Long getId() {
+        return id;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public DiagnosticsType getType() {
+        DiagnosticsType diagnosticsType = DiagnosticsType.getCommand(type);
+        if (diagnosticsType == null) {
+            throw new IllegalArgumentException(type + " Is not a valid diagnostics command type. ");
+        }
+        return diagnosticsType;
+    }
+
+    public String getOptionalArguments() {
+        return optionalArguments;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////////// Implementation //////////////////
+    /////////////////////////////////////////////////////
+    @Override
+    public String getCommandName() {
+        return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        Account account = CallContext.current().getCallingAccount();
+        if (account != null) {
+            return account.getId();
+        }
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException {
+        RunDiagnosticsResponse response = new RunDiagnosticsResponse();
+        try {
+            final Map<String, String> answerMap = diagnosticsService.runDiagnosticsCommand(this);
+            if (CollectionUtils.isNotEmpty(Collections.singleton(answerMap))) {
+                response.setStdout(answerMap.get(ApiConstants.STDOUT));
+                response.setStderr(answerMap.get(ApiConstants.STDERR));
+                response.setExitCode(answerMap.get(ApiConstants.EXITCODE));
+                response.setObjectName("diagnostics");
+                response.setResponseName(getCommandName());
+                this.setResponseObject(response);
+            }
+        } catch (final ServerApiException e) {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+        }
+    }
+}
\ No newline at end of file
diff --git a/api/src/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java
old mode 100755
new mode 100644
similarity index 99%
rename from api/src/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java
index 89c0c25..60d4262
--- a/api/src/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java
@@ -1,92 +1,90 @@
-// Licensed to the Apache Software Foundation (ASF) under one

-// or more contributor license agreements.  See the NOTICE file

-// distributed with this work for additional information

-// regarding copyright ownership.  The ASF licenses this file

-// to you under the Apache License, Version 2.0 (the

-// "License"); you may not use this file except in compliance

-// with the License.  You may obtain a copy of the License at

-//

-//   http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing,

-// software distributed under the License is distributed on an

-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-// KIND, either express or implied.  See the License for the

-// specific language governing permissions and limitations

-// under the License.

-package org.apache.cloudstack.api.command.admin.direct.download;

-

-import com.cloud.exception.ConcurrentOperationException;

-import com.cloud.exception.InsufficientCapacityException;

-import com.cloud.exception.ResourceAllocationException;

-import com.cloud.exception.ResourceUnavailableException;

-import com.cloud.exception.NetworkRuleConflictException;

-import org.apache.cloudstack.acl.RoleType;

-import org.apache.cloudstack.api.APICommand;

-import org.apache.cloudstack.api.ApiConstants;

-import org.apache.cloudstack.api.BaseCmd;

-import org.apache.cloudstack.api.Parameter;

-import org.apache.cloudstack.api.ServerApiException;

-import org.apache.cloudstack.api.ApiErrorCode;

-import org.apache.cloudstack.api.response.SuccessResponse;

-import org.apache.cloudstack.context.CallContext;

-import org.apache.cloudstack.direct.download.DirectDownloadManager;

-import org.apache.log4j.Logger;

-

-import javax.inject.Inject;

-

-@APICommand(name = UploadTemplateDirectDownloadCertificate.APINAME,

-        description = "Upload a certificate for HTTPS direct template download on KVM hosts",

-        responseObject = SuccessResponse.class,

-        requestHasSensitiveInfo = true,

-        responseHasSensitiveInfo = true,

-        since = "4.11.0",

-        authorized = {RoleType.Admin})

-public class UploadTemplateDirectDownloadCertificate extends BaseCmd {

-

-    @Inject

-    DirectDownloadManager directDownloadManager;

-

-    private static final Logger LOG = Logger.getLogger(UploadTemplateDirectDownloadCertificate.class);

-    public static final String APINAME = "uploadTemplateDirectDownloadCertificate";

-

-    @Parameter(name = ApiConstants.CERTIFICATE, type = BaseCmd.CommandType.STRING, required = true, length = 65535,

-            description = "SSL certificate")

-    private String certificate;

-

-    @Parameter(name = ApiConstants.NAME , type = BaseCmd.CommandType.STRING, required = true,

-            description = "Name for the uploaded certificate")

-    private String name;

-

-    @Parameter(name = ApiConstants.HYPERVISOR, type = BaseCmd.CommandType.STRING, required = true, description = "Hypervisor type")

-    private String hypervisor;

-

-    @Override

-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {

-        if (!hypervisor.equalsIgnoreCase("kvm")) {

-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Currently supporting KVM hosts only");

-        }

-

-        SuccessResponse response = new SuccessResponse(getCommandName());

-        try {

-            LOG.debug("Uploading certificate " + name + " to agents for Direct Download");

-            boolean result = directDownloadManager.uploadCertificateToHosts(certificate, name, hypervisor);

-            response.setSuccess(result);

-            setResponseObject(response);

-        } catch (Exception e) {

-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());

-        }

-    }

-

-    @Override

-    public String getCommandName() {

-        return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;

-    }

-

-    @Override

-    public long getEntityOwnerId() {

-        return CallContext.current().getCallingAccount().getId();

-    }

-}

-

-

+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.direct.download;
+
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.exception.NetworkRuleConflictException;
+import org.apache.cloudstack.acl.RoleType;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.direct.download.DirectDownloadManager;
+import org.apache.log4j.Logger;
+
+import javax.inject.Inject;
+
+@APICommand(name = UploadTemplateDirectDownloadCertificate.APINAME,
+        description = "Upload a certificate for HTTPS direct template download on KVM hosts",
+        responseObject = SuccessResponse.class,
+        requestHasSensitiveInfo = true,
+        responseHasSensitiveInfo = true,
+        since = "4.11.0",
+        authorized = {RoleType.Admin})
+public class UploadTemplateDirectDownloadCertificate extends BaseCmd {
+
+    @Inject
+    DirectDownloadManager directDownloadManager;
+
+    private static final Logger LOG = Logger.getLogger(UploadTemplateDirectDownloadCertificate.class);
+    public static final String APINAME = "uploadTemplateDirectDownloadCertificate";
+
+    @Parameter(name = ApiConstants.CERTIFICATE, type = BaseCmd.CommandType.STRING, required = true, length = 65535,
+            description = "SSL certificate")
+    private String certificate;
+
+    @Parameter(name = ApiConstants.NAME , type = BaseCmd.CommandType.STRING, required = true,
+            description = "Name for the uploaded certificate")
+    private String name;
+
+    @Parameter(name = ApiConstants.HYPERVISOR, type = BaseCmd.CommandType.STRING, required = true, description = "Hypervisor type")
+    private String hypervisor;
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
+        if (!hypervisor.equalsIgnoreCase("kvm")) {
+            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Currently supporting KVM hosts only");
+        }
+
+        SuccessResponse response = new SuccessResponse(getCommandName());
+        try {
+            LOG.debug("Uploading certificate " + name + " to agents for Direct Download");
+            boolean result = directDownloadManager.uploadCertificateToHosts(certificate, name, hypervisor);
+            response.setSuccess(result);
+            setResponseObject(response);
+        } catch (Exception e) {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+        }
+    }
+
+    @Override
+    public String getCommandName() {
+        return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return CallContext.current().getCallingAccount().getId();
+    }
+}
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsMappingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/ListGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/ListGuestOsMappingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/ListGuestOsMappingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/ListGuestOsMappingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/RemoveGuestOsMappingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/guest/UpdateGuestOsMappingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/ConfigureHAForHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/ConfigureHAForHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/ConfigureHAForHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/ConfigureHAForHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/DisableHAForClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/DisableHAForClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/DisableHAForClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/DisableHAForClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/DisableHAForHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/DisableHAForHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/DisableHAForHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/DisableHAForHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/DisableHAForZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/DisableHAForZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/DisableHAForZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/DisableHAForZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/EnableHAForClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/EnableHAForClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/EnableHAForHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/EnableHAForHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/EnableHAForZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/EnableHAForZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/EnableHAForZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/ListHostHAProvidersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/ListHostHAProvidersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/ListHostHAProvidersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/ListHostHAProvidersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/ha/ListHostHAResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/ha/ListHostHAResourcesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/ha/ListHostHAResourcesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/ha/ListHostHAResourcesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/FindHostsForMigrationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/FindHostsForMigrationCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/FindHostsForMigrationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/FindHostsForMigrationCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostTagsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
similarity index 81%
rename from api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
index 5e15637..34e439f 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
@@ -16,8 +16,6 @@
 // under the License.
 package org.apache.cloudstack.api.command.admin.host;
 
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
@@ -27,13 +25,16 @@
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.cloudstack.context.CallContext;
+import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
+import com.cloud.exception.AgentUnavailableException;
+import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.host.Host;
 import com.cloud.user.Account;
+import com.cloud.utils.exception.CloudRuntimeException;
 
-@APICommand(name = "reconnectHost", description = "Reconnects a host.", responseObject = HostResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "reconnectHost", description = "Reconnects a host.", responseObject = HostResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class ReconnectHostCmd extends BaseAsyncCmd {
     public static final Logger s_logger = Logger.getLogger(ReconnectHostCmd.class.getName());
 
@@ -101,16 +102,15 @@
     public void execute() {
         try {
             Host result = _resourceService.reconnectHost(this);
-            if (result != null) {
-                HostResponse response = _responseGenerator.createHostResponse(result);
-                response.setResponseName(getCommandName());
-                this.setResponseObject(response);
-            } else {
-                throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reconnect host");
-            }
-        } catch (Exception ex) {
-            s_logger.warn("Exception: ", ex);
-            throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
+            HostResponse response = _responseGenerator.createHostResponse(result);
+            response.setResponseName(getCommandName());
+            this.setResponseObject(response);
+        } catch (InvalidParameterValueException e) {
+            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.getMessage());
+        } catch (CloudRuntimeException e) {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+        } catch (AgentUnavailableException e) {
+            throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, e.getMessage());
         }
     }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLoadBalancerElementsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLoadBalancerElementsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLoadBalancerElementsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/ListInternalLoadBalancerElementsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/CopyIsoCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/CopyIsoCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/CopyIsoCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/CopyIsoCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/ListIsoPermissionsCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/ListIsoPermissionsCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/ListIsoPermissionsCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/ListIsoPermissionsCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/ListIsosCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/ListIsosCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/ListIsosCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/ListIsosCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/RegisterIsoCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/RegisterIsoCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/RegisterIsoCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/RegisterIsoCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/UpdateIsoCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/iso/UpdateIsoCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/iso/UpdateIsoCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/iso/UpdateIsoCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/loadbalancer/ListLoadBalancerRuleInstancesCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/loadbalancer/ListLoadBalancerRuleInstancesCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/loadbalancer/ListLoadBalancerRuleInstancesCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/loadbalancer/ListLoadBalancerRuleInstancesCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DedicateGuestVlanRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DedicateGuestVlanRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DedicateGuestVlanRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DedicateGuestVlanRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListDedicatedGuestVlanRangesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListDedicatedGuestVlanRangesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListDedicatedGuestVlanRangesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListDedicatedGuestVlanRangesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkIsolationMethodsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworkIsolationMethodsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkIsolationMethodsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworkIsolationMethodsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/MigrateNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/MigrateNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/MigrateVPCCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateVPCCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/MigrateVPCCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateVPCCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
index 0bde79b..eaa8d87 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
@@ -166,15 +166,15 @@
         return serviceOfferingName;
     }
 
-    public Boolean getOfferHa() {
+    public Boolean isOfferHa() {
         return offerHa == null ? Boolean.FALSE : offerHa;
     }
 
-    public Boolean GetLimitCpuUse() {
+    public Boolean isLimitCpuUse() {
         return limitCpuUse == null ? Boolean.FALSE : limitCpuUse;
     }
 
-    public Boolean getVolatileVm() {
+    public Boolean isVolatileVm() {
         return isVolatile == null ? Boolean.FALSE : isVolatile;
     }
 
@@ -194,7 +194,7 @@
         return hostTag;
     }
 
-    public Boolean getIsSystem() {
+    public Boolean isSystem() {
         return isSystem == null ? false : isSystem;
     }
 
@@ -210,7 +210,7 @@
         return deploymentPlanner;
     }
 
-    public boolean getCustomized() {
+    public boolean isCustomized() {
         return (cpuNumber == null || memory == null || cpuSpeed == null);
     }
 
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/region/AddRegionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/AddRegionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/region/AddRegionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/region/AddRegionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/region/CreatePortableIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/region/DeletePortableIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/region/ListPortableIpRangesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/ListPortableIpRangesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/region/ListPortableIpRangesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/region/ListPortableIpRangesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/region/RemoveRegionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/RemoveRegionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/region/RemoveRegionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/region/RemoveRegionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/region/UpdateRegionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/region/UpdateRegionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/region/UpdateRegionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/region/UpdateRegionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureOvsElementCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
index 10cf00f..4bb6d90 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
@@ -106,7 +106,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Virtual router element Id: " + getEntityId());
+        CallContext.current().setEventDetails("Virtual router element Id: " + getEntityUuid());
         VirtualRouterProvider result = _service.get(0).getCreatedElement(getEntityId());
         if (result != null) {
             VirtualRouterProviderResponse response = _responseGenerator.createVirtualRouterProviderResponse(result);
@@ -137,6 +137,6 @@
 
     @Override
     public String getEventDescription() {
-        return "Adding physical network ServiceProvider Virtual Router: " + getEntityId();
+        return "Adding physical network ServiceProvider Virtual Router: " + getEntityUuid();
     }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
index 4513e2e..c460c66 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
@@ -82,7 +82,7 @@
 
     @Override
     public String getEventDescription() {
-        return "destroying router: " + getId();
+        return "destroying router: " + this._uuidMgr.getUuid(VirtualMachine.class,getId());
     }
 
     @Override
@@ -98,7 +98,7 @@
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException {
         CallContext ctx = CallContext.current();
-        ctx.setEventDetails("Router Id: " + getId());
+        ctx.setEventDetails("Router Id: " + this._uuidMgr.getUuid(VirtualMachine.class,getId()));
 
         VirtualRouter result = _routerService.destroyRouter(getId(), ctx.getCallingAccount(), ctx.getCallingUserId());
         if (result != null) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListOvsElementsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListOvsElementsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/ListOvsElementsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListOvsElementsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
index 4b138f3..802e3df 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
@@ -83,7 +83,7 @@
 
     @Override
     public String getEventDescription() {
-        return "rebooting router: " + getId();
+        return "rebooting router: " + this._uuidMgr.getUuid(VirtualMachine.class,getId());
     }
 
     @Override
@@ -98,7 +98,7 @@
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
-        CallContext.current().setEventDetails("Router Id: " + getId());
+        CallContext.current().setEventDetails("Router Id: " + this._uuidMgr.getUuid(VirtualMachine.class,getId()));
         VirtualRouter result = _routerService.rebootRouter(getId(), true);
         if (result != null) {
             DomainRouterResponse response = _responseGenerator.createDomainRouterResponse(result);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
index 173833c..6d36a3c 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
@@ -89,7 +89,7 @@
 
     @Override
     public String getEventDescription() {
-        return "starting router: " + getId();
+        return "starting router: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -104,7 +104,7 @@
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
-        CallContext.current().setEventDetails("Router Id: " + getId());
+        CallContext.current().setEventDetails("Router Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         VirtualRouter result = null;
         VirtualRouter router = _routerService.findRouter(getId());
         if (router == null || router.getRole() != Role.VIRTUAL_ROUTER) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
index 2592cae..2474171 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
@@ -87,7 +87,7 @@
 
     @Override
     public String getEventDescription() {
-        return "stopping router: " + getId();
+        return "Stopping router: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -106,7 +106,7 @@
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException {
-        CallContext.current().setEventDetails("Router Id: " + getId());
+        CallContext.current().setEventDetails("Router Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         VirtualRouter result = null;
         VirtualRouter router = _routerService.findRouter(getId());
         if (router == null || router.getRole() != Role.VIRTUAL_ROUTER) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/router/UpgradeRouterTemplateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreS3CMD.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/AddImageStoreS3CMD.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreS3CMD.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/AddImageStoreS3CMD.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/DeleteImageStoreCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/DeleteImageStoreCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/DeleteImageStoreCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/DeleteImageStoreCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/DeleteSecondaryStagingStoreCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/DeleteSecondaryStagingStoreCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/DeleteSecondaryStagingStoreCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/DeleteSecondaryStagingStoreCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
similarity index 79%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
index 47fa965..73c596c 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmd.java
@@ -17,10 +17,10 @@
 package org.apache.cloudstack.api.command.admin.storage;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
@@ -29,12 +29,14 @@
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.StoragePoolResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.Logger;
 
 import com.cloud.storage.StoragePool;
 import com.cloud.utils.Pair;
 
 @APICommand(name = "findStoragePoolsForMigration", description = "Lists storage pools available for migration of a volume.", responseObject = StoragePoolResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class FindStoragePoolsForMigrationCmd extends BaseListCmd {
     public static final Logger s_logger = Logger.getLogger(FindStoragePoolsForMigrationCmd.class.getName());
 
@@ -81,7 +83,7 @@
             StoragePoolResponse poolResponse = _responseGenerator.createStoragePoolForMigrationResponse(pool);
             Boolean suitableForMigration = false;
             for (StoragePool suitablePool : suitablePoolList) {
-                if (suitablePool.getId() == pool.getId()) {
+                if (StringUtils.equals(suitablePool.getUuid(), pool.getUuid())) {
                     suitableForMigration = true;
                     break;
                 }
@@ -90,9 +92,27 @@
             poolResponse.setObjectName("storagepool");
             poolResponses.add(poolResponse);
         }
-
+        sortPoolsBySuitabilityAndName(poolResponses);
         response.setResponses(poolResponses);
         response.setResponseName(getCommandName());
         this.setResponseObject(response);
     }
+
+    protected void sortPoolsBySuitabilityAndName(List<StoragePoolResponse> poolResponses) {
+        Collections.sort(poolResponses, new Comparator<StoragePoolResponse>() {
+            @Override
+            public int compare(StoragePoolResponse o1, StoragePoolResponse o2) {
+                if (o1.getSuitableForMigration() && o2.getSuitableForMigration()) {
+                    return o1.getName().compareTo(o2.getName());
+                }
+                if (o1.getSuitableForMigration()) {
+                    return -1;
+                }
+                if (o2.getSuitableForMigration()) {
+                    return 1;
+                }
+                return 0;
+            }
+        });
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListImageStoresCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListImageStoresCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/ListImageStoresCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListImageStoresCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListSecondaryStagingStoresCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListSecondaryStagingStoresCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/ListSecondaryStagingStoresCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListSecondaryStagingStoresCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStorageProvidersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageProvidersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/ListStorageProvidersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageProvidersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/ListStorageTagsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateCloudToUseObjectStoreCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/UpdateCloudToUseObjectStoreCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/UpdateCloudToUseObjectStoreCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/UpdateCloudToUseObjectStoreCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
similarity index 94%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
index 47dfe8b..f68f9dd 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
@@ -84,7 +84,7 @@
 
     @Override
     public String getEventDescription() {
-        return "destroying system vm: " + getId();
+        return "destroying system vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -99,7 +99,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         VirtualMachine instance = _mgr.destroySystemVM(this);
         if (instance != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(instance);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
similarity index 93%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
index 97acfe0..ab0018b 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
@@ -104,7 +104,7 @@
 
     @Override
     public String getEventDescription() {
-        return "Attempting to migrate VM Id: " + getVirtualMachineId() + " to host Id: " + getHostId();
+        return "Attempting to migrate VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to host Id: " + this._uuidMgr.getUuid(Host.class, getHostId());
     }
 
     @Override
@@ -115,7 +115,7 @@
             throw new InvalidParameterValueException("Unable to find the host to migrate the VM, host id=" + getHostId());
         }
         try {
-            CallContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: " + getHostId());
+            CallContext.current().setEventDetails("VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to host Id: " + this._uuidMgr.getUuid(Host.class, getHostId()));
             //FIXME : Should not be calling UserVmService to migrate all types of VMs - need a generic VM layer
             VirtualMachine migratedVm = _userVmService.migrateVirtualMachine(getVirtualMachineId(), destinationHost);
             if (migratedVm != null) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
index f439ddf4d..ebc50ae 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
@@ -91,7 +91,7 @@
 
     @Override
     public String getEventDescription() {
-        return "rebooting system vm: " + getId();
+        return "rebooting system vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -106,7 +106,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         VirtualMachine result = _mgr.rebootSystemVM(this);
         if (result != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(result);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
index d53da36..c4a69a2 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
@@ -101,7 +101,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("SystemVm Id: " + getId());
+        CallContext.current().setEventDetails("SystemVm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
 
         ServiceOffering serviceOffering = _entityMgr.findById(ServiceOffering.class, serviceOfferingId);
         if (serviceOffering == null) {
@@ -140,6 +140,6 @@
 
     @Override
     public String getEventDescription() {
-        return "Upgrading system vm: " + getId() + " to service offering: " + getServiceOfferingId();
+        return "Upgrading system vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()) + " to service offering: " + this._uuidMgr.getUuid(ServiceOffering.class, getServiceOfferingId());
     }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
index c456592..a2b70a6 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
@@ -95,7 +95,7 @@
 
     @Override
     public String getEventDescription() {
-        return "starting system vm: " + getId();
+        return "starting system vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -110,7 +110,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         VirtualMachine instance = _mgr.startSystemVM(getId());
         if (instance != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(instance);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
index d60460c..9237004 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
@@ -97,7 +97,7 @@
 
     @Override
     public String getEventDescription() {
-        return "stopping system vm: " + getId();
+        return "stopping system vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -116,7 +116,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         VirtualMachine result = _mgr.stopSystemVM(this);
         if (result != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(result);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
index 4e0547a..f266358 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
@@ -96,7 +96,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
 
         ServiceOffering serviceOffering = _entityMgr.findById(ServiceOffering.class, serviceOfferingId);
         if (serviceOffering == null) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/CopyTemplateCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/CopyTemplateCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/template/CopyTemplateCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/CopyTemplateCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/CreateTemplateCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/CreateTemplateCmdByAdmin.java
similarity index 89%
rename from api/src/org/apache/cloudstack/api/command/admin/template/CreateTemplateCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/CreateTemplateCmdByAdmin.java
index 51d9c8d..865bc15 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/template/CreateTemplateCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/CreateTemplateCmdByAdmin.java
@@ -18,6 +18,8 @@
 
 import java.util.List;
 
+import com.cloud.storage.Snapshot;
+import com.cloud.storage.Volume;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -38,7 +40,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Template Id: "+getEntityId()+((getSnapshotId() == null) ? " from volume Id: " + getVolumeId() : " from snapshot Id: " + getSnapshotId()));
+        CallContext.current().setEventDetails("Template Id: " + getEntityUuid()+((getSnapshotId() == null) ? " from volume Id: " + this._uuidMgr.getUuid(Volume.class, getVolumeId()) : " from snapshot Id: " + this._uuidMgr.getUuid(Snapshot.class, getSnapshotId())));
         VirtualMachineTemplate template = null;
         template = _templateService.createPrivateTemplate(this);
 
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/ListTemplatePermissionsCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/ListTemplatePermissionsCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/template/ListTemplatePermissionsCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/ListTemplatePermissionsCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/ListTemplatesCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/ListTemplatesCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/template/ListTemplatesCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/ListTemplatesCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/RegisterTemplateCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/RegisterTemplateCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/template/RegisterTemplateCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/RegisterTemplateCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/UpdateTemplateCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/template/UpdateTemplateCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/template/UpdateTemplateCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/template/UpdateTemplateCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/RemoveRawUsageRecordsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/RemoveRawUsageRecordsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/RemoveRawUsageRecordsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/RemoveRawUsageRecordsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserKeysCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/GetUserKeysCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/GetUserKeysCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/GetUserKeysCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
similarity index 81%
rename from api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
index e6ac367..24624e2 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
@@ -34,7 +34,7 @@
 import com.cloud.user.UserAccount;
 
 @APICommand(name = "updateUser", description = "Updates a user account", responseObject = UserResponse.class,
-        requestHasSensitiveInfo = true, responseHasSensitiveInfo = true)
+requestHasSensitiveInfo = true, responseHasSensitiveInfo = true)
 public class UpdateUserCmd extends BaseCmd {
     public static final Logger s_logger = Logger.getLogger(UpdateUserCmd.class.getName());
 
@@ -61,24 +61,26 @@
 
     @Parameter(name = ApiConstants.PASSWORD,
             type = CommandType.STRING,
-            description = "Clear text password (default hashed to SHA256SALT). If you wish to use any other hasing algorithm, you would need to write a custom authentication adapter. Can't be passed when command is executed via integration.api.port",
+            description = "Clear text password (default hashed to SHA256SALT). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter. Can't be passed when command is executed via integration.api.port",
             acceptedOnAdminPort = false)
     private String password;
 
+    @Parameter(name = ApiConstants.CURRENT_PASSWORD, type = CommandType.STRING, description = "Current password that was being used by the user. You must inform the current password when updating the password.", acceptedOnAdminPort = false)
+    private String currentPassword;
 
-    @Parameter(name = ApiConstants.SECRET_KEY, type = CommandType.STRING, description = "The secret key for the user. Must be specified with userSecretKey")
+    @Parameter(name = ApiConstants.SECRET_KEY, type = CommandType.STRING, description = "The secret key for the user. Must be specified with userApiKey")
     private String secretKey;
 
     @Parameter(name = ApiConstants.TIMEZONE,
-               type = CommandType.STRING,
-               description = "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")
+            type = CommandType.STRING,
+            description = "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")
     private String timezone;
 
     @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, description = "Unique username")
     private String username;
 
     @Inject
-    RegionService _regionService;
+    private RegionService _regionService;
 
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
@@ -108,6 +110,10 @@
         return password;
     }
 
+    public String getCurrentPassword() {
+        return currentPassword;
+    }
+
     public String getSecretKey() {
         return secretKey;
     }
@@ -152,4 +158,20 @@
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update user");
         }
     }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java
similarity index 99%
rename from api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java
index d4f2d5a..d5edd30 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java
@@ -119,7 +119,7 @@
         return networkId;
     }
 
-    public Boolean getForVirtualNetwork() {
+    public Boolean isForVirtualNetwork() {
         return forVirtualNetwork;
     }
 
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AddNicToVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AddNicToVMCmdByAdmin.java
similarity index 91%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/AddNicToVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AddNicToVMCmdByAdmin.java
index 945f849..da0a087 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/AddNicToVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AddNicToVMCmdByAdmin.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.EnumSet;
 
+import com.cloud.network.Network;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -41,7 +42,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Vm Id: " + getVmId() + " Network Id: " + getNetworkId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Network Id: " + this._uuidMgr.getUuid(Network.class, getNetworkId()));
         UserVm result = _userVmService.addNicToVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java
index 03bb4c6..fa76db9 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java
@@ -46,7 +46,7 @@
 
         if (getStartVm()) {
             try {
-                CallContext.current().setEventDetails("Vm Id: "+getEntityId());
+                CallContext.current().setEventDetails("Vm Id: " + getEntityUuid());
                 result = _userVmService.startVirtualMachine(this);
             } catch (ResourceUnavailableException ex) {
                 s_logger.warn("Exception: ", ex);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/DestroyVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DestroyVMCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/DestroyVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DestroyVMCmdByAdmin.java
index 73a80d5..bb59a17 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/DestroyVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DestroyVMCmdByAdmin.java
@@ -42,7 +42,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException{
-        CallContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result = _userVmService.destroyVm(this);
 
         UserVmResponse response = new UserVmResponse();
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java
index 155fcff..ea6cb00 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ExpungeVMCmd.java
@@ -89,7 +89,7 @@
 
     @Override
     public String getEventDescription() {
-        return "Expunging vm: " + getId();
+        return "Expunging vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -104,7 +104,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         try {
             UserVm result = _userVmService.expungeVm(this.getId());
 
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/ListVMsCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ListVMsCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/ListVMsCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ListVMsCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
similarity index 87%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
index d6d6272..b5683e3 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
@@ -119,7 +119,13 @@
 
     @Override
     public String getEventDescription() {
-        return "Attempting to migrate VM Id: " + getVirtualMachineId() + " to host Id: " + getHostId();
+        if (getHostId() != null) {
+            return "Attempting to migrate VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to host Id: " + this._uuidMgr.getUuid(Host.class, getHostId());
+        } else if (getStoragePoolId() != null) {
+            return "Attempting to migrate VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to storage pool Id: " + this._uuidMgr.getUuid(StoragePool.class, getStoragePoolId());
+        } else {
+            return "Attempting to migrate VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId());
+        }
     }
 
     @Override
@@ -146,7 +152,7 @@
             if (destinationHost.getType() != Host.Type.Routing) {
                 throw new InvalidParameterValueException("The specified host(" + destinationHost.getName() + ") is not suitable to migrate the VM, please specify another one");
             }
-            CallContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: " + getHostId());
+            CallContext.current().setEventDetails("VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + ((getHostId() != null) ?  " to host Id: " + this._uuidMgr.getUuid(Host.class, getHostId()) : "" ));
         }
 
         StoragePool destStoragePool = null;
@@ -155,7 +161,7 @@
             if (destStoragePool == null) {
                 throw new InvalidParameterValueException("Unable to find the storage pool to migrate the VM");
             }
-            CallContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to storage pool Id: " + getStoragePoolId());
+            CallContext.current().setEventDetails("VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to storage pool Id: " + this._uuidMgr.getUuid(StoragePool.class, getStoragePoolId()));
         }
 
         try {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
index 32000c6..f9d01f6 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
@@ -136,7 +136,7 @@
 
     @Override
     public String getEventDescription() {
-        return "Attempting to migrate VM Id: " + getVirtualMachineId() + " to host Id: " + getHostId();
+        return "Attempting to migrate VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) + " to host Id: " + this._uuidMgr.getUuid(Host.class, getHostId());
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RebootVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RebootVMCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/RebootVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RebootVMCmdByAdmin.java
index e0c3668..c32f9ac 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/RebootVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RebootVMCmdByAdmin.java
@@ -38,7 +38,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException{
-        CallContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result;
         result = _userVmService.rebootVirtualMachine(this);
 
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RemoveNicFromVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RemoveNicFromVMCmdByAdmin.java
similarity index 92%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/RemoveNicFromVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RemoveNicFromVMCmdByAdmin.java
index ff1c54c..08c56df 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/RemoveNicFromVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RemoveNicFromVMCmdByAdmin.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.EnumSet;
 
+import com.cloud.vm.Nic;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -40,7 +41,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Vm Id: "+getVmId() + " Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Vm Id: "+this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Nic Id: " + this._uuidMgr.getUuid(Nic.class, getNicId()));
         UserVm result = _userVmService.removeNicFromVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/ResetVMPasswordCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ResetVMPasswordCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/ResetVMPasswordCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ResetVMPasswordCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/ResetVMSSHKeyCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ResetVMSSHKeyCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/ResetVMSSHKeyCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ResetVMSSHKeyCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RestoreVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RestoreVMCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/RestoreVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RestoreVMCmdByAdmin.java
index 9a741b6..f607faf 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/RestoreVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/RestoreVMCmdByAdmin.java
@@ -43,7 +43,7 @@
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
             ResourceAllocationException {
         UserVm result;
-        CallContext.current().setEventDetails("Vm Id: " + getVmId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()));
         result = _userVmService.restoreVM(this);
         if (result != null) {
             UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Full, "virtualmachine", result).get(0);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/ScaleVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ScaleVMCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/ScaleVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ScaleVMCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/StartVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/StartVMCmdByAdmin.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/StartVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/StartVMCmdByAdmin.java
index f968835..1230547 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/StartVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/StartVMCmdByAdmin.java
@@ -45,7 +45,7 @@
     @Override
     public void execute() throws ResourceUnavailableException, ResourceAllocationException {
         try {
-            CallContext.current().setEventDetails("Vm Id: " + getId());
+            CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
 
             UserVm result ;
             result = _userVmService.startVirtualMachine(this);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/StopVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/StopVMCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/StopVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/StopVMCmdByAdmin.java
index 4cd1418..ca85dfa 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/StopVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/StopVMCmdByAdmin.java
@@ -39,7 +39,7 @@
 
     @Override
     public void execute() throws ServerApiException, ConcurrentOperationException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result;
 
         result = _userVmService.stopVirtualMachine(getId(), isForced());
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/UpdateDefaultNicForVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpdateDefaultNicForVMCmdByAdmin.java
similarity index 92%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/UpdateDefaultNicForVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpdateDefaultNicForVMCmdByAdmin.java
index 9a06309..d666ae4 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/UpdateDefaultNicForVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpdateDefaultNicForVMCmdByAdmin.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.EnumSet;
 
+import com.cloud.vm.Nic;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -41,7 +42,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Vm Id: "+getVmId() + " Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Vm Id: "+this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Nic Id: " + this._uuidMgr.getUuid(Nic.class, getNicId()));
         UserVm result = _userVmService.updateDefaultNicForVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/UpdateVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpdateVMCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/UpdateVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpdateVMCmdByAdmin.java
index fcafef8..5d2b2b7 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/UpdateVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpdateVMCmdByAdmin.java
@@ -42,7 +42,7 @@
     @Override
     public void execute() throws ResourceUnavailableException,
             InsufficientCapacityException, ServerApiException {
-        CallContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result = _userVmService.updateVirtualMachine(this);
         if (result != null){
             UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Full, "virtualmachine", result).get(0);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/UpgradeVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpgradeVMCmdByAdmin.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/admin/vm/UpgradeVMCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpgradeVMCmdByAdmin.java
index 6df400a..6e3261a 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/UpgradeVMCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/UpgradeVMCmdByAdmin.java
@@ -42,7 +42,7 @@
 
     @Override
     public void execute() throws ResourceAllocationException{
-        CallContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+this._uuidMgr.getUuid(VirtualMachine.class, getId()));
 
         ServiceOffering serviceOffering = _entityMgr.findById(ServiceOffering.class, serviceOfferingId);
         if (serviceOffering == null) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vmsnapshot/RevertToVMSnapshotCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vmsnapshot/RevertToVMSnapshotCmdByAdmin.java
similarity index 94%
rename from api/src/org/apache/cloudstack/api/command/admin/vmsnapshot/RevertToVMSnapshotCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vmsnapshot/RevertToVMSnapshotCmdByAdmin.java
index facce1e..47cb99b 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vmsnapshot/RevertToVMSnapshotCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vmsnapshot/RevertToVMSnapshotCmdByAdmin.java
@@ -18,6 +18,7 @@
 
 import java.util.logging.Logger;
 
+import com.cloud.vm.snapshot.VMSnapshot;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
@@ -42,7 +43,7 @@
     @Override
     public void execute() throws  ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException, ConcurrentOperationException {
         CallContext.current().setEventDetails(
-                "vmsnapshot id: " + getVmSnapShotId());
+                "vmsnapshot id: " + this._uuidMgr.getUuid(VMSnapshot.class, getVmSnapShotId()));
         UserVm result = _vmSnapshotService.revertToSnapshot(getVmSnapShotId());
         if (result != null) {
             UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Full,
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/AttachVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/AttachVolumeCmdByAdmin.java
similarity index 92%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/AttachVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/AttachVolumeCmdByAdmin.java
index c51c1e2..f70b410 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/volume/AttachVolumeCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/AttachVolumeCmdByAdmin.java
@@ -36,7 +36,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId());
+        CallContext.current().setEventDetails("Volume Id: "+this._uuidMgr.getUuid(Volume.class, getId())+" VmId: "+this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()));
         Volume result = _volumeService.attachVolumeToVM(this);
         if (result != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Full, result);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/CreateVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/CreateVolumeCmdByAdmin.java
similarity index 93%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/CreateVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/CreateVolumeCmdByAdmin.java
index 8ff3993..1dc4721 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/volume/CreateVolumeCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/CreateVolumeCmdByAdmin.java
@@ -38,7 +38,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Volume Id: "+getEntityId()+((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId()));
+        CallContext.current().setEventDetails("Volume Id: "+ getEntityUuid() + ((getSnapshotId() == null) ? "" : " from snapshot: " + this._uuidMgr.getUuid(Snapshot.class, getSnapshotId())));
         Volume volume = _volumeService.createVolume(this);
         if (volume != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Full, volume);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/DetachVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/DetachVolumeCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/DetachVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/DetachVolumeCmdByAdmin.java
index 353a068..f9d9cbd 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/volume/DetachVolumeCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/DetachVolumeCmdByAdmin.java
@@ -37,7 +37,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId());
+        CallContext.current().setEventDetails(getEventDescription());
         Volume result = _volumeService.detachVolumeFromVM(this);
         if (result != null){
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Full, result);
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/ListVolumesCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/ListVolumesCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/ListVolumesCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/ListVolumesCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/MigrateVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/MigrateVolumeCmdByAdmin.java
similarity index 88%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/MigrateVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/MigrateVolumeCmdByAdmin.java
index c312cfc..1a18b95 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/volume/MigrateVolumeCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/MigrateVolumeCmdByAdmin.java
@@ -25,17 +25,13 @@
 
 import com.cloud.storage.Volume;
 
-
-@APICommand(name = "migrateVolume", description = "Migrate volume", responseObject = VolumeResponse.class, since = "3.0.0", responseView = ResponseView.Full, entityType = {Volume.class},
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "migrateVolume", description = "Migrate volume", responseObject = VolumeResponse.class, since = "3.0.0", responseView = ResponseView.Full, entityType = {
+        Volume.class}, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class MigrateVolumeCmdByAdmin extends MigrateVolumeCmd {
 
-
     @Override
-    public void execute(){
-        Volume result;
-
-        result = _volumeService.migrateVolume(this);
+    public void execute() {
+        Volume result = _volumeService.migrateVolume(this);
         if (result != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Full, result);
             response.setResponseName(getCommandName());
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/ResizeVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/ResizeVolumeCmdByAdmin.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/ResizeVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/ResizeVolumeCmdByAdmin.java
index 6ef142f..689e779 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/volume/ResizeVolumeCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/ResizeVolumeCmdByAdmin.java
@@ -37,7 +37,7 @@
     public void execute() throws ResourceAllocationException{
         Volume volume = null;
         try {
-            CallContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G");
+            CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getEntityId()) + " to size " + getSize() + "G");
             volume = _volumeService.resizeVolume(this);
         } catch (InvalidParameterValueException ex) {
             s_logger.info(ex.getMessage());
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/UpdateVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/UpdateVolumeCmdByAdmin.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/UpdateVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/UpdateVolumeCmdByAdmin.java
index 6b110e5..b683435 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/volume/UpdateVolumeCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/UpdateVolumeCmdByAdmin.java
@@ -32,7 +32,7 @@
 
     @Override
     public void execute(){
-        CallContext.current().setEventDetails("Volume Id: "+getId());
+        CallContext.current().setEventDetails("Volume Id: "+this._uuidMgr.getUuid(Volume.class, getId()));
         Volume result = _volumeService.updateVolume(getId(), getPath(), getState(), getStorageId(), getDisplayVolume(),
                 getCustomId(), getEntityOwnerId(), getChainInfo());
         if (result != null) {
diff --git a/api/src/org/apache/cloudstack/api/command/admin/volume/UploadVolumeCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/volume/UploadVolumeCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/volume/UploadVolumeCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/volume/UploadVolumeCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java
index 8606c32..d7761de 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java
@@ -34,7 +34,7 @@
 
     @Override
     public void execute(){
-        Vpc result = _vpcService.updateVpc(getId(), getVpcName(), getDisplayText(), getCustomId(), getDisplayVpc());
+        Vpc result = _vpcService.updateVpc(getId(), getVpcName(), getDisplayText(), getCustomId(), isDisplayVpc());
         if (result != null) {
             VpcResponse response = _responseGenerator.createVpcResponse(ResponseView.Full, result);
             response.setResponseName(getCommandName());
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListZonesCmdByAdmin.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java
index 0a0e7a1..d590081 100644
--- a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java
@@ -133,11 +133,11 @@
         return associatedNetworkId;
     }
 
-    public Boolean getIsSourceNat() {
+    public Boolean isSourceNat() {
         return isSourceNat;
     }
 
-    public Boolean getIsStaticNat() {
+    public Boolean isStaticNat() {
         return isStaticNat;
     }
 
diff --git a/api/src/org/apache/cloudstack/api/command/user/address/UpdateIPAddrCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/address/UpdateIPAddrCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/address/UpdateIPAddrCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/address/UpdateIPAddrCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupTypesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupTypesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupTypesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupTypesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/ListAffinityGroupsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
index fab7d9e..02c4255 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
@@ -254,9 +254,8 @@
                 setEntityUuid(result.getUuid());
             }
         } catch (NetworkRuleConflictException ex) {
-            s_logger.info("Network rule conflict: " + ex.getMessage());
             s_logger.trace("Network Rule Conflict: ", ex);
-            throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage());
+            throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage(), ex);
         }
     }
 
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
similarity index 99%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
index ea0cb00..ff11395 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
@@ -358,9 +358,8 @@
             setEntityId(result.getId());
             setEntityUuid(result.getUuid());
         } catch (NetworkRuleConflictException ex) {
-            s_logger.info("Network rule conflict: ", ex);
             s_logger.trace("Network Rule Conflict: ", ex);
-            throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage());
+            throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage(), ex);
         }
     }
 
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/IListFirewallRulesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/IListFirewallRulesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/IListFirewallRulesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/IListFirewallRulesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListEgressFirewallRulesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/ListEgressFirewallRulesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/ListEgressFirewallRulesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/ListEgressFirewallRulesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdateEgressFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/UpdateEgressFirewallRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/UpdateEgressFirewallRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/UpdateEgressFirewallRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdateFirewallRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/UpdateFirewallRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/UpdateFirewallRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/UpdateFirewallRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignCertToLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/AssignCertToLoadBalancerCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignCertToLoadBalancerCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/AssignCertToLoadBalancerCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteSslCertCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteSslCertCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteSslCertCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/DeleteSslCertCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListApplicationLoadBalancersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListApplicationLoadBalancersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListApplicationLoadBalancersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListApplicationLoadBalancersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListSslCertsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListSslCertsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListSslCertsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/ListSslCertsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveCertFromLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/RemoveCertFromLoadBalancerCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveCertFromLoadBalancerCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/RemoveCertFromLoadBalancerCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateApplicationLoadBalancerCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateApplicationLoadBalancerCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateApplicationLoadBalancerCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateApplicationLoadBalancerCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBHealthCheckPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBHealthCheckPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBHealthCheckPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBHealthCheckPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBStickinessPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBStickinessPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBStickinessPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLBStickinessPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UploadSslCertCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UploadSslCertCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/loadbalancer/UploadSslCertCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/UploadSslCertCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
similarity index 86%
rename from api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
index 4b6a836..2b2a3c6 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
@@ -40,11 +40,7 @@
 import com.cloud.user.Account;
 import com.cloud.utils.net.NetUtils;
 
-@APICommand(name = "createNetworkACL",
-            description = "Creates a ACL rule in the given network (the network has to belong to VPC)",
-            responseObject = NetworkACLItemResponse.class,
-            requestHasSensitiveInfo = false,
-            responseHasSensitiveInfo = false)
+@APICommand(name = "createNetworkACL", description = "Creates a ACL rule in the given network (the network has to belong to VPC)", responseObject = NetworkACLItemResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class CreateNetworkACLCmd extends BaseAsyncCreateCmd {
     public static final Logger s_logger = Logger.getLogger(CreateNetworkACLCmd.class.getName());
 
@@ -54,10 +50,7 @@
     // ////////////// API parameters /////////////////////
     // ///////////////////////////////////////////////////
 
-    @Parameter(name = ApiConstants.PROTOCOL,
-               type = CommandType.STRING,
-               required = true,
-               description = "the protocol for the ACL rule. Valid values are TCP/UDP/ICMP/ALL or valid protocol number")
+    @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, required = true, description = "the protocol for the ACL rule. Valid values are TCP/UDP/ICMP/ALL or valid protocol number")
     private String protocol;
 
     @Parameter(name = ApiConstants.START_PORT, type = CommandType.INTEGER, description = "the starting port of ACL")
@@ -75,38 +68,31 @@
     @Parameter(name = ApiConstants.ICMP_CODE, type = CommandType.INTEGER, description = "error code for this ICMP message")
     private Integer icmpCode;
 
-    @Parameter(name = ApiConstants.NETWORK_ID,
-               type = CommandType.UUID,
-               entityType = NetworkResponse.class,
-               description = "The network of the VM the ACL will be created for")
+    @Parameter(name = ApiConstants.NETWORK_ID, type = CommandType.UUID, entityType = NetworkResponse.class, description = "The network of the VM the ACL will be created for")
     private Long networkId;
 
-    @Parameter(name = ApiConstants.ACL_ID,
-               type = CommandType.UUID,
-               entityType = NetworkACLResponse.class,
-               description = "The network of the VM the ACL will be created for")
+    @Parameter(name = ApiConstants.ACL_ID, type = CommandType.UUID, entityType = NetworkACLResponse.class, description = "The network of the VM the ACL will be created for")
     private Long aclId;
 
-    @Parameter(name = ApiConstants.TRAFFIC_TYPE, type = CommandType.STRING, description = "the traffic type for the ACL,"
-        + "can be ingress or egress, defaulted to ingress if not specified")
+    @Parameter(name = ApiConstants.TRAFFIC_TYPE, type = CommandType.STRING, description = "the traffic type for the ACL," + "can be ingress or egress, defaulted to ingress if not specified")
     private String trafficType;
 
-    @Parameter(name = ApiConstants.NUMBER, type = CommandType.INTEGER, description = "The network of the VM the ACL will be created for")
+    @Parameter(name = ApiConstants.NUMBER, type = CommandType.INTEGER, description = "The number of the ACL item, its ordering")
     private Integer number;
 
     @Parameter(name = ApiConstants.ACTION, type = CommandType.STRING, description = "scl entry action, allow or deny")
     private String action;
 
-    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the rule to the end user or not", since = "4.4", authorized = {RoleType.Admin})
+    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the rule to the end user or not", since = "4.4", authorized = {
+            RoleType.Admin})
     private Boolean display;
 
+    @Parameter(name = ApiConstants.ACL_REASON, type = CommandType.STRING, description = "A description indicating why the ACL rule is required.")
+    private String reason;
+
     // ///////////////////////////////////////////////////
     // ///////////////// Accessors ///////////////////////
     // ///////////////////////////////////////////////////
-    @Deprecated
-    public Boolean getDisplay() {
-        return display;
-    }
 
     @Override
     public boolean isDisplay() {
@@ -227,6 +213,10 @@
         return aclId;
     }
 
+    public String getReason() {
+        return reason;
+    }
+
     @Override
     public void create() {
         NetworkACLItem result = _networkACLService.createNetworkACLItem(this);
@@ -257,5 +247,4 @@
             }
         }
     }
-
-}
+}
\ No newline at end of file
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLListsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworkACLListsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLListsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworkACLListsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
index 041d641..a61c597 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
@@ -123,11 +123,11 @@
         return supportedServices;
     }
 
-    public Boolean getRestartRequired() {
+    public Boolean isRestartRequired() {
         return restartRequired;
     }
 
-    public Boolean getSpecifyIpRanges() {
+    public Boolean isSpecifyIpRanges() {
         return specifyIpRanges;
     }
 
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java
new file mode 100644
index 0000000..0343e50
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/MoveNetworkAclItemCmd.java
@@ -0,0 +1,103 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.user.network;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseAsyncCustomIdCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.response.NetworkACLItemResponse;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.log4j.Logger;
+
+import com.cloud.event.EventTypes;
+import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.user.Account;
+
+@APICommand(name = "moveNetworkAclItem", description = "Move an ACL rule to a position bettwen two other ACL rules of the same ACL network list", responseObject = NetworkACLItemResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+public class MoveNetworkAclItemCmd extends BaseAsyncCustomIdCmd {
+
+    public static final Logger s_logger = Logger.getLogger(MoveNetworkAclItemCmd.class.getName());
+    private static final String s_name = "moveNetworkAclItemResponse";
+
+    @Parameter(name = ApiConstants.ID, type = CommandType.STRING, required = true, description = "The ID of the network ACL rule that is being moved to a new position.")
+    private String uuidRuleBeingMoved;
+
+    @Parameter(name = ApiConstants.PREVIOUS_ACL_RULE_ID, type = CommandType.STRING, description = "The ID of the first rule that is right before the new position where the rule being moved is going to be placed. This value can be 'NULL' if the rule is being moved to the first position of the network ACL list.")
+    private String previousAclRuleUuid;
+
+    @Parameter(name = ApiConstants.NEXT_ACL_RULE_ID, type = CommandType.STRING, description = "The ID of the rule that is right after the new position where the rule being moved is going to be placed. This value can be 'NULL' if the rule is being moved to the last position of the network ACL list.")
+    private String nextAclRuleUuid;
+
+    @Parameter(name = ApiConstants.MOVE_ACL_CONSISTENCY_HASH, type = CommandType.STRING, description = "Md5 hash used to check the consistency of the ACL rule list before applying the ACL rule move. This check is useful to manage concurrency problems that may happen when multiple users are editing the same ACL rule listing. The parameter is not required. Therefore, if the user does not send it, he/she is assuming the risk of moving ACL rules without checking the consistency of the access control list before executing the move. We use MD5 hash function on a String that is composed of all UUIDs of the ACL rules in concatenated in their respective order (order defined via 'number' field).")
+    private String aclConsistencyHash;
+
+    @Override
+    public void execute() {
+        CallContext.current().setEventDetails(getEventDescription());
+
+        NetworkACLItem aclItem = _networkACLService.moveNetworkAclRuleToNewPosition(this);
+
+        NetworkACLItemResponse aclResponse = _responseGenerator.createNetworkACLItemResponse(aclItem);
+        setResponseObject(aclResponse);
+        aclResponse.setResponseName(getCommandName());
+    }
+
+    public String getUuidRuleBeingMoved() {
+        return uuidRuleBeingMoved;
+    }
+
+    public String getPreviousAclRuleUuid() {
+        return previousAclRuleUuid;
+    }
+
+    public String getNextAclRuleUuid() {
+        return nextAclRuleUuid;
+    }
+
+    @Override
+    public void checkUuid() {
+        if (this.getCustomId() != null) {
+            _uuidMgr.checkUuid(this.getCustomId(), NetworkACLItem.class);
+        }
+    }
+
+    @Override
+    public String getEventType() {
+        return EventTypes.EVENT_NETWORK_ACL_ITEM_UPDATE;
+    }
+
+    @Override
+    public String getEventDescription() {
+        return String.format("Placing network ACL item [%s] between [%s] and [%s].", uuidRuleBeingMoved, previousAclRuleUuid, nextAclRuleUuid);
+    }
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        Account caller = CallContext.current().getCallingAccount();
+        return caller.getAccountId();
+    }
+
+    public String getAclConsistencyHash() {
+        return aclConsistencyHash;
+    }
+}
\ No newline at end of file
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
similarity index 81%
rename from api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
index acc2ae8..1215f57 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
@@ -21,10 +21,8 @@
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCustomIdCmd;
 import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.NetworkACLItemResponse;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.log4j.Logger;
@@ -34,8 +32,7 @@
 import com.cloud.network.vpc.NetworkACLItem;
 import com.cloud.user.Account;
 
-@APICommand(name = "updateNetworkACLItem", description = "Updates ACL item with specified ID", responseObject = NetworkACLItemResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "updateNetworkACLItem", description = "Updates ACL item with specified ID", responseObject = NetworkACLItemResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class UpdateNetworkACLItemCmd extends BaseAsyncCustomIdCmd {
     public static final Logger s_logger = Logger.getLogger(UpdateNetworkACLItemCmd.class.getName());
 
@@ -45,16 +42,10 @@
     // ////////////// API parameters /////////////////////
     // ///////////////////////////////////////////////////
 
-    @Parameter(name = ApiConstants.ID,
-               type = CommandType.UUID,
-               entityType = NetworkACLItemResponse.class,
-               required = true,
-               description = "the ID of the network ACL item")
+    @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = NetworkACLItemResponse.class, required = true, description = "the ID of the network ACL item")
     private Long id;
 
-    @Parameter(name = ApiConstants.PROTOCOL,
-               type = CommandType.STRING,
-               description = "the protocol for the ACL rule. Valid values are TCP/UDP/ICMP/ALL or valid protocol number")
+    @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, description = "the protocol for the ACL rule. Valid values are TCP/UDP/ICMP/ALL or valid protocol number")
     private String protocol;
 
     @Parameter(name = ApiConstants.START_PORT, type = CommandType.INTEGER, description = "the starting port of ACL")
@@ -72,8 +63,7 @@
     @Parameter(name = ApiConstants.ICMP_CODE, type = CommandType.INTEGER, description = "error code for this ICMP message")
     private Integer icmpCode;
 
-    @Parameter(name = ApiConstants.TRAFFIC_TYPE, type = CommandType.STRING, description = "the traffic type for the ACL,"
-        + "can be Ingress or Egress, defaulted to Ingress if not specified")
+    @Parameter(name = ApiConstants.TRAFFIC_TYPE, type = CommandType.STRING, description = "the traffic type for the ACL, can be Ingress or Egress, defaulted to Ingress if not specified")
     private String trafficType;
 
     @Parameter(name = ApiConstants.NUMBER, type = CommandType.INTEGER, description = "The network of the vm the ACL will be created for")
@@ -82,9 +72,16 @@
     @Parameter(name = ApiConstants.ACTION, type = CommandType.STRING, description = "scl entry action, allow or deny")
     private String action;
 
-    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the rule to the end user or not", since = "4.4", authorized = {RoleType.Admin})
+    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the rule to the end user or not", since = "4.4", authorized = {
+            RoleType.Admin})
     private Boolean display;
 
+    @Parameter(name = ApiConstants.ACL_REASON, type = CommandType.STRING, description = "A description indicating why the ACL rule is required.")
+    private String reason;
+
+    @Parameter(name = ApiConstants.ACL_RULE_PARTIAL_UPGRADE, type = CommandType.BOOLEAN, required = false, description = "Indicates if the ACL rule is to be updated partially (merging the parameters sent with current configuration) or completely (disconsidering all of the current configurations). The default value is 'true'.")
+    private boolean partialUpgrade = true;
+
     // ///////////////////////////////////////////////////
     // ///////////////// Accessors ///////////////////////
     // ///////////////////////////////////////////////////
@@ -105,8 +102,9 @@
     public String getProtocol() {
         if (protocol != null) {
             return protocol.trim();
-        } else
+        } else {
             return null;
+        }
     }
 
     public List<String> getSourceCidrList() {
@@ -173,15 +171,14 @@
         return icmpType;
     }
 
+    public String getReason() {
+        return reason;
+    }
+
     @Override
     public void execute() throws ResourceUnavailableException {
         CallContext.current().setEventDetails("Rule Id: " + getId());
-        NetworkACLItem aclItem =
-            _networkACLService.updateNetworkACLItem(getId(), getProtocol(), getSourceCidrList(), getTrafficType(), getAction(), getNumber(), getSourcePortStart(),
-                getSourcePortEnd(), getIcmpCode(), getIcmpType(), this.getCustomId(), this.isDisplay());
-        if (aclItem == null) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network ACL item");
-        }
+        NetworkACLItem aclItem = _networkACLService.updateNetworkACLItem(this);
         NetworkACLItemResponse aclResponse = _responseGenerator.createNetworkACLItemResponse(aclItem);
         setResponseObject(aclResponse);
         aclResponse.setResponseName(getCommandName());
@@ -194,4 +191,7 @@
         }
     }
 
+    public boolean isPartialUpgrade() {
+        return partialUpgrade;
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
similarity index 85%
rename from api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
index aa1f557..22eaf21 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLListCmd.java
@@ -31,8 +31,7 @@
 import com.cloud.network.vpc.NetworkACL;
 import com.cloud.user.Account;
 
-@APICommand(name = "updateNetworkACLList", description = "Updates network ACL list", responseObject = SuccessResponse.class, since = "4.4",
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "updateNetworkACLList", description = "Updates network ACL list", responseObject = SuccessResponse.class, since = "4.4", requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class UpdateNetworkACLListCmd extends BaseAsyncCustomIdCmd {
     public static final Logger s_logger = Logger.getLogger(UpdateNetworkACLListCmd.class.getName());
     private static final String s_name = "updatenetworkacllistresponse";
@@ -44,9 +43,16 @@
     @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = NetworkACLResponse.class, required = true, description = "the ID of the network ACL")
     private Long id;
 
-    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the list to the end user or not", since = "4.4", authorized = {RoleType.Admin})
+    @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the list to the end user or not", since = "4.4", authorized = {
+            RoleType.Admin})
     private Boolean display;
 
+    @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "Name of the network ACL list")
+    private String name;
+
+    @Parameter(name = ApiConstants.DESCRIPTION, type = CommandType.STRING, description = "Description of the network ACL list")
+    private String description;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -85,7 +91,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        NetworkACL acl = _networkACLService.updateNetworkACL(id, this.getCustomId(), getDisplay());
+        NetworkACL acl = _networkACLService.updateNetworkACL(this);
         NetworkACLResponse aclResponse = _responseGenerator.createNetworkACLResponse(acl);
         setResponseObject(aclResponse);
         aclResponse.setResponseName(getCommandName());
@@ -97,4 +103,12 @@
             _uuidMgr.checkUuid(this.getCustomId(), NetworkACL.class);
         }
     }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getName() {
+        return name;
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ListRegionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ListRegionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ListRegionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ListRegionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/ListGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/ListGlobalLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/ListGlobalLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/ListGlobalLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ArchiveSnapshotCmd.java
similarity index 64%
copy from api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
copy to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ArchiveSnapshotCmd.java
index 64a432d..4cf6e85 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ArchiveSnapshotCmd.java
@@ -16,12 +16,17 @@
 // under the License.
 package org.apache.cloudstack.api.command.user.snapshot;
 
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import com.cloud.event.EventTypes;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.NetworkRuleConflictException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.storage.Snapshot;
+import com.cloud.user.Account;
+import org.apache.cloudstack.acl.SecurityChecker;
 import org.apache.cloudstack.api.ACL;
 import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -30,37 +35,41 @@
 import org.apache.cloudstack.api.response.SnapshotResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.context.CallContext;
+import org.apache.log4j.Logger;
 
-import com.cloud.event.EventTypes;
-import com.cloud.storage.Snapshot;
-import com.cloud.user.Account;
-
-@APICommand(name = "deleteSnapshot", description = "Deletes a snapshot of a disk volume.", responseObject = SuccessResponse.class, entityType = {Snapshot.class},
+@APICommand(name = "archiveSnapshot", description = "Archives (moves) a snapshot on primary storage to secondary storage",
+        responseObject = SnapshotResponse.class, entityType = {Snapshot.class},
         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DeleteSnapshotCmd extends BaseAsyncCmd {
-    public static final Logger s_logger = Logger.getLogger(DeleteSnapshotCmd.class.getName());
-    private static final String s_name = "deletesnapshotresponse";
+public class ArchiveSnapshotCmd extends BaseAsyncCmd {
+    public static final Logger s_logger = Logger.getLogger(CreateSnapshotCmd.class.getName());
+    private static final String s_name = "createsnapshotresponse";
 
-    /////////////////////////////////////////////////////
-    //////////////// API parameters /////////////////////
-    /////////////////////////////////////////////////////
-
-    @ACL(accessType = AccessType.OperateEntry)
+    @ACL(accessType = SecurityChecker.AccessType.OperateEntry)
     @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = SnapshotResponse.class,
             required=true, description="The ID of the snapshot")
     private Long id;
 
-    /////////////////////////////////////////////////////
-    /////////////////// Accessors ///////////////////////
-    /////////////////////////////////////////////////////
-
-    public Long getId() {
-        return id;
+    @Override
+    public String getEventType() {
+        return EventTypes.EVENT_SNAPSHOT_CREATE;
     }
 
-    /////////////////////////////////////////////////////
-    /////////////// API Implementation///////////////////
-    /////////////////////////////////////////////////////
+    @Override
+    public String getEventDescription() {
+        return "Archiving snapshot " + id + " to secondary storage";
+    }
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
+        CallContext.current().setEventDetails("Snapshot Id: " + this._uuidMgr.getUuid(Snapshot.class,getId()));
+        Snapshot snapshot = _snapshotService.archiveSnapshot(getId());
+        if (snapshot != null) {
+            SuccessResponse response = new SuccessResponse(getCommandName());
+            setResponseObject(response);
+        } else {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to archive snapshot");
+        }
+    }
 
     @Override
     public String getCommandName() {
@@ -77,35 +86,7 @@
         return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked
     }
 
-    @Override
-    public String getEventType() {
-        return EventTypes.EVENT_SNAPSHOT_DELETE;
-    }
-
-    @Override
-    public String getEventDescription() {
-        return  "deleting snapshot: " + getId();
-    }
-
-    @Override
-    public ApiCommandJobType getInstanceType() {
-        return ApiCommandJobType.Snapshot;
-    }
-
-    @Override
-    public Long getInstanceId() {
-        return getId();
-    }
-
-    @Override
-    public void execute() {
-        CallContext.current().setEventDetails("Snapshot Id: " + getId());
-        boolean result = _snapshotService.deleteSnapshot(getId());
-        if (result) {
-            SuccessResponse response = new SuccessResponse(getCommandName());
-            setResponseObject(response);
-        } else {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete snapshot");
-        }
+    public Long getId() {
+        return id;
     }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
index d66b649..8c2a7e4 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
@@ -112,14 +112,6 @@
         return snapshotName;
     }
 
-    public String getVolumeUuid() {
-        Volume volume = _entityMgr.findById(Volume.class, getVolumeId());
-        if (volume == null) {
-            throw new InvalidParameterValueException("Unable to find volume's UUID");
-        }
-        return volume.getUuid();
-    }
-
     public Long getPolicyId() {
         if (policyId != null) {
             return policyId;
@@ -179,7 +171,7 @@
 
     @Override
     public String getEventDescription() {
-        return "creating snapshot for volume: " + getVolumeUuid();
+        return "creating snapshot for volume: " + this._uuidMgr.getUuid(Volume.class, getVolumeId());
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java
index 7a35d34..556b041 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotFromVMSnapshotCmd.java
@@ -151,7 +151,7 @@
 
     @Override
     public String getEventDescription() {
-        return "creating snapshot from vm snapshot : " + getVMSnapshotId();
+        return "creating snapshot from vm snapshot : " + this._uuidMgr.getUuid(VMSnapshot.class, getVMSnapshotId());
     }
 
     @Override
@@ -173,7 +173,7 @@
     @Override
     public void execute() {
         s_logger.info("CreateSnapshotFromVMSnapshotCmd with vm snapshot id:" + getVMSnapshotId() + " and snapshot id:" + getEntityId() + " starts:" + System.currentTimeMillis());
-        CallContext.current().setEventDetails("Vm Snapshot Id: "+ getVMSnapshotId());
+        CallContext.current().setEventDetails("Vm Snapshot Id: "+ this._uuidMgr.getUuid(VMSnapshot.class, getVMSnapshotId()));
         Snapshot snapshot = null;
         try {
             snapshot = _snapshotService.backupSnapshotFromVmSnapshot(getEntityId(), getVmId(), getVolumeId(), getVMSnapshotId());
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
index 64a432d..452135f 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
@@ -84,7 +84,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "deleting snapshot: " + getId();
+        return  "deleting snapshot: " + this._uuidMgr.getUuid(Snapshot.class, getId());
     }
 
     @Override
@@ -99,7 +99,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Snapshot Id: " + getId());
+        CallContext.current().setEventDetails("Snapshot Id: " + this._uuidMgr.getUuid(Snapshot.class, getId()));
         boolean result = _snapshotService.deleteSnapshot(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java
index 4708aff..20a638c 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java
@@ -82,7 +82,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "revert snapshot: " + getId();
+        return  "revert snapshot: " + this._uuidMgr.getUuid(Snapshot.class, getId());
     }
 
     @Override
@@ -97,7 +97,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Snapshot Id: " + getId());
+        CallContext.current().setEventDetails("Snapshot Id: " + this._uuidMgr.getUuid(Snapshot.class, getId()));
         Snapshot snapshot = _snapshotService.revertSnapshot(getId());
         if (snapshot != null) {
             SnapshotResponse response = _responseGenerator.createSnapshotResponse(snapshot);
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/UpdateSnapshotPolicyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
similarity index 89%
rename from api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
index d16b87cd9..db45f75 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import com.cloud.dc.DataCenter;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -94,6 +95,10 @@
         return null;
     }
 
+    public Long getDestinationZoneId() {
+        return destZoneId;
+    }
+
     public Long getId() {
         return id;
     }
@@ -133,8 +138,19 @@
 
     @Override
     public String getEventDescription() {
-        return  "copying template: " + getId() + " from zone: " + getSourceZoneId()
-                + " to zone: " + getDestinationZoneIds();
+        StringBuilder descBuilder = new StringBuilder();
+        if (getDestinationZoneIds() != null) {
+
+            for (Long destId : getDestinationZoneIds()) {
+                descBuilder.append(", ");
+                descBuilder.append(this._uuidMgr.getUuid(DataCenter.class, destId));
+            }
+            if (descBuilder.length() > 0) {
+                descBuilder.deleteCharAt(0);
+            }
+        }
+
+        return  "copying template: " + this._uuidMgr.getUuid(VirtualMachineTemplate.class, getId()) +((getSourceZoneId() != null) ? " from zone: " + this._uuidMgr.getUuid(DataCenter.class, getSourceZoneId()) : "") + ((descBuilder.length() > 0) ? " to zones: " + descBuilder.toString() : "");
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
index 59c4abe..42f1383 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
@@ -293,7 +293,7 @@
     @Override
     public void execute() {
         CallContext.current().setEventDetails(
-            "Template Id: " + getEntityId() + ((getSnapshotId() == null) ? " from volume Id: " + getVolumeId() : " from snapshot Id: " + getSnapshotId()));
+            "Template Id: " + getEntityUuid() + ((getSnapshotId() == null) ? " from volume Id: " + this._uuidMgr.getUuid(Volume.class, getVolumeId()) : " from snapshot Id: " + this._uuidMgr.getUuid(Snapshot.class, getSnapshotId())));
         VirtualMachineTemplate template = null;
         template = _templateService.createPrivateTemplate(this);
 
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
index 95b3eee..3cee148 100755
--- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
@@ -100,7 +100,7 @@
 
     @Override
     public String getEventDescription() {
-        return "Deleting template " + getId();
+        return "Deleting template " + this._uuidMgr.getUuid(VirtualMachineTemplate.class, getId());
     }
 
     @Override
@@ -115,7 +115,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Template Id: " + getId());
+        CallContext.current().setEventDetails("Template Id: " + this._uuidMgr.getUuid(VirtualMachineTemplate.class, getId()));
         boolean result = _templateService.deleteTemplate(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
index 48d3e14..f0e7b08 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
@@ -16,6 +16,7 @@
 // under the License.
 package org.apache.cloudstack.api.command.user.template;
 
+import com.cloud.dc.DataCenter;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -113,7 +114,7 @@
 
     @Override
     public String getEventDescription() {
-        return "extracting template: " + getId() + " from zone: " + getZoneId();
+     return "extracting template: " + this._uuidMgr.getUuid(VirtualMachineTemplate.class, getId()) + ((getZoneId() != null) ? " from zone: " + this._uuidMgr.getUuid(DataCenter.class, getZoneId()) : "");
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
index 41481c8..009c4fd 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
@@ -105,7 +105,7 @@
 
     @Override
     public String getEventDescription() {
-        return "associating ip to nic id=" + getNicId() + " belonging to network id=" + getNetworkId();
+        return "associating ip to nic id=" + this._uuidMgr.getUuid(Nic.class, getNicId()) + " belonging to network id=" + this._uuidMgr.getUuid(Network.class, getNetworkId());
     }
 
     /////////////////////////////////////////////////////
@@ -124,11 +124,11 @@
     @Override
     public void execute() throws ResourceUnavailableException, ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException {
 
-        CallContext.current().setEventDetails("Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Nic Id: " + this._uuidMgr.getUuid(Nic.class, getNicId()));
         NicSecondaryIp result = _entityMgr.findById(NicSecondaryIp.class, getEntityId());
 
         if (result != null) {
-            CallContext.current().setEventDetails("secondary Ip Id: " + getEntityId());
+            CallContext.current().setEventDetails("secondary Ip Id: " + getEntityUuid());
             boolean success = false;
             success = _networkService.configureNicSecondaryIp(result, isZoneSGEnabled());
 
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
similarity index 94%
rename from api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
index ed2a4b5..a5a3f6e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import com.cloud.network.Network;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -121,7 +122,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "Adding network " + getNetworkId() + " to user vm: " + getVmId();
+        return  "Adding network " + this._uuidMgr.getUuid(Network.class, getNetworkId()) + " to user vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId());
     }
 
     @Override
@@ -157,7 +158,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getVmId() + " Network Id: " + getNetworkId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Network Id: " + this._uuidMgr.getUuid(Network.class, getNetworkId()));
         UserVm result = _userVmService.addNicToVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
similarity index 99%
rename from api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
index 8161fb2..29d4c97 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
@@ -256,7 +256,7 @@
         return HypervisorType.getType(hypervisor);
     }
 
-    public Boolean getDisplayVm() {
+    public Boolean isDisplayVm() {
         return displayVm;
     }
 
@@ -522,7 +522,7 @@
 
     @Override
     public String getEventDescription() {
-        return "starting Vm. Vm Id: " + getEntityId();
+        return "starting Vm. Vm Id: " + getEntityUuid();
     }
 
     @Override
@@ -536,7 +536,7 @@
 
         if (getStartVm()) {
             try {
-                CallContext.current().setEventDetails("Vm Id: " + getEntityId());
+                CallContext.current().setEventDetails("Vm Id: " + getEntityUuid());
                 result = _userVmService.startVirtualMachine(this);
             } catch (ResourceUnavailableException ex) {
                 s_logger.warn("Exception: ", ex);
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
index f23e03a..730c677 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
@@ -104,7 +104,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "destroying vm: " + getId();
+        return  "destroying vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -119,7 +119,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result = _userVmService.destroyVm(this);
 
         UserVmResponse response = new UserVmResponse();
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
index e7a0c16..b524257 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
@@ -86,7 +86,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "rebooting user vm: " + getId();
+        return  "rebooting user vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -101,7 +101,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result;
         result = _userVmService.rebootVirtualMachine(this);
         if (result !=null){
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
similarity index 92%
rename from api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
index d740260..677b482 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.EnumSet;
 
+import com.cloud.vm.Nic;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -89,7 +90,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "Removing NIC " + getNicId() + " from user vm: " + getVmId();
+        return  "Removing NIC " + this._uuidMgr.getUuid(Nic.class, getNicId()) + " from user vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId());
     }
 
     @Override
@@ -103,7 +104,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getVmId() + " Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Nic Id: " + this._uuidMgr.getUuid(Nic.class, getNicId()));
         UserVm result = _userVmService.removeNicFromVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
index 44265a3..b2b4d03 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
@@ -72,7 +72,7 @@
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
             ResourceAllocationException {
         UserVm result;
-        CallContext.current().setEventDetails("Vm Id: " + getVmId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()));
         result = _userVmService.restoreVM(this);
         if (result != null) {
             UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Restricted, "virtualmachine", result).get(0);
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
index 661100b..631cef2 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
@@ -22,6 +22,7 @@
 import java.util.List;
 import java.util.Map;
 
+import com.cloud.offering.ServiceOffering;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -129,7 +130,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "upgrading vm: " + getId() + " to service offering: " + getServiceOfferingId();
+        return  "upgrading vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()) + " to service offering: " + this._uuidMgr.getUuid(ServiceOffering.class, getServiceOfferingId());
     }
 
     @Override
@@ -159,4 +160,4 @@
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to scale vm");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/SecurityGroupAction.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/SecurityGroupAction.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vm/SecurityGroupAction.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/SecurityGroupAction.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
index 8289412..b87c7de 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
@@ -117,7 +117,7 @@
 
     @Override
     public String getEventDescription() {
-        return "starting user vm: " + getId();
+        return "starting user vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -133,7 +133,7 @@
     @Override
     public void execute() throws ResourceUnavailableException, ResourceAllocationException {
         try {
-            CallContext.current().setEventDetails("Vm Id: " + getId());
+            CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
 
             UserVm result;
             result = _userVmService.startVirtualMachine(this);
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
index 5b2f020..bab8552 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
@@ -96,7 +96,7 @@
 
     @Override
     public String getEventDescription() {
-        return "stopping user vm: " + getId();
+        return "stopping user vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getId());
     }
 
     @Override
@@ -115,7 +115,7 @@
 
     @Override
     public void execute() throws ServerApiException, ConcurrentOperationException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result;
 
         result = _userVmService.stopVirtualMachine(getId(), isForced());
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
similarity index 92%
rename from api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
index cffd903..7262e23 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.EnumSet;
 
+import com.cloud.vm.Nic;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -90,7 +91,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "Updating NIC " + getNicId() + " on user vm: " + getVmId();
+        return  "Updating NIC " + this._uuidMgr.getUuid(Nic.class, getNicId()) + " on user vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId());
     }
 
     @Override
@@ -104,7 +105,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Vm Id: " + getVmId() + " Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()) + " Nic Id: " + this._uuidMgr.getUuid(Nic.class, getNicId()));
         UserVm result = _userVmService.updateDefaultNicForVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
index 57e2e9c..9e4e6b1 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
@@ -250,7 +250,7 @@
 
     @Override
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
         UserVm result = _userVmService.updateVirtualMachine(this);
         if (result != null){
             UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Restricted, "virtualmachine", result).get(0);
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java
index 83fe72e..9d184f9 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVmNicIpCmd.java
@@ -126,7 +126,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "associating ip to nic id: " + getNetworkId() + " in zone " + getZoneId();
+        return  "associating ip to nic id: " + this._uuidMgr.getUuid(Network.class, getNetworkId()) + " in zone " + this._uuidMgr.getUuid(DataCenter.class, getZoneId());
     }
 
     /////////////////////////////////////////////////////
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
index b105555..216833b 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
@@ -119,7 +119,7 @@
 
     @Override
     public void execute() throws ResourceAllocationException {
-        CallContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getId()));
 
         ServiceOffering serviceOffering = _entityMgr.findById(ServiceOffering.class, serviceOfferingId);
         if (serviceOffering == null) {
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
similarity index 94%
rename from api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
index 3e37bbe..e89f6cc 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
@@ -19,6 +19,7 @@
 
 import java.util.logging.Logger;
 
+import com.cloud.vm.VirtualMachine;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.ACL;
 import org.apache.cloudstack.api.APICommand;
@@ -99,7 +100,7 @@
 
     @Override
     public String getEventDescription() {
-        return "creating snapshot for VM: " + getVmId();
+        return "creating snapshot for VM: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId());
     }
 
     @Override
@@ -109,7 +110,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("VM Id: " + getVmId());
+        CallContext.current().setEventDetails("VM Id: " + this._uuidMgr.getUuid(VirtualMachine.class, getVmId()));
         VMSnapshot result = _vmSnapshotService.createVMSnapshot(getVmId(), getEntityId(), getQuiescevm());
         if (result != null) {
             VMSnapshotResponse response = _responseGenerator.createVMSnapshotResponse(result);
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
index 7baad7c..03c9d43 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
@@ -69,7 +69,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("vmsnapshot id: " + getId());
+        CallContext.current().setEventDetails("vmsnapshot id: " + this._uuidMgr.getUuid(VMSnapshot.class, getId()));
         boolean result = _vmSnapshotService.deleteVMSnapshot(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());
@@ -81,7 +81,7 @@
 
     @Override
     public String getEventDescription() {
-        return "Delete VM snapshot: " + getId();
+        return "Delete VM snapshot: " + this._uuidMgr.getUuid(VMSnapshot.class, getId());
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
index 0ca5009..8c3510b 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
@@ -74,7 +74,7 @@
 
     @Override
     public void execute() throws  ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException, ConcurrentOperationException {
-        CallContext.current().setEventDetails("vmsnapshot id: " + getVmSnapShotId());
+        CallContext.current().setEventDetails("vmsnapshot id: " + this._uuidMgr.getUuid(VMSnapshot.class, getVmSnapShotId()));
         UserVm result = _vmSnapshotService.revertToSnapshot(getVmSnapShotId());
         if (result != null) {
             UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Restricted,
@@ -88,7 +88,7 @@
 
     @Override
     public String getEventDescription() {
-        return "Revert from VM snapshot: " + getVmSnapShotId();
+        return "Revert from VM snapshot: " + this._uuidMgr.getUuid(VMSnapshot.class, getVmSnapShotId());
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
similarity index 93%
rename from api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
index 7c2a329..7e2b155 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
@@ -111,12 +111,12 @@
 
     @Override
     public String getEventDescription() {
-        return  "attaching volume: " + getId() + " to vm: " + getVirtualMachineId();
+        return  "attaching volume: " + this._uuidMgr.getUuid(Volume.class, getId()) + " to vm: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId());
     }
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Volume Id: " + getId() + " VmId: " + getVirtualMachineId());
+        CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getId()) + " VmId: " + this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()));
         Volume result = _volumeService.attachVolumeToVM(this);
         if (result != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Restricted, result);
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
index 54c376e..6528109 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@ -203,7 +203,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "creating volume: " + getVolumeName() + ((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId());
+        return  "creating volume: " + getVolumeName() + ((getSnapshotId() == null) ? "" : " from snapshot: " + this._uuidMgr.getUuid(Snapshot.class, getSnapshotId()));
     }
 
     @Override
@@ -220,7 +220,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Volume Id: " + getEntityId() + ((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId()));
+        CallContext.current().setEventDetails("Volume Id: " + getEntityUuid() + ((getSnapshotId() == null) ? "" : " from snapshot: " + this._uuidMgr.getUuid(Snapshot.class, getSnapshotId())));
         Volume volume = _volumeService.createVolume(this);
         if (volume != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Restricted, volume);
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
index 0b0c1b7..070ec5f 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
@@ -81,7 +81,7 @@
 
     @Override
     public void execute() throws ConcurrentOperationException {
-        CallContext.current().setEventDetails("Volume Id: " + getId());
+        CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getId()));
         boolean result = _volumeService.deleteVolume(id, CallContext.current().getCallingAccount());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
similarity index 95%
rename from api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
index cad0a7f..55d30e3 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
@@ -129,9 +129,9 @@
     public String getEventDescription() {
         StringBuilder sb = new StringBuilder();
         if (id != null) {
-            sb.append(": " + id);
+            sb.append(": " + this._uuidMgr.getUuid(Volume.class, id));
         } else if ((deviceId != null) && (virtualMachineId != null)) {
-            sb.append(" with device id: " + deviceId + " from vm: " + virtualMachineId);
+            sb.append(" with device id: " + deviceId + " from vm: " + ((getVirtualMachineId() != null) ? this._uuidMgr.getUuid(VirtualMachine.class, getVirtualMachineId()) : "" ));
         } else {
             sb.append(" <error:  either volume id or deviceId/vmId need to be specified>");
         }
@@ -140,7 +140,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Volume Id: " + getId() + " VmId: " + getVirtualMachineId());
+        CallContext.current().setEventDetails(getEventDescription());
         Volume result = _volumeService.detachVolumeFromVM(this);
         if (result != null){
             VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Restricted, result);
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
index fc536d3..f482366 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
@@ -133,7 +133,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Volume Id: " + getId());
+        CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getId()));
         String uploadUrl = _volumeService.extractVolume(this);
         if (uploadUrl != null) {
             ExtractResponse response = new ExtractResponse();
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/GetUploadParamsForVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/GetUploadParamsForVolumeCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/volume/GetUploadParamsForVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/GetUploadParamsForVolumeCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
similarity index 70%
rename from api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
index e751da3..0e1f7e0 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
@@ -16,6 +16,7 @@
 // under the License.
 package org.apache.cloudstack.api.command.user.volume;
 
+import com.cloud.storage.StoragePool;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -30,31 +31,27 @@
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
 
-@APICommand(name = "migrateVolume", description = "Migrate volume", responseObject = VolumeResponse.class, since = "3.0.0", responseView = ResponseView.Restricted, entityType = {Volume.class},
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "migrateVolume", description = "Migrate volume", responseObject = VolumeResponse.class, since = "3.0.0", responseView = ResponseView.Restricted, entityType = {
+        Volume.class}, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class MigrateVolumeCmd extends BaseAsyncCmd {
     private static final String s_name = "migratevolumeresponse";
 
-     /////////////////////////////////////////////////////
+    /////////////////////////////////////////////////////
     //////////////// API parameters /////////////////////
     /////////////////////////////////////////////////////
 
     @Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.UUID, entityType = VolumeResponse.class, required = true, description = "the ID of the volume")
     private Long volumeId;
 
-    @Parameter(name = ApiConstants.STORAGE_ID,
-               type = CommandType.UUID,
-               entityType = StoragePoolResponse.class,
-               required = true,
-               description = "destination storage pool ID to migrate the volume to")
+    @Parameter(name = ApiConstants.STORAGE_ID, type = CommandType.UUID, entityType = StoragePoolResponse.class, required = true, description = "destination storage pool ID to migrate the volume to")
     private Long storageId;
 
-    @Parameter(name = ApiConstants.LIVE_MIGRATE,
-               type = CommandType.BOOLEAN,
-               required = false,
-               description = "if the volume should be live migrated when it is attached to a running vm")
+    @Parameter(name = ApiConstants.LIVE_MIGRATE, type = CommandType.BOOLEAN, required = false, description = "if the volume should be live migrated when it is attached to a running vm")
     private Boolean liveMigrate;
 
+    @Parameter(name = ApiConstants.NEW_DISK_OFFERING_ID, type = CommandType.STRING, description = "The new disk offering ID that replaces the current one used by the volume. This new disk offering is used to better reflect the new storage where the volume is going to be migrated to.")
+    private String newDiskOfferingUuid;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -87,12 +84,12 @@
 
     @Override
     public long getEntityOwnerId() {
-          Volume volume = _entityMgr.findById(Volume.class, getVolumeId());
-          if (volume != null) {
-              return volume.getAccountId();
-          }
+        Volume volume = _entityMgr.findById(Volume.class, getVolumeId());
+        if (volume != null) {
+            return volume.getAccountId();
+        }
 
-          return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked
+        return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked
     }
 
     @Override
@@ -102,7 +99,11 @@
 
     @Override
     public String getEventDescription() {
-        return "Attempting to migrate volume Id: " + getVolumeId() + " to storage pool Id: " + getStoragePoolId();
+        return "Attempting to migrate volume Id: " + this._uuidMgr.getUuid(Volume.class, getVolumeId()) + " to storage pool Id: " + this._uuidMgr.getUuid(StoragePool.class, getStoragePoolId());
+    }
+
+    public String getNewDiskOfferingUuid() {
+        return newDiskOfferingUuid;
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
index 8eea632..a795333 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
@@ -163,14 +163,14 @@
 
     @Override
     public String getEventDescription() {
-        return "Volume Id: " + getEntityId() + " to size " + getSize() + "G";
+        return "Volume Id: " + this._uuidMgr.getUuid(Volume.class, getEntityId()) + " to size " + getSize() + "G";
     }
 
     @Override
     public void execute() throws ResourceAllocationException {
         Volume volume = null;
         try {
-            CallContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G");
+            CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getEntityId()) + " to size " + getSize() + "G");
             volume = _volumeService.resizeVolume(this);
         } catch (InvalidParameterValueException ex) {
             s_logger.info(ex.getMessage());
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
index e7e3820..b4f8642 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
@@ -154,7 +154,7 @@
 
     @Override
     public void execute() {
-        CallContext.current().setEventDetails("Volume Id: " + getId());
+        CallContext.current().setEventDetails("Volume Id: " + this._uuidMgr.getUuid(Volume.class, getId()));
         Volume result = _volumeService.updateVolume(getId(), getPath(), getState(), getStorageId(), getDisplayVolume(),
                 getCustomId(), getEntityOwnerId(), getChainInfo());
         if (result != null) {
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
index a48a89b..2802c00 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
@@ -16,6 +16,7 @@
 // under the License.
 package org.apache.cloudstack.api.command.user.volume;
 
+import com.cloud.dc.DataCenter;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -169,7 +170,7 @@
 
     @Override
     public String getEventDescription() {
-        return  "uploading volume: " + getVolumeName() + " in the zone " + getZoneId();
+        return  "uploading volume: " + getVolumeName() + " in the zone " + this._uuidMgr.getUuid(DataCenter.class, getZoneId());
     }
 
     @Override
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java
index 94d0e6e..1309334 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java
@@ -73,7 +73,7 @@
         return id;
     }
 
-    public Boolean getDisplayVpc() {
+    public Boolean isDisplayVpc() {
         return display;
     }
 
@@ -97,7 +97,7 @@
 
     @Override
     public void execute() {
-        Vpc result = _vpcService.updateVpc(getId(), getVpcName(), getDisplayText(), getCustomId(), getDisplayVpc());
+        Vpc result = _vpcService.updateVpc(getId(), getVpcName(), getDisplayText(), getCustomId(), isDisplayVpc());
         if (result != null) {
             VpcResponse response = _responseGenerator.createVpcResponse(ResponseView.Restricted, result);
             response.setResponseName(getCommandName());
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateRemoteAccessVpnCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateRemoteAccessVpnCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/UpdateRemoteAccessVpnCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateRemoteAccessVpnCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnConnectionCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateVpnConnectionCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnConnectionCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateVpnConnectionCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnGatewayCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateVpnGatewayCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnGatewayCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/vpn/UpdateVpnGatewayCmd.java
diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java
rename to api/src/main/java/org/apache/cloudstack/api/command/user/zone/ListZonesCmd.java
diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AccountResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AcquireIPAddressResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AcquireIPAddressResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AcquireIPAddressResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AcquireIPAddressResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AcquirePodIpCmdResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AcquirePodIpCmdResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AcquirePodIpCmdResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AcquirePodIpCmdResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AlertResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AlertResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AlertResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AlertResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AnnotationResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AnnotationResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AnnotationResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AnnotationResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ApplicationLoadBalancerInstanceResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ApplicationLoadBalancerInstanceResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ApplicationLoadBalancerInstanceResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ApplicationLoadBalancerInstanceResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ApplicationLoadBalancerResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ApplicationLoadBalancerResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ApplicationLoadBalancerResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ApplicationLoadBalancerResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ApplicationLoadBalancerRuleResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ApplicationLoadBalancerRuleResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ApplicationLoadBalancerRuleResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ApplicationLoadBalancerRuleResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java
similarity index 94%
rename from api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java
index 70bbeee..eecd6be 100644
--- a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java
@@ -75,6 +75,10 @@
     @Param(description = "  the created date of the job")
     private Date created;
 
+    @SerializedName(ApiConstants.COMPLETED)
+    @Param(description = "  the completed date of the job")
+    private Date removed;
+
     public void setAccountId(String accountId) {
         this.accountId = accountId;
     }
@@ -119,4 +123,8 @@
     public void setCreated(Date created) {
         this.created = created;
     }
+
+    public void setRemoved(final Date removed) {
+        this.removed = removed;
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/response/AuthenticationCmdResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AuthenticationCmdResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AuthenticationCmdResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AuthenticationCmdResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CAProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CAProviderResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CAProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CAProviderResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CapabilitiesResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CapabilitiesResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CapabilityResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CapabilityResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CapabilityResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CapabilityResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CapacityResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CapacityResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CapacityResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CapacityResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CertificateResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CertificateResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CertificateResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CertificateResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ChildTemplateResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ChildTemplateResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ChildTemplateResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ChildTemplateResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CloudIdentifierResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CloudIdentifierResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ClusterResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ClusterResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ClusterResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ConditionResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ConditionResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ConditionResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ConfigurationResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ConfigurationResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ControlledEntityResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ControlledEntityResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CounterResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CounterResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CounterResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CreateCmdResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CreateCmdResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CreateSSHKeyPairResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CreateSSHKeyPairResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CreateSSHKeyPairResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CreateSSHKeyPairResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/CustomCertificateResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/CustomCertificateResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/CustomCertificateResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/CustomCertificateResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/DeploymentPlannersResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DiskOfferingResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/DiskOfferingResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/DomainResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/DomainResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DomainRouterResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/DomainRouterResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/EventResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/EventResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/EventResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/EventTypeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/EventTypeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/EventTypeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/EventTypeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ExceptionResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ExceptionResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ExceptionResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ExternalFirewallResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ExternalFirewallResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ExternalFirewallResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ExternalFirewallResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ExtractResponse.java
similarity index 96%
rename from api/src/org/apache/cloudstack/api/response/ExtractResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ExtractResponse.java
index fa7488f..3d22dfe 100644
--- a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/ExtractResponse.java
@@ -66,9 +66,6 @@
     @Param(description = "type of the storage")
     private String storageType;
 
-    @SerializedName("storage")
-    private String storage;
-
     @SerializedName(ApiConstants.ZONE_ID)
     @Param(description = "zone ID the object was extracted from")
     private String zoneId;
@@ -176,14 +173,6 @@
         this.storageType = storageType;
     }
 
-    public String getStorage() {
-        return storage;
-    }
-
-    public void setStorage(String storage) {
-        this.storage = storage;
-    }
-
     public String getZoneId() {
         return zoneId;
     }
diff --git a/api/src/org/apache/cloudstack/api/response/FirewallResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/FirewallResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/FirewallResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/FirewallResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/FirewallRuleResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/FirewallRuleResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GetUploadParamsResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GetUploadParamsResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GetUploadParamsResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GetUploadParamsResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GetVMPasswordResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GetVMPasswordResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GetVMPasswordResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GetVMPasswordResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GlobalLoadBalancerResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GlobalLoadBalancerResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GlobalLoadBalancerResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GlobalLoadBalancerResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GpuResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GpuResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GpuResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GpuResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GuestOSResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GuestOSResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GuestOSResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GuestOsMappingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GuestOsMappingResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GuestOsMappingResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GuestOsMappingResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/GuestVlanRangeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/GuestVlanRangeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/GuestVlanRangeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/GuestVlanRangeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/HAProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HAProviderResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/HAProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HAProviderResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/HostForMigrationResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HostForMigrationResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/HostForMigrationResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HostForMigrationResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/HostHAResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HostHAResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/HostHAResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HostHAResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/response/HostResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java
index b9667ec..3d53682 100644
--- a/api/src/org/apache/cloudstack/api/response/HostResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java
@@ -630,7 +630,7 @@
         return clusterType;
     }
 
-    public Boolean getLocalStorageActive() {
+    public Boolean isLocalStorageActive() {
         return localStorageActive;
     }
 
@@ -646,11 +646,11 @@
         return events;
     }
 
-    public Boolean getHasEnoughCapacity() {
+    public Boolean hasEnoughCapacity() {
         return hasEnoughCapacity;
     }
 
-    public Boolean getSuitableForMigration() {
+    public Boolean isSuitableForMigration() {
         return suitableForMigration;
     }
 
diff --git a/api/src/org/apache/cloudstack/api/response/HostTagResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HostTagResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/HostTagResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HostTagResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/HypervisorResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HypervisorResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/HypervisorResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/HypervisorResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/IPAddressResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/IPAddressResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/IPAddressResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ImageStoreDetailResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ImageStoreDetailResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ImageStoreDetailResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ImageStoreDetailResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ImageStoreResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ImageStoreResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ImageStoreResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ImageStoreResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/InstanceGroupResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/InstanceGroupResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/InternalLoadBalancerElementResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/InternalLoadBalancerElementResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/InternalLoadBalancerElementResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/InternalLoadBalancerElementResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/IsoVmResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/IsoVmResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/IsoVmResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/IsolationMethodResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/IsolationMethodResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/IsolationMethodResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/IsolationMethodResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LBHealthCheckPolicyResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LBHealthCheckPolicyResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LBHealthCheckPolicyResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LBHealthCheckPolicyResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LBHealthCheckResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LBHealthCheckResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LBHealthCheckResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LBHealthCheckResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LBStickinessResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LBStickinessResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ListResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ListResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ListResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ListResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LoadBalancerResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LoadBalancerResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LoadBalancerRuleVmMapResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LoadBalancerRuleVmMapResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LoadBalancerRuleVmMapResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LoadBalancerRuleVmMapResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LoginCmdResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LoginCmdResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LoginCmdResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LoginCmdResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/LogoutCmdResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/LogoutCmdResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/LogoutCmdResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/LogoutCmdResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NetworkACLItemResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkACLItemResponse.java
similarity index 93%
rename from api/src/org/apache/cloudstack/api/response/NetworkACLItemResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NetworkACLItemResponse.java
index 0101295..97f5042 100644
--- a/api/src/org/apache/cloudstack/api/response/NetworkACLItemResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/NetworkACLItemResponse.java
@@ -85,6 +85,10 @@
     @Param(description = "is rule for display to the regular user", since = "4.4", authorized = {RoleType.Admin})
     private Boolean forDisplay;
 
+    @SerializedName(ApiConstants.ACL_REASON)
+    @Param(description = "an explanation on why this ACL rule is being applied", since = "4.12")
+    private String reason;
+
     public void setId(String id) {
         this.id = id;
     }
@@ -140,4 +144,12 @@
     public void setForDisplay(Boolean forDisplay) {
         this.forDisplay = forDisplay;
     }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getReason() {
+        return reason;
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkACLResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NetworkACLResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkDeviceResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NetworkDeviceResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NetworkResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NicExtraDhcpOptionResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NicExtraDhcpOptionResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NicExtraDhcpOptionResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NicExtraDhcpOptionResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NicResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NicResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NicResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NicResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/OutOfBandManagementResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/OutOfBandManagementResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/OutOfBandManagementResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/OutOfBandManagementResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/OvsProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/OvsProviderResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/OvsProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/OvsProviderResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/PodResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/PodResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/PodResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/PodResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/PortableIpRangeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/PortableIpRangeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/PortableIpRangeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/PortableIpRangeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/PortableIpResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/PortableIpResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/PortableIpResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/PortableIpResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectAccountResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ProjectAccountResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectInvitationResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ProjectInvitationResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ProjectResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProviderResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ProviderResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/RegionResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/RegionResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/RegionResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/RegionResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/RegisterResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/RegisterResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/RegisterResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/RegisterResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ResourceCountResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ResourceCountResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ResourceDetailResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ResourceDetailResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ResourceDetailResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ResourceTagResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ResourceTagResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ResourceTagResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ResourceTagResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/RolePermissionResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/RolePermissionResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/RolePermissionResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/RolePermissionResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/RoleResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/RoleResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/RoleResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/RoleResponse.java
diff --git a/api/src/main/java/org/apache/cloudstack/api/response/RunDiagnosticsResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/RunDiagnosticsResponse.java
new file mode 100644
index 0000000..4c8a923
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/api/response/RunDiagnosticsResponse.java
@@ -0,0 +1,67 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package org.apache.cloudstack.api.response;
+
+import com.cloud.serializer.Param;
+import com.cloud.vm.VirtualMachine;
+import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseResponse;
+import org.apache.cloudstack.api.EntityReference;
+
+@EntityReference(value = VirtualMachine.class)
+public class RunDiagnosticsResponse extends BaseResponse {
+    @SerializedName(ApiConstants.STDOUT)
+    @Param(description = "the standard output from the command execution")
+    private String stdout;
+
+    @SerializedName(ApiConstants.STDERR)
+    @Param(description = "the standard error output from the command execution")
+    private String stderr;
+
+    @SerializedName(ApiConstants.EXITCODE)
+    @Param(description = "the command execution return code")
+    private String exitCode;
+
+    public String getStdout() {
+        return stdout;
+    }
+
+    public void setStdout(String stdout) {
+        this.stdout = stdout;
+    }
+
+    public String getStderr() {
+        return stderr;
+    }
+
+    public void setStderr(String stderr) {
+        this.stderr = stderr;
+    }
+
+    public String getExitCode() {
+        return exitCode;
+    }
+
+    public void setExitCode(String exitCode) {
+        this.exitCode = exitCode;
+    }
+
+}
diff --git a/api/src/org/apache/cloudstack/api/response/SSHKeyPairResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SSHKeyPairResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SSHKeyPairResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SSHKeyPairResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SecurityGroupResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SecurityGroupResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
similarity index 99%
rename from api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
index d004e7e..f66d2f8 100644
--- a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
@@ -180,7 +180,7 @@
         this.isSystem = isSystem;
     }
 
-    public Boolean getDefaultUse() {
+    public Boolean isDefaultUse() {
         return defaultUse;
     }
 
diff --git a/api/src/org/apache/cloudstack/api/response/ServiceResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ServiceResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/ServiceResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ServiceResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java
similarity index 98%
rename from api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java
index 39178a3..10710c6 100644
--- a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java
@@ -104,7 +104,7 @@
         this.timezone = timezone;
     }
 
-    public Boolean getForDisplay() {
+    public Boolean isForDisplay() {
         return forDisplay;
     }
 
diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SnapshotResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SnapshotResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SnapshotResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SslCertResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SslCertResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SslCertResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SslCertResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/StaticRouteResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/StaticRouteResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/StoragePoolResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/StoragePoolResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/StorageProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/StorageProviderResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/StorageProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/StorageProviderResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/StorageTagResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/StorageTagResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/StorageTagResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/StorageTagResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SuccessResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SuccessResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SuccessResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SuccessResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/TemplateResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/TemplateResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/TemplateResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/TrafficMonitorResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/TrafficMonitorResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/TrafficMonitorResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/TrafficMonitorResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/TrafficTypeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/TrafficTypeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/UpgradeRouterTemplateResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/UpgradeRouterTemplateResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/UpgradeRouterTemplateResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/UpgradeRouterTemplateResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/UsageRecordResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/UsageRecordResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/UsageRecordResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/UsageRecordResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/UsageTypeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/UsageTypeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/UsageTypeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/UsageTypeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/UserResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/UserResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/UserResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
similarity index 99%
rename from api/src/org/apache/cloudstack/api/response/UserVmResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
index 2ff1eaa..8db4f85 100644
--- a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
@@ -284,7 +284,7 @@
 
     @SerializedName(ApiConstants.OS_TYPE_ID)
     @Param(description = "OS type id of the vm", since = "4.4")
-    private Long osTypeId;
+    private String osTypeId;
 
     public UserVmResponse() {
         securityGroupList = new LinkedHashSet<SecurityGroupResponse>();
@@ -810,7 +810,7 @@
         this.details = details;
     }
 
-    public void setOsTypeId(Long osTypeId) {
+    public void setOsTypeId(String osTypeId) {
         this.osTypeId = osTypeId;
     }
 
@@ -834,7 +834,7 @@
         isDynamicallyScalable = dynamicallyScalable;
     }
 
-    public Long getOsTypeId() {
+    public String getOsTypeId() {
         return osTypeId;
     }
 }
diff --git a/api/src/org/apache/cloudstack/api/response/VMSnapshotResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VMSnapshotResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VMSnapshotResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VMSnapshotResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VMUserDataResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VMUserDataResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VMUserDataResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VMUserDataResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VgpuResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VgpuResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VgpuResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VgpuResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VlanIpRangeResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VlanIpRangeResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VolumeResponse.java
similarity index 99%
rename from api/src/org/apache/cloudstack/api/response/VolumeResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VolumeResponse.java
index 895e13c..d845e41 100644
--- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/VolumeResponse.java
@@ -276,7 +276,7 @@
         return this.getId();
     }
 
-    public Boolean getDestroyed() {
+    public Boolean isDestroyed() {
         return destroyed;
     }
 
diff --git a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VpcOfferingResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VpcOfferingResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VpcResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VpcResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VpcResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VpcResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/VpnUsersResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/VpnUsersResponse.java
diff --git a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ZoneResponse.java
similarity index 97%
rename from api/src/org/apache/cloudstack/api/response/ZoneResponse.java
rename to api/src/main/java/org/apache/cloudstack/api/response/ZoneResponse.java
index 61bab02..efd3b79 100644
--- a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/ZoneResponse.java
@@ -73,10 +73,6 @@
     @Param(description = "the guest CIDR address for the Zone")
     private String guestCidrAddress;
 
-    //TODO - generate description
-    @SerializedName("status")
-    private String status;
-
     @SerializedName(ApiConstants.DISPLAY_TEXT)
     @Param(description = "the display text of the zone")
     private String displayText;
@@ -165,10 +161,6 @@
         this.guestCidrAddress = guestCidrAddress;
     }
 
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
     public void setDisplayText(String displayText) {
         this.displayText = displayText;
     }
@@ -272,10 +264,6 @@
         return guestCidrAddress;
     }
 
-    public String getStatus() {
-        return status;
-    }
-
     public String getDisplayText() {
         return displayText;
     }
diff --git a/api/src/org/apache/cloudstack/ca/CAManager.java b/api/src/main/java/org/apache/cloudstack/ca/CAManager.java
similarity index 100%
rename from api/src/org/apache/cloudstack/ca/CAManager.java
rename to api/src/main/java/org/apache/cloudstack/ca/CAManager.java
diff --git a/api/src/org/apache/cloudstack/config/ApiServiceConfiguration.java b/api/src/main/java/org/apache/cloudstack/config/ApiServiceConfiguration.java
similarity index 100%
rename from api/src/org/apache/cloudstack/config/ApiServiceConfiguration.java
rename to api/src/main/java/org/apache/cloudstack/config/ApiServiceConfiguration.java
diff --git a/api/src/org/apache/cloudstack/context/CallContext.java b/api/src/main/java/org/apache/cloudstack/context/CallContext.java
similarity index 100%
rename from api/src/org/apache/cloudstack/context/CallContext.java
rename to api/src/main/java/org/apache/cloudstack/context/CallContext.java
diff --git a/api/src/org/apache/cloudstack/context/CallContextListener.java b/api/src/main/java/org/apache/cloudstack/context/CallContextListener.java
similarity index 100%
rename from api/src/org/apache/cloudstack/context/CallContextListener.java
rename to api/src/main/java/org/apache/cloudstack/context/CallContextListener.java
diff --git a/api/src/org/apache/cloudstack/context/LogContext.java b/api/src/main/java/org/apache/cloudstack/context/LogContext.java
similarity index 100%
rename from api/src/org/apache/cloudstack/context/LogContext.java
rename to api/src/main/java/org/apache/cloudstack/context/LogContext.java
diff --git a/api/src/org/apache/cloudstack/context/LogContextListener.java b/api/src/main/java/org/apache/cloudstack/context/LogContextListener.java
similarity index 100%
rename from api/src/org/apache/cloudstack/context/LogContextListener.java
rename to api/src/main/java/org/apache/cloudstack/context/LogContextListener.java
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/PoolDao.java b/api/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsService.java
similarity index 75%
rename from plugins/file-systems/netapp/src/com/cloud/netapp/dao/PoolDao.java
rename to api/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsService.java
index 3c0191b..a9177af 100644
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/PoolDao.java
+++ b/api/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsService.java
@@ -1,3 +1,4 @@
+//
 // Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -14,16 +15,15 @@
 // KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
-package com.cloud.netapp.dao;
+//
+package org.apache.cloudstack.diagnostics;
 
-import java.util.List;
+import org.apache.cloudstack.api.command.admin.diagnostics.RunDiagnosticsCmd;
 
-import com.cloud.netapp.PoolVO;
-import com.cloud.utils.db.GenericDao;
+import java.util.Map;
 
-public interface PoolDao extends GenericDao<PoolVO, Long> {
+public interface DiagnosticsService {
 
-    PoolVO findPool(String poolName);
+    Map<String, String> runDiagnosticsCommand(RunDiagnosticsCmd cmd);
 
-    List<PoolVO> listPools();
-}
+}
\ No newline at end of file
diff --git a/api/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsType.java b/api/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsType.java
new file mode 100644
index 0000000..0e3a1da
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsType.java
@@ -0,0 +1,42 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package org.apache.cloudstack.diagnostics;
+
+public enum DiagnosticsType {
+    PING("ping"), TRACEROUTE("traceroute"), ARPING("arping");
+
+    private String value;
+
+    DiagnosticsType(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public static DiagnosticsType getCommand(String cmd) {
+        for (DiagnosticsType type : DiagnosticsType.values()) {
+            if (type.value.equalsIgnoreCase(cmd)) {
+                return type;
+            }
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/api/src/org/apache/cloudstack/direct/download/DirectDownloadManager.java b/api/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManager.java
similarity index 100%
rename from api/src/org/apache/cloudstack/direct/download/DirectDownloadManager.java
rename to api/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManager.java
diff --git a/api/src/org/apache/cloudstack/ha/HAConfig.java b/api/src/main/java/org/apache/cloudstack/ha/HAConfig.java
similarity index 100%
rename from api/src/org/apache/cloudstack/ha/HAConfig.java
rename to api/src/main/java/org/apache/cloudstack/ha/HAConfig.java
diff --git a/api/src/org/apache/cloudstack/ha/HAConfigManager.java b/api/src/main/java/org/apache/cloudstack/ha/HAConfigManager.java
similarity index 100%
rename from api/src/org/apache/cloudstack/ha/HAConfigManager.java
rename to api/src/main/java/org/apache/cloudstack/ha/HAConfigManager.java
diff --git a/api/src/org/apache/cloudstack/ha/HAResource.java b/api/src/main/java/org/apache/cloudstack/ha/HAResource.java
similarity index 100%
rename from api/src/org/apache/cloudstack/ha/HAResource.java
rename to api/src/main/java/org/apache/cloudstack/ha/HAResource.java
diff --git a/api/src/org/apache/cloudstack/jobs/JobInfo.java b/api/src/main/java/org/apache/cloudstack/jobs/JobInfo.java
similarity index 98%
rename from api/src/org/apache/cloudstack/jobs/JobInfo.java
rename to api/src/main/java/org/apache/cloudstack/jobs/JobInfo.java
index c7c9b96..5b63e62 100644
--- a/api/src/org/apache/cloudstack/jobs/JobInfo.java
+++ b/api/src/main/java/org/apache/cloudstack/jobs/JobInfo.java
@@ -68,6 +68,8 @@
 
     Date getCreated();
 
+    Date getRemoved();
+
     Date getLastUpdated();
 
     Date getLastPolled();
diff --git a/api/src/org/apache/cloudstack/kernel/Partition.java b/api/src/main/java/org/apache/cloudstack/kernel/Partition.java
similarity index 100%
rename from api/src/org/apache/cloudstack/kernel/Partition.java
rename to api/src/main/java/org/apache/cloudstack/kernel/Partition.java
diff --git a/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java b/api/src/main/java/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java
rename to api/src/main/java/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java
diff --git a/api/src/org/apache/cloudstack/network/element/InternalLoadBalancerElementService.java b/api/src/main/java/org/apache/cloudstack/network/element/InternalLoadBalancerElementService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/element/InternalLoadBalancerElementService.java
rename to api/src/main/java/org/apache/cloudstack/network/element/InternalLoadBalancerElementService.java
diff --git a/api/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerContainer.java b/api/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerContainer.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerContainer.java
rename to api/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerContainer.java
diff --git a/api/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerRule.java b/api/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerRule.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerRule.java
rename to api/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerRule.java
diff --git a/api/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerService.java b/api/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerService.java
rename to api/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerService.java
diff --git a/api/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMService.java b/api/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMService.java
rename to api/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMService.java
diff --git a/api/src/org/apache/cloudstack/network/tls/CertService.java b/api/src/main/java/org/apache/cloudstack/network/tls/CertService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/tls/CertService.java
rename to api/src/main/java/org/apache/cloudstack/network/tls/CertService.java
diff --git a/api/src/org/apache/cloudstack/network/tls/SslCert.java b/api/src/main/java/org/apache/cloudstack/network/tls/SslCert.java
similarity index 100%
rename from api/src/org/apache/cloudstack/network/tls/SslCert.java
rename to api/src/main/java/org/apache/cloudstack/network/tls/SslCert.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagement.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagement.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagement.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagement.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementDriver.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementDriver.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementDriver.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementDriver.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementService.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverChangePasswordCommand.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverChangePasswordCommand.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverChangePasswordCommand.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverChangePasswordCommand.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverCommand.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverCommand.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverCommand.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverCommand.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverPowerCommand.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverPowerCommand.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverPowerCommand.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverPowerCommand.java
diff --git a/api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverResponse.java b/api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverResponse.java
similarity index 100%
rename from api/src/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverResponse.java
rename to api/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/OutOfBandManagementDriverResponse.java
diff --git a/api/src/org/apache/cloudstack/poll/BackgroundPollManager.java b/api/src/main/java/org/apache/cloudstack/poll/BackgroundPollManager.java
similarity index 100%
rename from api/src/org/apache/cloudstack/poll/BackgroundPollManager.java
rename to api/src/main/java/org/apache/cloudstack/poll/BackgroundPollManager.java
diff --git a/api/src/org/apache/cloudstack/poll/BackgroundPollTask.java b/api/src/main/java/org/apache/cloudstack/poll/BackgroundPollTask.java
similarity index 100%
rename from api/src/org/apache/cloudstack/poll/BackgroundPollTask.java
rename to api/src/main/java/org/apache/cloudstack/poll/BackgroundPollTask.java
diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/main/java/org/apache/cloudstack/query/QueryService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/query/QueryService.java
rename to api/src/main/java/org/apache/cloudstack/query/QueryService.java
diff --git a/api/src/org/apache/cloudstack/region/PortableIp.java b/api/src/main/java/org/apache/cloudstack/region/PortableIp.java
similarity index 100%
rename from api/src/org/apache/cloudstack/region/PortableIp.java
rename to api/src/main/java/org/apache/cloudstack/region/PortableIp.java
diff --git a/api/src/org/apache/cloudstack/region/PortableIpRange.java b/api/src/main/java/org/apache/cloudstack/region/PortableIpRange.java
similarity index 100%
rename from api/src/org/apache/cloudstack/region/PortableIpRange.java
rename to api/src/main/java/org/apache/cloudstack/region/PortableIpRange.java
diff --git a/api/src/org/apache/cloudstack/region/Region.java b/api/src/main/java/org/apache/cloudstack/region/Region.java
similarity index 100%
rename from api/src/org/apache/cloudstack/region/Region.java
rename to api/src/main/java/org/apache/cloudstack/region/Region.java
diff --git a/api/src/org/apache/cloudstack/region/RegionService.java b/api/src/main/java/org/apache/cloudstack/region/RegionService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/region/RegionService.java
rename to api/src/main/java/org/apache/cloudstack/region/RegionService.java
diff --git a/api/src/org/apache/cloudstack/region/RegionSync.java b/api/src/main/java/org/apache/cloudstack/region/RegionSync.java
similarity index 100%
rename from api/src/org/apache/cloudstack/region/RegionSync.java
rename to api/src/main/java/org/apache/cloudstack/region/RegionSync.java
diff --git a/api/src/org/apache/cloudstack/usage/Usage.java b/api/src/main/java/org/apache/cloudstack/usage/Usage.java
similarity index 100%
rename from api/src/org/apache/cloudstack/usage/Usage.java
rename to api/src/main/java/org/apache/cloudstack/usage/Usage.java
diff --git a/api/src/org/apache/cloudstack/usage/UsageService.java b/api/src/main/java/org/apache/cloudstack/usage/UsageService.java
similarity index 100%
rename from api/src/org/apache/cloudstack/usage/UsageService.java
rename to api/src/main/java/org/apache/cloudstack/usage/UsageService.java
diff --git a/api/src/org/apache/cloudstack/usage/UsageTypes.java b/api/src/main/java/org/apache/cloudstack/usage/UsageTypes.java
similarity index 100%
rename from api/src/org/apache/cloudstack/usage/UsageTypes.java
rename to api/src/main/java/org/apache/cloudstack/usage/UsageTypes.java
diff --git a/api/resources/META-INF/cloudstack/api-config/module.properties b/api/src/main/resources/META-INF/cloudstack/api-config/module.properties
similarity index 100%
rename from api/resources/META-INF/cloudstack/api-config/module.properties
rename to api/src/main/resources/META-INF/cloudstack/api-config/module.properties
diff --git a/api/resources/META-INF/cloudstack/api-config/spring-api-config-context.xml b/api/src/main/resources/META-INF/cloudstack/api-config/spring-api-config-context.xml
similarity index 100%
rename from api/resources/META-INF/cloudstack/api-config/spring-api-config-context.xml
rename to api/src/main/resources/META-INF/cloudstack/api-config/spring-api-config-context.xml
diff --git a/api/resources/META-INF/cloudstack/api-planner/module.properties b/api/src/main/resources/META-INF/cloudstack/api-planner/module.properties
similarity index 100%
rename from api/resources/META-INF/cloudstack/api-planner/module.properties
rename to api/src/main/resources/META-INF/cloudstack/api-planner/module.properties
diff --git a/api/resources/META-INF/cloudstack/api-planner/spring-api-planner-context.xml b/api/src/main/resources/META-INF/cloudstack/api-planner/spring-api-planner-context.xml
similarity index 100%
rename from api/resources/META-INF/cloudstack/api-planner/spring-api-planner-context.xml
rename to api/src/main/resources/META-INF/cloudstack/api-planner/spring-api-planner-context.xml
diff --git a/api/test/com/cloud/network/IsolationMethodTest.java b/api/src/test/java/com/cloud/network/IsolationMethodTest.java
similarity index 100%
rename from api/test/com/cloud/network/IsolationMethodTest.java
rename to api/src/test/java/com/cloud/network/IsolationMethodTest.java
diff --git a/api/test/com/cloud/network/NetworksTest.java b/api/src/test/java/com/cloud/network/NetworksTest.java
similarity index 100%
rename from api/test/com/cloud/network/NetworksTest.java
rename to api/src/test/java/com/cloud/network/NetworksTest.java
diff --git a/api/test/com/cloud/storage/StorageTest.java b/api/src/test/java/com/cloud/storage/StorageTest.java
similarity index 100%
rename from api/test/com/cloud/storage/StorageTest.java
rename to api/src/test/java/com/cloud/storage/StorageTest.java
diff --git a/api/test/org/apache/cloudstack/acl/RoleTypeTest.java b/api/src/test/java/org/apache/cloudstack/acl/RoleTypeTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/acl/RoleTypeTest.java
rename to api/src/test/java/org/apache/cloudstack/acl/RoleTypeTest.java
diff --git a/api/test/org/apache/cloudstack/acl/RuleTest.java b/api/src/test/java/org/apache/cloudstack/acl/RuleTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/acl/RuleTest.java
rename to api/src/test/java/org/apache/cloudstack/acl/RuleTest.java
diff --git a/api/test/org/apache/cloudstack/api/ApiCmdTestUtil.java b/api/src/test/java/org/apache/cloudstack/api/ApiCmdTestUtil.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/ApiCmdTestUtil.java
rename to api/src/test/java/org/apache/cloudstack/api/ApiCmdTestUtil.java
diff --git a/api/test/org/apache/cloudstack/api/BaseCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/BaseCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/BaseCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/BaseCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/admin/account/CreateAccountCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/admin/account/CreateAccountCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/admin/account/CreateAccountCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/admin/annotation/AddAnnotationCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmdTest.java
diff --git a/api/src/test/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmdTest.java
new file mode 100644
index 0000000..2297946
--- /dev/null
+++ b/api/src/test/java/org/apache/cloudstack/api/command/admin/storage/FindStoragePoolsForMigrationCmdTest.java
@@ -0,0 +1,63 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.storage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.cloudstack.api.response.StoragePoolResponse;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class FindStoragePoolsForMigrationCmdTest {
+
+    private FindStoragePoolsForMigrationCmd findStoragePoolsForMigrationCmd = new FindStoragePoolsForMigrationCmd();
+
+    @Test
+    public void sortPoolsBySuitability() {
+        List<StoragePoolResponse> storagePoolsResponse = new ArrayList<>();
+        StoragePoolResponse storagePoolResponse1 = new StoragePoolResponse();
+        storagePoolResponse1.setSuitableForMigration(true);
+        storagePoolResponse1.setId("1");
+        storagePoolResponse1.setName("1");
+
+        StoragePoolResponse storagePoolResponse2 = new StoragePoolResponse();
+        storagePoolResponse2.setSuitableForMigration(false);
+        storagePoolResponse2.setId("2");
+        storagePoolResponse2.setName("2");
+
+        StoragePoolResponse storagePoolResponse3 = new StoragePoolResponse();
+        storagePoolResponse3.setSuitableForMigration(true);
+        storagePoolResponse3.setId("3");
+        storagePoolResponse3.setName("3");
+
+        storagePoolsResponse.add(storagePoolResponse3);
+        storagePoolsResponse.add(storagePoolResponse2);
+        storagePoolsResponse.add(storagePoolResponse1);
+
+        findStoragePoolsForMigrationCmd.sortPoolsBySuitabilityAndName(storagePoolsResponse);
+
+        Assert.assertEquals("1", storagePoolsResponse.get(0).getId());
+        Assert.assertEquals("3", storagePoolsResponse.get(1).getId());
+        Assert.assertEquals("2", storagePoolsResponse.get(2).getId());
+
+    }
+
+}
\ No newline at end of file
diff --git a/api/test/org/apache/cloudstack/api/command/admin/user/CreateUserCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/admin/user/CreateUserCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/admin/user/CreateUserCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddHostCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddHostCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddHostCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddHostCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/CreateSnapshotCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/CreateSnapshotCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/CreateSnapshotCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/CreateSnapshotCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/ListCfgCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/ListCfgCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/ListCfgCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/ListCfgCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/RegionCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/RegionCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/RegionCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/RegionCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/ScaleVMCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/ScaleVMCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/ScaleVMCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/ScaleVMCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/UpdateCfgCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateCfgCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/UpdateCfgCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/UpdateCfgCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/UpdateVmNicIpTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateVmNicIpTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/UpdateVmNicIpTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/UpdateVmNicIpTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/test/UsageCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/UsageCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/test/UsageCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/test/UsageCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdByAdminTest.java b/api/src/test/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdByAdminTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdByAdminTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdByAdminTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/user/template/CopyTemplateCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdByAdminTest.java b/api/src/test/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdByAdminTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdByAdminTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdByAdminTest.java
diff --git a/api/test/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdTest.java
rename to api/src/test/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmdTest.java
diff --git a/api/test/org/apache/cloudstack/api/response/HostResponseTest.java b/api/src/test/java/org/apache/cloudstack/api/response/HostResponseTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/api/response/HostResponseTest.java
rename to api/src/test/java/org/apache/cloudstack/api/response/HostResponseTest.java
diff --git a/api/test/org/apache/cloudstack/context/CallContextTest.java b/api/src/test/java/org/apache/cloudstack/context/CallContextTest.java
similarity index 100%
rename from api/test/org/apache/cloudstack/context/CallContextTest.java
rename to api/src/test/java/org/apache/cloudstack/context/CallContextTest.java
diff --git a/api/test/org/apache/cloudstack/test/utils/SpringUtils.java b/api/src/test/java/org/apache/cloudstack/test/utils/SpringUtils.java
similarity index 100%
rename from api/test/org/apache/cloudstack/test/utils/SpringUtils.java
rename to api/src/test/java/org/apache/cloudstack/test/utils/SpringUtils.java
diff --git a/client/conf/server.properties.in b/client/conf/server.properties.in
index f255128..7550520 100644
--- a/client/conf/server.properties.in
+++ b/client/conf/server.properties.in
@@ -22,6 +22,7 @@
 context.path=/client
 
 # The HTTP port to be used by the management server
+http.enable=true
 http.port=8080
 
 # Max inactivity time in minutes for the session
@@ -33,6 +34,7 @@
 # keystore file should exists and be readable by the management server.
 https.enable=false
 https.port=8443
+
 # The keystore and manager passwords are assumed to be same.
 https.keystore=/etc/cloudstack/management/cloud.jks
 https.keystore.password=vmops.com
diff --git a/client/pom.xml b/client/pom.xml
index 806455e..baf49ad 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -1,1200 +1,1198 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-  license agreements. See the NOTICE file distributed with this work for additional
-  information regarding copyright ownership. The ASF licenses this file to you under
-  the Apache License, Version 2.0 (the "License"); you may not use this file except
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-  Unless required by applicable law or agreed to in writing, software distributed under
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-  OF ANY KIND, either express or implied. See the License for the specific language
-  governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-client-ui</artifactId>
-  <name>Apache CloudStack Client UI</name>
-  <packaging>jar</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-  <repositories>
-    <repository>
-      <id>juniper-contrail</id>
-      <url>http://juniper.github.io/contrail-maven/snapshots</url>
-    </repository>
-  </repositories>
+    http://www.apache.org/licenses/LICENSE-2.0
 
-  <dependencies>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlets</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-webapp</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-jmx</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-util</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-spring-module</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-spring-lifecycle</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-volume-solidfire</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-volume-cloudbyte</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-acl-static-role-based</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-acl-dynamic-role-based</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-ca-rootca</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-dedicated-resources</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-api-limit-account-based</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-api-discovery</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-user-authenticator-ldap</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-user-authenticator-md5</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-user-authenticator-pbkdf2</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-user-authenticator-plaintext</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-user-authenticator-saml2</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-user-authenticator-sha256salted</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-metrics</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-nvp</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-contrail</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-palo-alto</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-netscaler</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-ovs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-elb</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-bigswitch</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-ssp</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-internallb</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-vxlan</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-opendaylight</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-vcs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-vsp</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-baremetal</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-ovm</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-ovm3</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
-      <version>${project.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.mortbay.jetty</groupId>
-          <artifactId>servlet-api</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-hyperv</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-allocator-random</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-planner-user-dispersing</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-       <artifactId>cloud-plugin-planner-skip-heurestics</artifactId>
-       <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-planner-user-concentrated-pod</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-planner-implicit-dedication</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-explicit-dedication</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-host-allocator-random</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-outofbandmanagement-driver-ipmitool</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-outofbandmanagement-driver-nested-cloudstack</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-mom-rabbitmq</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-mom-inmemory</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-mom-kafka</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-agent-lb</artifactId>
-     <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ca</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-direct-download</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-quota</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-rest</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-network</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-orchestration</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-cache</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-configdrive</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-controller-secondary-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-datamotion</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-snapshot</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-volume-default</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-image-default</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-image-s3</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-image-swift</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-syslog-alerts</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-snmp-alerts</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-host-anti-affinity</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-host-affinity</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-client-ui</artifactId>
+    <name>Apache CloudStack Client UI</name>
+    <packaging>jar</packaging>
+    <parent>
         <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-plugin-api-solidfire-intg-test</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-globodns</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-database-quota</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-integrations-cloudian-connector</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-integrations-prometheus-exporter</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>ru.concerteza.buildnumber</groupId>
-        <artifactId>maven-jgit-buildnumber-plugin</artifactId>
-        <version>1.2.6</version>
-        <executions>
-          <execution>
-            <id>git-buildnumber</id>
-            <goals>
-              <goal>extract-buildnumber</goal>
-            </goals>
-            <phase>prepare-package</phase>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifest>
-              <mainClass>org.apache.cloudstack.ServerDaemon</mainClass>
-            </manifest>
-            <manifestEntries>
-              <X-Git-Branch>${git.branch}</X-Git-Branch>
-              <X-Git-Tag>${git.tag}</X-Git-Tag>
-              <X-Git-Revision>${git.revision}</X-Git-Revision>
-              <Implementation-Revision>${git.revision}</Implementation-Revision>
-              <Implementation-Branch>${git.branch}</Implementation-Branch>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${cs.jetty-maven-plugin.version}</version>
-        <dependencies>
-          <!-- specify the dependent jdbc driver here -->
-          <dependency>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <repositories>
+        <repository>
+            <id>juniper-contrail</id>
+            <url>http://juniper.github.io/contrail-maven/snapshots</url>
+        </repository>
+    </repositories>
+    <dependencies>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlets</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-webapp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-jmx</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-util</artifactId>
+        </dependency>
+        <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
-            <version>${cs.mysql.version}</version>
-          </dependency>
-          <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk15on</artifactId>
-            <version>${cs.bcprov.version}</version>
-          </dependency>
-          <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcpkix-jdk15on</artifactId>
-            <version>${cs.bcprov.version}</version>
-          </dependency>
-        </dependencies>
-        <configuration>
-          <scanIntervalSeconds>0</scanIntervalSeconds>
-          <stopPort>9966</stopPort>
-          <stopKey>stop-jetty</stopKey>
-          <connectors>
-            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-              <port>8080</port>
-              <maxIdleTime>60000</maxIdleTime>
-            </connector>
-          </connectors>
-          <webXml>${project.build.directory}/classes/META-INF/webapp/WEB-INF/web.xml</webXml>
-          <webAppSourceDirectory>${project.build.directory}/classes/META-INF/webapp/</webAppSourceDirectory>
-          <webAppConfig>
-            <contextPath>/client</contextPath>
-            <extraClasspath>${project.build.directory}/conf/;${project.build.directory}/common;${project.build.directory}/utilities/scripts/db/;${project.build.directory}/utilities/scripts/db/db/</extraClasspath>
-            <webInfIncludeJarPattern>.*/cloud.*jar$|.*/classes/.*</webInfIncludeJarPattern>
-          </webAppConfig>
-          <systemProperties>
-              <systemProperty>
-                 <name>log4j.configuration</name>
-                 <value>log4j-cloud.xml</value>
-              </systemProperty>
-          </systemProperties>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy todir="${project.build.directory}/common/scripts">
-                  <fileset dir="${basedir}/../scripts"/>
-                </copy>
-                <!-- CLOUDSTACK-1304 -->
-                <chmod perm="755"
-                  file="${project.build.directory}/common/scripts/**" type="both"/>
-                <copy todir="${project.build.directory}/classes/META-INF/webapp/WEB-INF/">
-                  <fileset dir="${basedir}/WEB-INF/">
-                    <include name="web.xml"/>
-                  </fileset>
-                </copy>
-                <copy todir="${project.build.directory}/classes/META-INF/webapp">
-                  <fileset dir="${basedir}/../ui"/>
-                </copy>
-                <copy overwrite="true" todir="${basedir}/target/utilities/bin">
-                  <fileset dir="${basedir}/../setup/bindir">
-                    <include name="*.in"/>
-                  </fileset>
-                  <globmapper from="*.in" to="*"/>
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}"/>
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy overwrite="true" todir="${basedir}/target/utilities/bin">
-                  <fileset dir="${basedir}/bindir">
-                    <include name="*.in"/>
-                  </fileset>
-                  <globmapper from="*.in" to="*"/>
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}"/>
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy overwrite="true" todir="${basedir}/target/utilities/scripts/db">
-                  <fileset dir="${basedir}/../setup/db">
-                    <include name="*"/>
-                  </fileset>
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}"/>
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy overwrite="true" todir="${basedir}/target/conf">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in"/>
-                  </fileset>
-                  <globmapper from="*.in" to="*"/>
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}"/>
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy overwrite="true" todir="${basedir}/target/conf">
-                  <fileset dir="${basedir}/conf">
-                    <exclude name="*.in"/>
-                  </fileset>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-          <execution>
-            <id>process-noredist</id>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target if="${noredist}">
-                <echo>test</echo>
-                <replaceregexp
-                  file="${basedir}/target/conf/environment.properties"
-                  match="cloud-stack-components-specification=.*"
-                  replace="cloud-stack-components-specification=components-nonoss.xml" byline="true"
-                />
-              </target>
-            </configuration>
-          </execution>
-          <execution>
-            <id>process-noredist-spring-context</id>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target if="${noredist}">
-                <replaceregexp file="${basedir}/target/classes/META-INF/webapp/WEB-INF/web.xml"
-                  match="classpath:componentContext.xml"
-                  replace="classpath:nonossComponentContext.xml" byline="true"/>
-                <copy overwrite="true"
-                  todir="${basedir}/target/common/scripts">
-                  <fileset dir="${basedir}/../plugins/network-elements/cisco-vnmc/scripts">
-                    <include name="**/*"/>
-                  </fileset>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <!-- there are the jasypt libs requires by some of the python scripts -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>org.jasypt</groupId>
-                  <artifactId>jasypt</artifactId>
-                  <version>1.9.2</version>
-                  <overWrite>false</overWrite>
-                  <outputDirectory>${project.build.directory}/pythonlibs</outputDirectory>
-                </artifactItem>
-                <artifactItem>
-                  <groupId>org.bouncycastle</groupId>
-                  <artifactId>bcprov-jdk15on</artifactId>
-                  <overWrite>false</overWrite>
-                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                </artifactItem>
-                <artifactItem>
-                  <groupId>org.bouncycastle</groupId>
-                  <artifactId>bcpkix-jdk15on</artifactId>
-                  <overWrite>false</overWrite>
-                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                </artifactItem>
-              </artifactItems>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>cloudstack-checkstyle</id>
-              <phase>none</phase>
-              <inherited>false</inherited>
-            </execution>
-          </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>3.0.0</version>
-        <executions>
-          <execution>
-            <id>rebuild-war</id>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <createDependencyReducedPom>false</createDependencyReducedPom>
-              <artifactSet>
-                <includes>
-                  <include>*:*</include>
-                </includes>
-                <excludes>
-                  <exclude>junit:junit</exclude>
-                  <exclude>com.tngtech.java:junit-dataprovider</exclude>
-                  <exclude>org.mockito:mockito-all</exclude>
-                  <exclude>org.hamcrest:hamcrest-all</exclude>
-                  <exclude>org.powermock:powermock-module-junit4</exclude>
-                  <exclude>org.powermock:powermock-api-mockito</exclude>
-                  <exclude>org.springframework:spring-test</exclude>
-                  <exclude>org.apache.tomcat.embed:tomcat-embed-core</exclude>
-                  <exclude>org.apache.geronimo.specs:geronimo-servlet_3.0_spec</exclude>
-                  <exclude>org.apache.geronimo.specs:geronimo-javamail_1.4_spec</exclude>
-                  <exclude>org.bouncycastle:bcprov-jdk15on</exclude>
-                  <exclude>org.bouncycastle:bcpkix-jdk15on</exclude>
-                  <exclude>mysql:mysql-connector-java</exclude>
-                </excludes>
-              </artifactSet>
-              <transformers>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                  <mainClass>org.apache.cloudstack.ServerDaemon</mainClass>
-                </transformer>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                  <resource>META-INF/spring.handlers</resource>
-                </transformer>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                  <resource>META-INF/spring.schemas</resource>
-                </transformer>
-              </transformers>
-              <filters>
-                <filter>
-                  <artifact>*:*</artifact>
-                  <excludes>
-                    <exclude>META-INF/VERSION.txt</exclude>
-                    <exclude>META-INF/LICENSE.txt</exclude>
-                    <exclude>META-INF/*.SF</exclude>
-                    <exclude>META-INF/*.DSA</exclude>
-                    <exclude>META-INF/*.RSA</exclude>
-                    <exclude>META-INF/MANIFEST.MF</exclude>
-                    <exclude>META-INF/maven/**</exclude>
-                  </excludes>
-                </filter>
-              </filters>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>systemvm</id>
-      <activation>
-        <property>
-          <name>systemvm</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-systemvm</artifactId>
-          <version>${project.version}</version>
-          <type>pom</type>
+            <scope>runtime</scope>
         </dependency>
-      </dependencies>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-antrun-plugin</artifactId>
-            <version>1.7</version>
-            <executions>
-              <!-- Copy the systemvm in the package phase as it is generated by console-proxy
-            in the package phase. -->
-              <execution>
-                <id>copy-systemvm</id>
-                <phase>process-resources</phase>
-                <goals>
-                  <goal>run</goal>
-                </goals>
-                <configuration>
-                  <target>
-                    <copy todir="${basedir}/target/common/vms">
-                      <fileset dir="${basedir}/../systemvm/dist">
-                        <include name="systemvm.iso"/>
-                      </fileset>
-                    </copy>
-                  </target>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>buildw</id>
-      <activation>
-        <property>
-          <name>buildw</name>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-antrun-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>generate-resource-windows</id>
-                <phase>generate-resources</phase>
-                <goals>
-                  <goal>run</goal>
-                </goals>
-                <configuration>
-                  <target>
-                    <copy todir="./target">
-                      <fileset dir="../scripts/installer/windows/">
-                        <include name="start.bat"/>
-                        <include name="acs_license.rtf"/>
-                        <include name="optionstheme.xml"/>
-                        <include name="*.wxl"/>
-                      </fileset>
-                    </copy>
-                    <copy todir="./target/client">
-                      <fileset dir="./target/generated-webapp">
-                        <include name="**/*"/>
-                      </fileset>
-                    </copy>
-                    <copy todir="./target/setup">
-                      <fileset dir="./target/utilities/scripts/db">
-                        <include name="**/*" />
-                      </fileset>
-                    </copy>
-                    <copy file="../scripts/storage/secondary/cloud-install-sys-tmplt.py" tofile="target/scripts/cloud-install-sys-tmplt.py" />
-                    <copy todir="./target/scripts">
-                      <fileset dir="./target/utilities/bin">
-                        <include name="**/*" />
-                      </fileset>
-                    </copy>
-                    <copy todir="./target/python-site-packages">
-                      <fileset dir="../python/lib">
-                        <include name="**/*" />
-                      </fileset>
-                    </copy>
-                   </target>
-                  </configuration>
-                 </execution>
-                 <execution>
-                  <id>download-files</id>
-                  <phase>prepare-package</phase>
-                  <goals>
-                    <goal>run</goal>
-                  </goals>
-                  <configuration>
-                    <target>
-                      <!-- download file -->
-                      <get src="http://downloads.sourceforge.net/sevenzip/7z920-x64.msi" dest="target" verbose="false" usetimestamp="true"/>
-                      <get src="https://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi" dest="target" verbose="false" usetimestamp="true"/>
-                      <get src="http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73-winx64.msi" dest="target" verbose="false" usetimestamp="true"/>
-                      <get src="http://downloads.sourceforge.net/project/cdrtoolswin/1.0/Binaries/CDR-Tools.exe?r=&amp;ts=1398764640&amp;use_mirror=kaz" dest="target" verbose="false" usetimestamp="true"/>
-                      <get src="https://bootstrap.pypa.io/ez_setup.py" dest="target" verbose="false" usetimestamp="true"/>
-                    </target>
-                  </configuration>
-                 </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-war-plugin</artifactId>
-            <version>2.5</version>
-            <configuration>
-              <webappDirectory>target/client</webappDirectory>
-              <webXml>./target/generated-webapp/WEB-INF/web.xml</webXml>
-              <warSourceDirectory>./target/generated-webapp</warSourceDirectory>
-              <archive>
-                <manifest>
-                  <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-                </manifest>
-                <manifestEntries>
-                  <Implementation-Revision>${git.revision}</Implementation-Revision>
-                  <Implementation-Branch>${git.branch}</Implementation-Branch>
-                </manifestEntries>
-              </archive>
-            </configuration>
-          </plugin>
-          <plugin>
+        <dependency>
             <groupId>org.apache.cloudstack</groupId>
-            <artifactId>Wix-cloudstack-maven-plugin</artifactId>
+            <artifactId>cloud-framework-spring-module</artifactId>
             <version>${project.version}</version>
-            <executions>
-              <execution>
-                <id>wix-cs</id>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-spring-lifecycle</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-solidfire</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-cloudbyte</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-acl-static-role-based</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-acl-dynamic-role-based</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-ca-rootca</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-dedicated-resources</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-api-limit-account-based</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-api-discovery</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-user-authenticator-ldap</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-user-authenticator-md5</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-user-authenticator-pbkdf2</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-user-authenticator-plaintext</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-user-authenticator-saml2</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-user-authenticator-sha256salted</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-metrics</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-nvp</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-contrail</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-palo-alto</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-netscaler</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-ovs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-elb</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-bigswitch</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-ssp</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-internallb</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-vxlan</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-opendaylight</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-vcs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-vsp</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-baremetal</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-ovm</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-ovm3</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.mortbay.jetty</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-hyperv</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-allocator-random</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-planner-user-dispersing</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-planner-skip-heurestics</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-planner-user-concentrated-pod</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-planner-implicit-dedication</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-explicit-dedication</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-host-allocator-random</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-outofbandmanagement-driver-ipmitool</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-outofbandmanagement-driver-nested-cloudstack</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-mom-rabbitmq</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-mom-inmemory</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-mom-kafka</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-agent-lb</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ca</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-direct-download</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-quota</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-network</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-orchestration</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-cache</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-configdrive</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-controller-secondary-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-datamotion</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-snapshot</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-default</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-image-default</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-image-s3</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-image-swift</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-syslog-alerts</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-snmp-alerts</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-host-anti-affinity</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-host-affinity</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-api-solidfire-intg-test</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-globodns</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-database-quota</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-integrations-cloudian-connector</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-integrations-prometheus-exporter</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>ru.concerteza.buildnumber</groupId>
+                <artifactId>maven-jgit-buildnumber-plugin</artifactId>
+                <version>1.2.6</version>
+                <executions>
+                    <execution>
+                        <id>git-buildnumber</id>
+                        <goals>
+                            <goal>extract-buildnumber</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
                 <configuration>
-                  <vars>-var wix.SourceClient</vars>
-                  <workingDirectory>${basedir}/target</workingDirectory>
-                  <dir>client</dir>
-                  <template>fragment</template>
-                  <directoryName>WEBAPPS</directoryName>
-                  <outputFile>target/client.wxs</outputFile>
-                  <componentGroup>ClientPath</componentGroup>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.cloudstack.ServerDaemon</mainClass>
+                        </manifest>
+                        <manifestEntries>
+                            <X-Git-Branch>${git.branch}</X-Git-Branch>
+                            <X-Git-Tag>${git.tag}</X-Git-Tag>
+                            <X-Git-Revision>${git.revision}</X-Git-Revision>
+                            <Implementation-Revision>${git.revision}</Implementation-Revision>
+                            <Implementation-Branch>${git.branch}</Implementation-Branch>
+                        </manifestEntries>
+                    </archive>
                 </configuration>
-                <goals>
-                  <goal>heat</goal>
-                </goals>
-                </execution>
-                <execution>
-                  <id>wix-cs-setup-db</id>
-                  <configuration>
-                    <vars>-var wix.SetupPathDir</vars>
-                    <workingDirectory>${basedir}/target</workingDirectory>
-                    <dir>setup</dir>
-                    <template>fragment</template>
-                    <directoryName>CSMANAGEMENT</directoryName>
-                    <outputFile>target/setupdb.wxs</outputFile>
-                    <componentGroup>SetupPath</componentGroup>
-                  </configuration>
-                  <goals>
-                    <goal>heat</goal>
-                  </goals>
-                </execution>
-                <execution>
-                  <id>wix-cs-utilities</id>
-                  <configuration>
-                    <vars>-var wix.UtilitiesPathDir</vars>
-                    <workingDirectory>${basedir}/target</workingDirectory>
-                    <dir>scripts</dir>
-                    <template>fragment</template>
-                    <directoryName>INSTALLDIR</directoryName>
-                    <outputFile>target/utilities.wxs</outputFile>
-                    <componentGroup>UtilitiesPath</componentGroup>
-                  </configuration>
-                  <goals>
-                    <goal>heat</goal>
-                  </goals>
-                </execution>
-                <execution>
-                  <id>python-site-packages</id>
-                  <configuration>
-                    <vars>-var wix.PythonSitePackagesDir</vars>
-                    <workingDirectory>${basedir}/target</workingDirectory>
-                    <dir>python-site-packages</dir>
-                    <template>fragment</template>
-                    <directoryName>INSTALLDIR</directoryName>
-                    <outputFile>target/python-site-packages.wxs</outputFile>
-                    <componentGroup>PythonSitePackagesPath</componentGroup>
-                  </configuration>
-                  <goals>
-                    <goal>heat</goal>
-                  </goals>
-                </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.bitbucket.joxley</groupId>
-            <artifactId>wix-maven-plugin</artifactId>
-            <version>1.1.1</version>
-            <executions>
-              <execution>
-                <id>wix-acs</id>
-                  <configuration>
-                    <workingDirectory>${basedir}/target</workingDirectory>
-                    <extensions>
-                      <extension>WixFirewallExtension</extension>
-                      <extension>WixUIExtension</extension>
-                      <extension>WixUtilExtension</extension>
-                    </extensions>
-                    <arguments>-dSourceClient=SourceDir\client -dSetupPathDir=SourceDir\setup -dUtilitiesPathDir=SourceDir\scripts -dPythonSitePackagesDir=SourceDir\python-site-packages</arguments>
-                    <sourceFiles>
-                      <sourceFile>../scripts/installer/windows/acs.wxs</sourceFile>
-                      <sourceFile>../scripts/installer/windows/WixInstallerDialog.wxs</sourceFile>
-                      <sourceFile>../scripts/installer/windows/Setup_Databases.wxs</sourceFile>
-                      <sourceFile>target/client.wxs</sourceFile>
-                      <sourceFile>target/setupdb.wxs</sourceFile>
-                      <sourceFile>target/utilities.wxs</sourceFile>
-                      <sourceFile>target/python-site-packages.wxs</sourceFile>
-                    </sourceFiles>
-                    <outputDirectory>target</outputDirectory>
-                    <objectFiles>
-                      <objectFile>target/acs.wixobj</objectFile>
-                      <objectFile>target/client.wixobj</objectFile>
-                      <objectFile>target/setupdb.wixobj</objectFile>
-                      <objectFile>target/utilities.wixobj</objectFile>
-                      <objectFile>target/WixInstallerDialog.wixobj</objectFile>
-                      <objectFile>target/Setup_Databases.wixobj</objectFile>
-                      <objectFile>target/python-site-packages.wixobj</objectFile>
-                    </objectFiles>
-                    <cultures>
-                      <culture>en-us</culture>
-                    </cultures>
-                    <localizationFiles>
-                      <localizationFile>target/en-us.wxl</localizationFile>
-                    </localizationFiles>
-                    <outputFile>target/acs.msi</outputFile>
-                  </configuration>
-                  <goals>
-                    <goal>candle</goal>
-                    <goal>light</goal>
-                  </goals>
-              </execution>
-              <execution>
-                <id>wix-final</id>
-                  <configuration>
-                    <workingDirectory>${basedir}/target</workingDirectory>
-                    <extensions>
-                      <extension>WixBalExtension</extension>
-                      <extension>WixUtilExtension</extension>
-                    </extensions>
-                    <sourceFiles>
-                      <sourceFile>../scripts/installer/windows/dependencies.wxs</sourceFile>
-                    </sourceFiles>
-                    <outputDirectory>target</outputDirectory>
-                    <objectFiles>
-                      <objectFile>target/dependencies.wixobj</objectFile>
-                    </objectFiles>
-                    <cultures>
-                      <culture>en-US</culture>
-                    </cultures>
-                    <localizationFiles>
-                      <localizationFile>target/en-us.wxl</localizationFile>
-                    </localizationFiles>
-                    <outputFile>target/acs-${project.version}.exe</outputFile>
-                  </configuration>
-                  <goals>
-                    <goal>candle</goal>
-                    <goal>light</goal>
-                  </goals>
-              </execution>
-            </executions>
-          </plugin>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>${cs.jetty-maven-plugin.version}</version>
+                <dependencies>
+                    <!-- specify the dependent jdbc driver here -->
+                    <dependency>
+                        <groupId>mysql</groupId>
+                        <artifactId>mysql-connector-java</artifactId>
+                        <version>${cs.mysql.version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.bouncycastle</groupId>
+                        <artifactId>bcprov-jdk15on</artifactId>
+                        <version>${cs.bcprov.version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.bouncycastle</groupId>
+                        <artifactId>bcpkix-jdk15on</artifactId>
+                        <version>${cs.bcprov.version}</version>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <scanIntervalSeconds>0</scanIntervalSeconds>
+                    <stopPort>9966</stopPort>
+                    <stopKey>stop-jetty</stopKey>
+                    <connectors>
+                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+                            <port>8080</port>
+                            <maxIdleTime>60000</maxIdleTime>
+                        </connector>
+                    </connectors>
+                    <webXml>${project.build.directory}/classes/META-INF/webapp/WEB-INF/web.xml</webXml>
+                    <webAppSourceDirectory>${project.build.directory}/classes/META-INF/webapp/</webAppSourceDirectory>
+                    <webAppConfig>
+                        <contextPath>/client</contextPath>
+                        <extraClasspath>${project.build.directory}/conf/;${project.build.directory}/common;${project.build.directory}/utilities/scripts/db/;${project.build.directory}/utilities/scripts/db/db/</extraClasspath>
+                        <webInfIncludeJarPattern>.*/cloud.*jar$|.*/classes/.*</webInfIncludeJarPattern>
+                    </webAppConfig>
+                    <systemProperties>
+                        <systemProperty>
+                            <name>log4j.configuration</name>
+                            <value>log4j-cloud.xml</value>
+                        </systemProperty>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-resource</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <copy todir="${project.build.directory}/common/scripts">
+                                    <fileset dir="${basedir}/../scripts" />
+                                </copy>
+                                <!-- CLOUDSTACK-1304 -->
+                                <chmod perm="755" file="${project.build.directory}/common/scripts/**" type="both" />
+                                <copy todir="${project.build.directory}/classes/META-INF/webapp/WEB-INF/">
+                                    <fileset dir="${basedir}/src/main/webapp/WEB-INF/">
+                                        <include name="web.xml" />
+                                    </fileset>
+                                </copy>
+                                <copy todir="${project.build.directory}/classes/META-INF/webapp">
+                                    <fileset dir="${basedir}/../ui" />
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/utilities/bin">
+                                    <fileset dir="${basedir}/../setup/bindir">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader
+                                            classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/utilities/bin">
+                                    <fileset dir="${basedir}/bindir">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/utilities/scripts/db">
+                                    <fileset dir="${basedir}/../setup/db">
+                                        <include name="*" />
+                                    </fileset>
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/conf">
+                                    <fileset dir="${basedir}/conf">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/conf">
+                                    <fileset dir="${basedir}/conf">
+                                        <exclude name="*.in" />
+                                    </fileset>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>process-noredist</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target if="${noredist}">
+                                <echo>test</echo>
+                                <replaceregexp
+                                    file="${basedir}/target/conf/environment.properties"
+                                    match="cloud-stack-components-specification=.*"
+                                    replace="cloud-stack-components-specification=components-nonoss.xml"
+                                    byline="true" />
+                            </target>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>process-noredist-spring-context</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target if="${noredist}">
+                                <replaceregexp
+                                    file="${basedir}/target/classes/META-INF/webapp/WEB-INF/web.xml"
+                                    match="classpath:componentContext.xml"
+                                    replace="classpath:nonossComponentContext.xml"
+                                    byline="true" />
+                                <copy overwrite="true" todir="${basedir}/target/common/scripts">
+                                    <fileset dir="${basedir}/../plugins/network-elements/cisco-vnmc/src/main/scripts">
+                                        <include name="**/*" />
+                                    </fileset>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- there are the jasypt libs requires by some of the python scripts -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.jasypt</groupId>
+                                    <artifactId>jasypt</artifactId>
+                                    <version>${cs.jasypt.version}</version>
+                                    <overWrite>false</overWrite>
+                                    <outputDirectory>${project.build.directory}/pythonlibs</outputDirectory>
+                                </artifactItem>
+                                <artifactItem>
+                                    <groupId>org.bouncycastle</groupId>
+                                    <artifactId>bcprov-jdk15on</artifactId>
+                                    <overWrite>false</overWrite>
+                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                                </artifactItem>
+                                <artifactItem>
+                                    <groupId>org.bouncycastle</groupId>
+                                    <artifactId>bcpkix-jdk15on</artifactId>
+                                    <overWrite>false</overWrite>
+                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <id>rebuild-war</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <createDependencyReducedPom>false</createDependencyReducedPom>
+                            <artifactSet>
+                                <includes>
+                                    <include>*:*</include>
+                                </includes>
+                                <excludes>
+                                    <exclude>junit:junit</exclude>
+                                    <exclude>com.tngtech.java:junit-dataprovider</exclude>
+                                    <exclude>org.mockito:mockito-all</exclude>
+                                    <exclude>org.hamcrest:hamcrest-all</exclude>
+                                    <exclude>org.powermock:powermock-module-junit4</exclude>
+                                    <exclude>org.powermock:powermock-api-mockito</exclude>
+                                    <exclude>org.springframework:spring-test</exclude>
+                                    <exclude>org.apache.tomcat.embed:tomcat-embed-core</exclude>
+                                    <exclude>org.apache.geronimo.specs:geronimo-servlet_3.0_spec</exclude>
+                                    <exclude>org.apache.geronimo.specs:geronimo-javamail_1.4_spec</exclude>
+                                    <exclude>org.bouncycastle:bcprov-jdk15on</exclude>
+                                    <exclude>org.bouncycastle:bcpkix-jdk15on</exclude>
+                                    <exclude>mysql:mysql-connector-java</exclude>
+                                </excludes>
+                            </artifactSet>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>org.apache.cloudstack.ServerDaemon</mainClass>
+                                </transformer>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>META-INF/spring.handlers</resource>
+                                </transformer>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>META-INF/spring.schemas</resource>
+                                </transformer>
+                            </transformers>
+                            <filters>
+                                <filter>
+                                    <artifact>*:*</artifact>
+                                    <excludes>
+                                        <exclude>META-INF/VERSION.txt</exclude>
+                                        <exclude>META-INF/LICENSE.txt</exclude>
+                                        <exclude>META-INF/*.SF</exclude>
+                                        <exclude>META-INF/*.DSA</exclude>
+                                        <exclude>META-INF/*.RSA</exclude>
+                                        <exclude>META-INF/MANIFEST.MF</exclude>
+                                        <exclude>META-INF/maven/**</exclude>
+                                    </excludes>
+                                </filter>
+                            </filters>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>simulator</id>
-      <activation>
-        <property>
-          <name>simulator</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-      <id>netapp</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-netapp</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-      <id>f5</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-network-f5</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-      <id>srx</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-network-srx</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-      <id>vmware</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-vmware-base</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-network-cisco-vnmc</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-      <id>mysqlha</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-database-mysqlha</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-    <profile>
-        <id>vmwaresioc</id>
-        <activation>
-            <property>
-                <name>noredist</name>
-            </property>
-        </activation>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.cloudstack</groupId>
-                <artifactId>cloud-plugin-api-vmware-sioc</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-        </dependencies>
-    </profile>
-    <profile>
-      <id>quickcloud</id>
-      <activation>
-        <property>
-          <name>quickcloud</name>
-        </property>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-quickcloud</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-      </dependencies>
-    </profile>
-  </profiles>
+    </build>
+    <profiles>
+        <profile>
+            <id>systemvm</id>
+            <activation>
+                <property>
+                    <name>systemvm</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-systemvm</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                </dependency>
+            </dependencies>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <version>1.7</version>
+                        <executions>
+                            <!-- Copy the systemvm in the package phase as it is generated by console-proxy in the package 
+                                phase. -->
+                            <execution>
+                                <id>copy-systemvm</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <target>
+                                        <copy todir="${basedir}/target/common/vms">
+                                            <fileset dir="${basedir}/../systemvm/dist">
+                                                <include name="systemvm.iso" />
+                                            </fileset>
+                                        </copy>
+                                    </target>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>buildw</id>
+            <activation>
+                <property>
+                    <name>buildw</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>generate-resource-windows</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <target>
+                                        <copy todir="./target">
+                                            <fileset dir="../scripts/installer/windows/">
+                                                <include name="start.bat" />
+                                                <include name="acs_license.rtf" />
+                                                <include name="optionstheme.xml" />
+                                                <include name="*.wxl" />
+                                            </fileset>
+                                        </copy>
+                                        <copy todir="./target/client">
+                                            <fileset dir="./target/generated-webapp">
+                                                <include name="**/*" />
+                                            </fileset>
+                                        </copy>
+                                        <copy todir="./target/setup">
+                                            <fileset dir="./target/utilities/scripts/db">
+                                                <include name="**/*" />
+                                            </fileset>
+                                        </copy>
+                                        <copy file="../scripts/storage/secondary/cloud-install-sys-tmplt.py" tofile="target/scripts/cloud-install-sys-tmplt.py" />
+                                        <copy todir="./target/scripts">
+                                            <fileset dir="./target/utilities/bin">
+                                                <include name="**/*" />
+                                            </fileset>
+                                        </copy>
+                                        <copy todir="./target/python-site-packages">
+                                            <fileset dir="../python/lib">
+                                                <include name="**/*" />
+                                            </fileset>
+                                        </copy>
+                                    </target>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>download-files</id>
+                                <phase>prepare-package</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <target>
+                                        <!-- download file -->
+                                        <get src="http://downloads.sourceforge.net/sevenzip/7z920-x64.msi"
+                                            dest="target"
+                                            verbose="false"
+                                            usetimestamp="true" />
+                                        <get src="https://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi"
+                                            dest="target"
+                                            verbose="false"
+                                            usetimestamp="true" />
+                                        <get
+                                            src="http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73-winx64.msi"
+                                            dest="target"
+                                            verbose="false"
+                                            usetimestamp="true" />
+                                        <get
+                                            src="http://downloads.sourceforge.net/project/cdrtoolswin/1.0/Binaries/CDR-Tools.exe?r=&amp;ts=1398764640&amp;use_mirror=kaz"
+                                            dest="target"
+                                            verbose="false"
+                                            usetimestamp="true" />
+                                        <get src="https://bootstrap.pypa.io/ez_setup.py"
+                                            dest="target"
+                                            verbose="false"
+                                            usetimestamp="true" />
+                                    </target>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-war-plugin</artifactId>
+                        <version>2.5</version>
+                        <configuration>
+                            <webappDirectory>target/client</webappDirectory>
+                            <webXml>./target/generated-webapp/WEB-INF/web.xml</webXml>
+                            <warSourceDirectory>./target/generated-webapp</warSourceDirectory>
+                            <archive>
+                                <manifest>
+                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                                </manifest>
+                                <manifestEntries>
+                                    <Implementation-Revision>${git.revision}</Implementation-Revision>
+                                    <Implementation-Branch>${git.branch}</Implementation-Branch>
+                                </manifestEntries>
+                            </archive>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.cloudstack</groupId>
+                        <artifactId>Wix-cloudstack-maven-plugin</artifactId>
+                        <version>${project.version}</version>
+                        <executions>
+                            <execution>
+                                <id>wix-cs</id>
+                                <configuration>
+                                    <vars>-var wix.SourceClient</vars>
+                                    <workingDirectory>${basedir}/target</workingDirectory>
+                                    <dir>client</dir>
+                                    <template>fragment</template>
+                                    <directoryName>WEBAPPS</directoryName>
+                                    <outputFile>target/client.wxs</outputFile>
+                                    <componentGroup>ClientPath</componentGroup>
+                                </configuration>
+                                <goals>
+                                    <goal>heat</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>wix-cs-setup-db</id>
+                                <configuration>
+                                    <vars>-var wix.SetupPathDir</vars>
+                                    <workingDirectory>${basedir}/target</workingDirectory>
+                                    <dir>setup</dir>
+                                    <template>fragment</template>
+                                    <directoryName>CSMANAGEMENT</directoryName>
+                                    <outputFile>target/setupdb.wxs</outputFile>
+                                    <componentGroup>SetupPath</componentGroup>
+                                </configuration>
+                                <goals>
+                                    <goal>heat</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>wix-cs-utilities</id>
+                                <configuration>
+                                    <vars>-var wix.UtilitiesPathDir</vars>
+                                    <workingDirectory>${basedir}/target</workingDirectory>
+                                    <dir>scripts</dir>
+                                    <template>fragment</template>
+                                    <directoryName>INSTALLDIR</directoryName>
+                                    <outputFile>target/utilities.wxs</outputFile>
+                                    <componentGroup>UtilitiesPath</componentGroup>
+                                </configuration>
+                                <goals>
+                                    <goal>heat</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>python-site-packages</id>
+                                <configuration>
+                                    <vars>-var wix.PythonSitePackagesDir</vars>
+                                    <workingDirectory>${basedir}/target</workingDirectory>
+                                    <dir>python-site-packages</dir>
+                                    <template>fragment</template>
+                                    <directoryName>INSTALLDIR</directoryName>
+                                    <outputFile>target/python-site-packages.wxs</outputFile>
+                                    <componentGroup>PythonSitePackagesPath</componentGroup>
+                                </configuration>
+                                <goals>
+                                    <goal>heat</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.bitbucket.joxley</groupId>
+                        <artifactId>wix-maven-plugin</artifactId>
+                        <version>1.1.1</version>
+                        <executions>
+                            <execution>
+                                <id>wix-acs</id>
+                                <configuration>
+                                    <workingDirectory>${basedir}/target</workingDirectory>
+                                    <extensions>
+                                        <extension>WixFirewallExtension</extension>
+                                        <extension>WixUIExtension</extension>
+                                        <extension>WixUtilExtension</extension>
+                                    </extensions>
+                                    <arguments>-dSourceClient=SourceDir\client -dSetupPathDir=SourceDir\setup -dUtilitiesPathDir=SourceDir\scripts -dPythonSitePackagesDir=SourceDir\python-site-packages</arguments>
+                                    <sourceFiles>
+                                        <sourceFile>../scripts/installer/windows/acs.wxs</sourceFile>
+                                        <sourceFile>../scripts/installer/windows/WixInstallerDialog.wxs</sourceFile>
+                                        <sourceFile>../scripts/installer/windows/Setup_Databases.wxs</sourceFile>
+                                        <sourceFile>target/client.wxs</sourceFile>
+                                        <sourceFile>target/setupdb.wxs</sourceFile>
+                                        <sourceFile>target/utilities.wxs</sourceFile>
+                                        <sourceFile>target/python-site-packages.wxs</sourceFile>
+                                    </sourceFiles>
+                                    <outputDirectory>target</outputDirectory>
+                                    <objectFiles>
+                                        <objectFile>target/acs.wixobj</objectFile>
+                                        <objectFile>target/client.wixobj</objectFile>
+                                        <objectFile>target/setupdb.wixobj</objectFile>
+                                        <objectFile>target/utilities.wixobj</objectFile>
+                                        <objectFile>target/WixInstallerDialog.wixobj</objectFile>
+                                        <objectFile>target/Setup_Databases.wixobj</objectFile>
+                                        <objectFile>target/python-site-packages.wixobj</objectFile>
+                                    </objectFiles>
+                                    <cultures>
+                                        <culture>en-us</culture>
+                                    </cultures>
+                                    <localizationFiles>
+                                        <localizationFile>target/en-us.wxl</localizationFile>
+                                    </localizationFiles>
+                                    <outputFile>target/acs.msi</outputFile>
+                                </configuration>
+                                <goals>
+                                    <goal>candle</goal>
+                                    <goal>light</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>wix-final</id>
+                                <configuration>
+                                    <workingDirectory>${basedir}/target</workingDirectory>
+                                    <extensions>
+                                        <extension>WixBalExtension</extension>
+                                        <extension>WixUtilExtension</extension>
+                                    </extensions>
+                                    <sourceFiles>
+                                        <sourceFile>../scripts/installer/windows/dependencies.wxs</sourceFile>
+                                    </sourceFiles>
+                                    <outputDirectory>target</outputDirectory>
+                                    <objectFiles>
+                                        <objectFile>target/dependencies.wixobj</objectFile>
+                                    </objectFiles>
+                                    <cultures>
+                                        <culture>en-US</culture>
+                                    </cultures>
+                                    <localizationFiles>
+                                        <localizationFile>target/en-us.wxl</localizationFile>
+                                    </localizationFiles>
+                                    <outputFile>target/acs-${project.version}.exe</outputFile>
+                                </configuration>
+                                <goals>
+                                    <goal>candle</goal>
+                                    <goal>light</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>simulator</id>
+            <activation>
+                <property>
+                    <name>simulator</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>f5</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-network-f5</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>srx</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-network-srx</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>vmware</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-vmware-base</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-network-cisco-vnmc</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>mysqlha</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-database-mysqlha</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>vmwaresioc</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-api-vmware-sioc</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>quickcloud</id>
+            <activation>
+                <property>
+                    <name>quickcloud</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-quickcloud</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
 </project>
diff --git a/client/src/org/apache/cloudstack/ServerDaemon.java b/client/src/main/java/org/apache/cloudstack/ServerDaemon.java
similarity index 87%
rename from client/src/org/apache/cloudstack/ServerDaemon.java
rename to client/src/main/java/org/apache/cloudstack/ServerDaemon.java
index 985b67b..1a5e8ff 100644
--- a/client/src/org/apache/cloudstack/ServerDaemon.java
+++ b/client/src/main/java/org/apache/cloudstack/ServerDaemon.java
@@ -66,6 +66,7 @@
     private static final String BIND_INTERFACE = "bind.interface";
     private static final String CONTEXT_PATH = "context.path";
     private static final String SESSION_TIMEOUT = "session.timeout";
+    private static final String HTTP_ENABLE = "http.enable";
     private static final String HTTP_PORT = "http.port";
     private static final String HTTPS_ENABLE = "https.enable";
     private static final String HTTPS_PORT = "https.port";
@@ -80,6 +81,7 @@
 
     private Server server;
 
+    private boolean httpEnable = true;
     private int httpPort = 8080;
     private int httpsPort = 8443;
     private int sessionTimeout = 30;
@@ -105,8 +107,8 @@
     public void init(final DaemonContext context) {
         final File confFile = PropertiesUtil.findConfigFile("server.properties");
         if (confFile == null) {
-            LOG.warn(String.format("Server configuration file not found. Initializing server daemon on %s:%s, with https.enabled=%s, https.port=%s, context.path=%s",
-                    bindInterface, httpPort, httpsEnable, httpsPort, contextPath));
+            LOG.warn(String.format("Server configuration file not found. Initializing server daemon on %s, with http.enable=%s, http.port=%s, https.enable=%s, https.port=%s, context.path=%s",
+                    bindInterface, httpEnable, httpPort, httpsEnable, httpsPort, contextPath));
             return;
         }
 
@@ -119,6 +121,7 @@
             }
             setBindInterface(properties.getProperty(BIND_INTERFACE, ""));
             setContextPath(properties.getProperty(CONTEXT_PATH, "/client"));
+            setHttpEnable(Boolean.valueOf(properties.getProperty(HTTP_ENABLE, "true")));
             setHttpPort(Integer.valueOf(properties.getProperty(HTTP_PORT, "8080")));
             setHttpsEnable(Boolean.valueOf(properties.getProperty(HTTPS_ENABLE, "false")));
             setHttpsPort(Integer.valueOf(properties.getProperty(HTTPS_PORT, "8443")));
@@ -129,9 +132,15 @@
             setSessionTimeout(Integer.valueOf(properties.getProperty(SESSION_TIMEOUT, "30")));
         } catch (final IOException e) {
             LOG.warn("Failed to load configuration from server.properties file", e);
+        } finally {
+            // make sure that at least HTTP is enabled if both of them are set to false (misconfiguration)
+            if (!httpEnable && !httpsEnable) {
+                setHttpEnable(true);
+                LOG.warn("Server configuration malformed, neither http nor https is enabled, http will be enabled.");
+            }
         }
-        LOG.info(String.format("Initializing server daemon on %s:%s, with https.enabled=%s, https.port=%s, context.path=%s",
-                bindInterface, httpPort, httpsEnable, httpsPort, contextPath));
+        LOG.info(String.format("Initializing server daemon on %s, with http.enable=%s, http.port=%s, https.enable=%s, https.port=%s, context.path=%s",
+                bindInterface, httpEnable, httpPort, httpsEnable, httpsPort, contextPath));
     }
 
     @Override
@@ -163,11 +172,7 @@
         httpConfig.setSendDateHeader(false);
 
         // HTTP Connector
-        final ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
-        httpConnector.setPort(httpPort);
-        httpConnector.setHost(bindInterface);
-        httpConnector.setIdleTimeout(30000);
-        server.addConnector(httpConnector);
+        createHttpConnector(httpConfig);
 
         // Setup handlers
         server.setHandler(createHandlers());
@@ -175,27 +180,8 @@
         // Extra config options
         server.setStopAtShutdown(true);
 
-        // Configure SSL
-        if (httpsEnable && !Strings.isNullOrEmpty(keystoreFile) && new File(keystoreFile).exists()) {
-            // SSL Context
-            final SslContextFactory sslContextFactory = new SslContextFactory();
-            // Define keystore path and passwords
-            sslContextFactory.setKeyStorePath(keystoreFile);
-            sslContextFactory.setKeyStorePassword(keystorePassword);
-            sslContextFactory.setKeyManagerPassword(keystorePassword);
-
-            // HTTPS config
-            final HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
-            httpsConfig.addCustomizer(new SecureRequestCustomizer());
-
-            // HTTPS connector
-            final ServerConnector sslConnector = new ServerConnector(server,
-                    new SslConnectionFactory(sslContextFactory, "http/1.1"),
-                    new HttpConnectionFactory(httpsConfig));
-            sslConnector.setPort(httpsPort);
-            sslConnector.setHost(bindInterface);
-            server.addConnector(sslConnector);
-        }
+        // HTTPS Connector
+        createHttpsConnector(httpConfig);
 
         server.start();
         server.join();
@@ -215,6 +201,41 @@
     /////////////// Private methods ///////////////////
     ///////////////////////////////////////////////////
 
+    private void createHttpConnector(final HttpConfiguration httpConfig) {
+        if (httpEnable) {
+            final ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
+            httpConnector.setPort(httpPort);
+            httpConnector.setHost(bindInterface);
+            httpConnector.setIdleTimeout(30000);
+            server.addConnector(httpConnector);
+        }
+    }
+
+    private void createHttpsConnector(final HttpConfiguration httpConfig) {
+        // Configure SSL
+        if (httpsEnable && !Strings.isNullOrEmpty(keystoreFile) && new File(keystoreFile).exists()) {
+            // SSL Context
+            final SslContextFactory sslContextFactory = new SslContextFactory();
+
+            // Define keystore path and passwords
+            sslContextFactory.setKeyStorePath(keystoreFile);
+            sslContextFactory.setKeyStorePassword(keystorePassword);
+            sslContextFactory.setKeyManagerPassword(keystorePassword);
+
+            // HTTPS config
+            final HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
+            httpsConfig.addCustomizer(new SecureRequestCustomizer());
+
+            // HTTPS Connector
+            final ServerConnector sslConnector = new ServerConnector(server,
+                    new SslConnectionFactory(sslContextFactory, "http/1.1"),
+                    new HttpConnectionFactory(httpsConfig));
+            sslConnector.setPort(httpsPort);
+            sslConnector.setHost(bindInterface);
+            server.addConnector(sslConnector);
+        }
+    }
+
     private HandlerCollection createHandlers() {
         final WebAppContext webApp = new WebAppContext();
         webApp.setContextPath(contextPath);
@@ -283,6 +304,10 @@
         this.httpPort = httpPort;
     }
 
+    public void setHttpEnable(boolean httpEnable) {
+        this.httpEnable = httpEnable;
+    }
+
     public void setHttpsPort(int httpsPort) {
         this.httpsPort = httpsPort;
     }
diff --git a/client/resources/META-INF/cloudstack/webApplicationContext.xml b/client/src/main/resources/META-INF/cloudstack/webApplicationContext.xml
similarity index 100%
rename from client/resources/META-INF/cloudstack/webApplicationContext.xml
rename to client/src/main/resources/META-INF/cloudstack/webApplicationContext.xml
diff --git a/client/WEB-INF/web.xml b/client/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from client/WEB-INF/web.xml
rename to client/src/main/webapp/WEB-INF/web.xml
diff --git a/cloud-cli/bindir/cloudvoladm b/cloud-cli/bindir/cloudvoladm
deleted file mode 100755
index 16f31bd..0000000
--- a/cloud-cli/bindir/cloudvoladm
+++ /dev/null
@@ -1,607 +0,0 @@
-#!/usr/bin/env python
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-import sys
-import os
-import subprocess
-import cloudtool
-import urllib2
-from optparse import OptionParser, OptionGroup, OptParseError, BadOptionError, OptionError, OptionConflictError, OptionValueError
-import xml.dom.minidom
-
-NetAppServerIP=None
-NetAppUserName=None
-NetAppPassword=None
-CloudStackSvrIP=None
-CloudStackSvrPort=8096
-
-
-cmds=["createvol","deletevol", "listvol", "createlun", "listlun", "destroylun", "assoclun", "disassoclun", "createpool", "modifypool", "destroypool", "listpools"]
-header = "Volume Manager CLI, the available COMMANDS are:"
-
-
-def cmd_help():
-    print header
-    print
-    print "createpool    add a new pool to the system"
-    print "modifypool    change the allocation algorithm for a pool"
-    print "destroypool   destroy a pool"
-    print "listpools     list all the pools"
-    print "createvol     add volume to a storage server"
-    print "deletevol     delete volume on a storage server"
-    print "listvol       list volume on a storage server"
-    print "createlun     create LUN on a storage server"
-    print "listlun       list LUN on a storage server"
-    print "destroylun    destroy LUN on a storage server"
-    print "assoclun      assoc LUN on a storage server"
-    print "disassoclun   disassoc LUN on a storage server"
-    print
-    print "\"cloudvoladm COMMAND --help\" for more information on a specific command"
-    print
-    print "Global Options:"
-    print "--cloudStackMgtSvrIP the IP address of CloudStack Management Server"
-    print 
-    print "Config file is ~/.cloudvoladmrc, Config options including: "
-    print "cloudStackMgtSvrIP=Cloudstack Management Server Address, which can be overriden by --cloudStackMgtSvrIP. If neither is provided, localhost is used."
-
-usage="Volume Manager CLI: add a new volume to a storage pool"
-addvolParser= OptionParser(usage)
-addvolParser.add_option("-i", metavar="server ip", dest="server_ip", help="The IP address of the storage server")
-addvolParser.add_option("-u", metavar="username", dest="username", help="username to access the storage server with")
-addvolParser.add_option("-w", metavar="password", dest="password", help="the password to access the storage server with")
-addvolParser.add_option("-p", dest="pool_name", help="the name of the pool to allocate from") 
-addvolParser.add_option("-a", dest="aggregate_name", help="the name of aggregate") 
-addvolParser.add_option("-v", dest="vol_name", help="the name of volume") 
-addvolParser.add_option("-s", dest="size", help="size in GB eg.1") 
-optionalGroup = OptionGroup(addvolParser, "Optional")
-optionalGroup.add_option("-r", dest="percentage", help="Percentage used for snapshot reserve") 
-optionalGroup.add_option("-S", dest="snapshots", help="Snapshot schedule in <weeks> <days> <hours>@<which-hours> <minutes>@<which-minutes> e.g. \"2 4 5@1,4 6@2,5\"") 
-addvolParser.add_option_group(optionalGroup)
-
-usage="Volume Manager CLI: remove a volume from a pool"
-delvolParser= OptionParser(usage)
-delvolParser.add_option("-i", metavar="server ip", dest="server_ip", help="The IP address of the storage server")
-delvolParser.add_option("-a", dest="aggregate_name", help="The name of aggregate") 
-delvolParser.add_option("-v", dest="vol_name", help="The name of volume") 
-
-usage="Volume Manager CLI: list all volumes known to exist in a pool"
-listvolParser= OptionParser(usage)
-listvolParser.add_option("-p", dest="pool_name", help="The name of the pool to list volumes from") 
-
-usage="Volume Manager CLI: create a LUN on a pool"
-createlunParser = OptionParser(usage)
-createlunParser.add_option("-p", dest="pool_name", help="The name of the pool to add the volume to") 
-createlunParser.add_option("-s", dest="size", help="The size in GB e.g. 100") 
-
-usage="Volume Manager CLI: list LUN on a pool"
-listlunParser = OptionParser(usage)
-listlunParser.add_option("-p", dest="pool_name", help="The pool name") 
-
-usage="Volume Manager CLI: destroy a LUN "
-destroylunParser = OptionParser(usage)
-destroylunParser.add_option("-l", dest="lun_name", help="The LUN name") 
-
-usage="Volume Manager CLI: Add a new pool to the system"
-createPoolParser = OptionParser(usage)
-createPoolParser.add_option("-p", dest="pool_name", help="The pool name") 
-createPoolParser.add_option("-A", dest="algorithm", help="roundrobin or leastfull") 
-
-
-usage="Volume Manager CLI: change the allocation algorithm for a pool"
-modifyPoolParser = OptionParser(usage)
-modifyPoolParser.add_option("-p", dest="pool_name", help="The pool name") 
-modifyPoolParser.add_option("-A", dest="algorithm", help="roundrobin or leastfull") 
-
-usage="Volume Manager CLI: destroy a pool"
-destroyPoolParser = OptionParser(usage)
-destroyPoolParser.add_option("-p", dest="pool_name", help="The pool name") 
-
-usage="Volume Manager CLI: list pools"
-listPoolParser = OptionParser(usage)
-
-usage="Volume Manager CLI: associate a LUN with a guest that uses the stated IQN as client"
-assocLunParser = OptionParser(usage)
-assocLunParser.add_option("-g", dest="guest_iqn", help="the guest IQN. By default, it reads from /etc/iscsi/initiatorname.iscsi") 
-assocLunParser.add_option("-l", dest="lun_name", help="The LUN name") 
-
-usage="Volume Manager CLI: disassociate a LUN with a guest that uses the stated IQN as client"
-disassocLunParser = OptionParser(usage)
-disassocLunParser.add_option("-g", dest="guest_iqn", help="the guest IQN. By default, it reads from /etc/iscsi/initiatorname.iscsi") 
-disassocLunParser.add_option("-l", dest="lun_name", help="The LUN name") 
-
-cmdParsers = {cmds[0]:addvolParser, cmds[1]:delvolParser, cmds[2]:listvolParser,  cmds[3]:createlunParser, cmds[4]:listlunParser, 
-          cmds[5]:destroylunParser, cmds[6]:assocLunParser, cmds[7]:disassocLunParser, cmds[8]:createPoolParser, cmds[9]:modifyPoolParser, cmds[10]:destroyPoolParser, cmds[11]:listPoolParser}
-
-
-def validate_parameter(input, signature):
-    (options, args) =  signature.parse_args([])
-    inputDict = input.__dict__
-    sigDict = options.__dict__
-    for k,v in sigDict.iteritems():
-        inputValue = inputDict[k]
-        if inputValue == None:
-            print "Volume Manager CLI: missing operand "
-            print
-            signature.parse_args(["--help"])
-
-def help_callback(option, opt, value, parser):
-    argv = sys.argv[1:]
-    try:
-        argv.remove(opt)
-    except:
-        argv.remove("--h")
-
-    if len(argv) == 0:
-        cmd_help()
-        return
-    (options, args) = parser.parse_args(argv)
-    for cmd in cmds:
-        if cmd == args[0]:
-            cmdParsers[cmd].parse_args(["--help"])      
-
-def Help():
-    usage = "usage: %prog cmd[createpool|listpools|modifypool|destroypool|createvol|deletevol|listvol|createlun|listlun|destroylun|assoclun|disassoclun] arg1 arg2 [--help, -h]"
-    parser = OptionParser(usage=usage, add_help_option=False)   
-    parser.add_option("-h", "--help", action="callback", callback=help_callback);
-    parser.add_option("-i", metavar="server ip", dest="server_ip", help="The IP address of the storage server")
-    parser.add_option("--cloudstackSvr", dest="cloudstackSvr", help="cloudStack Server IP") 
-    parser.add_option("-u", metavar="username", dest="username", help="username to access the storage server with")
-    parser.add_option("-w", metavar="password", dest="password", help="the password to access the storage server with")
-    parser.add_option("-p", dest="pool_name", help="the name of the pool to allocate from") 
-    parser.add_option("-v", dest="vol_name", help="the name of volume") 
-    parser.add_option("-A", dest="algorithm", help="roundrobin or leastfull") 
-    parser.add_option("-a", dest="aggregate_name", help="The name of aggregate") 
-    parser.add_option("-o", dest="options", help="requested option string for the NFS export or attach") 
-    parser.add_option("-S", dest="snapshots", help="Snapshot schedule e.g.2 4 5@1,4 6@2,5") 
-    parser.add_option("-r", dest="percentage", help="Percentage used for snapshot reservation") 
-    parser.add_option("-s", dest="size", help="size in GB eg.1") 
-    parser.add_option("-t", dest="target_iqn", help="the target IQN") 
-    parser.add_option("-g", dest="guest_iqn", help="the guest IQN") 
-    parser.add_option("-l", dest="lun_name", help="the LUN name") 
-    
-    return parser
-
-def httpErrorHandler(code, msg):
-    try:
-        errtext = xml.dom.minidom.parseString(msg) 
-        if errtext.getElementsByTagName("errortext") is not None:
-            err = getText(errtext.getElementsByTagName("errortext")[0].childNodes).strip()
-            print err
-    except:
-        print "Internal Error %s"%msg
-    
-def getText(nodelist):
-    rc = []
-    for node in nodelist:
-        if node.nodeType == node.TEXT_NODE: rc.append(node.data)
-    return ''.join(rc)
-
-def createvol(options):
-    args = []
-    if options.pool_name == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-    if options.aggregate_name == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-    if options.vol_name == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-    
-    if options.snapshots != None:
-        args += ['--snapshotpolicy=' + options.snapshots]
-        
-    if options.size == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-        
-    if options.percentage != None:
-        args += ['--snapshotreservation=' + options.percentage]
-
-    if NetAppServerIP == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-
-    if NetAppUserName == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-    
-    if NetAppPassword == None:
-        print "Volume Manager CLI: missing operand "
-        print
-        addvolParser.parse_args(["--help"])
-
-    '''
-    snapshot = options.snapshots
-    tokens = snapshot.split(" ")
-    print tokens
-    pos = 0;
-    for token in tokens:
-        if pos == 0:
-            #week
-            try:
-                week = int(token)           
-                if week < 0:
-                    raise
-            except:
-                print "Pls input correct week"
-                sys.exit(1)
-        elif pos == 1:
-            try:
-                day = int(token)
-                if day < 0:
-                    raise
-            except:
-                print "Pls input correct day"
-                sys.exit(1)
-        
-        elif pos == 2:
-            try:
-                hours = token.split("@")
-                if int(hours[0]) < 0:
-                    raise
-                hourlists = hours[1].split(",")
-                for hour in hourlists:
-                    if int(hour) < 0 or int(hour) > 24:
-                        raise
-            except:
-                print "Pls input correct hour"
-                sys.exit(1)
-        elif pos == 3:
-            try:
-                minutes = token.split("@")
-                if int(minutes[0]) < 0:
-                    raise
-                
-                minuteslist = minutes[1].split(",")
-                for minute in minuteslist:
-                    if int(minute) < 0 or int(minute) > 60:
-                        raise
-            except:
-                print "Pls input correct hour"
-                sys.exit(1)
-                
-    '''
-    
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'createVolumeOnFiler', '--ipaddress=' + NetAppServerIP ,  '--aggregatename=' + options.aggregate_name,
-                            '--poolname=' + options.pool_name, '--volumename=' + options.vol_name,
-                            '--size=' + options.size,                  
-                            '--username=' + NetAppUserName, '--password=' + NetAppPassword, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"] + args)
-        print "Successfully added volume"
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing createvol cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing createvol cmd failed: %s" % (err.reason)
-        sys.exit(1)
-
-
-def deletevol(options):
-    validate_parameter(options, delvolParser)
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'destroyVolumeOnFiler', '--ipaddress=' + NetAppServerIP,  '--aggregatename=' + options.aggregate_name,
-                             '--volumename=' + options.vol_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        print "Successfully deleted volume"
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing deletevol cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing deletevol cmd failed: %s" % (err.reason)
-        sys.exit(1)
-        
-def listvol(options):
-    validate_parameter(options, listvolParser)
-    
-    try:
-        output = cloudtool.main(['cloud-tool', 'listVolumesOnFiler', '--poolname=' + options.pool_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"]).strip("\n")
-
-        xmlResult = xml.dom.minidom.parseString(output) 
-        print "%-10s %-20s %-20s %-40s %-20s %-30s "%('Id', 'Address', 'Aggregate', 'Volume', 'Size(GB)', 'snapshotPolicy', )
-        for volume in xmlResult.getElementsByTagName("volume"):
-            aggregatename = getText(volume.getElementsByTagName('aggregatename')[0].childNodes).strip()
-            id = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
-            volumeName = getText(volume.getElementsByTagName('volumename')[0].childNodes).strip()
-            snapshotPolicy = getText(volume.getElementsByTagName('snapshotpolicy')[0].childNodes).strip()
-            ipaddress = getText(volume.getElementsByTagName('ipaddress')[0].childNodes).strip()
-            volSize = getText(volume.getElementsByTagName('size')[0].childNodes).strip()
-            print "%-10s %-20s %-20s %-40s %-20s %-30s "%(id, ipaddress, aggregatename, volumeName, volSize, snapshotPolicy)
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing listvol cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing listvol cmd failed: %s" % (err.reason)
-        sys.exit(1)
-
-
-def createlun(options):
-    validate_parameter(options, createlunParser)
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'createLunOnFiler', '--name=' + options.pool_name,
-                                              '--size=' + options.size, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-
-        xmlResult = xml.dom.minidom.parseString(output.strip("\n"))
-        path = getText(xmlResult.getElementsByTagName("path")[0].childNodes).strip()
-        iqn = getText(xmlResult.getElementsByTagName("iqn")[0].childNodes).strip()
-        ipAddr = getText(xmlResult.getElementsByTagName('ipaddress')[0].childNodes).strip()
-        print "%-30s %-30s %-50s "%('LUN Name', 'Address', 'Target IQN')
-        print "%-30s %-30s %-50s "%(path, ipAddr, iqn)
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing createlun cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing createlun cmd failed: %s" % (err.reason)
-        sys.exit(1)
-
-def listlun(options):
-    validate_parameter(options, listlunParser)
-
-    args = ["--poolname=" + options.pool_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"]
-    try:
-        output = cloudtool.main(['cloud-tool', 'listLunsOnFiler'] + args).strip("\n")
-        xmlResult = xml.dom.minidom.parseString(output)
-        
-        print "%-10s %-10s %-50s %-30s "%('LUN Id', 'Volume Id', 'Target IQN', 'LUN Name')
-        for volume in xmlResult.getElementsByTagName("lun"):
-            uuid = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
-            path = getText(volume.getElementsByTagName('name')[0].childNodes).strip()
-            targetiqn = getText(volume.getElementsByTagName('iqn')[0].childNodes).strip()
-            volumeId = getText(volume.getElementsByTagName('volumeid')[0].childNodes).strip()
-            print "%-10s %-10s %-50s %-30s "%(uuid, volumeId, targetiqn, path)
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing listlun cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing listlun cmd failed: %s" % (err.reason)
-        sys.exit(1)
-
-def destroylun(options):
-    validate_parameter(options, destroylunParser)
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'destroyLunOnFiler', '--path=' + options.lun_name,
-                                              "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        print "Successfully destroyed LUN"
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing destroylun cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing destroylun failed: %s" % (err.reason)
-        sys.exit(1)
-
-def assoclun(options):
-    validate_parameter(options, assocLunParser)
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'associateLun', '--name=' + options.lun_name,
-                                              '--iqn=' + options.guest_iqn, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        xmlResult = xml.dom.minidom.parseString(output.strip("\n"))
-        lunid = getText(xmlResult.getElementsByTagName("id")[0].childNodes).strip()
-        iqn = getText(xmlResult.getElementsByTagName("targetiqn")[0].childNodes).strip()
-        ipAddr = getText(xmlResult.getElementsByTagName('ipaddress')[0].childNodes).strip()
-        print "%-30s %-30s %-50s "%('LUN Id', 'Address', 'Target IQN')
-        print "%-30s %-30s %-50s" % (lunid, ipAddr, iqn)
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing assoclun cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing assoclun failed: %s" % (err.reason)
-        sys.exit(1)
-        
-def disassoclun(options):
-    validate_parameter(options, disassocLunParser)
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'dissociateLun', '--path=' + options.lun_name,
-                                              '--iqn=' + options.guest_iqn, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        print "Successfully dissociated LUN"
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing disassoclun cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing disassoclun failed: %s" % (err.reason)
-        sys.exit(1)
-
-def createpool(options):
-    validate_parameter(options, createPoolParser)
-
-    if not (options.algorithm == "roundrobin" or options.algorithm == "leastfull"):
-        print "Only roundrobin or leastfull algorithm is supported"
-        sys.exit(1)
-    try:
-        output = cloudtool.main(['cloud-tool', 'createPool', '--name=' + options.pool_name,
-                                              '--algorithm=' + options.algorithm, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        print "Successfully created pool"
-    except urllib2.HTTPError, err:
-        code = err.code
-        print "executing createpool cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, err.read())
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing createpool failed: %s" % (err.reason)
-        sys.exit(1)
-
-def listpools(options):
-    try:
-        output = cloudtool.main(['cloud-tool', 'listPools',
-                                 "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        output = output.strip("\n")
-        xmlResult = xml.dom.minidom.parseString(output) 
-        print "%-10s %-40s %-10s" %('Id', 'Pool Name', 'Algorithm')
-        for volume in xmlResult.getElementsByTagName("pool"):
-            id = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
-            poolname = getText(volume.getElementsByTagName('name')[0].childNodes).strip()
-            alg = getText(volume.getElementsByTagName('algorithm')[0].childNodes).strip()
-            print "%-10s %-40s %-10s"%(id, poolname, alg)
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing listpools cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing listpools failed, due to: %s" % (err.reason)
-        sys.exit(1)
-
-def modifypool(options):
-    validate_parameter(options, modifyPoolParser)
-    
-    try:
-        output = cloudtool.main(['cloud-tool', 'modifyPool', '--poolname=' + options.pool_name,
-                                              '--algorithm=' + options.algorithm, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        print "Successfully modified pool"
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing modifypool cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing modifypool failed, due to: %s" % (err.reason)
-        sys.exit(1)
-
-def destroypool(options):
-    validate_parameter(options, destroyPoolParser)
-
-    try:
-        output = cloudtool.main(['cloud-tool', 'deletePool', '--poolname=' + options.pool_name,
-                                         "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
-        print "Successfully destroyed pool: " + options.pool_name
-    except urllib2.HTTPError, err:
-        code = err.code
-        msg = err.read()
-        print "executing destroypool cmd failed, http returning error code: %s" % (code)
-        httpErrorHandler(code, msg)
-        sys.exit(1)
-    except urllib2.URLError, err:
-        print "executing destroypool failed, due to: %s" % (err.reason)
-        sys.exit(1)
-
-def loadCfgFile():
-    options = dict()
-    try:
-        cfgFile = open(os.environ['HOME'] + "/.cloudvoladmrc")
-        for line in cfgFile:
-            option = line.split("=")
-            if option[0] == "cloudStackMgtSvrIP":
-                options["cloudStackMgtSvrIP"] = option[1].strip("\n")
-
-    except:
-        return None
-
-    return options
-        
-def getGuestIQN():
-    try:
-        initialFile = open("/etc/iscsi/initiatorname.iscsi")    
-        for line in initialFile:
-            iqn = line.split("=")
-            if iqn[0] == "InitiatorName":
-                return iqn[1].strip("\n")
-    except:
-        return None
-    return None
-
-if __name__ == '__main__':
-    parser = Help()
-    (options, args) = parser.parse_args()
-    
-    globalCfg = loadCfgFile()
-
-    NetAppServerIP= options.server_ip
-
-    NetAppUserName = options.username
-    
-    NetAppPassword = options.password
-    
-    CloudStackSvrIP = options.cloudstackSvr
-    if CloudStackSvrIP == None:
-        if globalCfg != None and "cloudStackMgtSvrIP" in globalCfg:
-            CloudStackSvrIP = globalCfg["cloudStackMgtSvrIP"]
-        if CloudStackSvrIP == None:
-            CloudStackSvrIP = "127.0.0.1"
-
-    if options.guest_iqn == None:
-        GuestIQN = getGuestIQN()    
-        options.__dict__["guest_iqn"] = GuestIQN
-
-    if len(args) == 0:
-        sys.exit(1)
-    cmd = args[0]
-    if cmd == "createvol":
-        createvol(options)
-    elif cmd == "deletevol":
-        deletevol(options)
-    elif cmd == "listvol":
-        listvol(options)
-    elif cmd == "createlun":
-        createlun(options)
-    elif cmd == "listlun":
-        listlun(options)
-    elif cmd == "destroylun":
-        destroylun(options)
-    elif cmd == "assoclun":
-        assoclun(options)
-    elif cmd == "disassoclun":
-        disassoclun(options)
-    elif cmd == "createpool":
-        createpool(options)
-    elif cmd == "modifypool":
-        modifypool(options)
-    elif cmd == "destroypool":
-        destroypool(options)
-    elif cmd == "listpools":
-        listpools(options)
-    else:
-        print "Unrecoginzied command"   
-        cmd_help()
-        sys.exit(1)
diff --git a/configure-info.in b/configure-info.in
deleted file mode 100644
index f00cdf0..0000000
--- a/configure-info.in
+++ /dev/null
@@ -1,20 +0,0 @@
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-
-These are the configure-time variables used to compile this CloudStack:
-
-@CONFIGUREVARS@
diff --git a/core/pom.xml b/core/pom.xml
index cfc5610..e95a72a 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -1,66 +1,54 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-core</artifactId>
-  <name>Apache CloudStack Core</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>    
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-security</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-      <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-compress</artifactId>
-          <version>1.15</version>
-      </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-core</artifactId>
+    <name>Apache CloudStack Core</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-security</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/core/src/com/cloud/agent/IAgentControl.java b/core/src/main/java/com/cloud/agent/IAgentControl.java
similarity index 100%
rename from core/src/com/cloud/agent/IAgentControl.java
rename to core/src/main/java/com/cloud/agent/IAgentControl.java
diff --git a/core/src/com/cloud/agent/IAgentControlListener.java b/core/src/main/java/com/cloud/agent/IAgentControlListener.java
similarity index 100%
rename from core/src/com/cloud/agent/IAgentControlListener.java
rename to core/src/main/java/com/cloud/agent/IAgentControlListener.java
diff --git a/core/src/com/cloud/agent/StartupCommandProcessor.java b/core/src/main/java/com/cloud/agent/StartupCommandProcessor.java
similarity index 100%
rename from core/src/com/cloud/agent/StartupCommandProcessor.java
rename to core/src/main/java/com/cloud/agent/StartupCommandProcessor.java
diff --git a/core/src/com/cloud/agent/api/AgentControlAnswer.java b/core/src/main/java/com/cloud/agent/api/AgentControlAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AgentControlAnswer.java
rename to core/src/main/java/com/cloud/agent/api/AgentControlAnswer.java
diff --git a/core/src/com/cloud/agent/api/AgentControlCommand.java b/core/src/main/java/com/cloud/agent/api/AgentControlCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AgentControlCommand.java
rename to core/src/main/java/com/cloud/agent/api/AgentControlCommand.java
diff --git a/core/src/com/cloud/agent/api/AttachIsoAnswer.java b/core/src/main/java/com/cloud/agent/api/AttachIsoAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AttachIsoAnswer.java
rename to core/src/main/java/com/cloud/agent/api/AttachIsoAnswer.java
diff --git a/core/src/com/cloud/agent/api/AttachIsoCommand.java b/core/src/main/java/com/cloud/agent/api/AttachIsoCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AttachIsoCommand.java
rename to core/src/main/java/com/cloud/agent/api/AttachIsoCommand.java
diff --git a/core/src/com/cloud/agent/api/AttachOrDettachConfigDriveCommand.java b/core/src/main/java/com/cloud/agent/api/AttachOrDettachConfigDriveCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AttachOrDettachConfigDriveCommand.java
rename to core/src/main/java/com/cloud/agent/api/AttachOrDettachConfigDriveCommand.java
diff --git a/core/src/com/cloud/agent/api/BackupSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/BackupSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/BackupSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/BackupSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/BackupSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/BackupSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/BackupSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/BackupSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/BumpUpPriorityCommand.java b/core/src/main/java/com/cloud/agent/api/BumpUpPriorityCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/BumpUpPriorityCommand.java
rename to core/src/main/java/com/cloud/agent/api/BumpUpPriorityCommand.java
diff --git a/core/src/com/cloud/agent/api/CancelCommand.java b/core/src/main/java/com/cloud/agent/api/CancelCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CancelCommand.java
rename to core/src/main/java/com/cloud/agent/api/CancelCommand.java
diff --git a/core/src/com/cloud/agent/api/ChangeAgentAnswer.java b/core/src/main/java/com/cloud/agent/api/ChangeAgentAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ChangeAgentAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ChangeAgentAnswer.java
diff --git a/core/src/com/cloud/agent/api/ChangeAgentCommand.java b/core/src/main/java/com/cloud/agent/api/ChangeAgentCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ChangeAgentCommand.java
rename to core/src/main/java/com/cloud/agent/api/ChangeAgentCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckHealthAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckHealthAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckHealthAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckHealthAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckHealthCommand.java b/core/src/main/java/com/cloud/agent/api/CheckHealthCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckHealthCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckHealthCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckNetworkAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckNetworkAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckNetworkAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckNetworkAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckNetworkCommand.java b/core/src/main/java/com/cloud/agent/api/CheckNetworkCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckNetworkCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckNetworkCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckOnHostAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckOnHostAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckOnHostAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckOnHostAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckOnHostCommand.java b/core/src/main/java/com/cloud/agent/api/CheckOnHostCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckOnHostCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckOnHostCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckRouterAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckRouterAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckRouterAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckRouterAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckRouterCommand.java b/core/src/main/java/com/cloud/agent/api/CheckRouterCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckRouterCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckRouterCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java b/core/src/main/java/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckStateAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckStateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckStateAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckStateAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckStateCommand.java b/core/src/main/java/com/cloud/agent/api/CheckStateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckStateCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckStateCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckVMActivityOnStoragePoolCommand.java b/core/src/main/java/com/cloud/agent/api/CheckVMActivityOnStoragePoolCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckVMActivityOnStoragePoolCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckVMActivityOnStoragePoolCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java b/core/src/main/java/com/cloud/agent/api/CheckVirtualMachineAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CheckVirtualMachineAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckVirtualMachineCommand.java b/core/src/main/java/com/cloud/agent/api/CheckVirtualMachineCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckVirtualMachineCommand.java
rename to core/src/main/java/com/cloud/agent/api/CheckVirtualMachineCommand.java
diff --git a/core/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java b/core/src/main/java/com/cloud/agent/api/CleanupNetworkRulesCmd.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java
rename to core/src/main/java/com/cloud/agent/api/CleanupNetworkRulesCmd.java
diff --git a/core/src/com/cloud/agent/api/ClusterVMMetaDataSyncAnswer.java b/core/src/main/java/com/cloud/agent/api/ClusterVMMetaDataSyncAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ClusterVMMetaDataSyncAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ClusterVMMetaDataSyncAnswer.java
diff --git a/core/src/com/cloud/agent/api/ClusterVMMetaDataSyncCommand.java b/core/src/main/java/com/cloud/agent/api/ClusterVMMetaDataSyncCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ClusterVMMetaDataSyncCommand.java
rename to core/src/main/java/com/cloud/agent/api/ClusterVMMetaDataSyncCommand.java
diff --git a/core/src/com/cloud/agent/api/ComputeChecksumCommand.java b/core/src/main/java/com/cloud/agent/api/ComputeChecksumCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ComputeChecksumCommand.java
rename to core/src/main/java/com/cloud/agent/api/ComputeChecksumCommand.java
diff --git a/core/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java b/core/src/main/java/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java
diff --git a/core/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java b/core/src/main/java/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java
rename to core/src/main/java/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java
diff --git a/core/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java b/core/src/main/java/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java
rename to core/src/main/java/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java
diff --git a/core/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java b/core/src/main/java/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java
rename to core/src/main/java/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java
diff --git a/core/src/com/cloud/agent/api/CreateStoragePoolCommand.java b/core/src/main/java/com/cloud/agent/api/CreateStoragePoolCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateStoragePoolCommand.java
rename to core/src/main/java/com/cloud/agent/api/CreateStoragePoolCommand.java
diff --git a/core/src/com/cloud/agent/api/CreateVMSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/CreateVMSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVMSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CreateVMSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/CreateVMSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/CreateVMSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CronCommand.java b/core/src/main/java/com/cloud/agent/api/CronCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CronCommand.java
rename to core/src/main/java/com/cloud/agent/api/CronCommand.java
diff --git a/core/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java b/core/src/main/java/com/cloud/agent/api/DeleteSnapshotsDirCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java
rename to core/src/main/java/com/cloud/agent/api/DeleteSnapshotsDirCommand.java
diff --git a/core/src/com/cloud/agent/api/DeleteStoragePoolCommand.java b/core/src/main/java/com/cloud/agent/api/DeleteStoragePoolCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteStoragePoolCommand.java
rename to core/src/main/java/com/cloud/agent/api/DeleteStoragePoolCommand.java
diff --git a/core/src/com/cloud/agent/api/DeleteVMSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/DeleteVMSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteVMSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/DeleteVMSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/DeleteVMSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/DeleteVMSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteVMSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/DeleteVMSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/DirectNetworkUsageAnswer.java b/core/src/main/java/com/cloud/agent/api/DirectNetworkUsageAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DirectNetworkUsageAnswer.java
rename to core/src/main/java/com/cloud/agent/api/DirectNetworkUsageAnswer.java
diff --git a/core/src/com/cloud/agent/api/DirectNetworkUsageCommand.java b/core/src/main/java/com/cloud/agent/api/DirectNetworkUsageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DirectNetworkUsageCommand.java
rename to core/src/main/java/com/cloud/agent/api/DirectNetworkUsageCommand.java
diff --git a/core/src/com/cloud/agent/api/ExternalNetworkResourceUsageAnswer.java b/core/src/main/java/com/cloud/agent/api/ExternalNetworkResourceUsageAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ExternalNetworkResourceUsageAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ExternalNetworkResourceUsageAnswer.java
diff --git a/core/src/com/cloud/agent/api/ExternalNetworkResourceUsageCommand.java b/core/src/main/java/com/cloud/agent/api/ExternalNetworkResourceUsageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ExternalNetworkResourceUsageCommand.java
rename to core/src/main/java/com/cloud/agent/api/ExternalNetworkResourceUsageCommand.java
diff --git a/core/src/com/cloud/agent/api/FenceAnswer.java b/core/src/main/java/com/cloud/agent/api/FenceAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/FenceAnswer.java
rename to core/src/main/java/com/cloud/agent/api/FenceAnswer.java
diff --git a/core/src/com/cloud/agent/api/FenceCommand.java b/core/src/main/java/com/cloud/agent/api/FenceCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/FenceCommand.java
rename to core/src/main/java/com/cloud/agent/api/FenceCommand.java
diff --git a/core/src/com/cloud/agent/api/GetDomRVersionAnswer.java b/core/src/main/java/com/cloud/agent/api/GetDomRVersionAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetDomRVersionAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetDomRVersionAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetDomRVersionCmd.java b/core/src/main/java/com/cloud/agent/api/GetDomRVersionCmd.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetDomRVersionCmd.java
rename to core/src/main/java/com/cloud/agent/api/GetDomRVersionCmd.java
diff --git a/core/src/com/cloud/agent/api/GetGPUStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetGPUStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetGPUStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetGPUStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetGPUStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetGPUStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetGPUStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetGPUStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetHostStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetHostStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetHostStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetHostStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetHostStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetHostStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetHostStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetHostStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetRouterAlertsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetRouterAlertsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetRouterAlertsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetRouterAlertsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetStorageStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetStorageStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetStorageStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetStorageStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetStorageStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetStorageStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVmConfigAnswer.java b/core/src/main/java/com/cloud/agent/api/GetVmConfigAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmConfigAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetVmConfigAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVmConfigCommand.java b/core/src/main/java/com/cloud/agent/api/GetVmConfigCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmConfigCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVmConfigCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVmDiskStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetVmDiskStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmDiskStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetVmDiskStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVmDiskStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetVmDiskStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmDiskStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVmDiskStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVmIpAddressCommand.java b/core/src/main/java/com/cloud/agent/api/GetVmIpAddressCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmIpAddressCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVmIpAddressCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVmNetworkStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetVmNetworkStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmNetworkStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetVmNetworkStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVmNetworkStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetVmNetworkStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmNetworkStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVmNetworkStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVmStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetVmStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetVmStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVmStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetVmStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVmStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVncPortAnswer.java b/core/src/main/java/com/cloud/agent/api/GetVncPortAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVncPortAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetVncPortAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVncPortCommand.java b/core/src/main/java/com/cloud/agent/api/GetVncPortCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVncPortCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVncPortCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVolumeStatsAnswer.java b/core/src/main/java/com/cloud/agent/api/GetVolumeStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVolumeStatsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/GetVolumeStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVolumeStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetVolumeStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVolumeStatsCommand.java
rename to core/src/main/java/com/cloud/agent/api/GetVolumeStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/HandleConfigDriveIsoCommand.java b/core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/HandleConfigDriveIsoCommand.java
rename to core/src/main/java/com/cloud/agent/api/HandleConfigDriveIsoCommand.java
diff --git a/core/src/com/cloud/agent/api/HostStatsEntry.java b/core/src/main/java/com/cloud/agent/api/HostStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/HostStatsEntry.java
rename to core/src/main/java/com/cloud/agent/api/HostStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/MaintainAnswer.java b/core/src/main/java/com/cloud/agent/api/MaintainAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MaintainAnswer.java
rename to core/src/main/java/com/cloud/agent/api/MaintainAnswer.java
diff --git a/core/src/com/cloud/agent/api/MaintainCommand.java b/core/src/main/java/com/cloud/agent/api/MaintainCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MaintainCommand.java
rename to core/src/main/java/com/cloud/agent/api/MaintainCommand.java
diff --git a/core/src/com/cloud/agent/api/ManageSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/ManageSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ManageSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ManageSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/ManageSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/ManageSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ManageSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/ManageSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/MigrateAnswer.java b/core/src/main/java/com/cloud/agent/api/MigrateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateAnswer.java
rename to core/src/main/java/com/cloud/agent/api/MigrateAnswer.java
diff --git a/core/src/com/cloud/agent/api/MigrateCommand.java b/core/src/main/java/com/cloud/agent/api/MigrateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateCommand.java
rename to core/src/main/java/com/cloud/agent/api/MigrateCommand.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageAnswer.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageAnswer.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageAnswer.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageCommand.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageCommand.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageCommand.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageCompleteAnswer.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageCompleteAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageCompleteAnswer.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageCompleteAnswer.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageCompleteCommand.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageCompleteCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageCompleteCommand.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageCompleteCommand.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageReceiveAnswer.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageReceiveAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageReceiveAnswer.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageReceiveAnswer.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageReceiveCommand.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageReceiveCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageReceiveCommand.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageReceiveCommand.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageSendAnswer.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageSendAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageSendAnswer.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageSendAnswer.java
diff --git a/core/src/com/cloud/agent/api/MigrateWithStorageSendCommand.java b/core/src/main/java/com/cloud/agent/api/MigrateWithStorageSendCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateWithStorageSendCommand.java
rename to core/src/main/java/com/cloud/agent/api/MigrateWithStorageSendCommand.java
diff --git a/core/src/com/cloud/agent/api/ModifySshKeysCommand.java b/core/src/main/java/com/cloud/agent/api/ModifySshKeysCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifySshKeysCommand.java
rename to core/src/main/java/com/cloud/agent/api/ModifySshKeysCommand.java
diff --git a/core/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java b/core/src/main/java/com/cloud/agent/api/ModifyStoragePoolAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ModifyStoragePoolAnswer.java
diff --git a/core/src/com/cloud/agent/api/ModifyStoragePoolCommand.java b/core/src/main/java/com/cloud/agent/api/ModifyStoragePoolCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifyStoragePoolCommand.java
rename to core/src/main/java/com/cloud/agent/api/ModifyStoragePoolCommand.java
diff --git a/core/src/com/cloud/agent/api/ModifyTargetsAnswer.java b/core/src/main/java/com/cloud/agent/api/ModifyTargetsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifyTargetsAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ModifyTargetsAnswer.java
diff --git a/core/src/com/cloud/agent/api/ModifyTargetsCommand.java b/core/src/main/java/com/cloud/agent/api/ModifyTargetsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifyTargetsCommand.java
rename to core/src/main/java/com/cloud/agent/api/ModifyTargetsCommand.java
diff --git a/core/src/com/cloud/agent/api/ModifyVmNicConfigAnswer.java b/core/src/main/java/com/cloud/agent/api/ModifyVmNicConfigAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifyVmNicConfigAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ModifyVmNicConfigAnswer.java
diff --git a/core/src/com/cloud/agent/api/ModifyVmNicConfigCommand.java b/core/src/main/java/com/cloud/agent/api/ModifyVmNicConfigCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifyVmNicConfigCommand.java
rename to core/src/main/java/com/cloud/agent/api/ModifyVmNicConfigCommand.java
diff --git a/core/src/com/cloud/agent/api/NetScalerImplementNetworkCommand.java b/core/src/main/java/com/cloud/agent/api/NetScalerImplementNetworkCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/NetScalerImplementNetworkCommand.java
rename to core/src/main/java/com/cloud/agent/api/NetScalerImplementNetworkCommand.java
diff --git a/core/src/com/cloud/agent/api/NetworkRulesSystemVmCommand.java b/core/src/main/java/com/cloud/agent/api/NetworkRulesSystemVmCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/NetworkRulesSystemVmCommand.java
rename to core/src/main/java/com/cloud/agent/api/NetworkRulesSystemVmCommand.java
diff --git a/core/src/com/cloud/agent/api/NetworkRulesVmSecondaryIpCommand.java b/core/src/main/java/com/cloud/agent/api/NetworkRulesVmSecondaryIpCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/NetworkRulesVmSecondaryIpCommand.java
rename to core/src/main/java/com/cloud/agent/api/NetworkRulesVmSecondaryIpCommand.java
diff --git a/core/src/com/cloud/agent/api/NetworkUsageAnswer.java b/core/src/main/java/com/cloud/agent/api/NetworkUsageAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/NetworkUsageAnswer.java
rename to core/src/main/java/com/cloud/agent/api/NetworkUsageAnswer.java
diff --git a/core/src/com/cloud/agent/api/NetworkUsageCommand.java b/core/src/main/java/com/cloud/agent/api/NetworkUsageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/NetworkUsageCommand.java
rename to core/src/main/java/com/cloud/agent/api/NetworkUsageCommand.java
diff --git a/core/src/com/cloud/agent/api/PerformanceMonitorAnswer.java b/core/src/main/java/com/cloud/agent/api/PerformanceMonitorAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PerformanceMonitorAnswer.java
rename to core/src/main/java/com/cloud/agent/api/PerformanceMonitorAnswer.java
diff --git a/core/src/com/cloud/agent/api/PerformanceMonitorCommand.java b/core/src/main/java/com/cloud/agent/api/PerformanceMonitorCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PerformanceMonitorCommand.java
rename to core/src/main/java/com/cloud/agent/api/PerformanceMonitorCommand.java
diff --git a/core/src/com/cloud/agent/api/PingAnswer.java b/core/src/main/java/com/cloud/agent/api/PingAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingAnswer.java
rename to core/src/main/java/com/cloud/agent/api/PingAnswer.java
diff --git a/core/src/com/cloud/agent/api/PingCommand.java b/core/src/main/java/com/cloud/agent/api/PingCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingCommand.java
rename to core/src/main/java/com/cloud/agent/api/PingCommand.java
diff --git a/core/src/com/cloud/agent/api/PingRoutingCommand.java b/core/src/main/java/com/cloud/agent/api/PingRoutingCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingRoutingCommand.java
rename to core/src/main/java/com/cloud/agent/api/PingRoutingCommand.java
diff --git a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java b/core/src/main/java/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
rename to core/src/main/java/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
diff --git a/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java b/core/src/main/java/com/cloud/agent/api/PingRoutingWithOvsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
rename to core/src/main/java/com/cloud/agent/api/PingRoutingWithOvsCommand.java
diff --git a/core/src/com/cloud/agent/api/PingStorageCommand.java b/core/src/main/java/com/cloud/agent/api/PingStorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingStorageCommand.java
rename to core/src/main/java/com/cloud/agent/api/PingStorageCommand.java
diff --git a/core/src/com/cloud/agent/api/PingTestCommand.java b/core/src/main/java/com/cloud/agent/api/PingTestCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingTestCommand.java
rename to core/src/main/java/com/cloud/agent/api/PingTestCommand.java
diff --git a/core/src/com/cloud/agent/api/PlugNicAnswer.java b/core/src/main/java/com/cloud/agent/api/PlugNicAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PlugNicAnswer.java
rename to core/src/main/java/com/cloud/agent/api/PlugNicAnswer.java
diff --git a/core/src/com/cloud/agent/api/PlugNicCommand.java b/core/src/main/java/com/cloud/agent/api/PlugNicCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PlugNicCommand.java
rename to core/src/main/java/com/cloud/agent/api/PlugNicCommand.java
diff --git a/core/src/com/cloud/agent/api/PrepareForMigrationAnswer.java b/core/src/main/java/com/cloud/agent/api/PrepareForMigrationAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PrepareForMigrationAnswer.java
rename to core/src/main/java/com/cloud/agent/api/PrepareForMigrationAnswer.java
diff --git a/core/src/com/cloud/agent/api/PrepareForMigrationCommand.java b/core/src/main/java/com/cloud/agent/api/PrepareForMigrationCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PrepareForMigrationCommand.java
rename to core/src/main/java/com/cloud/agent/api/PrepareForMigrationCommand.java
diff --git a/core/src/com/cloud/agent/api/PrepareOCFS2NodesCommand.java b/core/src/main/java/com/cloud/agent/api/PrepareOCFS2NodesCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PrepareOCFS2NodesCommand.java
rename to core/src/main/java/com/cloud/agent/api/PrepareOCFS2NodesCommand.java
diff --git a/core/src/com/cloud/agent/api/PropagateResourceEventCommand.java b/core/src/main/java/com/cloud/agent/api/PropagateResourceEventCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PropagateResourceEventCommand.java
rename to core/src/main/java/com/cloud/agent/api/PropagateResourceEventCommand.java
diff --git a/core/src/com/cloud/agent/api/ReadyAnswer.java b/core/src/main/java/com/cloud/agent/api/ReadyAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ReadyAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ReadyAnswer.java
diff --git a/core/src/com/cloud/agent/api/ReadyCommand.java b/core/src/main/java/com/cloud/agent/api/ReadyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ReadyCommand.java
rename to core/src/main/java/com/cloud/agent/api/ReadyCommand.java
diff --git a/core/src/com/cloud/agent/api/RebootAnswer.java b/core/src/main/java/com/cloud/agent/api/RebootAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RebootAnswer.java
rename to core/src/main/java/com/cloud/agent/api/RebootAnswer.java
diff --git a/core/src/com/cloud/agent/api/RebootCommand.java b/core/src/main/java/com/cloud/agent/api/RebootCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RebootCommand.java
rename to core/src/main/java/com/cloud/agent/api/RebootCommand.java
diff --git a/core/src/com/cloud/agent/api/RebootRouterCommand.java b/core/src/main/java/com/cloud/agent/api/RebootRouterCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RebootRouterCommand.java
rename to core/src/main/java/com/cloud/agent/api/RebootRouterCommand.java
diff --git a/core/src/com/cloud/agent/api/RecurringNetworkUsageAnswer.java b/core/src/main/java/com/cloud/agent/api/RecurringNetworkUsageAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RecurringNetworkUsageAnswer.java
rename to core/src/main/java/com/cloud/agent/api/RecurringNetworkUsageAnswer.java
diff --git a/core/src/com/cloud/agent/api/RecurringNetworkUsageCommand.java b/core/src/main/java/com/cloud/agent/api/RecurringNetworkUsageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RecurringNetworkUsageCommand.java
rename to core/src/main/java/com/cloud/agent/api/RecurringNetworkUsageCommand.java
diff --git a/core/src/com/cloud/agent/api/ReplugNicAnswer.java b/core/src/main/java/com/cloud/agent/api/ReplugNicAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ReplugNicAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ReplugNicAnswer.java
diff --git a/core/src/com/cloud/agent/api/ReplugNicCommand.java b/core/src/main/java/com/cloud/agent/api/ReplugNicCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ReplugNicCommand.java
rename to core/src/main/java/com/cloud/agent/api/ReplugNicCommand.java
diff --git a/core/src/com/cloud/agent/api/RestoreVMSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/RestoreVMSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RestoreVMSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/RestoreVMSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/RestoreVMSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/RestoreVMSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RestoreVMSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/RestoreVMSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/RevertToVMSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/RevertToVMSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/ScaleVmAnswer.java b/core/src/main/java/com/cloud/agent/api/ScaleVmAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ScaleVmAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ScaleVmAnswer.java
diff --git a/core/src/com/cloud/agent/api/ScaleVmCommand.java b/core/src/main/java/com/cloud/agent/api/ScaleVmCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ScaleVmCommand.java
rename to core/src/main/java/com/cloud/agent/api/ScaleVmCommand.java
diff --git a/core/src/com/cloud/agent/api/ScheduleHostScanTaskCommand.java b/core/src/main/java/com/cloud/agent/api/ScheduleHostScanTaskCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ScheduleHostScanTaskCommand.java
rename to core/src/main/java/com/cloud/agent/api/ScheduleHostScanTaskCommand.java
diff --git a/core/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java b/core/src/main/java/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
rename to core/src/main/java/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
diff --git a/core/src/com/cloud/agent/api/SecStorageSetupAnswer.java b/core/src/main/java/com/cloud/agent/api/SecStorageSetupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecStorageSetupAnswer.java
rename to core/src/main/java/com/cloud/agent/api/SecStorageSetupAnswer.java
diff --git a/core/src/com/cloud/agent/api/SecStorageSetupCommand.java b/core/src/main/java/com/cloud/agent/api/SecStorageSetupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecStorageSetupCommand.java
rename to core/src/main/java/com/cloud/agent/api/SecStorageSetupCommand.java
diff --git a/core/src/com/cloud/agent/api/SecStorageVMSetupCommand.java b/core/src/main/java/com/cloud/agent/api/SecStorageVMSetupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecStorageVMSetupCommand.java
rename to core/src/main/java/com/cloud/agent/api/SecStorageVMSetupCommand.java
diff --git a/core/src/com/cloud/agent/api/SecurityGroupRuleAnswer.java b/core/src/main/java/com/cloud/agent/api/SecurityGroupRuleAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecurityGroupRuleAnswer.java
rename to core/src/main/java/com/cloud/agent/api/SecurityGroupRuleAnswer.java
diff --git a/core/src/com/cloud/agent/api/SecurityGroupRulesCmd.java b/core/src/main/java/com/cloud/agent/api/SecurityGroupRulesCmd.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecurityGroupRulesCmd.java
rename to core/src/main/java/com/cloud/agent/api/SecurityGroupRulesCmd.java
diff --git a/core/src/com/cloud/agent/api/SetHostParamsCommand.java b/core/src/main/java/com/cloud/agent/api/SetHostParamsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SetHostParamsCommand.java
rename to core/src/main/java/com/cloud/agent/api/SetHostParamsCommand.java
diff --git a/core/src/com/cloud/agent/api/SetupAnswer.java b/core/src/main/java/com/cloud/agent/api/SetupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SetupAnswer.java
rename to core/src/main/java/com/cloud/agent/api/SetupAnswer.java
diff --git a/core/src/com/cloud/agent/api/SetupCommand.java b/core/src/main/java/com/cloud/agent/api/SetupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SetupCommand.java
rename to core/src/main/java/com/cloud/agent/api/SetupCommand.java
diff --git a/core/src/com/cloud/agent/api/SetupGuestNetworkCommand.java b/core/src/main/java/com/cloud/agent/api/SetupGuestNetworkCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SetupGuestNetworkCommand.java
rename to core/src/main/java/com/cloud/agent/api/SetupGuestNetworkCommand.java
diff --git a/core/src/com/cloud/agent/api/ShutdownCommand.java b/core/src/main/java/com/cloud/agent/api/ShutdownCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ShutdownCommand.java
rename to core/src/main/java/com/cloud/agent/api/ShutdownCommand.java
diff --git a/core/src/com/cloud/agent/api/SnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/SnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/SnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/StartAnswer.java b/core/src/main/java/com/cloud/agent/api/StartAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartAnswer.java
rename to core/src/main/java/com/cloud/agent/api/StartAnswer.java
diff --git a/core/src/com/cloud/agent/api/StartCommand.java b/core/src/main/java/com/cloud/agent/api/StartCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupAnswer.java b/core/src/main/java/com/cloud/agent/api/StartupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupAnswer.java
rename to core/src/main/java/com/cloud/agent/api/StartupAnswer.java
diff --git a/core/src/com/cloud/agent/api/StartupCommand.java b/core/src/main/java/com/cloud/agent/api/StartupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupExternalDhcpCommand.java b/core/src/main/java/com/cloud/agent/api/StartupExternalDhcpCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupExternalDhcpCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupExternalDhcpCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupExternalFirewallCommand.java b/core/src/main/java/com/cloud/agent/api/StartupExternalFirewallCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupExternalFirewallCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupExternalFirewallCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java b/core/src/main/java/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupProxyCommand.java b/core/src/main/java/com/cloud/agent/api/StartupProxyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupProxyCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupProxyCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupPxeServerCommand.java b/core/src/main/java/com/cloud/agent/api/StartupPxeServerCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupPxeServerCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupPxeServerCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupRoutingCommand.java b/core/src/main/java/com/cloud/agent/api/StartupRoutingCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupRoutingCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupRoutingCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupSecondaryStorageCommand.java b/core/src/main/java/com/cloud/agent/api/StartupSecondaryStorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupSecondaryStorageCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupSecondaryStorageCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupStorageCommand.java b/core/src/main/java/com/cloud/agent/api/StartupStorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupStorageCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupStorageCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupTrafficMonitorCommand.java b/core/src/main/java/com/cloud/agent/api/StartupTrafficMonitorCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupTrafficMonitorCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupTrafficMonitorCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupVMMAgentCommand.java b/core/src/main/java/com/cloud/agent/api/StartupVMMAgentCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupVMMAgentCommand.java
rename to core/src/main/java/com/cloud/agent/api/StartupVMMAgentCommand.java
diff --git a/core/src/com/cloud/agent/api/StopAnswer.java b/core/src/main/java/com/cloud/agent/api/StopAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StopAnswer.java
rename to core/src/main/java/com/cloud/agent/api/StopAnswer.java
diff --git a/core/src/com/cloud/agent/api/StopCommand.java b/core/src/main/java/com/cloud/agent/api/StopCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StopCommand.java
rename to core/src/main/java/com/cloud/agent/api/StopCommand.java
diff --git a/core/src/com/cloud/agent/api/TransferAgentCommand.java b/core/src/main/java/com/cloud/agent/api/TransferAgentCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/TransferAgentCommand.java
rename to core/src/main/java/com/cloud/agent/api/TransferAgentCommand.java
diff --git a/core/src/com/cloud/agent/api/UnPlugNicAnswer.java b/core/src/main/java/com/cloud/agent/api/UnPlugNicAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UnPlugNicAnswer.java
rename to core/src/main/java/com/cloud/agent/api/UnPlugNicAnswer.java
diff --git a/core/src/com/cloud/agent/api/UnPlugNicCommand.java b/core/src/main/java/com/cloud/agent/api/UnPlugNicCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UnPlugNicCommand.java
rename to core/src/main/java/com/cloud/agent/api/UnPlugNicCommand.java
diff --git a/core/src/com/cloud/agent/api/UnregisterNicCommand.java b/core/src/main/java/com/cloud/agent/api/UnregisterNicCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UnregisterNicCommand.java
rename to core/src/main/java/com/cloud/agent/api/UnregisterNicCommand.java
diff --git a/core/src/com/cloud/agent/api/UnregisterVMCommand.java b/core/src/main/java/com/cloud/agent/api/UnregisterVMCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UnregisterVMCommand.java
rename to core/src/main/java/com/cloud/agent/api/UnregisterVMCommand.java
diff --git a/core/src/com/cloud/agent/api/UpdateHostPasswordCommand.java b/core/src/main/java/com/cloud/agent/api/UpdateHostPasswordCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UpdateHostPasswordCommand.java
rename to core/src/main/java/com/cloud/agent/api/UpdateHostPasswordCommand.java
diff --git a/core/src/com/cloud/agent/api/UpgradeSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/UpgradeSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UpgradeSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/UpgradeSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java b/core/src/main/java/com/cloud/agent/api/VMSnapshotBaseCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java
rename to core/src/main/java/com/cloud/agent/api/VMSnapshotBaseCommand.java
diff --git a/core/src/com/cloud/agent/api/VMSnapshotTO.java b/core/src/main/java/com/cloud/agent/api/VMSnapshotTO.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VMSnapshotTO.java
rename to core/src/main/java/com/cloud/agent/api/VMSnapshotTO.java
diff --git a/core/src/com/cloud/agent/api/ValidateSnapshotAnswer.java b/core/src/main/java/com/cloud/agent/api/ValidateSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ValidateSnapshotAnswer.java
rename to core/src/main/java/com/cloud/agent/api/ValidateSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/ValidateSnapshotCommand.java b/core/src/main/java/com/cloud/agent/api/ValidateSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ValidateSnapshotCommand.java
rename to core/src/main/java/com/cloud/agent/api/ValidateSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/VmDiskStatsEntry.java b/core/src/main/java/com/cloud/agent/api/VmDiskStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VmDiskStatsEntry.java
rename to core/src/main/java/com/cloud/agent/api/VmDiskStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/VmNetworkStatsEntry.java b/core/src/main/java/com/cloud/agent/api/VmNetworkStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VmNetworkStatsEntry.java
rename to core/src/main/java/com/cloud/agent/api/VmNetworkStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/VmStatsEntry.java b/core/src/main/java/com/cloud/agent/api/VmStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VmStatsEntry.java
rename to core/src/main/java/com/cloud/agent/api/VmStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/VolumeStatsEntry.java b/core/src/main/java/com/cloud/agent/api/VolumeStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VolumeStatsEntry.java
rename to core/src/main/java/com/cloud/agent/api/VolumeStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java b/core/src/main/java/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java
rename to core/src/main/java/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java
diff --git a/core/src/com/cloud/agent/api/baremetal/IpmiBootorResetCommand.java b/core/src/main/java/com/cloud/agent/api/baremetal/IpmiBootorResetCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/baremetal/IpmiBootorResetCommand.java
rename to core/src/main/java/com/cloud/agent/api/baremetal/IpmiBootorResetCommand.java
diff --git a/core/src/com/cloud/agent/api/baremetal/PrepareCreateTemplateCommand.java b/core/src/main/java/com/cloud/agent/api/baremetal/PrepareCreateTemplateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/baremetal/PrepareCreateTemplateCommand.java
rename to core/src/main/java/com/cloud/agent/api/baremetal/PrepareCreateTemplateCommand.java
diff --git a/core/src/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java b/core/src/main/java/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java
rename to core/src/main/java/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java
diff --git a/core/src/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java b/core/src/main/java/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java
rename to core/src/main/java/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java
diff --git a/core/src/com/cloud/agent/api/check/CheckSshAnswer.java b/core/src/main/java/com/cloud/agent/api/check/CheckSshAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/check/CheckSshAnswer.java
rename to core/src/main/java/com/cloud/agent/api/check/CheckSshAnswer.java
diff --git a/core/src/com/cloud/agent/api/check/CheckSshCommand.java b/core/src/main/java/com/cloud/agent/api/check/CheckSshCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/check/CheckSshCommand.java
rename to core/src/main/java/com/cloud/agent/api/check/CheckSshCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java b/core/src/main/java/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java
rename to core/src/main/java/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java b/core/src/main/java/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java
rename to core/src/main/java/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java
diff --git a/core/src/com/cloud/agent/api/proxy/ProxyCommand.java b/core/src/main/java/com/cloud/agent/api/proxy/ProxyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/ProxyCommand.java
rename to core/src/main/java/com/cloud/agent/api/proxy/ProxyCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java b/core/src/main/java/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java
rename to core/src/main/java/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java b/core/src/main/java/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java
rename to core/src/main/java/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/AggregationControlCommand.java b/core/src/main/java/com/cloud/agent/api/routing/AggregationControlCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/AggregationControlCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/AggregationControlCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/CreateIpAliasCommand.java b/core/src/main/java/com/cloud/agent/api/routing/CreateIpAliasCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/CreateIpAliasCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/CreateIpAliasCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java b/core/src/main/java/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/DeleteIpAliasCommand.java b/core/src/main/java/com/cloud/agent/api/routing/DeleteIpAliasCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/DeleteIpAliasCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/DeleteIpAliasCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/DestroyLoadBalancerApplianceCommand.java b/core/src/main/java/com/cloud/agent/api/routing/DestroyLoadBalancerApplianceCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/DestroyLoadBalancerApplianceCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/DestroyLoadBalancerApplianceCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/DhcpEntryCommand.java b/core/src/main/java/com/cloud/agent/api/routing/DhcpEntryCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/DhcpEntryCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/DhcpEntryCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java b/core/src/main/java/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/GetRouterAlertsCommand.java b/core/src/main/java/com/cloud/agent/api/routing/GetRouterAlertsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/GetRouterAlertsCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/GetRouterAlertsCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/GlobalLoadBalancerConfigAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/GlobalLoadBalancerConfigAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java b/core/src/main/java/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/GroupAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/GroupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/GroupAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/GroupAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/HealthCheckLBConfigAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/HealthCheckLBConfigAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/HealthCheckLBConfigAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/HealthCheckLBConfigAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/HealthCheckLBConfigCommand.java b/core/src/main/java/com/cloud/agent/api/routing/HealthCheckLBConfigCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/HealthCheckLBConfigCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/HealthCheckLBConfigCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/IpAliasTO.java b/core/src/main/java/com/cloud/agent/api/routing/IpAliasTO.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/IpAliasTO.java
rename to core/src/main/java/com/cloud/agent/api/routing/IpAliasTO.java
diff --git a/core/src/com/cloud/agent/api/routing/IpAssocAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/IpAssocAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/IpAssocAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/IpAssocAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/IpAssocCommand.java b/core/src/main/java/com/cloud/agent/api/routing/IpAssocCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/IpAssocCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/IpAssocCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/IpAssocVpcCommand.java b/core/src/main/java/com/cloud/agent/api/routing/IpAssocVpcCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/IpAssocVpcCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/IpAssocVpcCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java b/core/src/main/java/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java b/core/src/main/java/com/cloud/agent/api/routing/NetworkElementCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/NetworkElementCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/NetworkElementCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java b/core/src/main/java/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SavePasswordCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SavePasswordCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SavePasswordCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SavePasswordCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/SetFirewallRulesCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetFirewallRulesCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetFirewallRulesCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetFirewallRulesCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetMonitorServiceCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetMonitorServiceCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetMonitorServiceCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetMonitorServiceCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetNetworkACLAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/SetNetworkACLAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetNetworkACLAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetNetworkACLAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/SetNetworkACLCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetNetworkACLCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetNetworkACLCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetNetworkACLCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetSourceNatAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/SetSourceNatAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetSourceNatAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetSourceNatAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/SetSourceNatCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetSourceNatCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetSourceNatCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetSourceNatCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SetStaticRouteAnswer.java b/core/src/main/java/com/cloud/agent/api/routing/SetStaticRouteAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetStaticRouteAnswer.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetStaticRouteAnswer.java
diff --git a/core/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java b/core/src/main/java/com/cloud/agent/api/routing/SetStaticRouteCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/SetStaticRouteCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java b/core/src/main/java/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SiteLoadBalancerConfig.java b/core/src/main/java/com/cloud/agent/api/routing/SiteLoadBalancerConfig.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SiteLoadBalancerConfig.java
rename to core/src/main/java/com/cloud/agent/api/routing/SiteLoadBalancerConfig.java
diff --git a/core/src/com/cloud/agent/api/routing/UserDataCommand.java b/core/src/main/java/com/cloud/agent/api/routing/UserDataCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/UserDataCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/UserDataCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/VmDataCommand.java b/core/src/main/java/com/cloud/agent/api/routing/VmDataCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/VmDataCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/VmDataCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java b/core/src/main/java/com/cloud/agent/api/routing/VpnUsersCfgCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java
rename to core/src/main/java/com/cloud/agent/api/routing/VpnUsersCfgCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java b/core/src/main/java/com/cloud/agent/api/storage/AbstractDownloadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/AbstractDownloadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/AbstractUploadCommand.java b/core/src/main/java/com/cloud/agent/api/storage/AbstractUploadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/AbstractUploadCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/AbstractUploadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/CopyVolumeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/CopyVolumeAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CopyVolumeCommand.java b/core/src/main/java/com/cloud/agent/api/storage/CopyVolumeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CopyVolumeCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/CopyVolumeCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/CreateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreateAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateCommand.java b/core/src/main/java/com/cloud/agent/api/storage/CreateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreateCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateDatadiskTemplateAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateDatadiskTemplateAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateDatadiskTemplateCommand.java b/core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateDatadiskTemplateCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java b/core/src/main/java/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java b/core/src/main/java/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java b/core/src/main/java/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/DestroyAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/DestroyAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DestroyAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/DestroyAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/DestroyCommand.java b/core/src/main/java/com/cloud/agent/api/storage/DestroyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DestroyCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/DestroyCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/DownloadAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/DownloadAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DownloadAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/DownloadAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/GetDatadisksAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/GetDatadisksAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/GetDatadisksAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/GetDatadisksAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/GetDatadisksCommand.java b/core/src/main/java/com/cloud/agent/api/storage/GetDatadisksCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/GetDatadisksCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/GetDatadisksCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/ListTemplateAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/ListTemplateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ListTemplateAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/ListTemplateAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/ListTemplateCommand.java b/core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ListTemplateCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/ListVolumeAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/ListVolumeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ListVolumeAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/ListVolumeAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/ListVolumeCommand.java b/core/src/main/java/com/cloud/agent/api/storage/ListVolumeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ListVolumeCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/ListVolumeCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java b/core/src/main/java/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/MigrateVolumeAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/MigrateVolumeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/MigrateVolumeAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/MigrateVolumeAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/MigrateVolumeCommand.java b/core/src/main/java/com/cloud/agent/api/storage/MigrateVolumeCommand.java
similarity index 93%
rename from core/src/com/cloud/agent/api/storage/MigrateVolumeCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/MigrateVolumeCommand.java
index 77430c3..e583845 100644
--- a/core/src/com/cloud/agent/api/storage/MigrateVolumeCommand.java
+++ b/core/src/main/java/com/cloud/agent/api/storage/MigrateVolumeCommand.java
@@ -97,10 +97,18 @@
         return destData;
     }
 
+    public void setSrcDetails(Map<String, String> details) {
+        srcDetails = details;
+    }
+
     public Map<String, String> getSrcDetails() {
         return srcDetails;
     }
 
+    public void setDestDetails(Map<String, String> details) {
+        destDetails = details;
+    }
+
     public Map<String, String> getDestDetails() {
         return destDetails;
     }
diff --git a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java b/core/src/main/java/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/ResizeVolumeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/ResizeVolumeAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java b/core/src/main/java/com/cloud/agent/api/storage/ResizeVolumeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/ResizeVolumeCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/SsCommand.java b/core/src/main/java/com/cloud/agent/api/storage/SsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/SsCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/SsCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/StorageCommand.java b/core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/StorageCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/StorageNfsVersionCommand.java b/core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/StorageNfsVersionCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/UpgradeDiskAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/UpgradeDiskAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UpgradeDiskAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/UpgradeDiskAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/UpgradeDiskCommand.java b/core/src/main/java/com/cloud/agent/api/storage/UpgradeDiskCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UpgradeDiskCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/UpgradeDiskCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/UploadAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/UploadAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UploadAnswer.java
rename to core/src/main/java/com/cloud/agent/api/storage/UploadAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/UploadCommand.java b/core/src/main/java/com/cloud/agent/api/storage/UploadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UploadCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/UploadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/UploadProgressCommand.java b/core/src/main/java/com/cloud/agent/api/storage/UploadProgressCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UploadProgressCommand.java
rename to core/src/main/java/com/cloud/agent/api/storage/UploadProgressCommand.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/ConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/ConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/ConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/ConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/FileConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/FileConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/FileConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/FileConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/ScriptConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/ScriptConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/ScriptConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/ScriptConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/VRScripts.java
similarity index 98%
rename from core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/VRScripts.java
index 838f087..2c75a78 100644
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VRScripts.java
+++ b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/VRScripts.java
@@ -69,4 +69,5 @@
 
     public static final String VR_CFG = "vr_cfg.sh";
 
+    public static final String DIAGNOSTICS = "diagnostics.py";
 }
\ No newline at end of file
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRouterDeployer.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/VirtualRouterDeployer.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/VirtualRouterDeployer.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/VirtualRouterDeployer.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
similarity index 95%
rename from core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index 0ffe8cc..112d920 100644
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -22,6 +22,9 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.nio.channels.SocketChannel;
+
+import org.apache.cloudstack.diagnostics.DiagnosticsAnswer;
+import org.apache.cloudstack.diagnostics.DiagnosticsCommand;
 import org.joda.time.Duration;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -189,9 +192,11 @@
         } else if (cmd instanceof GetDomRVersionCmd) {
             return execute((GetDomRVersionCmd)cmd);
         } else if (cmd instanceof CheckS2SVpnConnectionsCommand) {
-            return execute((CheckS2SVpnConnectionsCommand) cmd);
+            return execute((CheckS2SVpnConnectionsCommand)cmd);
         } else if (cmd instanceof GetRouterAlertsCommand) {
             return execute((GetRouterAlertsCommand)cmd);
+        } else if (cmd instanceof DiagnosticsCommand) {
+            return execute((DiagnosticsCommand)cmd);
         } else {
             s_logger.error("Unknown query command in VirtualRoutingResource!");
             return Answer.createUnsupportedCommandAnswer(cmd);
@@ -292,6 +297,15 @@
         return new CheckRouterAnswer(cmd, result.getDetails(), true);
     }
 
+    private Answer execute(DiagnosticsCommand cmd) {
+        _eachTimeout = Duration.standardSeconds(NumbersUtil.parseInt("60", 60));
+        final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.DIAGNOSTICS, cmd.getSrciptArguments(), _eachTimeout);
+        if (!result.isSuccess()) {
+            return new DiagnosticsAnswer(cmd, false, result.getDetails());
+        }
+        return new DiagnosticsAnswer(cmd, result.isSuccess(), result.getDetails());
+    }
+
     private Answer execute(GetDomRVersionCmd cmd) {
         final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VERSION, null);
         if (!result.isSuccess()) {
@@ -454,6 +468,6 @@
                 _vrAggregateCommandsSet.remove(routerName);
             }
         }
-        return new Answer(cmd, false, "Fail to recongize aggregation action " + action.toString());
+        return new Answer(cmd, false, "Fail to recognize aggregation action " + action.toString());
     }
 }
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/AbstractConfigItemFacade.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/BumpUpPriorityConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/CreateIpAliasConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/DeleteIpAliasConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/DhcpEntryConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/DnsMasqConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/IpAssociationConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/LoadBalancerConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/RemoteAccessVpnConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SavePasswordConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SavePasswordConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SavePasswordConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SavePasswordConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetFirewallRulesConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetGuestNetworkConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetMonitorServiceConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetNetworkAclConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetPortForwardingRulesVpcConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetSourceNatConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetStaticNatRulesConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/SetStaticRouteConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/Site2SiteVpnConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/VmDataConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/facade/VpnUsersConfigItem.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/AclRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/AclRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/AclRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/AclRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/AllAclRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/AllAclRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/AllAclRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/AllAclRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/ConfigBase.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ConfigBase.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/ConfigBase.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ConfigBase.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/DhcpConfig.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/DhcpConfig.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/DhcpConfig.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/DhcpConfig.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/DhcpConfigEntry.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/DhcpConfigEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/DhcpConfigEntry.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/DhcpConfigEntry.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/FirewallRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/FirewallRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/FirewallRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/FirewallRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/FirewallRules.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/FirewallRules.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/FirewallRules.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/FirewallRules.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/ForwardingRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ForwardingRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/ForwardingRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ForwardingRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/ForwardingRules.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ForwardingRules.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/ForwardingRules.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ForwardingRules.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/GuestNetwork.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/GuestNetwork.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/GuestNetwork.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/GuestNetwork.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/IcmpAclRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IcmpAclRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/IcmpAclRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IcmpAclRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/IpAddress.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAddress.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/IpAddress.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAddress.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/IpAddressAlias.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAddressAlias.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/IpAddressAlias.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAddressAlias.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/IpAliases.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAliases.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/IpAliases.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAliases.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/IpAssociation.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAssociation.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/IpAssociation.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/IpAssociation.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRules.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRules.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRules.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRules.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/MonitorService.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/MonitorService.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/MonitorService.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/MonitorService.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/NetworkACL.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/NetworkACL.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/NetworkACL.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/NetworkACL.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/ProtocolAclRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ProtocolAclRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/ProtocolAclRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/ProtocolAclRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/RemoteAccessVpn.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/RemoteAccessVpn.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/RemoteAccessVpn.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/RemoteAccessVpn.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/Site2SiteVpn.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/Site2SiteVpn.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/Site2SiteVpn.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/Site2SiteVpn.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/StaticNatRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticNatRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/StaticNatRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticNatRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/StaticNatRules.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticNatRules.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/StaticNatRules.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticNatRules.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/StaticRoute.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticRoute.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/StaticRoute.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticRoute.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/StaticRoutes.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticRoutes.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/StaticRoutes.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/StaticRoutes.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/TcpAclRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/TcpAclRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/TcpAclRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/TcpAclRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/UdpAclRule.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/UdpAclRule.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/UdpAclRule.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/UdpAclRule.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/VmData.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VmData.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/VmData.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VmData.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/VmDhcpConfig.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VmDhcpConfig.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/VmDhcpConfig.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VmDhcpConfig.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/VmPassword.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VmPassword.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/VmPassword.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VmPassword.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/VpnUser.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VpnUser.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/VpnUser.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VpnUser.java
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/model/VpnUserList.java b/core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VpnUserList.java
similarity index 100%
rename from core/src/com/cloud/agent/resource/virtualnetwork/model/VpnUserList.java
rename to core/src/main/java/com/cloud/agent/resource/virtualnetwork/model/VpnUserList.java
diff --git a/core/src/com/cloud/agent/transport/ArrayTypeAdaptor.java b/core/src/main/java/com/cloud/agent/transport/ArrayTypeAdaptor.java
similarity index 100%
rename from core/src/com/cloud/agent/transport/ArrayTypeAdaptor.java
rename to core/src/main/java/com/cloud/agent/transport/ArrayTypeAdaptor.java
diff --git a/core/src/com/cloud/agent/transport/InterfaceTypeAdaptor.java b/core/src/main/java/com/cloud/agent/transport/InterfaceTypeAdaptor.java
similarity index 100%
rename from core/src/com/cloud/agent/transport/InterfaceTypeAdaptor.java
rename to core/src/main/java/com/cloud/agent/transport/InterfaceTypeAdaptor.java
diff --git a/core/src/com/cloud/agent/transport/LoggingExclusionStrategy.java b/core/src/main/java/com/cloud/agent/transport/LoggingExclusionStrategy.java
similarity index 100%
rename from core/src/com/cloud/agent/transport/LoggingExclusionStrategy.java
rename to core/src/main/java/com/cloud/agent/transport/LoggingExclusionStrategy.java
diff --git a/core/src/com/cloud/agent/transport/Request.java b/core/src/main/java/com/cloud/agent/transport/Request.java
similarity index 100%
rename from core/src/com/cloud/agent/transport/Request.java
rename to core/src/main/java/com/cloud/agent/transport/Request.java
diff --git a/core/src/com/cloud/agent/transport/Response.java b/core/src/main/java/com/cloud/agent/transport/Response.java
similarity index 100%
rename from core/src/com/cloud/agent/transport/Response.java
rename to core/src/main/java/com/cloud/agent/transport/Response.java
diff --git a/core/src/com/cloud/exception/UnsupportedVersionException.java b/core/src/main/java/com/cloud/exception/UnsupportedVersionException.java
similarity index 100%
rename from core/src/com/cloud/exception/UnsupportedVersionException.java
rename to core/src/main/java/com/cloud/exception/UnsupportedVersionException.java
diff --git a/core/src/com/cloud/exception/UsageServerException.java b/core/src/main/java/com/cloud/exception/UsageServerException.java
similarity index 100%
rename from core/src/com/cloud/exception/UsageServerException.java
rename to core/src/main/java/com/cloud/exception/UsageServerException.java
diff --git a/core/src/com/cloud/host/HostInfo.java b/core/src/main/java/com/cloud/host/HostInfo.java
similarity index 100%
rename from core/src/com/cloud/host/HostInfo.java
rename to core/src/main/java/com/cloud/host/HostInfo.java
diff --git a/core/src/com/cloud/info/ConsoleProxyConnectionInfo.java b/core/src/main/java/com/cloud/info/ConsoleProxyConnectionInfo.java
similarity index 100%
rename from core/src/com/cloud/info/ConsoleProxyConnectionInfo.java
rename to core/src/main/java/com/cloud/info/ConsoleProxyConnectionInfo.java
diff --git a/core/src/com/cloud/info/ConsoleProxyInfo.java b/core/src/main/java/com/cloud/info/ConsoleProxyInfo.java
similarity index 100%
rename from core/src/com/cloud/info/ConsoleProxyInfo.java
rename to core/src/main/java/com/cloud/info/ConsoleProxyInfo.java
diff --git a/core/src/com/cloud/info/ConsoleProxyStatus.java b/core/src/main/java/com/cloud/info/ConsoleProxyStatus.java
similarity index 100%
rename from core/src/com/cloud/info/ConsoleProxyStatus.java
rename to core/src/main/java/com/cloud/info/ConsoleProxyStatus.java
diff --git a/core/src/com/cloud/info/RunningHostInfoAgregator.java b/core/src/main/java/com/cloud/info/RunningHostInfoAgregator.java
similarity index 100%
rename from core/src/com/cloud/info/RunningHostInfoAgregator.java
rename to core/src/main/java/com/cloud/info/RunningHostInfoAgregator.java
diff --git a/core/src/com/cloud/info/SecStorageVmLoadInfo.java b/core/src/main/java/com/cloud/info/SecStorageVmLoadInfo.java
similarity index 100%
rename from core/src/com/cloud/info/SecStorageVmLoadInfo.java
rename to core/src/main/java/com/cloud/info/SecStorageVmLoadInfo.java
diff --git a/core/src/com/cloud/network/HAProxyConfigurator.java b/core/src/main/java/com/cloud/network/HAProxyConfigurator.java
similarity index 100%
rename from core/src/com/cloud/network/HAProxyConfigurator.java
rename to core/src/main/java/com/cloud/network/HAProxyConfigurator.java
diff --git a/core/src/com/cloud/network/LoadBalancerConfigurator.java b/core/src/main/java/com/cloud/network/LoadBalancerConfigurator.java
similarity index 100%
rename from core/src/com/cloud/network/LoadBalancerConfigurator.java
rename to core/src/main/java/com/cloud/network/LoadBalancerConfigurator.java
diff --git a/core/src/com/cloud/network/LoadBalancerValidator.java b/core/src/main/java/com/cloud/network/LoadBalancerValidator.java
similarity index 100%
rename from core/src/com/cloud/network/LoadBalancerValidator.java
rename to core/src/main/java/com/cloud/network/LoadBalancerValidator.java
diff --git a/core/src/com/cloud/network/resource/CreateLoadBalancerApplianceAnswer.java b/core/src/main/java/com/cloud/network/resource/CreateLoadBalancerApplianceAnswer.java
similarity index 100%
rename from core/src/com/cloud/network/resource/CreateLoadBalancerApplianceAnswer.java
rename to core/src/main/java/com/cloud/network/resource/CreateLoadBalancerApplianceAnswer.java
diff --git a/core/src/com/cloud/network/resource/DestroyLoadBalancerApplianceAnswer.java b/core/src/main/java/com/cloud/network/resource/DestroyLoadBalancerApplianceAnswer.java
similarity index 100%
rename from core/src/com/cloud/network/resource/DestroyLoadBalancerApplianceAnswer.java
rename to core/src/main/java/com/cloud/network/resource/DestroyLoadBalancerApplianceAnswer.java
diff --git a/core/src/com/cloud/network/resource/TrafficSentinelResource.java b/core/src/main/java/com/cloud/network/resource/TrafficSentinelResource.java
similarity index 100%
rename from core/src/com/cloud/network/resource/TrafficSentinelResource.java
rename to core/src/main/java/com/cloud/network/resource/TrafficSentinelResource.java
diff --git a/core/src/com/cloud/resource/CommandWrapper.java b/core/src/main/java/com/cloud/resource/CommandWrapper.java
similarity index 100%
rename from core/src/com/cloud/resource/CommandWrapper.java
rename to core/src/main/java/com/cloud/resource/CommandWrapper.java
diff --git a/core/src/com/cloud/resource/RequestWrapper.java b/core/src/main/java/com/cloud/resource/RequestWrapper.java
similarity index 100%
rename from core/src/com/cloud/resource/RequestWrapper.java
rename to core/src/main/java/com/cloud/resource/RequestWrapper.java
diff --git a/core/src/com/cloud/resource/ResourceListener.java b/core/src/main/java/com/cloud/resource/ResourceListener.java
similarity index 100%
rename from core/src/com/cloud/resource/ResourceListener.java
rename to core/src/main/java/com/cloud/resource/ResourceListener.java
diff --git a/core/src/com/cloud/resource/ResourceWrapper.java b/core/src/main/java/com/cloud/resource/ResourceWrapper.java
similarity index 100%
rename from core/src/com/cloud/resource/ResourceWrapper.java
rename to core/src/main/java/com/cloud/resource/ResourceWrapper.java
diff --git a/core/src/com/cloud/resource/ServerResource.java b/core/src/main/java/com/cloud/resource/ServerResource.java
similarity index 100%
rename from core/src/com/cloud/resource/ServerResource.java
rename to core/src/main/java/com/cloud/resource/ServerResource.java
diff --git a/core/src/com/cloud/resource/ServerResourceBase.java b/core/src/main/java/com/cloud/resource/ServerResourceBase.java
similarity index 100%
rename from core/src/com/cloud/resource/ServerResourceBase.java
rename to core/src/main/java/com/cloud/resource/ServerResourceBase.java
diff --git a/core/src/com/cloud/resource/hypervisor/HypervisorResource.java b/core/src/main/java/com/cloud/resource/hypervisor/HypervisorResource.java
similarity index 100%
rename from core/src/com/cloud/resource/hypervisor/HypervisorResource.java
rename to core/src/main/java/com/cloud/resource/hypervisor/HypervisorResource.java
diff --git a/core/src/com/cloud/serializer/GsonHelper.java b/core/src/main/java/com/cloud/serializer/GsonHelper.java
similarity index 100%
rename from core/src/com/cloud/serializer/GsonHelper.java
rename to core/src/main/java/com/cloud/serializer/GsonHelper.java
diff --git a/core/src/com/cloud/serializer/SerializerHelper.java b/core/src/main/java/com/cloud/serializer/SerializerHelper.java
similarity index 100%
rename from core/src/com/cloud/serializer/SerializerHelper.java
rename to core/src/main/java/com/cloud/serializer/SerializerHelper.java
diff --git a/core/src/com/cloud/storage/JavaStorageLayer.java b/core/src/main/java/com/cloud/storage/JavaStorageLayer.java
similarity index 100%
rename from core/src/com/cloud/storage/JavaStorageLayer.java
rename to core/src/main/java/com/cloud/storage/JavaStorageLayer.java
diff --git a/core/src/com/cloud/storage/StorageLayer.java b/core/src/main/java/com/cloud/storage/StorageLayer.java
similarity index 100%
rename from core/src/com/cloud/storage/StorageLayer.java
rename to core/src/main/java/com/cloud/storage/StorageLayer.java
diff --git a/core/src/com/cloud/storage/resource/StoragePoolResource.java b/core/src/main/java/com/cloud/storage/resource/StoragePoolResource.java
similarity index 100%
rename from core/src/com/cloud/storage/resource/StoragePoolResource.java
rename to core/src/main/java/com/cloud/storage/resource/StoragePoolResource.java
diff --git a/core/src/com/cloud/storage/resource/StorageProcessor.java b/core/src/main/java/com/cloud/storage/resource/StorageProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/resource/StorageProcessor.java
rename to core/src/main/java/com/cloud/storage/resource/StorageProcessor.java
diff --git a/core/src/com/cloud/storage/resource/StorageSubsystemCommandHandler.java b/core/src/main/java/com/cloud/storage/resource/StorageSubsystemCommandHandler.java
similarity index 100%
rename from core/src/com/cloud/storage/resource/StorageSubsystemCommandHandler.java
rename to core/src/main/java/com/cloud/storage/resource/StorageSubsystemCommandHandler.java
diff --git a/core/src/com/cloud/storage/resource/StorageSubsystemCommandHandlerBase.java b/core/src/main/java/com/cloud/storage/resource/StorageSubsystemCommandHandlerBase.java
similarity index 100%
rename from core/src/com/cloud/storage/resource/StorageSubsystemCommandHandlerBase.java
rename to core/src/main/java/com/cloud/storage/resource/StorageSubsystemCommandHandlerBase.java
diff --git a/core/src/com/cloud/storage/template/FtpTemplateUploader.java b/core/src/main/java/com/cloud/storage/template/FtpTemplateUploader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/FtpTemplateUploader.java
rename to core/src/main/java/com/cloud/storage/template/FtpTemplateUploader.java
diff --git a/core/src/com/cloud/storage/template/HttpTemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/HttpTemplateDownloader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/HttpTemplateDownloader.java
rename to core/src/main/java/com/cloud/storage/template/HttpTemplateDownloader.java
diff --git a/core/src/com/cloud/storage/template/IsoProcessor.java b/core/src/main/java/com/cloud/storage/template/IsoProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/IsoProcessor.java
rename to core/src/main/java/com/cloud/storage/template/IsoProcessor.java
diff --git a/core/src/com/cloud/storage/template/LocalTemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/LocalTemplateDownloader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/LocalTemplateDownloader.java
rename to core/src/main/java/com/cloud/storage/template/LocalTemplateDownloader.java
diff --git a/core/src/com/cloud/storage/template/MetalinkTemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/MetalinkTemplateDownloader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/MetalinkTemplateDownloader.java
rename to core/src/main/java/com/cloud/storage/template/MetalinkTemplateDownloader.java
diff --git a/core/src/com/cloud/storage/template/OVAProcessor.java b/core/src/main/java/com/cloud/storage/template/OVAProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/OVAProcessor.java
rename to core/src/main/java/com/cloud/storage/template/OVAProcessor.java
diff --git a/core/src/com/cloud/storage/template/Processor.java b/core/src/main/java/com/cloud/storage/template/Processor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/Processor.java
rename to core/src/main/java/com/cloud/storage/template/Processor.java
diff --git a/core/src/com/cloud/storage/template/QCOW2Processor.java b/core/src/main/java/com/cloud/storage/template/QCOW2Processor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/QCOW2Processor.java
rename to core/src/main/java/com/cloud/storage/template/QCOW2Processor.java
diff --git a/core/src/com/cloud/storage/template/RawImageProcessor.java b/core/src/main/java/com/cloud/storage/template/RawImageProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/RawImageProcessor.java
rename to core/src/main/java/com/cloud/storage/template/RawImageProcessor.java
diff --git a/core/src/com/cloud/storage/template/S3TemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/S3TemplateDownloader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/S3TemplateDownloader.java
rename to core/src/main/java/com/cloud/storage/template/S3TemplateDownloader.java
diff --git a/core/src/com/cloud/storage/template/ScpTemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/ScpTemplateDownloader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/ScpTemplateDownloader.java
rename to core/src/main/java/com/cloud/storage/template/ScpTemplateDownloader.java
diff --git a/core/src/com/cloud/storage/template/TARProcessor.java b/core/src/main/java/com/cloud/storage/template/TARProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/TARProcessor.java
rename to core/src/main/java/com/cloud/storage/template/TARProcessor.java
diff --git a/core/src/com/cloud/storage/template/TemplateConstants.java b/core/src/main/java/com/cloud/storage/template/TemplateConstants.java
similarity index 100%
rename from core/src/com/cloud/storage/template/TemplateConstants.java
rename to core/src/main/java/com/cloud/storage/template/TemplateConstants.java
diff --git a/core/src/com/cloud/storage/template/TemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/TemplateDownloader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/TemplateDownloader.java
rename to core/src/main/java/com/cloud/storage/template/TemplateDownloader.java
diff --git a/core/src/com/cloud/storage/template/TemplateDownloaderBase.java b/core/src/main/java/com/cloud/storage/template/TemplateDownloaderBase.java
similarity index 100%
rename from core/src/com/cloud/storage/template/TemplateDownloaderBase.java
rename to core/src/main/java/com/cloud/storage/template/TemplateDownloaderBase.java
diff --git a/core/src/com/cloud/storage/template/TemplateLocation.java b/core/src/main/java/com/cloud/storage/template/TemplateLocation.java
similarity index 100%
rename from core/src/com/cloud/storage/template/TemplateLocation.java
rename to core/src/main/java/com/cloud/storage/template/TemplateLocation.java
diff --git a/core/src/com/cloud/storage/template/TemplateUploader.java b/core/src/main/java/com/cloud/storage/template/TemplateUploader.java
similarity index 100%
rename from core/src/com/cloud/storage/template/TemplateUploader.java
rename to core/src/main/java/com/cloud/storage/template/TemplateUploader.java
diff --git a/core/src/com/cloud/storage/template/VhdProcessor.java b/core/src/main/java/com/cloud/storage/template/VhdProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/VhdProcessor.java
rename to core/src/main/java/com/cloud/storage/template/VhdProcessor.java
diff --git a/core/src/com/cloud/storage/template/VmdkProcessor.java b/core/src/main/java/com/cloud/storage/template/VmdkProcessor.java
similarity index 100%
rename from core/src/com/cloud/storage/template/VmdkProcessor.java
rename to core/src/main/java/com/cloud/storage/template/VmdkProcessor.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/CheckUrlAnswer.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/CheckUrlAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/CheckUrlAnswer.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/CheckUrlAnswer.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/CheckUrlCommand.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/CheckUrlCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/CheckUrlCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/CheckUrlCommand.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/DirectDownloadAnswer.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/DirectDownloadAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/DirectDownloadAnswer.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/DirectDownloadAnswer.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/DirectDownloadCommand.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/DirectDownloadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/DirectDownloadCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/DirectDownloadCommand.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/HttpDirectDownloadCommand.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/HttpDirectDownloadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/HttpDirectDownloadCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/HttpDirectDownloadCommand.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/HttpsDirectDownloadCommand.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/HttpsDirectDownloadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/HttpsDirectDownloadCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/HttpsDirectDownloadCommand.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/MetalinkDirectDownloadCommand.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/MetalinkDirectDownloadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/MetalinkDirectDownloadCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/MetalinkDirectDownloadCommand.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/NfsDirectDownloadCommand.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/NfsDirectDownloadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/NfsDirectDownloadCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/NfsDirectDownloadCommand.java
diff --git a/core/src/org/apache/cloudstack/agent/directdownload/SetupDirectDownloadCertificate.java b/core/src/main/java/org/apache/cloudstack/agent/directdownload/SetupDirectDownloadCertificate.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/directdownload/SetupDirectDownloadCertificate.java
rename to core/src/main/java/org/apache/cloudstack/agent/directdownload/SetupDirectDownloadCertificate.java
diff --git a/core/src/org/apache/cloudstack/agent/lb/SetupMSListAnswer.java b/core/src/main/java/org/apache/cloudstack/agent/lb/SetupMSListAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/lb/SetupMSListAnswer.java
rename to core/src/main/java/org/apache/cloudstack/agent/lb/SetupMSListAnswer.java
diff --git a/core/src/org/apache/cloudstack/agent/lb/SetupMSListCommand.java b/core/src/main/java/org/apache/cloudstack/agent/lb/SetupMSListCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/agent/lb/SetupMSListCommand.java
rename to core/src/main/java/org/apache/cloudstack/agent/lb/SetupMSListCommand.java
diff --git a/core/src/org/apache/cloudstack/ca/PostCertificateRenewalCommand.java b/core/src/main/java/org/apache/cloudstack/ca/PostCertificateRenewalCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/ca/PostCertificateRenewalCommand.java
rename to core/src/main/java/org/apache/cloudstack/ca/PostCertificateRenewalCommand.java
diff --git a/core/src/org/apache/cloudstack/ca/SetupCertificateAnswer.java b/core/src/main/java/org/apache/cloudstack/ca/SetupCertificateAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/ca/SetupCertificateAnswer.java
rename to core/src/main/java/org/apache/cloudstack/ca/SetupCertificateAnswer.java
diff --git a/core/src/org/apache/cloudstack/ca/SetupCertificateCommand.java b/core/src/main/java/org/apache/cloudstack/ca/SetupCertificateCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/ca/SetupCertificateCommand.java
rename to core/src/main/java/org/apache/cloudstack/ca/SetupCertificateCommand.java
diff --git a/core/src/org/apache/cloudstack/ca/SetupKeyStoreCommand.java b/core/src/main/java/org/apache/cloudstack/ca/SetupKeyStoreCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/ca/SetupKeyStoreCommand.java
rename to core/src/main/java/org/apache/cloudstack/ca/SetupKeyStoreCommand.java
diff --git a/core/src/org/apache/cloudstack/ca/SetupKeystoreAnswer.java b/core/src/main/java/org/apache/cloudstack/ca/SetupKeystoreAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/ca/SetupKeystoreAnswer.java
rename to core/src/main/java/org/apache/cloudstack/ca/SetupKeystoreAnswer.java
diff --git a/core/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsAnswer.java b/core/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsAnswer.java
new file mode 100644
index 0000000..006f043
--- /dev/null
+++ b/core/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsAnswer.java
@@ -0,0 +1,54 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.cloudstack.diagnostics;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.google.common.base.Strings;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.log4j.Logger;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DiagnosticsAnswer extends Answer {
+    public static final Logger LOGGER = Logger.getLogger(DiagnosticsAnswer.class);
+
+    public DiagnosticsAnswer(DiagnosticsCommand cmd, boolean result, String details) {
+        super(cmd, result, details);
+    }
+
+    public Map<String, String> getExecutionDetails() {
+        final Map<String, String> executionDetailsMap = new HashMap<>();
+        if (result == true && !Strings.isNullOrEmpty(details)) {
+            final String[] parseDetails = details.split("&&");
+            if (parseDetails.length >= 3) {
+                executionDetailsMap.put(ApiConstants.STDOUT, parseDetails[0].trim());
+                executionDetailsMap.put(ApiConstants.STDERR, parseDetails[1].trim());
+                executionDetailsMap.put(ApiConstants.EXITCODE, String.valueOf(parseDetails[2]).trim());
+            } else {
+                throw new CloudRuntimeException("Unsupported diagnostics command type supplied");
+            }
+        } else {
+            executionDetailsMap.put(ApiConstants.STDOUT, "");
+            executionDetailsMap.put(ApiConstants.STDERR, details);
+            executionDetailsMap.put(ApiConstants.EXITCODE, "-1");
+        }
+        return executionDetailsMap;
+    }
+}
\ No newline at end of file
diff --git a/core/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsCommand.java b/core/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsCommand.java
new file mode 100644
index 0000000..14d9da9
--- /dev/null
+++ b/core/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsCommand.java
@@ -0,0 +1,44 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.diagnostics;
+
+import com.cloud.agent.api.routing.NetworkElementCommand;
+
+public class DiagnosticsCommand extends NetworkElementCommand {
+
+    private final String scriptArguments;
+    private final boolean executeInSequence;
+
+    public DiagnosticsCommand(String scriptArguments, boolean executeInSequence) {
+        this.scriptArguments = scriptArguments;
+        this.executeInSequence = executeInSequence;
+    }
+
+    public String getSrciptArguments() {
+        return scriptArguments;
+    }
+
+    @Override
+    public boolean isQuery() {
+        return true;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return this.executeInSequence;
+    }
+}
\ No newline at end of file
diff --git a/core/src/org/apache/cloudstack/storage/command/AttachAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/AttachAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/AttachAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/AttachAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/AttachCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/AttachCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/AttachCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/AttachCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java b/core/src/main/java/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
diff --git a/core/src/org/apache/cloudstack/storage/command/CopyCmdAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/CopyCmdAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/CopyCmdAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/CopyCmdAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/CopyCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/CopyCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/CopyCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/CopyCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/CreateObjectAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/CreateObjectAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/CreateObjectAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/CreateObjectAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/CreateObjectCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/CreateObjectCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/CreateObjectCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/CreateObjectCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java b/core/src/main/java/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
diff --git a/core/src/org/apache/cloudstack/storage/command/DeleteCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/DeleteCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/DeleteCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/DeleteCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/DettachAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/DettachAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/DettachAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/DettachAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/DettachCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/DettachCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/DettachCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/DettachCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/DownloadCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/DownloadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/DownloadCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/DownloadCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/DownloadProgressCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/DownloadProgressCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/DownloadProgressCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/DownloadProgressCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/ForgetObjectCmd.java b/core/src/main/java/org/apache/cloudstack/storage/command/ForgetObjectCmd.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/ForgetObjectCmd.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/ForgetObjectCmd.java
diff --git a/core/src/org/apache/cloudstack/storage/command/IntroduceObjectAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/IntroduceObjectAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/IntroduceObjectAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/IntroduceObjectAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/IntroduceObjectCmd.java b/core/src/main/java/org/apache/cloudstack/storage/command/IntroduceObjectCmd.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/IntroduceObjectCmd.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/IntroduceObjectCmd.java
diff --git a/core/src/org/apache/cloudstack/storage/command/ResignatureAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/ResignatureAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/ResignatureAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/ResignatureAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/ResignatureCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/ResignatureCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/ResignatureCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/ResignatureCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/RevertSnapshotCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/RevertSnapshotCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/RevertSnapshotCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/RevertSnapshotCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/SnapshotAndCopyAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/SnapshotAndCopyAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/SnapshotAndCopyAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/SnapshotAndCopyAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/SnapshotAndCopyCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/SnapshotAndCopyCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/SnapshotAndCopyCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/SnapshotAndCopyCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/StorageSubSystemCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/StorageSubSystemCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/StorageSubSystemCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/StorageSubSystemCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java b/core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
diff --git a/core/src/org/apache/cloudstack/storage/command/UploadStatusCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusCommand.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/command/UploadStatusCommand.java
rename to core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusCommand.java
diff --git a/core/src/org/apache/cloudstack/storage/to/ImageStoreTO.java b/core/src/main/java/org/apache/cloudstack/storage/to/ImageStoreTO.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/to/ImageStoreTO.java
rename to core/src/main/java/org/apache/cloudstack/storage/to/ImageStoreTO.java
diff --git a/core/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java b/core/src/main/java/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
rename to core/src/main/java/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
diff --git a/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java b/core/src/main/java/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
rename to core/src/main/java/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
diff --git a/core/src/org/apache/cloudstack/storage/to/TemplateObjectTO.java b/core/src/main/java/org/apache/cloudstack/storage/to/TemplateObjectTO.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/to/TemplateObjectTO.java
rename to core/src/main/java/org/apache/cloudstack/storage/to/TemplateObjectTO.java
diff --git a/core/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java b/core/src/main/java/org/apache/cloudstack/storage/to/VolumeObjectTO.java
similarity index 100%
rename from core/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java
rename to core/src/main/java/org/apache/cloudstack/storage/to/VolumeObjectTO.java
diff --git a/core/resources/META-INF/cloudstack/allocator/module.properties b/core/src/main/resources/META-INF/cloudstack/allocator/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/allocator/module.properties
rename to core/src/main/resources/META-INF/cloudstack/allocator/module.properties
diff --git a/core/resources/META-INF/cloudstack/allocator/spring-core-allocator-context.xml b/core/src/main/resources/META-INF/cloudstack/allocator/spring-core-allocator-context.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/allocator/spring-core-allocator-context.xml
rename to core/src/main/resources/META-INF/cloudstack/allocator/spring-core-allocator-context.xml
diff --git a/core/resources/META-INF/cloudstack/allocator/spring-core-lifecycle-allocator-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/allocator/spring-core-lifecycle-allocator-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/allocator/spring-core-lifecycle-allocator-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/allocator/spring-core-lifecycle-allocator-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/api/module.properties b/core/src/main/resources/META-INF/cloudstack/api/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/api/module.properties
rename to core/src/main/resources/META-INF/cloudstack/api/module.properties
diff --git a/core/resources/META-INF/cloudstack/api/spring-core-lifecycle-api-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/api/spring-core-lifecycle-api-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/api/spring-core-lifecycle-api-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/api/spring-core-lifecycle-api-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/backend/module.properties b/core/src/main/resources/META-INF/cloudstack/backend/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/backend/module.properties
rename to core/src/main/resources/META-INF/cloudstack/backend/module.properties
diff --git a/core/resources/META-INF/cloudstack/bootstrap/module.properties b/core/src/main/resources/META-INF/cloudstack/bootstrap/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/bootstrap/module.properties
rename to core/src/main/resources/META-INF/cloudstack/bootstrap/module.properties
diff --git a/core/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context.xml b/core/src/main/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context.xml
rename to core/src/main/resources/META-INF/cloudstack/bootstrap/spring-bootstrap-context.xml
diff --git a/core/resources/META-INF/cloudstack/ca/module.properties b/core/src/main/resources/META-INF/cloudstack/ca/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/ca/module.properties
rename to core/src/main/resources/META-INF/cloudstack/ca/module.properties
diff --git a/core/resources/META-INF/cloudstack/ca/spring-core-lifecycle-ca-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/ca/spring-core-lifecycle-ca-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/ca/spring-core-lifecycle-ca-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/ca/spring-core-lifecycle-ca-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/direct-download/module.properties b/core/src/main/resources/META-INF/cloudstack/cloudstack/direct-download/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/direct-download/module.properties
rename to core/src/main/resources/META-INF/cloudstack/cloudstack/direct-download/module.properties
diff --git a/core/resources/META-INF/cloudstack/direct-download/spring-lifecycle-direct-download-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/cloudstack/direct-download/spring-lifecycle-direct-download-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/direct-download/spring-lifecycle-direct-download-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/cloudstack/direct-download/spring-lifecycle-direct-download-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/compute/module.properties b/core/src/main/resources/META-INF/cloudstack/compute/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/compute/module.properties
rename to core/src/main/resources/META-INF/cloudstack/compute/module.properties
diff --git a/core/resources/META-INF/cloudstack/compute/spring-core-lifecycle-compute-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/compute/spring-core-lifecycle-compute-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/compute/spring-core-lifecycle-compute-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/compute/spring-core-lifecycle-compute-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/core/module.properties b/core/src/main/resources/META-INF/cloudstack/core/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/core/module.properties
rename to core/src/main/resources/META-INF/cloudstack/core/module.properties
diff --git a/core/resources/META-INF/cloudstack/core/spring-core-context.xml b/core/src/main/resources/META-INF/cloudstack/core/spring-core-context.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/core/spring-core-context.xml
rename to core/src/main/resources/META-INF/cloudstack/core/spring-core-context.xml
diff --git a/core/resources/META-INF/cloudstack/core/spring-core-lifecycle-core-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/core/spring-core-lifecycle-core-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/core/spring-core-lifecycle-core-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/core/spring-core-lifecycle-core-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml b/core/src/main/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
rename to core/src/main/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
diff --git a/core/resources/META-INF/cloudstack/discoverer/module.properties b/core/src/main/resources/META-INF/cloudstack/discoverer/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/discoverer/module.properties
rename to core/src/main/resources/META-INF/cloudstack/discoverer/module.properties
diff --git a/core/resources/META-INF/cloudstack/discoverer/spring-core-lifecycle-discoverer-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/discoverer/spring-core-lifecycle-discoverer-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/discoverer/spring-core-lifecycle-discoverer-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/discoverer/spring-core-lifecycle-discoverer-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/network/module.properties b/core/src/main/resources/META-INF/cloudstack/network/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/network/module.properties
rename to core/src/main/resources/META-INF/cloudstack/network/module.properties
diff --git a/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/outofbandmanagement/module.properties b/core/src/main/resources/META-INF/cloudstack/outofbandmanagement/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/outofbandmanagement/module.properties
rename to core/src/main/resources/META-INF/cloudstack/outofbandmanagement/module.properties
diff --git a/core/resources/META-INF/cloudstack/outofbandmanagement/spring-core-lifecycle-outofbandmanagement-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/outofbandmanagement/spring-core-lifecycle-outofbandmanagement-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/outofbandmanagement/spring-core-lifecycle-outofbandmanagement-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/outofbandmanagement/spring-core-lifecycle-outofbandmanagement-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/planner/module.properties b/core/src/main/resources/META-INF/cloudstack/planner/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/planner/module.properties
rename to core/src/main/resources/META-INF/cloudstack/planner/module.properties
diff --git a/core/resources/META-INF/cloudstack/planner/spring-core-lifecycle-planner-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/planner/spring-core-lifecycle-planner-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/planner/spring-core-lifecycle-planner-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/planner/spring-core-lifecycle-planner-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/storage/module.properties b/core/src/main/resources/META-INF/cloudstack/storage/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/storage/module.properties
rename to core/src/main/resources/META-INF/cloudstack/storage/module.properties
diff --git a/core/resources/META-INF/cloudstack/storage/spring-lifecycle-storage-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/storage/spring-lifecycle-storage-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/storage/spring-lifecycle-storage-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/storage/spring-lifecycle-storage-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/system/module.properties b/core/src/main/resources/META-INF/cloudstack/system/module.properties
similarity index 100%
rename from core/resources/META-INF/cloudstack/system/module.properties
rename to core/src/main/resources/META-INF/cloudstack/system/module.properties
diff --git a/core/resources/META-INF/cloudstack/system/spring-core-system-context-inheritable.xml b/core/src/main/resources/META-INF/cloudstack/system/spring-core-system-context-inheritable.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/system/spring-core-system-context-inheritable.xml
rename to core/src/main/resources/META-INF/cloudstack/system/spring-core-system-context-inheritable.xml
diff --git a/core/resources/META-INF/cloudstack/system/spring-core-system-context.xml b/core/src/main/resources/META-INF/cloudstack/system/spring-core-system-context.xml
similarity index 100%
rename from core/resources/META-INF/cloudstack/system/spring-core-system-context.xml
rename to core/src/main/resources/META-INF/cloudstack/system/spring-core-system-context.xml
diff --git a/core/test/com/cloud/agent/api/SecurityGroupRulesCmdTest.java b/core/src/test/java/com/cloud/agent/api/SecurityGroupRulesCmdTest.java
similarity index 100%
rename from core/test/com/cloud/agent/api/SecurityGroupRulesCmdTest.java
rename to core/src/test/java/com/cloud/agent/api/SecurityGroupRulesCmdTest.java
diff --git a/core/test/com/cloud/agent/api/routing/SetNetworkACLCommandTest.java b/core/src/test/java/com/cloud/agent/api/routing/SetNetworkACLCommandTest.java
similarity index 100%
rename from core/test/com/cloud/agent/api/routing/SetNetworkACLCommandTest.java
rename to core/src/test/java/com/cloud/agent/api/routing/SetNetworkACLCommandTest.java
diff --git a/core/test/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java b/core/src/test/java/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java
similarity index 100%
rename from core/test/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java
rename to core/src/test/java/com/cloud/agent/resource/virtualnetwork/ConfigHelperTest.java
diff --git a/core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java b/core/src/test/java/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
similarity index 100%
rename from core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
rename to core/src/test/java/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
diff --git a/core/test/com/cloud/agent/transport/RequestTest.java b/core/src/test/java/com/cloud/agent/transport/RequestTest.java
similarity index 100%
rename from core/test/com/cloud/agent/transport/RequestTest.java
rename to core/src/test/java/com/cloud/agent/transport/RequestTest.java
diff --git a/core/src/test/java/com/cloud/info/ConsoleProxyInfoTest.java b/core/src/test/java/com/cloud/info/ConsoleProxyInfoTest.java
new file mode 100644
index 0000000..62a4b76
--- /dev/null
+++ b/core/src/test/java/com/cloud/info/ConsoleProxyInfoTest.java
@@ -0,0 +1,64 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.info;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ConsoleProxyInfoTest {
+
+    @Test
+    public void testGetProxyImageUrlHttps() {
+        ConsoleProxyInfo cpi = new ConsoleProxyInfo(true, "10.10.10.10", 443, 443 , "console.example.com");
+        String url = cpi.getProxyImageUrl();
+        assertEquals("https://console.example.com", url);
+    }
+    @Test
+    public void testGetProxyImageUrlHttp() {
+        ConsoleProxyInfo cpi = new ConsoleProxyInfo(false, "10.10.10.10", 80, 80 , "console.example.com");
+        String url = cpi.getProxyImageUrl();
+        assertEquals("http://console.example.com", url);
+    }
+    @Test
+    public void testGetProxyImageUrlWildcardHttps() {
+        ConsoleProxyInfo cpi = new ConsoleProxyInfo(true, "1.2.3.4", 443, 8443 , "*.example.com");
+        String url = cpi.getProxyImageUrl();
+        assertEquals("https://1-2-3-4.example.com:8443", url);
+    }
+    @Test
+    public void testGetProxyImageUrlWildcardHttp() {
+        ConsoleProxyInfo cpi = new ConsoleProxyInfo(false, "1.2.3.4", 80, 8888 , "*.example.com");
+        String url = cpi.getProxyImageUrl();
+        assertEquals("http://1-2-3-4.example.com:8888", url);
+    }
+    @Test
+    public void testGetProxyImageUrlIpHttp() {
+        ConsoleProxyInfo cpi = new ConsoleProxyInfo(false, "1.2.3.4", 80, 8888, "");
+        String url = cpi.getProxyImageUrl();
+        assertEquals("http://1.2.3.4:8888", url);
+    }
+    @Test
+    public void testGetProxyImageUrlIpHttps() {
+        ConsoleProxyInfo cpi = new ConsoleProxyInfo(true, "1.2.3.4", 80, 8443, "");
+        String url = cpi.getProxyImageUrl();
+        assertEquals("https://1.2.3.4:8443", url);
+    }
+}
\ No newline at end of file
diff --git a/core/test/com/cloud/network/HAProxyConfiguratorTest.java b/core/src/test/java/com/cloud/network/HAProxyConfiguratorTest.java
similarity index 100%
rename from core/test/com/cloud/network/HAProxyConfiguratorTest.java
rename to core/src/test/java/com/cloud/network/HAProxyConfiguratorTest.java
diff --git a/core/test/com/cloud/storage/template/LocalTemplateDownloaderTest.java b/core/src/test/java/com/cloud/storage/template/LocalTemplateDownloaderTest.java
similarity index 100%
rename from core/test/com/cloud/storage/template/LocalTemplateDownloaderTest.java
rename to core/src/test/java/com/cloud/storage/template/LocalTemplateDownloaderTest.java
diff --git a/core/test/com/cloud/storage/template/OVAProcessorTest.java b/core/src/test/java/com/cloud/storage/template/OVAProcessorTest.java
similarity index 100%
rename from core/test/com/cloud/storage/template/OVAProcessorTest.java
rename to core/src/test/java/com/cloud/storage/template/OVAProcessorTest.java
diff --git a/core/test/com/cloud/storage/template/QCOW2ProcessorTest.java b/core/src/test/java/com/cloud/storage/template/QCOW2ProcessorTest.java
similarity index 100%
rename from core/test/com/cloud/storage/template/QCOW2ProcessorTest.java
rename to core/src/test/java/com/cloud/storage/template/QCOW2ProcessorTest.java
diff --git a/core/test/com/cloud/storage/template/VhdProcessorTest.java b/core/src/test/java/com/cloud/storage/template/VhdProcessorTest.java
similarity index 100%
rename from core/test/com/cloud/storage/template/VhdProcessorTest.java
rename to core/src/test/java/com/cloud/storage/template/VhdProcessorTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/AnswerTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/AnswerTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/AnswerTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/AnswerTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CancelCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/CancelCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/CancelCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/CancelCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java
diff --git a/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java b/core/src/test/java/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
similarity index 100%
rename from core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
rename to core/src/test/java/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
diff --git a/core/test/resources/vhds/test.vhd b/core/src/test/resources/vhds/test.vhd
similarity index 100%
rename from core/test/resources/vhds/test.vhd
rename to core/src/test/resources/vhds/test.vhd
Binary files differ
diff --git a/core/test/resources/vhds/test.vhd.bz2 b/core/src/test/resources/vhds/test.vhd.bz2
similarity index 100%
rename from core/test/resources/vhds/test.vhd.bz2
rename to core/src/test/resources/vhds/test.vhd.bz2
Binary files differ
diff --git a/core/test/resources/vhds/test.vhd.gz b/core/src/test/resources/vhds/test.vhd.gz
similarity index 100%
rename from core/test/resources/vhds/test.vhd.gz
rename to core/src/test/resources/vhds/test.vhd.gz
Binary files differ
diff --git a/core/test/resources/vhds/test.vhd.zip b/core/src/test/resources/vhds/test.vhd.zip
similarity index 100%
rename from core/test/resources/vhds/test.vhd.zip
rename to core/src/test/resources/vhds/test.vhd.zip
Binary files differ
diff --git a/debian/changelog b/debian/changelog
index a5ad7fd..09dd44a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,26 +1,8 @@
-cloudstack (4.11.2.0-SNAPSHOT) unstable; urgency=low
+cloudstack (4.12.0.0-SNAPSHOT) unstable; urgency=low
 
-  * Update the version to 4.11.2.0-SNAPSHOT
+  * Update the version to 4.12.0.0-SNAPSHOT
 
- -- the Apache CloudStack project <dev@cloudstack.apache.org>  Thu, 26 Jun 2018 18:24:36 +0100
-
-cloudstack (4.11.1.0) unstable; urgency=low
-
-  * Update the version to 4.11.1.0
-
- -- the Apache CloudStack project <dev@cloudstack.apache.org>  Thu, 21 Jun 2018 15:52:43 +0100
-
-cloudstack (4.11.1.0-SNAPSHOT) unstable; urgency=low
-
-  * Update the version to 4.11.1.0-SNAPSHOT
-
- -- the Apache CloudStack project <dev@cloudstack.apache.org>  Mon, 05 Feb 2018 11:10:37 +0100
-
-cloudstack (4.11.0.0) unstable; urgency=low
-
-  * Update the version to 4.11.0.0
-
- -- the Apache CloudStack project <dev@cloudstack.apache.org>  Fri, 26 Jan 2018 13:13:37 +0100
+ -- the Apache CloudStack project <dev@cloudstack.apache.org>  Mon, 15 Jan 2018 17:42:30 +0530
 
 cloudstack (4.11.0.0-SNAPSHOT) unstable; urgency=low
 
@@ -28,7 +10,7 @@
 
  -- the Apache CloudStack project <dev@cloudstack.apache.org>  Mon, 03 Jul 2017 10:06:42 +0530
 
-cloudstack (4.11.0.0-SNAPSHOT-SNAPSHOT) unstable; urgency=low
+cloudstack (4.10.0.0-SNAPSHOT) unstable; urgency=low
 
   * Update the version to 4.10.0.snapshot
 
diff --git a/debian/rules b/debian/rules
index a41b3f9..bac57ed 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,6 +1,6 @@
 #!/usr/bin/make -f
 # -*- makefile -*-
-VERSION := $(shell grep '^  <version>' pom.xml| cut -d'>' -f2 |cut -d'<' -f1)
+VERSION := $(shell grep '<version>' pom.xml | head -2 | tail -1 | cut -d'>' -f2 |cut -d'<' -f1)
 PACKAGE = $(shell dh_listpackages|head -n 1|cut -d '-' -f 1)
 SYSCONFDIR = "/etc"
 DESTDIR = "debian/tmp"
diff --git a/deps/install-non-oss.sh b/deps/install-non-oss.sh
index ee7482d..632e718 100755
--- a/deps/install-non-oss.sh
+++ b/deps/install-non-oss.sh
@@ -24,11 +24,6 @@
 # Version: unknown
 mvn install:install-file -Dfile=cloud-netscaler-sdx.jar -DgroupId=com.cloud.com.citrix -DartifactId=netscaler-sdx   -Dversion=1.0   -Dpackaging=jar
 
-# From http://support.netapp.com/  (not available online, contact your support representative)
-# Version: 4.0
-if [ -e cloud-manageontap.jar ]; then mv cloud-manageontap.jar manageontap.jar;  fi
-mvn install:install-file -Dfile=manageontap.jar   -DgroupId=com.cloud.com.netapp -DartifactId=manageontap     -Dversion=4.0   -Dpackaging=jar
-
 # From https://my.vmware.com/group/vmware/get-download?downloadGroup=VSP510-WEBSDK-510
 # Version: 5.1, Release-date: 2012-09-10, Build: 774886
 mvn install:install-file -Dfile=vim25_51.jar        -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25    -Dversion=5.1   -Dpackaging=jar
diff --git a/developer/pom.xml b/developer/pom.xml
index e225e4c..ee6d7ab 100644
--- a/developer/pom.xml
+++ b/developer/pom.xml
@@ -1,280 +1,287 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-developer</artifactId>
-  <name>Apache CloudStack Developer Mode</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-dbcp2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-pool2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.jasypt</groupId>
-      <artifactId>jasypt</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>properties-maven-plugin</artifactId>
-        <version>1.0-alpha-2</version>
-        <executions>
-          <execution>
-            <phase>initialize</phase>
-            <goals>
-              <goal>read-project-properties</goal>
-            </goals>
-            <configuration>
-              <files>
-                <file>${basedir}/../utils/conf/db.properties</file>
-                <file>${basedir}/../utils/conf/db.properties.override</file>
-              </files>
-              <quiet>true</quiet>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <filter token="VERSION" value="${project.version}"/>
-                <copy todir="${basedir}/target/db" filtering="true">
-                  <fileset dir="${basedir}/../setup/db/"/>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <!-- default deploydb property -->
-      <id>deploydb</id>
-      <activation>
-        <property>
-          <name>deploydb</name>
-        </property>
-      </activation>
-      <build>
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-developer</artifactId>
+    <name>Apache CloudStack Developer Mode</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jasypt</groupId>
+            <artifactId>jasypt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
         <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>1.2.1</version>
-             <dependencies>
-              <!-- specify the dependent jdbc driver here -->
-              <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${cs.mysql.version}</version>
-              </dependency>
-            </dependencies>
-            <executions>
-              <execution>
-                <phase>process-resources</phase>
-                <id>create-schema</id>
-                <goals>
-                  <goal>java</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
-              <includePluginDependencies>true</includePluginDependencies>
-              <arguments>
-                <!-- db properties file -->
-                <argument>${basedir}/../utils/conf/db.properties</argument>
-                <argument>${basedir}/../utils/conf/db.properties.override</argument>
-                <!-- Create default schema and db table views -->
-                <argument>${basedir}/target/db/create-schema.sql</argument>
-                <argument>${basedir}/target/db/create-schema-premium.sql</argument>
-                <!-- Seed templates -->
-                <argument>${basedir}/target/db/templates.sql</argument>
-                <!-- Seed the database -->
-                <argument>${basedir}/developer-prefill.sql</argument>
-                <argument>${basedir}/developer-prefill.sql.override</argument>
-                <!-- Do database upgrade-->
-                <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
-                <argument>--database=cloud,usage</argument>
-                <argument>--rootpassword=${db.root.password}</argument>
-                <!-- Print help using -h or dash-dash-help -->
-                <!-- Do dry run using -d or dash-dash-dry -->
-                <!-- Enable verbosity by -v or dash-dash-verbose -->
-              </arguments>
-              <systemProperties>
-                <systemProperty>
-                  <key>catalina.home</key>
-                  <value>${basedir}/../utils</value>
-                </systemProperty>
-                <systemProperty>
-                  <key>paths.script</key>
-                  <value>${basedir}/target/db</value>
-                </systemProperty>
-              </systemProperties>
-            </configuration>
-          </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>properties-maven-plugin</artifactId>
+                <version>1.0-alpha-2</version>
+                <executions>
+                    <execution>
+                        <phase>initialize</phase>
+                        <goals>
+                            <goal>read-project-properties</goal>
+                        </goals>
+                        <configuration>
+                            <files>
+                                <file>${basedir}/../utils/conf/db.properties</file>
+                                <file>${basedir}/../utils/conf/db.properties.override</file>
+                            </files>
+                            <quiet>true</quiet>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <filter token="VERSION" value="${project.version}" />
+                                <copy todir="${basedir}/target/db" filtering="true">
+                                    <fileset dir="${basedir}/../setup/db/" />
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
-      </build>
-    </profile>
-    <profile>
-      <!-- saml deploydb property -->
-      <id>deploydb-saml</id>
-      <activation>
-        <property>
-          <name>deploydb-saml</name>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <dependencies>
-              <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${cs.mysql.version}</version>
-              </dependency>
-            </dependencies>
-            <version>1.2.1</version>
-            <executions>
-              <execution>
-                <phase>process-resources</phase>
-                <id>create-schema-simulator</id>
-                <goals>
-                  <goal>java</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
-              <includePluginDependencies>true</includePluginDependencies>
-              <arguments>
-                <!-- db properties file -->
-                <argument>${basedir}/../utils/conf/db.properties</argument>
-                <argument>${basedir}/../utils/conf/db.properties.override</argument>
-                <!-- simulator sql files -->
-                <argument>${basedir}/developer-saml.sql</argument>
-                <!-- upgrade -->
-                <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
-                <argument>--rootpassword=${db.root.password}</argument>
-              </arguments>
-              <systemProperties>
-                <systemProperty>
-                  <key>catalina.home</key>
-                  <value>${basedir}/../utils</value>
-                </systemProperty>
-                <systemProperty>
-                  <key>paths.script</key>
-                  <value>${basedir}/target/db</value>
-                </systemProperty>
-              </systemProperties>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <!-- simulator deploydb property -->
-      <id>deploydb-simulator</id>
-      <activation>
-        <property>
-          <name>deploydb-simulator</name>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <dependencies>
-              <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${cs.mysql.version}</version>
-              </dependency>
-	    </dependencies>
-            <version>1.2.1</version>
-            <executions>
-              <execution>
-                <phase>process-resources</phase>
-                <id>create-schema-simulator</id>
-                <goals>
-                  <goal>java</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
-              <includePluginDependencies>true</includePluginDependencies>
-              <arguments>
-                <!-- db properties file -->
-                <argument>${basedir}/../utils/conf/db.properties</argument>
-                <argument>${basedir}/../utils/conf/db.properties.override</argument>
-                <!-- simulator sql files -->
-                <argument>${basedir}/target/db/create-schema-simulator.sql</argument>
-                <argument>${basedir}/target/db/templates.simulator.sql</argument>
-                <argument>${basedir}/target/db/hypervisor_capabilities.simulator.sql</argument>
-                <!-- upgrade -->
-                <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
-                <argument>--database=simulator</argument>
-                <argument>--rootpassword=${db.root.password}</argument>
-              </arguments>
-              <systemProperties>
-                <systemProperty>
-                  <key>catalina.home</key>
-                  <value>${basedir}/../utils</value>
-                </systemProperty>
-                <systemProperty>
-                  <key>paths.script</key>
-                  <value>${basedir}/target/db</value>
-                </systemProperty>
-              </systemProperties>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+    </build>
+    <profiles>
+        <profile>
+            <!-- default deploydb property -->
+            <id>deploydb</id>
+            <activation>
+                <property>
+                    <name>deploydb</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <dependencies>
+                            <!-- specify the dependent jdbc driver here -->
+                            <dependency>
+                                <groupId>mysql</groupId>
+                                <artifactId>mysql-connector-java</artifactId>
+                                <version>${cs.mysql.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <phase>process-resources</phase>
+                                <id>create-schema</id>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
+                            <includePluginDependencies>true</includePluginDependencies>
+                            <arguments>
+                                <!-- db properties file -->
+                                <argument>${basedir}/../utils/conf/db.properties</argument>
+                                <argument>${basedir}/../utils/conf/db.properties.override</argument>
+                                <!-- Create default schema and db table views -->
+                                <argument>${basedir}/target/db/create-schema.sql</argument>
+                                <argument>${basedir}/target/db/create-schema-premium.sql</argument>
+                                <!-- Seed templates -->
+                                <argument>${basedir}/target/db/templates.sql</argument>
+                                <!-- Seed the database -->
+                                <argument>${basedir}/developer-prefill.sql</argument>
+                                <argument>${basedir}/developer-prefill.sql.override</argument>
+                                <!-- Do database upgrade -->
+                                <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
+                                <argument>--database=cloud,usage</argument>
+                                <argument>--rootpassword=${db.root.password}</argument>
+                                <!-- Print help using -h or dash-dash-help -->
+                                <!-- Do dry run using -d or dash-dash-dry -->
+                                <!-- Enable verbosity by -v or dash-dash-verbose -->
+                            </arguments>
+                            <systemProperties>
+                                <systemProperty>
+                                    <key>catalina.home</key>
+                                    <value>${basedir}/../utils</value>
+                                </systemProperty>
+                                <systemProperty>
+                                    <key>paths.script</key>
+                                    <value>${basedir}/target/db</value>
+                                </systemProperty>
+                            </systemProperties>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <!-- saml deploydb property -->
+            <id>deploydb-saml</id>
+            <activation>
+                <property>
+                    <name>deploydb-saml</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <dependencies>
+                            <dependency>
+                                <groupId>mysql</groupId>
+                                <artifactId>mysql-connector-java</artifactId>
+                                <version>${cs.mysql.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <phase>process-resources</phase>
+                                <id>create-schema-simulator</id>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
+                            <includePluginDependencies>true</includePluginDependencies>
+                            <arguments>
+                                <!-- db properties file -->
+                                <argument>${basedir}/../utils/conf/db.properties</argument>
+                                <argument>${basedir}/../utils/conf/db.properties.override</argument>
+                                <!-- simulator sql files -->
+                                <argument>${basedir}/developer-saml.sql</argument>
+                                <!-- upgrade -->
+                                <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
+                                <argument>--rootpassword=${db.root.password}</argument>
+                            </arguments>
+                            <systemProperties>
+                                <systemProperty>
+                                    <key>catalina.home</key>
+                                    <value>${basedir}/../utils</value>
+                                </systemProperty>
+                                <systemProperty>
+                                    <key>paths.script</key>
+                                    <value>${basedir}/target/db</value>
+                                </systemProperty>
+                            </systemProperties>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <!-- simulator deploydb property -->
+            <id>deploydb-simulator</id>
+            <activation>
+                <property>
+                    <name>deploydb-simulator</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <dependencies>
+                            <dependency>
+                                <groupId>mysql</groupId>
+                                <artifactId>mysql-connector-java</artifactId>
+                                <version>${cs.mysql.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <phase>process-resources</phase>
+                                <id>create-schema-simulator</id>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
+                            <includePluginDependencies>true</includePluginDependencies>
+                            <arguments>
+                                <!-- db properties file -->
+                                <argument>${basedir}/../utils/conf/db.properties</argument>
+                                <argument>${basedir}/../utils/conf/db.properties.override</argument>
+                                <!-- simulator sql files -->
+                                <argument>${basedir}/target/db/create-schema-simulator.sql</argument>
+                                <argument>${basedir}/target/db/templates.simulator.sql</argument>
+                                <argument>${basedir}/target/db/hypervisor_capabilities.simulator.sql</argument>
+                                <!-- upgrade -->
+                                <argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
+                                <argument>--database=simulator</argument>
+                                <argument>--rootpassword=${db.root.password}</argument>
+                            </arguments>
+                            <systemProperties>
+                                <systemProperty>
+                                    <key>catalina.home</key>
+                                    <value>${basedir}/../utils</value>
+                                </systemProperty>
+                                <systemProperty>
+                                    <key>paths.script</key>
+                                    <value>${basedir}/target/db</value>
+                                </systemProperty>
+                            </systemProperties>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/engine/api/pom.xml b/engine/api/pom.xml
index bfb8e82..b14fda1 100644
--- a/engine/api/pom.xml
+++ b/engine/api/pom.xml
@@ -1,54 +1,62 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-api</artifactId>
-  <name>Apache CloudStack Cloud Engine API</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-rest</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-api</artifactId>
+    <name>Apache CloudStack Cloud Engine API</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/api/src/com/cloud/vm/VirtualMachineGuru.java b/engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java
similarity index 100%
rename from engine/api/src/com/cloud/vm/VirtualMachineGuru.java
rename to engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java
diff --git a/engine/api/src/com/cloud/vm/VirtualMachineManager.java b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java
similarity index 100%
rename from engine/api/src/com/cloud/vm/VirtualMachineManager.java
rename to engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/BackupEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/EdgeService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/NetworkEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/NicEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/SnapshotEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/HostEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/HostEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/HostEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/HostEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/OrganizationScope.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/StorageEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java b/engine/api/src/main/java/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java b/engine/api/src/main/java/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/exception/InsufficientCapacityException.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/ClusterRestService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/ClusterRestService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/rest/service/api/ClusterRestService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/ClusterRestService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/NetworkRestService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/NetworkRestService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/rest/service/api/NetworkRestService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/NetworkRestService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/PodRestService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/PodRestService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/rest/service/api/PodRestService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/PodRestService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/VirtualMachineRestService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/VirtualMachineRestService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/rest/service/api/VirtualMachineRestService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/VirtualMachineRestService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/VolumeRestService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/VolumeRestService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/rest/service/api/VolumeRestService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/VolumeRestService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/ZoneRestService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/ZoneRestService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/rest/service/api/ZoneRestService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/rest/service/api/ZoneRestService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/DirectoryService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/service/api/DirectoryService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/service/api/DirectoryService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/service/api/DirectoryService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/EntityService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/service/api/EntityService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/service/api/EntityService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/service/api/EntityService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/OperationsServices.java b/engine/api/src/main/java/org/apache/cloudstack/engine/service/api/OperationsServices.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/service/api/OperationsServices.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/service/api/OperationsServices.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/OrchestrationService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/service/api/OrchestrationService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/service/api/OrchestrationService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/service/api/OrchestrationService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/service/api/ProvisioningService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/service/api/ProvisioningService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/hypervisor/ComputeSubsystem.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/network/NetworkServiceProvider.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/network/NetworkSubsystem.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/AbstractScope.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/AbstractScope.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/AbstractScope.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/AbstractScope.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ChapInfo.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ChapInfo.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ChapInfo.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ChapInfo.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ClusterScope.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ClusterScope.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ClusterScope.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ClusterScope.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/CopyCommandResult.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/CopyCommandResult.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/CopyCommandResult.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/CopyCommandResult.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/CreateCmdResult.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/CreateCmdResult.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/CreateCmdResult.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/CreateCmdResult.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionStrategy.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionStrategy.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionStrategy.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataMotionStrategy.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObjectInStore.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStore.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreCapabilities.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreCapabilities.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreCapabilities.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreCapabilities.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProviderManager.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProviderManager.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProviderManager.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProviderManager.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPointSelector.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/EndPointSelector.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPointSelector.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/EndPointSelector.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HostScope.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/HostScope.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HostScope.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/HostScope.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ObjectInDataStoreStateMachine.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ObjectInDataStoreStateMachine.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ObjectInDataStoreStateMachine.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ObjectInDataStoreStateMachine.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
similarity index 92%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
index 8749589..6021a43 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
+++ b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
@@ -25,9 +25,12 @@
 import com.cloud.storage.StoragePool;
 
 public interface PrimaryDataStoreDriver extends DataStoreDriver {
+    enum QualityOfServiceState { MIGRATION, NO_MIGRATION }
+
     String BASIC_CREATE = "basicCreate";
     String BASIC_DELETE = "basicDelete";
     String BASIC_DELETE_FAILURE = "basicDeleteFailure";
+    String BASIC_DELETE_BY_FOLDER = "basicDeleteByFolder";
     String BASIC_GRANT_ACCESS = "basicGrantAccess";
     String BASIC_REVOKE_ACCESS = "basicRevokeAccess";
     String BASIC_IQN = "basicIqn";
@@ -67,4 +70,6 @@
     void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CreateCmdResult> callback);
 
     void revertSnapshot(SnapshotInfo snapshotOnImageStore, SnapshotInfo snapshotOnPrimaryStore, AsyncCompletionCallback<CommandResult> callback);
+
+    void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, QualityOfServiceState qualityOfServiceState);
 }
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreParameters.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreParameters.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreParameters.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreParameters.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotDataFactory.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotDataFactory.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotDataFactory.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotDataFactory.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotProfile.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotResult.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotResult.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotResult.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotResult.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageAction.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageAction.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageAction.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageAction.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageCacheManager.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageEvent.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StoragePoolAllocator.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageStrategyFactory.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageStrategyFactory.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StorageStrategyFactory.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StorageStrategyFactory.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriority.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriority.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriority.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriority.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateDataFactory.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateDataFactory.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateDataFactory.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateDataFactory.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateEvent.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateEvent.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateEvent.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateEvent.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateInfo.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateInfo.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateInfo.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateInfo.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateState.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateState.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateState.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateState.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotStrategy.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotStrategy.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotStrategy.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotStrategy.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeDataFactory.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeDataFactory.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeDataFactory.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeDataFactory.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeInfo.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeInfo.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeInfo.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeInfo.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ZoneScope.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ZoneScope.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ZoneScope.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/ZoneScope.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/DiskFormat.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/disktype/DiskFormat.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/DiskFormat.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/disktype/DiskFormat.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java
rename to engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java
diff --git a/engine/api/src/org/apache/cloudstack/storage/command/CommandResult.java b/engine/api/src/main/java/org/apache/cloudstack/storage/command/CommandResult.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/storage/command/CommandResult.java
rename to engine/api/src/main/java/org/apache/cloudstack/storage/command/CommandResult.java
diff --git a/engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java b/engine/api/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java
rename to engine/api/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java
diff --git a/engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreInfo.java b/engine/api/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreInfo.java
similarity index 100%
rename from engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreInfo.java
rename to engine/api/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreInfo.java
diff --git a/engine/api/resources/META-INF/cloudstack/core/spring-engine-api-core-context.xml b/engine/api/src/main/resources/META-INF/cloudstack/core/spring-engine-api-core-context.xml
similarity index 100%
rename from engine/api/resources/META-INF/cloudstack/core/spring-engine-api-core-context.xml
rename to engine/api/src/main/resources/META-INF/cloudstack/core/spring-engine-api-core-context.xml
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/QCOW2.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/QCOW2.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/QCOW2.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/Unknown.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/Unknown.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/Unknown.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHD.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHD.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHD.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHDX.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHDX.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHDX.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VMDK.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VMDK.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VMDK.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskType.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskType.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskType.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeBase.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeBase.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeBase.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeHelper.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeHelper.java
deleted file mode 100644
index b248758..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeHelper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/api/test/org/apache/cloudstack/engine/subsystem/api/storage/ScopeTest.java b/engine/api/src/test/java/org/apache/cloudstack/engine/subsystem/api/storage/ScopeTest.java
similarity index 100%
rename from engine/api/test/org/apache/cloudstack/engine/subsystem/api/storage/ScopeTest.java
rename to engine/api/src/test/java/org/apache/cloudstack/engine/subsystem/api/storage/ScopeTest.java
diff --git a/engine/api/test/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelperTest.java b/engine/api/src/test/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelperTest.java
similarity index 100%
rename from engine/api/test/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelperTest.java
rename to engine/api/src/test/java/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelperTest.java
diff --git a/engine/components-api/pom.xml b/engine/components-api/pom.xml
index 77d5da3..3fcc008 100644
--- a/engine/components-api/pom.xml
+++ b/engine/components-api/pom.xml
@@ -1,62 +1,62 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-components-api</artifactId>
-  <name>Apache CloudStack Cloud Engine Internal Components API</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-jobs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-components-api</artifactId>
+    <name>Apache CloudStack Cloud Engine Internal Components API</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-jobs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/components-api/src/com/cloud/network/vpc/NetworkACLManager.java b/engine/components-api/src/com/cloud/network/vpc/NetworkACLManager.java
deleted file mode 100644
index 0377c5f..0000000
--- a/engine/components-api/src/com/cloud/network/vpc/NetworkACLManager.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.network.vpc;
-
-import java.util.List;
-
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.NetworkVO;
-
-public interface NetworkACLManager {
-
-    /**
-     * Creates Network ACL for the specified VPC
-     * @param name
-     * @param description
-     * @param vpcId
-     * @param forDisplay TODO
-     * @return
-     */
-    NetworkACL createNetworkACL(String name, String description, long vpcId, Boolean forDisplay);
-
-    /**
-     * Fetches Network ACL with specified Id
-     * @param id
-     * @return
-     */
-    NetworkACL getNetworkACL(long id);
-
-    /**
-     * Applies the items in the ACL to all associated networks
-     * @param aclId
-     * @return
-     * @throws ResourceUnavailableException
-     */
-    boolean applyNetworkACL(long aclId) throws ResourceUnavailableException;
-
-    /**
-     * Deletes the specified Network ACL
-     * @param id
-     * @return
-     */
-    boolean deleteNetworkACL(NetworkACL acl);
-
-    /**
-     * Associates acl with a network and applies the ACLItems
-     * @param acl
-     * @param network
-     * @return
-     */
-    boolean replaceNetworkACL(NetworkACL acl, NetworkVO network) throws ResourceUnavailableException;
-
-    /**
-     * Creates a Network ACL Item within an ACL and applies it to associated networks
-     * @param sourcePortStart
-     * @param sourcePortEnd
-     * @param protocol
-     * @param sourceCidrList
-     * @param icmpCode
-     * @param icmpType
-     * @param trafficType
-     * @param aclId
-     * @param action
-     * @param number
-     * @param forDisplay TODO
-     * @return
-     */
-    NetworkACLItem createNetworkACLItem(Integer sourcePortStart, Integer sourcePortEnd, String protocol, List<String> sourceCidrList, Integer icmpCode, Integer icmpType,
-        NetworkACLItem.TrafficType trafficType, Long aclId, String action, Integer number, Boolean forDisplay);
-
-    /**
-     * Returns Network ACL Item with specified Id
-     * @param ruleId
-     * @return
-     */
-    NetworkACLItem getNetworkACLItem(long ruleId);
-
-    /**
-     * Revoke ACL Item and apply changes
-     * @param ruleId
-     * @return
-     */
-    boolean revokeNetworkACLItem(long ruleId);
-
-    /**
-     * Revoke ACL Items for network and remove them in back-end. Db is not updated
-     * @param networkId
-     * @param userId
-     * @param caller
-     * @return
-     * @throws ResourceUnavailableException
-     */
-    boolean revokeACLItemsForNetwork(long networkId) throws ResourceUnavailableException;
-
-    /**
-     * List network ACL items by network
-     * @param guestNtwkId
-     * @return
-     */
-    List<NetworkACLItemVO> listNetworkACLItems(long guestNtwkId);
-
-    /**
-     * Applies asscociated ACL to specified network
-     * @param networkId
-     * @return
-     * @throws ResourceUnavailableException
-     */
-    boolean applyACLToNetwork(long networkId) throws ResourceUnavailableException;
-
-    /**
-     * Updates and existing network ACL Item
-     * @param id
-     * @param protocol
-     * @param sourceCidrList
-     * @param trafficType
-     * @param action
-     * @param number
-     * @param sourcePortStart
-     * @param sourcePortEnd
-     * @param icmpCode
-     * @param icmpType
-     * @param customId TODO
-     * @param forDisplay TODO
-     * @return
-     * @throws ResourceUnavailableException
-     */
-    NetworkACLItem updateNetworkACLItem(Long id, String protocol, List<String> sourceCidrList, NetworkACLItem.TrafficType trafficType, String action, Integer number,
-        Integer sourcePortStart, Integer sourcePortEnd, Integer icmpCode, Integer icmpType, String customId, Boolean forDisplay) throws ResourceUnavailableException;
-
-    /**
-     * Associates acl with a network and applies the ACLItems
-     * @param acl
-     * @param gateway
-     * @return
-     */
-
-    boolean replaceNetworkACLForPrivateGw(NetworkACL acl, PrivateGateway gateway) throws ResourceUnavailableException;
-
-    boolean revokeACLItemsForPrivateGw(PrivateGateway gateway) throws ResourceUnavailableException;
-
-    boolean applyACLToPrivateGw(PrivateGateway gateway) throws ResourceUnavailableException;
-}
diff --git a/engine/components-api/src/com/cloud/agent/AgentManager.java b/engine/components-api/src/main/java/com/cloud/agent/AgentManager.java
similarity index 98%
rename from engine/components-api/src/com/cloud/agent/AgentManager.java
rename to engine/components-api/src/main/java/com/cloud/agent/AgentManager.java
index 933c3ea..c51970c 100644
--- a/engine/components-api/src/com/cloud/agent/AgentManager.java
+++ b/engine/components-api/src/main/java/com/cloud/agent/AgentManager.java
@@ -36,7 +36,7 @@
  */
 public interface AgentManager {
     static final ConfigKey<Integer> Wait = new ConfigKey<Integer>("Advanced", Integer.class, "wait", "1800", "Time in seconds to wait for control commands to return",
-        true);
+            true);
 
     public enum TapAgentsAction {
         Add, Del, Contains,
@@ -143,7 +143,7 @@
 
     public void pullAgentOutMaintenance(long hostId);
 
-    boolean reconnect(long hostId);
+    void reconnect(long hostId) throws AgentUnavailableException;
 
     void rescan();
 
diff --git a/engine/components-api/src/com/cloud/agent/Listener.java b/engine/components-api/src/main/java/com/cloud/agent/Listener.java
similarity index 100%
rename from engine/components-api/src/com/cloud/agent/Listener.java
rename to engine/components-api/src/main/java/com/cloud/agent/Listener.java
diff --git a/engine/components-api/src/com/cloud/alert/AlertManager.java b/engine/components-api/src/main/java/com/cloud/alert/AlertManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/alert/AlertManager.java
rename to engine/components-api/src/main/java/com/cloud/alert/AlertManager.java
diff --git a/engine/components-api/src/com/cloud/capacity/CapacityManager.java b/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/capacity/CapacityManager.java
rename to engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java
diff --git a/engine/components-api/src/com/cloud/configuration/ConfigurationManager.java b/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/configuration/ConfigurationManager.java
rename to engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java
diff --git a/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java b/engine/components-api/src/main/java/com/cloud/deploy/DeploymentPlanningManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java
rename to engine/components-api/src/main/java/com/cloud/deploy/DeploymentPlanningManager.java
diff --git a/engine/components-api/src/com/cloud/event/UsageEventUtils.java b/engine/components-api/src/main/java/com/cloud/event/UsageEventUtils.java
similarity index 100%
rename from engine/components-api/src/com/cloud/event/UsageEventUtils.java
rename to engine/components-api/src/main/java/com/cloud/event/UsageEventUtils.java
diff --git a/engine/components-api/src/com/cloud/ha/HighAvailabilityManager.java b/engine/components-api/src/main/java/com/cloud/ha/HighAvailabilityManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/ha/HighAvailabilityManager.java
rename to engine/components-api/src/main/java/com/cloud/ha/HighAvailabilityManager.java
diff --git a/engine/components-api/src/com/cloud/hypervisor/HypervisorGuruManager.java b/engine/components-api/src/main/java/com/cloud/hypervisor/HypervisorGuruManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/hypervisor/HypervisorGuruManager.java
rename to engine/components-api/src/main/java/com/cloud/hypervisor/HypervisorGuruManager.java
diff --git a/engine/components-api/src/com/cloud/network/IpAddressManager.java b/engine/components-api/src/main/java/com/cloud/network/IpAddressManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/IpAddressManager.java
rename to engine/components-api/src/main/java/com/cloud/network/IpAddressManager.java
diff --git a/engine/components-api/src/com/cloud/network/NetworkStateListener.java b/engine/components-api/src/main/java/com/cloud/network/NetworkStateListener.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/NetworkStateListener.java
rename to engine/components-api/src/main/java/com/cloud/network/NetworkStateListener.java
diff --git a/engine/components-api/src/com/cloud/network/addr/PublicIp.java b/engine/components-api/src/main/java/com/cloud/network/addr/PublicIp.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/addr/PublicIp.java
rename to engine/components-api/src/main/java/com/cloud/network/addr/PublicIp.java
diff --git a/engine/components-api/src/com/cloud/network/lb/LoadBalancingRulesManager.java b/engine/components-api/src/main/java/com/cloud/network/lb/LoadBalancingRulesManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/lb/LoadBalancingRulesManager.java
rename to engine/components-api/src/main/java/com/cloud/network/lb/LoadBalancingRulesManager.java
diff --git a/engine/components-api/src/com/cloud/network/rules/FirewallManager.java b/engine/components-api/src/main/java/com/cloud/network/rules/FirewallManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/rules/FirewallManager.java
rename to engine/components-api/src/main/java/com/cloud/network/rules/FirewallManager.java
diff --git a/engine/components-api/src/com/cloud/network/rules/RulesManager.java b/engine/components-api/src/main/java/com/cloud/network/rules/RulesManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/rules/RulesManager.java
rename to engine/components-api/src/main/java/com/cloud/network/rules/RulesManager.java
diff --git a/engine/components-api/src/com/cloud/network/rules/StaticNatRuleImpl.java b/engine/components-api/src/main/java/com/cloud/network/rules/StaticNatRuleImpl.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/rules/StaticNatRuleImpl.java
rename to engine/components-api/src/main/java/com/cloud/network/rules/StaticNatRuleImpl.java
diff --git a/engine/components-api/src/main/java/com/cloud/network/vpc/NetworkACLManager.java b/engine/components-api/src/main/java/com/cloud/network/vpc/NetworkACLManager.java
new file mode 100644
index 0000000..4200ea8
--- /dev/null
+++ b/engine/components-api/src/main/java/com/cloud/network/vpc/NetworkACLManager.java
@@ -0,0 +1,94 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.vpc;
+
+import java.util.List;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.dao.NetworkVO;
+
+public interface NetworkACLManager {
+
+    /**
+     * Creates Network ACL for the specified VPC
+     */
+    NetworkACL createNetworkACL(String name, String description, long vpcId, Boolean forDisplay);
+
+    /**
+     * Fetches Network ACL with specified Id
+     */
+    NetworkACL getNetworkACL(long id);
+
+    /**
+     * Applies the items in the ACL to all associated networks
+     */
+    boolean applyNetworkACL(long aclId) throws ResourceUnavailableException;
+
+    /**
+     * Deletes the specified Network ACL
+     */
+    boolean deleteNetworkACL(NetworkACL acl);
+
+    /**
+     * Associates ACL with a network and applies the ACLItems
+     */
+    boolean replaceNetworkACL(NetworkACL acl, NetworkVO network) throws ResourceUnavailableException;
+
+    /**
+     * Creates a Network ACL Item within an ACL and applies it to associated networks
+     */
+    NetworkACLItem createNetworkACLItem(NetworkACLItemVO networkACLItemVO);
+
+    /**
+     * Returns Network ACL Item with specified Id
+     */
+    NetworkACLItem getNetworkACLItem(long ruleId);
+
+    /**
+     * Revoke ACL Item and apply changes
+     */
+    boolean revokeNetworkACLItem(long ruleId);
+
+    /**
+     * Revoke ACL Items for network and remove them in back-end. Db is not updated
+     */
+    boolean revokeACLItemsForNetwork(long networkId) throws ResourceUnavailableException;
+
+    /**
+     * List network ACL items by network
+     */
+    List<NetworkACLItemVO> listNetworkACLItems(long guestNtwkId);
+
+    /**
+     * Applies associated ACL to specified network
+     */
+    boolean applyACLToNetwork(long networkId) throws ResourceUnavailableException;
+
+    /**
+     * Updates and existing network ACL Item
+     */
+    NetworkACLItem updateNetworkACLItem(NetworkACLItemVO networkACLItemVO) throws ResourceUnavailableException;
+
+    /**
+     * Associates ACL with a network and applies the ACLItems
+     */
+    boolean replaceNetworkACLForPrivateGw(NetworkACL acl, PrivateGateway gateway) throws ResourceUnavailableException;
+
+    boolean revokeACLItemsForPrivateGw(PrivateGateway gateway) throws ResourceUnavailableException;
+
+    boolean applyACLToPrivateGw(PrivateGateway gateway) throws ResourceUnavailableException;
+}
diff --git a/engine/components-api/src/com/cloud/network/vpc/VpcManager.java b/engine/components-api/src/main/java/com/cloud/network/vpc/VpcManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/network/vpc/VpcManager.java
rename to engine/components-api/src/main/java/com/cloud/network/vpc/VpcManager.java
diff --git a/engine/components-api/src/com/cloud/resource/Discoverer.java b/engine/components-api/src/main/java/com/cloud/resource/Discoverer.java
similarity index 100%
rename from engine/components-api/src/com/cloud/resource/Discoverer.java
rename to engine/components-api/src/main/java/com/cloud/resource/Discoverer.java
diff --git a/engine/components-api/src/com/cloud/resource/ResourceManager.java b/engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/resource/ResourceManager.java
rename to engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java
diff --git a/engine/components-api/src/com/cloud/resource/ResourceStateAdapter.java b/engine/components-api/src/main/java/com/cloud/resource/ResourceStateAdapter.java
similarity index 100%
rename from engine/components-api/src/com/cloud/resource/ResourceStateAdapter.java
rename to engine/components-api/src/main/java/com/cloud/resource/ResourceStateAdapter.java
diff --git a/engine/components-api/src/com/cloud/storage/StorageManager.java b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/storage/StorageManager.java
rename to engine/components-api/src/main/java/com/cloud/storage/StorageManager.java
diff --git a/engine/components-api/src/com/cloud/template/TemplateManager.java b/engine/components-api/src/main/java/com/cloud/template/TemplateManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/template/TemplateManager.java
rename to engine/components-api/src/main/java/com/cloud/template/TemplateManager.java
diff --git a/engine/components-api/src/com/cloud/vm/ReservationContextImpl.java b/engine/components-api/src/main/java/com/cloud/vm/ReservationContextImpl.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/ReservationContextImpl.java
rename to engine/components-api/src/main/java/com/cloud/vm/ReservationContextImpl.java
diff --git a/engine/components-api/src/com/cloud/vm/VirtualMachineProfileImpl.java b/engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VirtualMachineProfileImpl.java
rename to engine/components-api/src/main/java/com/cloud/vm/VirtualMachineProfileImpl.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWork.java b/engine/components-api/src/main/java/com/cloud/vm/VmWork.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWork.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWork.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkAttachVolume.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkAttachVolume.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkAttachVolume.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkAttachVolume.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkConstants.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkConstants.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkConstants.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkConstants.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkDetachVolume.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkDetachVolume.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkDetachVolume.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkDetachVolume.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkExtractVolume.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkExtractVolume.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkExtractVolume.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkExtractVolume.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkJobHandler.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandler.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkJobHandler.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandler.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandlerProxy.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkJobHandlerProxy.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandlerProxy.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkMigrateVolume.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkMigrateVolume.java
similarity index 87%
rename from engine/components-api/src/com/cloud/vm/VmWorkMigrateVolume.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkMigrateVolume.java
index 994b492..e8ddf9b 100644
--- a/engine/components-api/src/com/cloud/vm/VmWorkMigrateVolume.java
+++ b/engine/components-api/src/main/java/com/cloud/vm/VmWorkMigrateVolume.java
@@ -22,12 +22,14 @@
     private long volumeId;
     private long destPoolId;
     private boolean liveMigrate;
+    private Long newDiskOfferingId;
 
-    public VmWorkMigrateVolume(long userId, long accountId, long vmId, String handlerName, long volumeId, long destPoolId, boolean liveMigrate) {
+    public VmWorkMigrateVolume(long userId, long accountId, long vmId, String handlerName, long volumeId, long destPoolId, boolean liveMigrate, Long newDiskOfferingId) {
         super(userId, accountId, vmId, handlerName);
         this.volumeId = volumeId;
         this.destPoolId = destPoolId;
         this.liveMigrate = liveMigrate;
+        this.newDiskOfferingId = newDiskOfferingId;
     }
 
     public long getVolumeId() {
@@ -41,4 +43,8 @@
     public boolean isLiveMigrate() {
         return liveMigrate;
     }
+
+    public Long getNewDiskOfferingId() {
+        return newDiskOfferingId;
+    }
 }
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkResizeVolume.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkResizeVolume.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkResizeVolume.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkResizeVolume.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkSerializer.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkSerializer.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkSerializer.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkSerializer.java
diff --git a/engine/components-api/src/com/cloud/vm/VmWorkTakeVolumeSnapshot.java b/engine/components-api/src/main/java/com/cloud/vm/VmWorkTakeVolumeSnapshot.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/VmWorkTakeVolumeSnapshot.java
rename to engine/components-api/src/main/java/com/cloud/vm/VmWorkTakeVolumeSnapshot.java
diff --git a/engine/components-api/src/com/cloud/vm/snapshot/VMSnapshotManager.java b/engine/components-api/src/main/java/com/cloud/vm/snapshot/VMSnapshotManager.java
similarity index 100%
rename from engine/components-api/src/com/cloud/vm/snapshot/VMSnapshotManager.java
rename to engine/components-api/src/main/java/com/cloud/vm/snapshot/VMSnapshotManager.java
diff --git a/engine/components-api/src/org/apache/cloudstack/compute/ComputeGuru.java b/engine/components-api/src/main/java/org/apache/cloudstack/compute/ComputeGuru.java
similarity index 100%
rename from engine/components-api/src/org/apache/cloudstack/compute/ComputeGuru.java
rename to engine/components-api/src/main/java/org/apache/cloudstack/compute/ComputeGuru.java
diff --git a/engine/components-api/resources/META-INF/cloudstack/core/spring-engine-components-api-core-context.xml b/engine/components-api/src/main/resources/META-INF/cloudstack/core/spring-engine-components-api-core-context.xml
similarity index 100%
rename from engine/components-api/resources/META-INF/cloudstack/core/spring-engine-components-api-core-context.xml
rename to engine/components-api/src/main/resources/META-INF/cloudstack/core/spring-engine-components-api-core-context.xml
diff --git a/engine/network/pom.xml b/engine/network/pom.xml
index 5ade04c..1898ca6 100644
--- a/engine/network/pom.xml
+++ b/engine/network/pom.xml
@@ -1,52 +1,47 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-network</artifactId>
-  <name>Apache CloudStack Cloud Engine API</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-network</artifactId>
+    <name>Apache CloudStack Cloud Engine API</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/network/src/org/apache/cloudstack/network/NetworkOrchestrator.java b/engine/network/src/main/java/org/apache/cloudstack/network/NetworkOrchestrator.java
similarity index 100%
rename from engine/network/src/org/apache/cloudstack/network/NetworkOrchestrator.java
rename to engine/network/src/main/java/org/apache/cloudstack/network/NetworkOrchestrator.java
diff --git a/engine/orchestration/pom.xml b/engine/orchestration/pom.xml
index 2eff095..70a4ecc 100755
--- a/engine/orchestration/pom.xml
+++ b/engine/orchestration/pom.xml
@@ -1,90 +1,90 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-orchestration</artifactId>
-  <name>Apache CloudStack Cloud Engine Orchestration Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-agent-lb</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-orchestration</artifactId>
+    <name>Apache CloudStack Cloud Engine Orchestration Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-agent-lb</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentAttache.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentAttache.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/AgentAttache.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/AgentAttache.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java
similarity index 92%
rename from engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java
index 9626385..6091131 100644
--- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java
@@ -40,7 +40,6 @@
 
 import org.apache.cloudstack.agent.lb.IndirectAgentLB;
 import org.apache.cloudstack.ca.CAManager;
-import com.cloud.configuration.ManagementServiceConfiguration;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.Configurable;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -77,6 +76,7 @@
 import com.cloud.agent.transport.Request;
 import com.cloud.agent.transport.Response;
 import com.cloud.alert.AlertManager;
+import com.cloud.configuration.ManagementServiceConfiguration;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
@@ -125,7 +125,6 @@
  **/
 public class AgentManagerImpl extends ManagerBase implements AgentManager, HandlerFactory, Configurable {
     protected static final Logger s_logger = Logger.getLogger(AgentManagerImpl.class);
-    protected static final Logger status_logger = Logger.getLogger(Status.class);
 
     /**
      * _agents is a ConcurrentHashMap, but it is used from within a synchronized block. This will be reported by findbugs as JLM_JSR166_UTILCONCURRENT_MONITORENTER. Maybe a
@@ -136,7 +135,7 @@
     protected List<Pair<Integer, Listener>> _cmdMonitors = new ArrayList<Pair<Integer, Listener>>(17);
     protected List<Pair<Integer, StartupCommandProcessor>> _creationMonitors = new ArrayList<Pair<Integer, StartupCommandProcessor>>(17);
     protected List<Long> _loadingAgents = new ArrayList<Long>();
-    protected int _monitorId = 0;
+    private int _monitorId = 0;
     private final Lock _agentStatusLock = new ReentrantLock();
 
     @Inject
@@ -186,28 +185,22 @@
 
     @Inject
     ResourceManager _resourceMgr;
-
     @Inject
     ManagementServiceConfiguration mgmtServiceConf;
 
     protected final ConfigKey<Integer> Workers = new ConfigKey<Integer>("Advanced", Integer.class, "workers", "5",
-                    "Number of worker threads handling remote agent connections.", false);
+            "Number of worker threads handling remote agent connections.", false);
     protected final ConfigKey<Integer> Port = new ConfigKey<Integer>("Advanced", Integer.class, "port", "8250", "Port to listen on for remote agent connections.", false);
     protected final ConfigKey<Integer> AlertWait = new ConfigKey<Integer>("Advanced", Integer.class, "alert.wait", "1800",
-                    "Seconds to wait before alerting on a disconnected agent", true);
+            "Seconds to wait before alerting on a disconnected agent", true);
     protected final ConfigKey<Integer> DirectAgentLoadSize = new ConfigKey<Integer>("Advanced", Integer.class, "direct.agent.load.size", "16",
-                    "The number of direct agents to load each time", false);
+            "The number of direct agents to load each time", false);
     protected final ConfigKey<Integer> DirectAgentPoolSize = new ConfigKey<Integer>("Advanced", Integer.class, "direct.agent.pool.size", "500",
-                    "Default size for DirectAgentPool", false);
+            "Default size for DirectAgentPool", false);
     protected final ConfigKey<Float> DirectAgentThreadCap = new ConfigKey<Float>("Advanced", Float.class, "direct.agent.thread.cap", "1",
-                    "Percentage (as a value between 0 and 1) of direct.agent.pool.size to be used as upper thread cap for a single direct agent to process requests", false);
-    protected final ConfigKey<Boolean> CheckTxnBeforeSending = new ConfigKey<Boolean>(
-                    "Developer",
-                    Boolean.class,
-                    "check.txn.before.sending.agent.commands",
-                    "false",
-                    "This parameter allows developers to enable a check to see if a transaction wraps commands that are sent to the resource.  This is not to be enabled on production systems.",
-                    true);
+            "Percentage (as a value between 0 and 1) of direct.agent.pool.size to be used as upper thread cap for a single direct agent to process requests", false);
+    protected final ConfigKey<Boolean> CheckTxnBeforeSending = new ConfigKey<Boolean>("Developer", Boolean.class, "check.txn.before.sending.agent.commands", "false",
+            "This parameter allows developers to enable a check to see if a transaction wraps commands that are sent to the resource.  This is not to be enabled on production systems.", true);
 
     @Override
     public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
@@ -247,7 +240,6 @@
         return true;
     }
 
-
     @Override
     public Task create(final Task.Type type, final Link link, final byte[] data) {
         return new AgentHandler(type, link, data);
@@ -442,8 +434,7 @@
         if (CheckTxnBeforeSending.value()) {
             if (!noDbTxn()) {
                 throw new CloudRuntimeException("We do not allow transactions to be wrapped around commands sent to be executed on remote agents.  "
-                                + "We cannot predict how long it takes a command to complete.  "
-                                + "The transaction may be rolled back because the connection took too long.");
+                        + "We cannot predict how long it takes a command to complete.  " + "The transaction may be rolled back because the connection took too long.");
             }
         } else {
             assert noDbTxn() : "I know, I know.  Why are we so strict as to not allow txn across an agent call?  ...  Why are we so cruel ... Why are we such a dictator .... Too bad... Sorry...but NO AGENT COMMANDS WRAPPED WITHIN DB TRANSACTIONS!";
@@ -570,15 +561,13 @@
                     monitor.second().processConnect(host, cmd[i], forRebalance);
                 } catch (final Exception e) {
                     if (e instanceof ConnectionException) {
-                        final ConnectionException ce = (ConnectionException) e;
+                        final ConnectionException ce = (ConnectionException)e;
                         if (ce.isSetupError()) {
-                            s_logger.warn("Monitor " + monitor.second().getClass().getSimpleName() + " says there is an error in the connect process for " + hostId +
-                                            " due to " + e.getMessage());
+                            s_logger.warn("Monitor " + monitor.second().getClass().getSimpleName() + " says there is an error in the connect process for " + hostId + " due to " + e.getMessage());
                             handleDisconnectWithoutInvestigation(attache, Event.AgentDisconnected, true, true);
                             throw ce;
                         } else {
-                            s_logger.info("Monitor " + monitor.second().getClass().getSimpleName() + " says not to continue the connect process for " + hostId +
-                                            " due to " + e.getMessage());
+                            s_logger.info("Monitor " + monitor.second().getClass().getSimpleName() + " says not to continue the connect process for " + hostId + " due to " + e.getMessage());
                             handleDisconnectWithoutInvestigation(attache, Event.ShutdownRequested, true, true);
                             return attache;
                         }
@@ -586,8 +575,7 @@
                         handleDisconnectWithoutInvestigation(attache, Event.ShutdownRequested, true, true);
                         throw new CloudRuntimeException("Unable to connect " + attache.getId(), e);
                     } else {
-                        s_logger.error("Monitor " + monitor.second().getClass().getSimpleName() + " says there is an error in the connect process for " + hostId +
-                                        " due to " + e.getMessage(), e);
+                        s_logger.error("Monitor " + monitor.second().getClass().getSimpleName() + " says there is an error in the connect process for " + hostId + " due to " + e.getMessage(), e);
                         handleDisconnectWithoutInvestigation(attache, Event.AgentDisconnected, true, true);
                         throw new CloudRuntimeException("Unable to connect " + attache.getId(), e);
                     }
@@ -640,7 +628,7 @@
         try {
             final Class<?> clazz = Class.forName(resourceName);
             final Constructor<?> constructor = clazz.getConstructor();
-            resource = (ServerResource) constructor.newInstance();
+            resource = (ServerResource)constructor.newInstance();
         } catch (final ClassNotFoundException e) {
             s_logger.warn("Unable to find class " + host.getResource(), e);
         } catch (final InstantiationException e) {
@@ -894,7 +882,7 @@
                         final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName();
                         if (host.getType() != Host.Type.SecondaryStorage && host.getType() != Host.Type.ConsoleProxy) {
                             _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host disconnected, " + hostDesc,
-                                            "If the agent for host [" + hostDesc + "] is not restarted within " + AlertWait + " seconds, host will go to Alert state");
+                                    "If the agent for host [" + hostDesc + "] is not restarted within " + AlertWait + " seconds, host will go to Alert state");
                         }
                         event = Status.Event.AgentDisconnected;
                     }
@@ -905,7 +893,7 @@
                     final String podName = podVO != null ? podVO.getName() : "NO POD";
                     final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podName;
                     _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host in ALERT state, " + hostDesc,
-                                    "In availability zone " + host.getDataCenterId() + ", host is in alert state: " + host.getId() + "-" + host.getName());
+                            "In availability zone " + host.getDataCenterId() + ", host is in alert state: " + host.getId() + "-" + host.getName());
                 }
             } else {
                 s_logger.debug("The next status of agent " + host.getId() + " is not Alert, no need to investigate what happened");
@@ -993,33 +981,30 @@
     }
 
     @Override
-    public boolean reconnect(final long hostId) {
-        HostVO host;
+    public void reconnect(final long hostId) throws AgentUnavailableException {
+        HostVO host = _hostDao.findById(hostId);
+        if (host == null) {
+            throw new CloudRuntimeException("Unable to find host: " + hostId);
+        }
 
-        host = _hostDao.findById(hostId);
-        if (host == null || host.getRemoved() != null) {
-            s_logger.warn("Unable to find host " + hostId);
-            return false;
+        if (host.getRemoved() != null) {
+            throw new CloudRuntimeException("Host has already been removed: " + hostId);
         }
 
         if (host.getStatus() == Status.Disconnected) {
-            s_logger.info("Host is already disconnected, no work to be done");
-            return true;
+            s_logger.debug("Host is already disconnected, no work to be done: " + hostId);
+            return;
         }
 
         if (host.getStatus() != Status.Up && host.getStatus() != Status.Alert && host.getStatus() != Status.Rebalancing) {
-            s_logger.info("Unable to disconnect host because it is not in the correct state: host=" + hostId + "; Status=" + host.getStatus());
-            return false;
+            throw new CloudRuntimeException("Unable to disconnect host because it is not in the correct state: host=" + hostId + "; Status=" + host.getStatus());
         }
 
-        final AgentAttache attache = findAttache(hostId);
+        AgentAttache attache = findAttache(hostId);
         if (attache == null) {
-            s_logger.info("Unable to disconnect host because it is not connected to this server: " + hostId);
-            return false;
+            throw new CloudRuntimeException("Unable to disconnect host because it is not connected to this server: " + hostId);
         }
-
         disconnectWithoutInvestigation(attache, Event.ShutdownRequested);
-        return true;
     }
 
     @Override
@@ -1055,8 +1040,15 @@
                 handleDisconnectWithoutInvestigation(attache, Event.AgentDisconnected, true, true);
             }
             return true;
-        } else if (event == Event.ShutdownRequested) {
-            return reconnect(hostId);
+        }
+        if (event == Event.ShutdownRequested) {
+            try {
+                reconnect(hostId);
+            } catch (CloudRuntimeException e) {
+                s_logger.debug("Error on shutdown request for hostID: " + hostId, e);
+                return false;
+            }
+            return true;
         }
         return false;
     }
@@ -1189,7 +1181,7 @@
             _request.logD("Processing the first command ");
             final StartupCommand[] startups = new StartupCommand[_cmds.length];
             for (int i = 0; i < _cmds.length; i++) {
-                startups[i] = (StartupCommand) _cmds[i];
+                startups[i] = (StartupCommand)_cmds[i];
             }
 
             final AgentAttache attache = handleConnectedAgent(_link, startups, _request);
@@ -1207,7 +1199,7 @@
         for (int i = 0; i < cmds.length; i++) {
             cmd = cmds[i];
             if (cmd instanceof StartupRoutingCommand || cmd instanceof StartupProxyCommand || cmd instanceof StartupSecondaryStorageCommand ||
-                            cmd instanceof StartupStorageCommand) {
+                    cmd instanceof StartupStorageCommand) {
                 answers[i] = new StartupAnswer((StartupCommand) cmds[i], 0, mgmtServiceConf.getPingInterval());
                 break;
             }
@@ -1228,7 +1220,7 @@
         }
 
         protected void processRequest(final Link link, final Request request) {
-            final AgentAttache attache = (AgentAttache) link.attachment();
+            final AgentAttache attache = (AgentAttache)link.attachment();
             final Command[] cmds = request.getCommands();
             Command cmd = cmds[0];
             boolean logD = true;
@@ -1279,10 +1271,9 @@
                         final StartupStorageCommand startup = (StartupStorageCommand) cmd;
                         answer = new StartupAnswer(startup, attache.getId(), mgmtServiceConf.getPingInterval());
                     } else if (cmd instanceof ShutdownCommand) {
-                        final ShutdownCommand shutdown = (ShutdownCommand) cmd;
+                        final ShutdownCommand shutdown = (ShutdownCommand)cmd;
                         final String reason = shutdown.getReason();
-                        s_logger.info("Host " + attache.getId() + " has informed us that it is shutting down with reason " + reason + " and detail " +
-                                        shutdown.getDetail());
+                        s_logger.info("Host " + attache.getId() + " has informed us that it is shutting down with reason " + reason + " and detail " + shutdown.getDetail());
                         if (reason.equals(ShutdownCommand.Update)) {
                             // disconnectWithoutInvestigation(attache, Event.UpdateNeeded);
                             throw new CloudRuntimeException("Agent update not implemented");
@@ -1291,16 +1282,16 @@
                         }
                         return;
                     } else if (cmd instanceof AgentControlCommand) {
-                        answer = handleControlCommand(attache, (AgentControlCommand) cmd);
+                        answer = handleControlCommand(attache, (AgentControlCommand)cmd);
                     } else {
-                        handleCommands(attache, request.getSequence(), new Command[] { cmd });
+                        handleCommands(attache, request.getSequence(), new Command[] {cmd});
                         if (cmd instanceof PingCommand) {
-                            final long cmdHostId = ((PingCommand) cmd).getHostId();
+                            final long cmdHostId = ((PingCommand)cmd).getHostId();
 
                             // if the router is sending a ping, verify the
                             // gateway was pingable
                             if (cmd instanceof PingRoutingCommand) {
-                                final boolean gatewayAccessible = ((PingRoutingCommand) cmd).isGatewayAccessible();
+                                final boolean gatewayAccessible = ((PingRoutingCommand)cmd).isGatewayAccessible();
                                 final HostVO host = _hostDao.findById(Long.valueOf(cmdHostId));
 
                                 if (host != null) {
@@ -1309,22 +1300,18 @@
                                         // gateway (cannot ping the default route)
                                         final DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId());
                                         final HostPodVO podVO = _podDao.findById(host.getPodId());
-                                        final String hostDesc =
-                                                        "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: "
-                                                                        + podVO.getName();
+                                        final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName();
 
-                                        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_ROUTING, host.getDataCenterId(), host.getPodId(),
-                                                        "Host lost connection to gateway, " + hostDesc, "Host [" + hostDesc +
-                                                                        "] lost connection to gateway (default route) and is possibly having network connection issues.");
+                                        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_ROUTING, host.getDataCenterId(), host.getPodId(), "Host lost connection to gateway, " + hostDesc,
+                                                "Host [" + hostDesc + "] lost connection to gateway (default route) and is possibly having network connection issues.");
                                     } else {
                                         _alertMgr.clearAlert(AlertManager.AlertType.ALERT_TYPE_ROUTING, host.getDataCenterId(), host.getPodId());
                                     }
                                 } else {
-                                    s_logger.debug("Not processing " + PingRoutingCommand.class.getSimpleName() + " for agent id=" + cmdHostId +
-                                                    "; can't find the host in the DB");
+                                    s_logger.debug("Not processing " + PingRoutingCommand.class.getSimpleName() + " for agent id=" + cmdHostId + "; can't find the host in the DB");
                                 }
                             }
-                            answer = new PingAnswer((PingCommand) cmd);
+                            answer = new PingAnswer((PingCommand)cmd);
                         } else if (cmd instanceof ReadyAnswer) {
                             final HostVO host = _hostDao.findById(attache.getId());
                             if (host == null) {
@@ -1360,7 +1347,7 @@
         }
 
         protected void processResponse(final Link link, final Response response) {
-            final AgentAttache attache = (AgentAttache) link.attachment();
+            final AgentAttache attache = (AgentAttache)link.attachment();
             if (attache == null) {
                 s_logger.warn("Unable to process: " + response);
             } else if (!attache.processAnswers(response.getSequence(), response)) {
@@ -1378,7 +1365,7 @@
                     try {
                         final Request event = Request.parse(data);
                         if (event instanceof Response) {
-                            processResponse(task.getLink(), (Response) event);
+                            processResponse(task.getLink(), (Response)event);
                         } else {
                             processRequest(task.getLink(), event);
                         }
@@ -1393,7 +1380,7 @@
                 } else if (type == Task.Type.CONNECT) {
                 } else if (type == Task.Type.DISCONNECT) {
                     final Link link = task.getLink();
-                    final AgentAttache attache = (AgentAttache) link.attachment();
+                    final AgentAttache attache = (AgentAttache)link.attachment();
                     if (attache != null) {
                         disconnectWithInvestigation(attache, Event.AgentDisconnected);
                     } else {
@@ -1434,23 +1421,21 @@
     public boolean agentStatusTransitTo(final HostVO host, final Status.Event e, final long msId) {
         try {
             _agentStatusLock.lock();
-            if (status_logger.isDebugEnabled()) {
+            if (s_logger.isDebugEnabled()) {
                 final ResourceState state = host.getResourceState();
                 final StringBuilder msg = new StringBuilder("Transition:");
                 msg.append("[Resource state = ").append(state);
                 msg.append(", Agent event = ").append(e.toString());
                 msg.append(", Host id = ").append(host.getId()).append(", name = " + host.getName()).append("]");
-                status_logger.debug(msg);
+                s_logger.debug(msg);
             }
 
             host.setManagementServerId(msId);
             try {
                 return _statusStateMachine.transitTo(host, e, host.getId(), _hostDao);
             } catch (final NoTransitionException e1) {
-                status_logger.debug("Cannot transit agent status with event " + e + " for host " + host.getId() + ", name=" + host.getName() +
-                                ", mangement server id is " + msId);
-                throw new CloudRuntimeException("Cannot transit agent status with event " + e + " for host " + host.getId() + ", mangement server id is " + msId + "," +
-                                e1.getMessage());
+                s_logger.debug("Cannot transit agent status with event " + e + " for host " + host.getId() + ", name=" + host.getName() + ", mangement server id is " + msId);
+                throw new CloudRuntimeException("Cannot transit agent status with event " + e + " for host " + host.getId() + ", mangement server id is " + msId + "," + e1.getMessage());
             }
         } finally {
             _agentStatusLock.unlock();
@@ -1514,6 +1499,7 @@
         }
     }
 
+    @Override
     public void disconnectWithInvestigation(final long hostId, final Status.Event event) {
         disconnectInternal(hostId, event, true);
     }
@@ -1524,8 +1510,7 @@
     }
 
     @Override
-    public boolean handleDirectConnectAgent(final Host host, final StartupCommand[] cmds, final ServerResource resource,
-            final boolean forRebalance, boolean newHost) throws ConnectionException {
+    public boolean handleDirectConnectAgent(final Host host, final StartupCommand[] cmds, final ServerResource resource, final boolean forRebalance, boolean newHost) throws ConnectionException {
         AgentAttache attache;
 
         attache = createAttacheForDirectConnect(host, resource);
@@ -1602,17 +1587,17 @@
                             /*
                              * Host is in non-operation state, so no investigation and direct put agent to Disconnected
                              */
-                            status_logger.debug("Ping timeout but agent " + agentId + " is in resource state of " + resourceState + ", so no investigation");
+                            s_logger.debug("Ping timeout but agent " + agentId + " is in resource state of " + resourceState + ", so no investigation");
                             disconnectWithoutInvestigation(agentId, Event.ShutdownRequested);
                         } else {
                             final HostVO host = _hostDao.findById(agentId);
-                            if (host != null && (host.getType() == Host.Type.ConsoleProxy || host.getType() == Host.Type.SecondaryStorageVM
-                                            || host.getType() == Host.Type.SecondaryStorageCmdExecutor)) {
+                            if (host != null
+                                    && (host.getType() == Host.Type.ConsoleProxy || host.getType() == Host.Type.SecondaryStorageVM || host.getType() == Host.Type.SecondaryStorageCmdExecutor)) {
 
                                 s_logger.warn("Disconnect agent for CPVM/SSVM due to physical connection close. host: " + host.getId());
                                 disconnectWithoutInvestigation(agentId, Event.ShutdownRequested);
                             } else {
-                                status_logger.debug("Ping timeout for agent " + agentId + ", do invstigation");
+                                s_logger.debug("Ping timeout for agent " + agentId + ", do invstigation");
                                 disconnectWithInvestigation(agentId, Event.PingTimeout);
                             }
                         }
@@ -1628,8 +1613,8 @@
                         final DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId());
                         final HostPodVO podVO = _podDao.findById(host.getPodId());
                         final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName();
-                        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Migration Complete for host " + hostDesc, "Host ["
-                                        + hostDesc + "] is ready for maintenance");
+                        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Migration Complete for host " + hostDesc,
+                                "Host [" + hostDesc + "] is ready for maintenance");
                     }
                 }
             } catch (final Throwable th) {
@@ -1731,7 +1716,7 @@
     @Override
     public ConfigKey<?>[] getConfigKeys() {
         return new ConfigKey<?>[] { CheckTxnBeforeSending, Workers, Port, Wait, AlertWait, DirectAgentLoadSize, DirectAgentPoolSize,
-                        DirectAgentThreadCap };
+            DirectAgentThreadCap };
     }
 
     protected class SetHostParamsListener implements Listener {
@@ -1761,20 +1746,20 @@
 
         @Override
         public void processConnect(final Host host, final StartupCommand cmd, final boolean forRebalance) {
-        if (cmd instanceof StartupRoutingCommand) {
-            if (((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.KVM || ((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.LXC) {
-                Map<String, String> params = new HashMap<String, String>();
-                params.put("router.aggregation.command.each.timeout", _configDao.getValue("router.aggregation.command.each.timeout"));
+            if (cmd instanceof StartupRoutingCommand) {
+                if (((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.KVM || ((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.LXC) {
+                    Map<String, String> params = new HashMap<String, String>();
+                    params.put("router.aggregation.command.each.timeout", _configDao.getValue("router.aggregation.command.each.timeout"));
 
-                try {
-                    SetHostParamsCommand cmds = new SetHostParamsCommand(params);
-                    Commands c = new Commands(cmds);
-                    send(host.getId(), c, this);
-                } catch (AgentUnavailableException e) {
-                    s_logger.debug("Failed to send host params on host: " + host.getId());
+                    try {
+                        SetHostParamsCommand cmds = new SetHostParamsCommand(params);
+                        Commands c = new Commands(cmds);
+                        send(host.getId(), c, this);
+                    } catch (AgentUnavailableException e) {
+                        s_logger.debug("Failed to send host params on host: " + host.getId());
+                    }
                 }
             }
-        }
 
         }
 
diff --git a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentAttache.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentAttache.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentAttache.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentAttache.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
similarity index 94%
rename from engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
index 7a9678e..d0cced3 100644
--- a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
+++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
@@ -46,12 +46,12 @@
 import org.apache.cloudstack.framework.config.ConfigDepot;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.ha.dao.HAConfigDao;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
+import org.apache.cloudstack.outofbandmanagement.dao.OutOfBandManagementDao;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
 import org.apache.cloudstack.utils.security.SSLUtils;
-import org.apache.cloudstack.ha.dao.HAConfigDao;
-import org.apache.cloudstack.outofbandmanagement.dao.OutOfBandManagementDao;
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.api.Answer;
@@ -134,14 +134,12 @@
         super();
     }
 
-    protected final ConfigKey<Boolean> EnableLB = new ConfigKey<Boolean>(Boolean.class, "agent.lb.enabled", "Advanced", "false",
-            "Enable agent load balancing between management server nodes", true);
+    protected final ConfigKey<Boolean> EnableLB = new ConfigKey<Boolean>(Boolean.class, "agent.lb.enabled", "Advanced", "false", "Enable agent load balancing between management server nodes", true);
     protected final ConfigKey<Double> ConnectedAgentThreshold = new ConfigKey<Double>(Double.class, "agent.load.threshold", "Advanced", "0.7",
             "What percentage of the agents can be held by one management server before load balancing happens", true);
-    protected final ConfigKey<Integer> LoadSize = new ConfigKey<Integer>(Integer.class, "direct.agent.load.size", "Advanced", "16",
-            "How many agents to connect to in each round", true);
-    protected final ConfigKey<Integer> ScanInterval = new ConfigKey<Integer>(Integer.class, "direct.agent.scan.interval", "Advanced", "90",
-            "Interval between scans to load agents", false, ConfigKey.Scope.Global, 1000);
+    protected final ConfigKey<Integer> LoadSize = new ConfigKey<Integer>(Integer.class, "direct.agent.load.size", "Advanced", "16", "How many agents to connect to in each round", true);
+    protected final ConfigKey<Integer> ScanInterval = new ConfigKey<Integer>(Integer.class, "direct.agent.scan.interval", "Advanced", "90", "Interval between scans to load agents", false,
+            ConfigKey.Scope.Global, 1000);
 
     @Override
     public boolean configure(final String name, final Map<String, Object> xmlParams) throws ConfigurationException {
@@ -342,8 +340,7 @@
                     final HostTransferMapVO transferVO = _hostTransferDao.findById(hostId);
                     if (transferVO != null) {
                         if (transferVO.getFutureOwner() == _nodeId && transferVO.getState() == HostTransferState.TransferStarted) {
-                            s_logger.debug("Not processing " + Event.AgentDisconnected + " event for the host id=" + hostId + " as the host is being connected to " +
-                                    _nodeId);
+                            s_logger.debug("Not processing " + Event.AgentDisconnected + " event for the host id=" + hostId + " as the host is being connected to " + _nodeId);
                             return true;
                         }
                     }
@@ -352,8 +349,7 @@
                 // don't process disconnect if the disconnect came for the host via delayed cluster notification,
                 // but the host has already reconnected to the current management server
                 if (!attache.forForward()) {
-                    s_logger.debug("Not processing " + Event.AgentDisconnected + " event for the host id=" + hostId +
-                            " as the host is directly connected to the current management server " + _nodeId);
+                    s_logger.debug("Not processing " + Event.AgentDisconnected + " event for the host id=" + hostId + " as the host is directly connected to the current management server " + _nodeId);
                     return true;
                 }
 
@@ -367,19 +363,15 @@
     }
 
     @Override
-    public boolean reconnect(final long hostId) {
-        Boolean result;
-        try {
-            result = propagateAgentEvent(hostId, Event.ShutdownRequested);
-            if (result != null) {
-                return result;
-            }
-        } catch (final AgentUnavailableException e) {
-            s_logger.debug("cannot propagate agent reconnect because agent is not available", e);
-            return false;
+    public void reconnect(final long hostId) throws CloudRuntimeException, AgentUnavailableException {
+        Boolean result = propagateAgentEvent(hostId, Event.ShutdownRequested);
+        if (result == null) {
+            super.reconnect(hostId);
+            return;
         }
-
-        return super.reconnect(hostId);
+        if (!result) {
+                throw new CloudRuntimeException("Failed to propagate agent change request event:" + Event.ShutdownRequested + " to host:" + hostId);
+        }
     }
 
     public void notifyNodesInCluster(final AgentAttache attache) {
@@ -398,18 +390,18 @@
     }
 
     protected static void logT(final byte[] bytes, final String msg) {
-        s_logger.trace("Seq " + Request.getAgentId(bytes) + "-" + Request.getSequence(bytes) + ": MgmtId " + Request.getManagementServerId(bytes) + ": " +
-                (Request.isRequest(bytes) ? "Req: " : "Resp: ") + msg);
+        s_logger.trace("Seq " + Request.getAgentId(bytes) + "-" + Request.getSequence(bytes) + ": MgmtId " + Request.getManagementServerId(bytes) + ": "
+                + (Request.isRequest(bytes) ? "Req: " : "Resp: ") + msg);
     }
 
     protected static void logD(final byte[] bytes, final String msg) {
-        s_logger.debug("Seq " + Request.getAgentId(bytes) + "-" + Request.getSequence(bytes) + ": MgmtId " + Request.getManagementServerId(bytes) + ": " +
-                (Request.isRequest(bytes) ? "Req: " : "Resp: ") + msg);
+        s_logger.debug("Seq " + Request.getAgentId(bytes) + "-" + Request.getSequence(bytes) + ": MgmtId " + Request.getManagementServerId(bytes) + ": "
+                + (Request.isRequest(bytes) ? "Req: " : "Resp: ") + msg);
     }
 
     protected static void logI(final byte[] bytes, final String msg) {
-        s_logger.info("Seq " + Request.getAgentId(bytes) + "-" + Request.getSequence(bytes) + ": MgmtId " + Request.getManagementServerId(bytes) + ": " +
-                (Request.isRequest(bytes) ? "Req: " : "Resp: ") + msg);
+        s_logger.info("Seq " + Request.getAgentId(bytes) + "-" + Request.getSequence(bytes) + ": MgmtId " + Request.getManagementServerId(bytes) + ": "
+                + (Request.isRequest(bytes) ? "Req: " : "Resp: ") + msg);
     }
 
     public boolean routeToPeer(final String peer, final byte[] bytes) {
@@ -443,8 +435,7 @@
                     logI(bytes, "Unable to route to peer: " + Request.parse(bytes).toString() + " due to " + e.getMessage());
                 } catch (ClassNotFoundException | UnsupportedVersionException ex) {
                     // Request.parse thrown exception when we try to log it, log as much as we can
-                    logI(bytes, "Unable to route to peer due to" + e.getMessage()
-                            + ". Also caught exception when parsing request: " + ex.getMessage());
+                    logI(bytes, "Unable to route to peer due to" + e.getMessage() + ". Also caught exception when parsing request: " + ex.getMessage());
                 }
             }
         }
@@ -489,8 +480,7 @@
                 try {
                     prevCh.close();
                 } catch (final Exception e) {
-                    s_logger.info("[ignored]"
-                            + "failed to get close resource for previous channel Socket: " + e.getLocalizedMessage());
+                    s_logger.info("[ignored]" + "failed to get close resource for previous channel Socket: " + e.getLocalizedMessage());
                 }
             }
             if (ch == null || ch == prevCh) {
@@ -597,7 +587,7 @@
                     s_logger.info("Closing: " + ch.toString());
                     ch.close();
                 } catch (final IOException e) {
-                    s_logger.info("[ignored] error on closing channel: " +ch.toString(), e);
+                    s_logger.info("[ignored] error on closing channel: " + ch.toString(), e);
                 }
             }
         }
@@ -770,8 +760,7 @@
     }
 
     @Override
-    public boolean executeRebalanceRequest(final long agentId, final long currentOwnerId, final long futureOwnerId, final Event event) throws AgentUnavailableException,
-    OperationTimedoutException {
+    public boolean executeRebalanceRequest(final long agentId, final long currentOwnerId, final long futureOwnerId, final Event event) throws AgentUnavailableException, OperationTimedoutException {
         boolean result = false;
         if (event == Event.RequestAgentRebalance) {
             return setToWaitForRebalance(agentId, currentOwnerId, futureOwnerId);
@@ -837,8 +826,8 @@
             avLoad = allManagedAgents.size() / allMS.size();
         } else {
             if (s_logger.isDebugEnabled()) {
-                s_logger.debug("There are no hosts to rebalance in the system. Current number of active management server nodes in the system is " + allMS.size() +
-                        "; number of managed agents is " + allManagedAgents.size());
+                s_logger.debug("There are no hosts to rebalance in the system. Current number of active management server nodes in the system is " + allMS.size() + "; number of managed agents is "
+                        + allManagedAgents.size());
             }
             return;
         }
@@ -991,8 +980,7 @@
                                 // remove the host from re-balance list and delete from op_host_transfer DB
                                 // no need to do anything with the real attache as we haven't modified it yet
                                 final Date cutTime = DateUtil.currentGMTTime();
-                                final HostTransferMapVO transferMap =
-                                        _hostTransferDao.findActiveHostTransferMapByHostId(hostId, new Date(cutTime.getTime() - rebalanceTimeOut));
+                                final HostTransferMapVO transferMap = _hostTransferDao.findActiveHostTransferMapByHostId(hostId, new Date(cutTime.getTime() - rebalanceTimeOut));
 
                                 if (transferMap == null) {
                                     s_logger.debug("Timed out waiting for the host id=" + hostId + " to be ready to transfer, skipping rebalance for the host");
@@ -1010,8 +998,7 @@
 
                                 final ManagementServerHostVO ms = _mshostDao.findByMsid(transferMap.getFutureOwner());
                                 if (ms != null && ms.getState() != ManagementServerHost.State.Up) {
-                                    s_logger.debug("Can't transfer host " + hostId + " as it's future owner is not in UP state: " + ms +
-                                            ", skipping rebalance for the host");
+                                    s_logger.debug("Can't transfer host " + hostId + " as it's future owner is not in UP state: " + ms + ", skipping rebalance for the host");
                                     iterator.remove();
                                     _hostTransferDao.completeAgentTransfer(hostId);
                                     continue;
@@ -1027,8 +1014,8 @@
                                     }
 
                                 } else {
-                                    s_logger.debug("Agent " + hostId + " can't be transfered yet as its request queue size is " + attache.getQueueSize() +
-                                            " and listener queue size is " + attache.getNonRecurringListenersSize());
+                                    s_logger.debug("Agent " + hostId + " can't be transfered yet as its request queue size is " + attache.getQueueSize() + " and listener queue size is "
+                                            + attache.getNonRecurringListenersSize());
                                 }
                             }
                         } else {
@@ -1094,8 +1081,7 @@
 
                 if (result) {
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Loading directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId +
-                                " as a part of rebalance process");
+                        s_logger.debug("Loading directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId + " as a part of rebalance process");
                     }
                     result = loadDirectlyConnectedHost(host, true);
                 } else {
@@ -1103,17 +1089,15 @@
                 }
 
             } catch (final Exception ex) {
-                s_logger.warn("Failed to load directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId +
-                        " as a part of rebalance process due to:", ex);
+                s_logger.warn("Failed to load directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId + " as a part of rebalance process due to:",
+                        ex);
                 result = false;
             }
 
             if (result) {
-                s_logger.debug("Successfully loaded directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId +
-                        " as a part of rebalance process");
+                s_logger.debug("Successfully loaded directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId + " as a part of rebalance process");
             } else {
-                s_logger.warn("Failed to load directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId +
-                        " as a part of rebalance process");
+                s_logger.warn("Failed to load directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId + " as a part of rebalance process");
             }
         }
 
@@ -1144,8 +1128,7 @@
             // 2) Get all transfer requests and route them to peer
             Request requestToTransfer = forwardAttache.getRequestToTransfer();
             while (requestToTransfer != null) {
-                s_logger.debug("Forwarding request " + requestToTransfer.getSequence() + " held in transfer attache " + hostId + " from the management server " +
-                        _nodeId + " to " + futureOwnerId);
+                s_logger.debug("Forwarding request " + requestToTransfer.getSequence() + " held in transfer attache " + hostId + " from the management server " + _nodeId + " to " + futureOwnerId);
                 final boolean routeResult = routeToPeer(Long.toString(futureOwnerId), requestToTransfer.getBytes());
                 if (!routeResult) {
                     logD(requestToTransfer.getBytes(), "Failed to route request to peer");
@@ -1198,8 +1181,8 @@
                 if (attache == null) {
                     s_logger.warn("Attache for the agent " + hostId + " no longer exists on management server " + _nodeId + ", can't start host rebalancing");
                 } else {
-                    s_logger.warn("Attache for the agent " + hostId + " has request queue size= " + attache.getQueueSize() + " and listener queue size " +
-                            attache.getNonRecurringListenersSize() + ", can't start host rebalancing");
+                    s_logger.warn("Attache for the agent " + hostId + " has request queue size= " + attache.getQueueSize() + " and listener queue size " + attache.getNonRecurringListenersSize()
+                    + ", can't start host rebalancing");
                 }
                 return false;
             }
@@ -1255,8 +1238,9 @@
         } catch (final Exception e) {
             // Scheduling host scan task in peer MS is a best effort operation during host add, regular host scan
             // happens at fixed intervals anyways. So handling any exceptions that may be thrown
-            s_logger.warn("Exception happened while trying to schedule host scan task on mgmt server " + _clusterMgr.getSelfPeerName() +
-                    ", ignoring as regular host scan happens at fixed interval anyways", e);
+            s_logger.warn(
+                    "Exception happened while trying to schedule host scan task on mgmt server " + _clusterMgr.getSelfPeerName() + ", ignoring as regular host scan happens at fixed interval anyways",
+                    e);
             return null;
         }
 
@@ -1372,15 +1356,15 @@
                     final String jsonReturn = _gson.toJson(answers);
 
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Completed dispatching -> " + pdu.getAgentId() + ", json: " + pdu.getJsonPackage() + " in " +
-                                (System.currentTimeMillis() - startTick) + " ms, return result: " + jsonReturn);
+                        s_logger.debug("Completed dispatching -> " + pdu.getAgentId() + ", json: " + pdu.getJsonPackage() + " in " + (System.currentTimeMillis() - startTick) + " ms, return result: "
+                                + jsonReturn);
                     }
 
                     return jsonReturn;
                 } else {
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Completed dispatching -> " + pdu.getAgentId() + ", json: " + pdu.getJsonPackage() + " in " +
-                                (System.currentTimeMillis() - startTick) + " ms, return null result");
+                        s_logger.debug(
+                                "Completed dispatching -> " + pdu.getAgentId() + ", json: " + pdu.getJsonPackage() + " in " + (System.currentTimeMillis() - startTick) + " ms, return null result");
                     }
                 }
             } catch (final AgentUnavailableException e) {
diff --git a/engine/orchestration/src/com/cloud/agent/manager/ClusteredDirectAgentAttache.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredDirectAgentAttache.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/ClusteredDirectAgentAttache.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredDirectAgentAttache.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/ConnectedAgentAttache.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/ConnectedAgentAttache.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/ConnectedAgentAttache.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/ConnectedAgentAttache.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/DirectAgentAttache.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/DirectAgentAttache.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/DummyAttache.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/DummyAttache.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/DummyAttache.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/DummyAttache.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/Routable.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/Routable.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/Routable.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/Routable.java
diff --git a/engine/orchestration/src/com/cloud/agent/manager/SynchronousListener.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/SynchronousListener.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/agent/manager/SynchronousListener.java
rename to engine/orchestration/src/main/java/com/cloud/agent/manager/SynchronousListener.java
diff --git a/engine/orchestration/src/com/cloud/cluster/ClusteredAgentRebalanceService.java b/engine/orchestration/src/main/java/com/cloud/cluster/ClusteredAgentRebalanceService.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/cluster/ClusteredAgentRebalanceService.java
rename to engine/orchestration/src/main/java/com/cloud/cluster/ClusteredAgentRebalanceService.java
diff --git a/engine/orchestration/src/com/cloud/cluster/agentlb/AgentLoadBalancerPlanner.java b/engine/orchestration/src/main/java/com/cloud/cluster/agentlb/AgentLoadBalancerPlanner.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/cluster/agentlb/AgentLoadBalancerPlanner.java
rename to engine/orchestration/src/main/java/com/cloud/cluster/agentlb/AgentLoadBalancerPlanner.java
diff --git a/engine/orchestration/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java b/engine/orchestration/src/main/java/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java
rename to engine/orchestration/src/main/java/com/cloud/cluster/agentlb/ClusterBasedAgentLoadBalancerPlanner.java
diff --git a/engine/orchestration/src/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java
rename to engine/orchestration/src/main/java/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
similarity index 95%
rename from engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index 6f2ae85..aa76a08 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -23,9 +23,9 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,9 +39,6 @@
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 import org.apache.cloudstack.ca.CAManager;
 import org.apache.cloudstack.context.CallContext;
@@ -51,7 +48,6 @@
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.framework.ca.Certificate;
-import org.apache.cloudstack.framework.config.ConfigDepot;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.Configurable;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -73,6 +69,9 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
@@ -132,7 +131,6 @@
 import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.deploy.DeploymentPlanner.ExcludeList;
 import com.cloud.deploy.DeploymentPlanningManager;
-import com.cloud.domain.dao.DomainDao;
 import com.cloud.event.EventTypes;
 import com.cloud.event.UsageEventUtils;
 import com.cloud.exception.AffinityConflictException;
@@ -147,7 +145,6 @@
 import com.cloud.exception.OperationTimedoutException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.exception.StorageUnavailableException;
-import com.cloud.gpu.dao.VGPUTypesDao;
 import com.cloud.ha.HighAvailabilityManager;
 import com.cloud.ha.HighAvailabilityManager.WorkType;
 import com.cloud.host.Host;
@@ -162,7 +159,6 @@
 import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.router.VirtualRouter;
-import com.cloud.network.rules.RulesManager;
 import com.cloud.offering.DiskOffering;
 import com.cloud.offering.DiskOfferingInfo;
 import com.cloud.offering.ServiceOffering;
@@ -230,121 +226,93 @@
     private static final String VM_SYNC_ALERT_SUBJECT = "VM state sync alert";
 
     @Inject
-    DataStoreManager dataStoreMgr;
+    private DataStoreManager dataStoreMgr;
     @Inject
-    protected NetworkOrchestrationService _networkMgr;
+    private NetworkOrchestrationService _networkMgr;
     @Inject
-    protected NetworkModel _networkModel;
+    private NetworkModel _networkModel;
     @Inject
-    protected AgentManager _agentMgr;
+    private AgentManager _agentMgr;
     @Inject
-    protected VMInstanceDao _vmDao;
+    private VMInstanceDao _vmDao;
     @Inject
-    protected ServiceOfferingDao _offeringDao;
+    private ServiceOfferingDao _offeringDao;
     @Inject
-    protected DiskOfferingDao _diskOfferingDao;
+    private DiskOfferingDao _diskOfferingDao;
     @Inject
-    protected VMTemplateDao _templateDao;
+    private VMTemplateDao _templateDao;
     @Inject
-    protected DomainDao _domainDao;
+    private ItWorkDao _workDao;
     @Inject
-    protected ItWorkDao _workDao;
+    private UserVmDao _userVmDao;
     @Inject
-    protected UserVmDao _userVmDao;
+    private UserVmService _userVmService;
     @Inject
-    protected UserVmService _userVmService;
+    private CapacityManager _capacityMgr;
     @Inject
-    protected CapacityManager _capacityMgr;
+    private NicDao _nicsDao;
     @Inject
-    protected NicDao _nicsDao;
+    private HostDao _hostDao;
     @Inject
-    protected HostDao _hostDao;
+    private AlertManager _alertMgr;
     @Inject
-    protected AlertManager _alertMgr;
+    private GuestOSCategoryDao _guestOsCategoryDao;
     @Inject
-    protected GuestOSCategoryDao _guestOsCategoryDao;
+    private GuestOSDao _guestOsDao;
     @Inject
-    protected GuestOSDao _guestOsDao;
+    private VolumeDao _volsDao;
     @Inject
-    protected VolumeDao _volsDao;
+    private HighAvailabilityManager _haMgr;
     @Inject
-    protected HighAvailabilityManager _haMgr;
+    private HostPodDao _podDao;
     @Inject
-    protected HostPodDao _podDao;
+    private DataCenterDao _dcDao;
     @Inject
-    protected DataCenterDao _dcDao;
+    private ClusterDao _clusterDao;
     @Inject
-    protected ClusterDao _clusterDao;
+    private PrimaryDataStoreDao _storagePoolDao;
     @Inject
-    protected PrimaryDataStoreDao _storagePoolDao;
+    private HypervisorGuruManager _hvGuruMgr;
     @Inject
-    protected HypervisorGuruManager _hvGuruMgr;
+    private NetworkDao _networkDao;
     @Inject
-    protected NetworkDao _networkDao;
+    private StoragePoolHostDao _poolHostDao;
     @Inject
-    protected StoragePoolHostDao _poolHostDao;
+    private VMSnapshotDao _vmSnapshotDao;
     @Inject
-    protected VMSnapshotDao _vmSnapshotDao;
+    private AffinityGroupVMMapDao _affinityGroupVMMapDao;
     @Inject
-    protected RulesManager rulesMgr;
+    private EntityManager _entityMgr;
     @Inject
-    protected AffinityGroupVMMapDao _affinityGroupVMMapDao;
+    private GuestOSCategoryDao _guestOSCategoryDao;
     @Inject
-    protected VGPUTypesDao _vgpuTypesDao;
+    private GuestOSDao _guestOSDao;
     @Inject
-    protected EntityManager _entityMgr;
+    private ServiceOfferingDao _serviceOfferingDao;
     @Inject
-    protected GuestOSCategoryDao _guestOSCategoryDao;
+    private CAManager caManager;
     @Inject
-    protected GuestOSDao _guestOSDao = null;
+    private ResourceManager _resourceMgr;
     @Inject
-    protected UserVmDetailsDao _vmDetailsDao;
+    private VMSnapshotManager _vmSnapshotMgr;
     @Inject
-    protected ServiceOfferingDao _serviceOfferingDao = null;
+    private ClusterDetailsDao _clusterDetailsDao;
     @Inject
-    protected CAManager caManager;
-
+    private UserVmDetailsDao userVmDetailsDao;
     @Inject
-    ConfigDepot _configDepot;
-
-    protected List<HostAllocator> hostAllocators;
-
-    public List<HostAllocator> getHostAllocators() {
-        return hostAllocators;
-    }
-
-    public void setHostAllocators(final List<HostAllocator> hostAllocators) {
-        this.hostAllocators = hostAllocators;
-    }
-
-    protected List<StoragePoolAllocator> _storagePoolAllocators;
-
+    private ConfigurationDao _configDao;
     @Inject
-    protected ResourceManager _resourceMgr;
-
+    private VolumeOrchestrationService volumeMgr;
     @Inject
-    protected VMSnapshotManager _vmSnapshotMgr = null;
+    private DeploymentPlanningManager _dpMgr;
     @Inject
-    protected ClusterDetailsDao _clusterDetailsDao;
+    private MessageBus _messageBus;
     @Inject
-    protected UserVmDetailsDao _uservmDetailsDao;
-
+    private VirtualMachinePowerStateSync _syncMgr;
     @Inject
-    protected ConfigurationDao _configDao;
+    private VmWorkJobDao _workJobDao;
     @Inject
-    VolumeOrchestrationService volumeMgr;
-
-    @Inject
-    DeploymentPlanningManager _dpMgr;
-
-    @Inject
-    protected MessageBus _messageBus;
-    @Inject
-    protected VirtualMachinePowerStateSync _syncMgr;
-    @Inject
-    protected VmWorkJobDao _workJobDao;
-    @Inject
-    protected AsyncJobManager _jobMgr;
+    private AsyncJobManager _jobMgr;
 
     VmWorkJobHandlerProxy _jobHandlerProxy = new VmWorkJobHandlerProxy(this);
 
@@ -387,7 +355,19 @@
 
     ScheduledExecutorService _executor = null;
 
-    protected long _nodeId;
+    private long _nodeId;
+
+    private List<StoragePoolAllocator> _storagePoolAllocators;
+
+    private List<HostAllocator> hostAllocators;
+
+    public List<HostAllocator> getHostAllocators() {
+        return hostAllocators;
+    }
+
+    public void setHostAllocators(final List<HostAllocator> hostAllocators) {
+        this.hostAllocators = hostAllocators;
+    }
 
     @Override
     public void registerGuru(final VirtualMachine.Type type, final VirtualMachineGuru guru) {
@@ -427,8 +407,9 @@
                 }
 
                 try {
-                    if (!vmProfile.getBootArgs().contains("ExternalLoadBalancerVm"))
+                    if (!vmProfile.getBootArgs().contains("ExternalLoadBalancerVm")) {
                         _networkMgr.allocate(vmProfile, auxiliaryNetworks, extraDhcpOptions);
+                    }
                 } catch (final ConcurrentOperationException e) {
                     throw new CloudRuntimeException("Concurrent operation while trying to allocate resources for the VM", e);
                 }
@@ -577,8 +558,8 @@
 
         final VirtualMachineGuru guru = getVmGuru(vm);
         guru.finalizeExpunge(vm);
-        //remove the overcommit detials from the uservm details
-        _uservmDetailsDao.removeDetails(vm.getId());
+        //remove the overcommit details from the uservm details
+        userVmDetailsDao.removeDetails(vm.getId());
 
         // send hypervisor-dependent commands before removing
         final List<Command> finalizeExpungeCommands = hvGuru.finalizeExpunge(vm);
@@ -1086,13 +1067,13 @@
                 final ClusterDetailsVO cluster_detail_cpu = _clusterDetailsDao.findDetail(cluster_id, "cpuOvercommitRatio");
                 final ClusterDetailsVO cluster_detail_ram = _clusterDetailsDao.findDetail(cluster_id, "memoryOvercommitRatio");
                 //storing the value of overcommit in the vm_details table for doing a capacity check in case the cluster overcommit ratio is changed.
-                if (_uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") == null &&
+                if (userVmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") == null &&
                         (Float.parseFloat(cluster_detail_cpu.getValue()) > 1f || Float.parseFloat(cluster_detail_ram.getValue()) > 1f)) {
-                    _uservmDetailsDao.addDetail(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue(), true);
-                    _uservmDetailsDao.addDetail(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue(), true);
-                } else if (_uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") != null) {
-                    _uservmDetailsDao.addDetail(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue(), true);
-                    _uservmDetailsDao.addDetail(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue(), true);
+                    userVmDetailsDao.addDetail(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue(), true);
+                    userVmDetailsDao.addDetail(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue(), true);
+                } else if (userVmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") != null) {
+                    userVmDetailsDao.addDetail(vm.getId(), "cpuOvercommitRatio", cluster_detail_cpu.getValue(), true);
+                    userVmDetailsDao.addDetail(vm.getId(), "memoryOvercommitRatio", cluster_detail_ram.getValue(), true);
                 }
 
                 vmProfile.setCpuOvercommitRatio(Float.parseFloat(cluster_detail_cpu.getValue()));
@@ -1172,8 +1153,8 @@
                             // Remove the information on whether it was a deploy vm request.The deployvm=true information
                             // is set only when the vm is being deployed. When a vm is started from a stop state the
                             // information isn't set,
-                            if (_uservmDetailsDao.findDetail(vm.getId(), "deployvm") != null) {
-                                _uservmDetailsDao.removeDetail(vm.getId(), "deployvm");
+                            if (userVmDetailsDao.findDetail(vm.getId(), "deployvm") != null) {
+                                userVmDetailsDao.removeDetail(vm.getId(), "deployvm");
                             }
 
                             startedVm = vm;
@@ -1571,7 +1552,7 @@
             }
 
             volumeMgr.release(profile);
-            s_logger.debug("Successfully cleanued up resources for the vm " + vm + " in " + state + " state");
+            s_logger.debug(String.format("Successfully cleaned up resources for the VM %s in %s state", vm, state));
         }
 
         return true;
@@ -1884,6 +1865,7 @@
         deleteVMSnapshots(vm, expunge);
 
         Transaction.execute(new TransactionCallbackWithExceptionNoReturn<CloudRuntimeException>() {
+            @Override
             public void doInTransactionWithoutResult(final TransactionStatus status) throws CloudRuntimeException {
                 VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
                 try {
@@ -2296,97 +2278,119 @@
         }
     }
 
-    private Map<Volume, StoragePool> getPoolListForVolumesForMigration(final VirtualMachineProfile profile, final Host host, final Map<Long, Long> volumeToPool) {
-        final List<VolumeVO> allVolumes = _volsDao.findUsableVolumesForInstance(profile.getId());
-        final Map<Volume, StoragePool> volumeToPoolObjectMap = new HashMap<>();
+    /**
+     * Create the mapping of volumes and storage pools. If the user did not enter a mapping on her/his own, we create one using {@link #getDefaultMappingOfVolumesAndStoragePoolForMigration(VirtualMachineProfile, Host)}.
+     * If the user provided a mapping, we use whatever the user has provided (check the method {@link #createMappingVolumeAndStoragePoolEnteredByUser(VirtualMachineProfile, Host, Map)}).
+     */
+    private Map<Volume, StoragePool> getPoolListForVolumesForMigration(VirtualMachineProfile profile, Host targetHost, Map<Long, Long> volumeToPool) {
+        if (MapUtils.isEmpty(volumeToPool)) {
+            return getDefaultMappingOfVolumesAndStoragePoolForMigration(profile, targetHost);
+        }
 
-        for (final VolumeVO volume : allVolumes) {
-            final Long poolId = volumeToPool.get(volume.getId());
-            final StoragePoolVO destPool = _storagePoolDao.findById(poolId);
-            final StoragePoolVO currentPool = _storagePoolDao.findById(volume.getPoolId());
-            final DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId());
+        return createMappingVolumeAndStoragePoolEnteredByUser(profile, targetHost, volumeToPool);
+    }
 
-            if (destPool != null) {
-                if (currentPool.isManaged()) {
-                    if (destPool.getId() == currentPool.getId()) {
-                        volumeToPoolObjectMap.put(volume, currentPool);
-                    }
-                    else {
-                        throw new CloudRuntimeException("Currently, a volume on managed storage can only be 'migrated' to itself.");
-                    }
-                }
-                else {
-                    // Check if pool is accessible from the destination host and disk offering with which the volume was
-                    // created is compliant with the pool type.
-                    if (_poolHostDao.findByPoolHost(destPool.getId(), host.getId()) == null || destPool.isLocal() != diskOffering.getUseLocalStorage()) {
-                        // Cannot find a pool for the volume. Throw an exception.
-                        throw new CloudRuntimeException("Cannot migrate volume " + volume + " to storage pool " + destPool + " while migrating vm to host " + host +
-                                ". Either the pool is not accessible from the host or because of the offering with which the volume is created it cannot be placed on " +
-                                "the given pool.");
-                    } else if (destPool.getId() == currentPool.getId()) {
-                        // If the pool to migrate to is the same as current pool, the volume doesn't need to be migrated.
-                    } else {
-                        volumeToPoolObjectMap.put(volume, destPool);
-                    }
-                }
+    /**
+     * We create the mapping of volumes and storage pool to migrate the VMs according to the information sent by the user.
+     */
+    private Map<Volume, StoragePool> createMappingVolumeAndStoragePoolEnteredByUser(VirtualMachineProfile profile, Host host, Map<Long, Long> volumeToPool) {
+        Map<Volume, StoragePool> volumeToPoolObjectMap = new HashMap<Volume, StoragePool>();
+        for(Long volumeId: volumeToPool.keySet()) {
+            VolumeVO volume = _volsDao.findById(volumeId);
+
+            Long poolId = volumeToPool.get(volumeId);
+            StoragePoolVO targetPool = _storagePoolDao.findById(poolId);
+            StoragePoolVO currentPool = _storagePoolDao.findById(volume.getPoolId());
+
+            if (_poolHostDao.findByPoolHost(targetPool.getId(), host.getId()) == null) {
+                throw new CloudRuntimeException(String.format("Cannot migrate the volume [%s] to the storage pool [%s] while migrating VM [%s] to target host [%s]. The host does not have access to the storage pool entered.", volume.getUuid(), targetPool.getUuid(), profile.getUuid(), host.getUuid()));
+            }
+            if (currentPool.getId() == targetPool.getId()) {
+                s_logger.info(String.format("The volume [%s] is already allocated in storage pool [%s].", volume.getUuid(), targetPool.getUuid()));
+            }
+            volumeToPoolObjectMap.put(volume, targetPool);
+        }
+        return volumeToPoolObjectMap;
+    }
+
+    /**
+     * We create the default mapping of volumes and storage pools for the migration of the VM to the target host.
+     * If the current storage pool of one of the volumes is using local storage in the host, it then needs to be migrated to a local storage in the target host.
+     * Otherwise, we do not need to migrate, and the volume can be kept in its current storage pool.
+     */
+    private Map<Volume, StoragePool> getDefaultMappingOfVolumesAndStoragePoolForMigration(VirtualMachineProfile profile, Host targetHost) {
+        Map<Volume, StoragePool> volumeToPoolObjectMap = new HashMap<Volume, StoragePool>();
+        List<VolumeVO> allVolumes = _volsDao.findUsableVolumesForInstance(profile.getId());
+        for (VolumeVO volume : allVolumes) {
+            StoragePoolVO currentPool = _storagePoolDao.findById(volume.getPoolId());
+            if (ScopeType.HOST.equals(currentPool.getScope())) {
+                createVolumeToStoragePoolMappingIfNeeded(profile, targetHost, volumeToPoolObjectMap, volume, currentPool);
             } else {
-                if (currentPool.isManaged()) {
-                    if (currentPool.getScope() == ScopeType.ZONE) {
-                        volumeToPoolObjectMap.put(volume, currentPool);
-                    }
-                    else {
-                        throw new CloudRuntimeException("Currently, you can only 'migrate' a volume on managed storage if its storage pool is zone wide.");
-                    }
-                } else {
-                    // Find a suitable pool for the volume. Call the storage pool allocator to find the list of pools.
+                volumeToPoolObjectMap.put(volume, currentPool);
+            }
+        }
+        return volumeToPoolObjectMap;
+    }
 
-                    final DiskProfile diskProfile = new DiskProfile(volume, diskOffering, profile.getHypervisorType());
-                    final DataCenterDeployment plan = new DataCenterDeployment(host.getDataCenterId(), host.getPodId(), host.getClusterId(),
-                            host.getId(), null, null);
+    /**
+     * We will add a mapping of volume to storage pool if needed. The conditions to add a mapping are the following:
+     * <ul>
+     *  <li> The current storage pool where the volume is allocated can be accessed by the target host
+     *  <li> If not storage pool is found to allocate the volume we throw an exception.
+     * </ul>
+     *
+     */
+    private void createVolumeToStoragePoolMappingIfNeeded(VirtualMachineProfile profile, Host targetHost, Map<Volume, StoragePool> volumeToPoolObjectMap, VolumeVO volume, StoragePoolVO currentPool) {
+        List<StoragePool> poolList = getCandidateStoragePoolsToMigrateLocalVolume(profile, targetHost, volume);
 
-                    final List<StoragePool> poolList = new ArrayList<>();
-                    final ExcludeList avoid = new ExcludeList();
+        Collections.shuffle(poolList);
+        boolean canTargetHostAccessVolumeStoragePool = false;
+        for (StoragePool storagePool : poolList) {
+            if (storagePool.getId() == currentPool.getId()) {
+                canTargetHostAccessVolumeStoragePool = true;
+                break;
+            }
 
-                    for (final StoragePoolAllocator allocator : _storagePoolAllocators) {
-                        final List<StoragePool> poolListFromAllocator = allocator.allocateToPool(diskProfile, profile, plan, avoid, StoragePoolAllocator.RETURN_UPTO_ALL);
+        }
+        if(!canTargetHostAccessVolumeStoragePool && CollectionUtils.isEmpty(poolList)) {
+            throw new CloudRuntimeException(String.format("There is not storage pools avaliable at the target host [%s] to migrate volume [%s]", targetHost.getUuid(), volume.getUuid()));
+        }
+        if (!canTargetHostAccessVolumeStoragePool) {
+            volumeToPoolObjectMap.put(volume, _storagePoolDao.findByUuid(poolList.get(0).getUuid()));
+        }
+        if (!canTargetHostAccessVolumeStoragePool && !volumeToPoolObjectMap.containsKey(volume)) {
+            throw new CloudRuntimeException(String.format("Cannot find a storage pool which is available for volume [%s] while migrating virtual machine [%s] to host [%s]", volume.getUuid(),
+                    profile.getUuid(), targetHost.getUuid()));
+        }
+    }
 
-                        if (poolListFromAllocator != null && !poolListFromAllocator.isEmpty()) {
-                            poolList.addAll(poolListFromAllocator);
-                        }
-                    }
+    /**
+     * We use {@link StoragePoolAllocator} objects to find local storage pools connected to the targetHost where we would be able to allocate the given volume.
+     */
+    private List<StoragePool> getCandidateStoragePoolsToMigrateLocalVolume(VirtualMachineProfile profile, Host targetHost, VolumeVO volume) {
+        List<StoragePool> poolList = new ArrayList<>();
 
-                    boolean currentPoolAvailable = false;
+        DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId());
+        DiskProfile diskProfile = new DiskProfile(volume, diskOffering, profile.getHypervisorType());
+        DataCenterDeployment plan = new DataCenterDeployment(targetHost.getDataCenterId(), targetHost.getPodId(), targetHost.getClusterId(), targetHost.getId(), null, null);
+        ExcludeList avoid = new ExcludeList();
 
-                    if (poolList != null && !poolList.isEmpty()) {
-                        // Volume needs to be migrated. Pick the first pool from the list. Add a mapping to migrate the
-                        // volume to a pool only if it is required; that is the current pool on which the volume resides
-                        // is not available on the destination host.
-
-                        final Iterator<StoragePool> iter = poolList.iterator();
-
-                        while (iter.hasNext()) {
-                            if (currentPool.getId() == iter.next().getId()) {
-                                currentPoolAvailable = true;
-
-                                break;
-                            }
-                        }
-
-                        if (!currentPoolAvailable) {
-                            volumeToPoolObjectMap.put(volume, _storagePoolDao.findByUuid(poolList.get(0).getUuid()));
-                        }
-                    }
-
-                    if (!currentPoolAvailable && !volumeToPoolObjectMap.containsKey(volume)) {
-                        // Cannot find a pool for the volume. Throw an exception.
-                        throw new CloudRuntimeException("Cannot find a storage pool which is available for volume " + volume + " while migrating virtual machine " +
-                                profile.getVirtualMachine() + " to host " + host);
-                    }
+        StoragePoolVO volumeStoragePool = _storagePoolDao.findById(volume.getPoolId());
+        if (volumeStoragePool.isLocal()) {
+            diskProfile.setUseLocalStorage(true);
+        }
+        for (StoragePoolAllocator allocator : _storagePoolAllocators) {
+            List<StoragePool> poolListFromAllocator = allocator.allocateToPool(diskProfile, profile, plan, avoid, StoragePoolAllocator.RETURN_UPTO_ALL);
+            if (CollectionUtils.isEmpty(poolListFromAllocator)) {
+                continue;
+            }
+            for (StoragePool pool : poolListFromAllocator) {
+                if (pool.isLocal()) {
+                    poolList.add(pool);
                 }
             }
         }
-
-        return volumeToPoolObjectMap;
+        return poolList;
     }
 
     private <T extends VMInstanceVO> void moveVmToMigratingState(final T vm, final Long hostId, final ItWorkVO work) throws ConcurrentOperationException {
@@ -2521,7 +2525,7 @@
             List<String[]> vmData = null;
             if (defaultNic != null) {
                 UserVmVO userVm = _userVmDao.findById(vm.getId());
-                Map<String, String> details = _vmDetailsDao.listDetailsKeyPairs(vm.getId());
+                Map<String, String> details = userVmDetailsDao.listDetailsKeyPairs(vm.getId());
                 userVm.setDetails(details);
 
                 Network network = _networkModel.getNetwork(defaultNic.getNetworkId());
@@ -2894,8 +2898,11 @@
         if (vm.getType() == VirtualMachine.Type.ConsoleProxy || vm.getType() == VirtualMachine.Type.SecondaryStorageVm) {
             NicVO nic = _nicsDao.getControlNicForVM(vm.getId());
             return nic.getIPv4Address();
-        } else if (vm.getType() == VirtualMachine.Type.DomainRouter) return vm.getPrivateIpAddress();
-        else return null;
+        } else if (vm.getType() == VirtualMachine.Type.DomainRouter) {
+            return vm.getPrivateIpAddress();
+        } else {
+            return null;
+        }
     }
     public Command cleanup(final String vmName) {
         VirtualMachine vm = _vmDao.findVMByInstanceName(vmName);
@@ -2964,67 +2971,6 @@
         _userVmDao.saveDetails(userVm);
     }
 
-    private void ensureVmRunningContext(final long hostId, VMInstanceVO vm, final Event cause) throws OperationTimedoutException, ResourceUnavailableException,
-    NoTransitionException, InsufficientAddressCapacityException {
-        final VirtualMachineGuru vmGuru = getVmGuru(vm);
-
-        s_logger.debug("VM state is starting on full sync so updating it to running");
-        vm = _vmDao.findById(vm.getId());
-
-        // grab outstanding work item if any
-        final ItWorkVO work = _workDao.findByOutstandingWork(vm.getId(), vm.getState());
-        if (work != null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Found an outstanding work item for this vm " + vm + " in state:" + vm.getState() + ", work id:" + work.getId());
-            }
-        }
-
-        try {
-            stateTransitTo(vm, cause, hostId);
-        } catch (final NoTransitionException e1) {
-            s_logger.warn(e1.getMessage());
-        }
-
-        s_logger.debug("VM's " + vm + " state is starting on full sync so updating it to Running");
-        vm = _vmDao.findById(vm.getId()); // this should ensure vm has the most
-        // up to date info
-
-        final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm);
-        final List<NicVO> nics = _nicsDao.listByVmId(profile.getId());
-        for (final NicVO nic : nics) {
-            final Network network = _networkModel.getNetwork(nic.getNetworkId());
-            final NicProfile nicProfile =
-                    new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), null, _networkModel.isSecurityGroupSupportedInNetwork(network),
-                            _networkModel.getNetworkTag(profile.getHypervisorType(), network));
-            profile.addNic(nicProfile);
-        }
-
-        final Commands cmds = new Commands(Command.OnError.Stop);
-        s_logger.debug("Finalizing commands that need to be send to complete Start process for the vm " + vm);
-
-        if (vmGuru.finalizeCommandsOnStart(cmds, profile)) {
-            if (cmds.size() != 0) {
-                _agentMgr.send(vm.getHostId(), cmds);
-            }
-
-            if (vmGuru.finalizeStart(profile, vm.getHostId(), cmds, null)) {
-                stateTransitTo(vm, cause, vm.getHostId());
-            } else {
-                s_logger.error("Unable to finish finialization for running vm: " + vm);
-            }
-        } else {
-            s_logger.error("Unable to finalize commands on start for vm: " + vm);
-        }
-
-        if (work != null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Updating outstanding work item to Done, id:" + work.getId());
-            }
-            work.setStep(Step.Done);
-            _workDao.update(work.getId(), work);
-        }
-    }
-
     @Override
     public boolean isRecurring() {
         return true;
@@ -3806,7 +3752,7 @@
 
     @Override
     public boolean replugNic(final Network network, final NicTO nic, final VirtualMachineTO vm, final ReservationContext context, final DeployDestination dest) throws ConcurrentOperationException,
-            ResourceUnavailableException, InsufficientCapacityException {
+    ResourceUnavailableException, InsufficientCapacityException {
         boolean result = true;
 
         final VMInstanceVO router = _vmDao.findById(vm.getId());
@@ -3828,7 +3774,7 @@
             s_logger.warn("Unable to apply ReplugNic, vm " + router + " is not in the right state " + router.getState());
 
             throw new ResourceUnavailableException("Unable to apply ReplugNic on the backend," + " vm " + vm + " is not in the right state", DataCenter.class,
-                                                   router.getDataCenterId());
+                    router.getDataCenterId());
         }
 
         return result;
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSync.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachinePowerStateSync.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSync.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VirtualMachinePowerStateSync.java
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
similarity index 98%
rename from engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
index 60c0a99..f4cd565 100644
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
+++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
@@ -52,8 +52,7 @@
 
     @Override
     public void processHostVmStateReport(long hostId, Map<String, HostVmStateReportEntry> report) {
-        if (s_logger.isDebugEnabled())
-            s_logger.debug("Process host VM state report from ping process. host: " + hostId);
+            s_logger.debug("Process host VM state report. host: " + hostId);
 
         Map<Long, VirtualMachine.PowerState> translatedInfo = convertVmStateReport(report);
         processReport(hostId, translatedInfo);
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkAddVmToNetwork.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkAddVmToNetwork.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkAddVmToNetwork.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkAddVmToNetwork.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkJobDispatcher.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkJobDispatcher.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkJobDispatcher.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkJobDispatcher.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkJobWakeupDispatcher.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkJobWakeupDispatcher.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkJobWakeupDispatcher.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkJobWakeupDispatcher.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkMigrate.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrate.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkMigrate.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrate.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkMigrateAway.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrateAway.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkMigrateAway.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrateAway.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkMigrateForScale.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrateForScale.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkMigrateForScale.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrateForScale.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkMigrateWithStorage.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrateWithStorage.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkMigrateWithStorage.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkMigrateWithStorage.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkReboot.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReboot.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkReboot.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkReboot.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkReconfigure.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReconfigure.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkReconfigure.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkReconfigure.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkRemoveNicFromVm.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkRemoveNicFromVm.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkRemoveNicFromVm.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkRemoveNicFromVm.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkRemoveVmFromNetwork.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkRemoveVmFromNetwork.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkRemoveVmFromNetwork.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkRemoveVmFromNetwork.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkStart.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStart.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkStart.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkStart.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkStop.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStop.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkStop.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkStop.java
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStorageMigration.java
similarity index 100%
rename from engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java
rename to engine/orchestration/src/main/java/com/cloud/vm/VmWorkStorageMigration.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/HostEntityImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/HostEntityImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/HostEntityImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/HostEntityImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterDetailsVO.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterDetailsVO.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterDetailsVO.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterDetailsVO.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DcDetailVO.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/DcDetailVO.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DcDetailVO.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/DcDetailVO.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineCluster.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineCluster.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineCluster.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineCluster.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenter.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenter.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenter.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenter.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenterVO.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenterVO.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenterVO.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineDataCenterVO.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHost.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHost.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHost.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHost.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostPodVO.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostPodVO.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostPodVO.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostPodVO.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EnginePod.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EnginePod.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/EnginePod.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EnginePod.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/DcDetailsDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDao.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDao.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDao.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDao.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDaoImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDaoImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDaoImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostTagsDaoImpl.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
similarity index 99%
rename from engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index e5e0bbf..6576646 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -488,6 +488,9 @@
 
         // Find a suitable storage to create volume on
         StoragePool destPool = findStoragePool(dskCh, dc, pod, clusterId, null, vm, avoidPools);
+        if (destPool == null) {
+            throw new CloudRuntimeException("Failed to find a suitable storage pool to create Volume in the pod/cluster of the provided VM "+ vm.getUuid());
+        }
         DataStore destStore = dataStoreMgr.getDataStore(destPool.getId(), DataStoreRole.Primary);
         AsyncCallFuture<VolumeApiResult> future = volService.copyVolume(volume, destStore);
 
@@ -954,7 +957,9 @@
     @DB
     public Volume migrateVolume(Volume volume, StoragePool destPool) throws StorageUnavailableException {
         VolumeInfo vol = volFactory.getVolume(volume.getId());
-        AsyncCallFuture<VolumeApiResult> future = volService.copyVolume(vol, (DataStore)destPool);
+
+        DataStore dataStoreTarget = dataStoreMgr.getDataStore(destPool.getId(), DataStoreRole.Primary);
+        AsyncCallFuture<VolumeApiResult> future = volService.copyVolume(vol, dataStoreTarget);
         try {
             VolumeApiResult result = future.get();
             if (result.isFailed()) {
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
similarity index 100%
rename from engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
rename to engine/orchestration/src/main/java/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
diff --git a/engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml b/engine/orchestration/src/main/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
similarity index 100%
rename from engine/orchestration/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
rename to engine/orchestration/src/main/resources/META-INF/cloudstack/core/spring-engine-orchestration-core-context.xml
diff --git a/engine/orchestration/test/com/cloud/agent/manager/AgentManagerImplTest.java b/engine/orchestration/src/test/java/com/cloud/agent/manager/AgentManagerImplTest.java
similarity index 100%
rename from engine/orchestration/test/com/cloud/agent/manager/AgentManagerImplTest.java
rename to engine/orchestration/src/test/java/com/cloud/agent/manager/AgentManagerImplTest.java
diff --git a/engine/orchestration/test/com/cloud/agent/manager/ConnectedAgentAttacheTest.java b/engine/orchestration/src/test/java/com/cloud/agent/manager/ConnectedAgentAttacheTest.java
similarity index 100%
rename from engine/orchestration/test/com/cloud/agent/manager/ConnectedAgentAttacheTest.java
rename to engine/orchestration/src/test/java/com/cloud/agent/manager/ConnectedAgentAttacheTest.java
diff --git a/engine/orchestration/test/com/cloud/agent/manager/DirectAgentAttacheTest.java b/engine/orchestration/src/test/java/com/cloud/agent/manager/DirectAgentAttacheTest.java
similarity index 100%
rename from engine/orchestration/test/com/cloud/agent/manager/DirectAgentAttacheTest.java
rename to engine/orchestration/src/test/java/com/cloud/agent/manager/DirectAgentAttacheTest.java
diff --git a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java
new file mode 100644
index 0000000..c379550
--- /dev/null
+++ b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java
@@ -0,0 +1,167 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package com.cloud.vm;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.StopAnswer;
+import com.cloud.agent.api.StopCommand;
+import com.cloud.deploy.DeploymentPlanner;
+import com.cloud.host.HostVO;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.hypervisor.HypervisorGuru;
+import com.cloud.service.ServiceOfferingVO;
+import com.cloud.service.dao.ServiceOfferingDao;
+import com.cloud.storage.dao.VolumeDao;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.dao.VMInstanceDao;
+
+@RunWith(MockitoJUnitRunner.class)
+public class VirtualMachineManagerImplTest {
+
+    @Spy
+    @InjectMocks
+    private VirtualMachineManagerImpl virtualMachineManagerImpl;
+    @Mock
+    private AgentManager agentManagerMock;
+    @Mock
+    private VMInstanceDao vmInstanceDao;
+    @Mock
+    private ServiceOfferingDao serviceOfferingDao;
+    @Mock
+    private VolumeDao volumeDao;
+    @Mock
+    private VMInstanceVO vmInstanceMock;
+    @Mock
+    private ServiceOfferingVO serviceOfferingMock;
+    @Mock
+    private HostVO hostMock;
+    @Mock
+    private VirtualMachineProfile virtualMachineProfileMock;
+
+    @Before
+    public void setup() {
+        virtualMachineManagerImpl.setHostAllocators(new ArrayList<>());
+
+        when(vmInstanceMock.getId()).thenReturn(1L);
+        when(vmInstanceMock.getServiceOfferingId()).thenReturn(2L);
+        when(vmInstanceMock.getInstanceName()).thenReturn("myVm");
+        when(vmInstanceMock.getHostId()).thenReturn(2L);
+        when(vmInstanceMock.getType()).thenReturn(VirtualMachine.Type.User);
+        when(hostMock.getId()).thenReturn(1L);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void testScaleVM3() throws Exception {
+        when(vmInstanceMock.getHostId()).thenReturn(null);
+        when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceMock);
+        when(vmInstanceDao.findByUuid(any(String.class))).thenReturn(vmInstanceMock);
+        DeploymentPlanner.ExcludeList excludeHostList = new DeploymentPlanner.ExcludeList();
+        virtualMachineManagerImpl.findHostAndMigrate(vmInstanceMock.getUuid(), 2l, excludeHostList);
+    }
+
+    @Test
+    public void testSendStopWithOkAnswer() throws Exception {
+        VirtualMachineGuru guru = mock(VirtualMachineGuru.class);
+        VirtualMachine vm = mock(VirtualMachine.class);
+        VirtualMachineProfile profile = mock(VirtualMachineProfile.class);
+        StopAnswer answer = new StopAnswer(new StopCommand(vm, false, false), "ok", true);
+        when(profile.getVirtualMachine()).thenReturn(vm);
+        when(vm.getHostId()).thenReturn(1L);
+        when(agentManagerMock.send(anyLong(), (Command)any())).thenReturn(answer);
+
+        boolean actual = virtualMachineManagerImpl.sendStop(guru, profile, false, false);
+
+        Assert.assertTrue(actual);
+    }
+
+    @Test
+    public void testSendStopWithFailAnswer() throws Exception {
+        VirtualMachineGuru guru = mock(VirtualMachineGuru.class);
+        VirtualMachine vm = mock(VirtualMachine.class);
+        VirtualMachineProfile profile = mock(VirtualMachineProfile.class);
+        StopAnswer answer = new StopAnswer(new StopCommand(vm, false, false), "fail", false);
+        when(profile.getVirtualMachine()).thenReturn(vm);
+        when(vm.getHostId()).thenReturn(1L);
+        when(agentManagerMock.send(anyLong(), (Command)any())).thenReturn(answer);
+
+        boolean actual = virtualMachineManagerImpl.sendStop(guru, profile, false, false);
+
+        Assert.assertFalse(actual);
+    }
+
+    @Test
+    public void testSendStopWithNullAnswer() throws Exception {
+        VirtualMachineGuru guru = mock(VirtualMachineGuru.class);
+        VirtualMachine vm = mock(VirtualMachine.class);
+        VirtualMachineProfile profile = mock(VirtualMachineProfile.class);
+        when(profile.getVirtualMachine()).thenReturn(vm);
+        when(vm.getHostId()).thenReturn(1L);
+        when(agentManagerMock.send(anyLong(), (Command)any())).thenReturn(null);
+
+        boolean actual = virtualMachineManagerImpl.sendStop(guru, profile, false, false);
+
+        Assert.assertFalse(actual);
+    }
+
+    @Test
+    public void testExeceuteInSequence() {
+        assertTrue(virtualMachineManagerImpl.getExecuteInSequence(HypervisorType.XenServer) == false);
+        assertTrue(virtualMachineManagerImpl.getExecuteInSequence(HypervisorType.KVM) == false);
+        assertTrue(virtualMachineManagerImpl.getExecuteInSequence(HypervisorType.VMware) == HypervisorGuru.VmwareFullClone.value());
+        assertTrue(virtualMachineManagerImpl.getExecuteInSequence(HypervisorType.Ovm3) == VirtualMachineManager.ExecuteInSequence.value());
+    }
+
+    @Test
+    public void testCheckIfCanUpgrade() throws Exception {
+        when(vmInstanceMock.getState()).thenReturn(State.Stopped);
+        when(serviceOfferingMock.isDynamic()).thenReturn(true);
+        when(vmInstanceMock.getServiceOfferingId()).thenReturn(1l);
+        when(serviceOfferingMock.getId()).thenReturn(2l);
+
+        ServiceOfferingVO mockCurrentServiceOffering = mock(ServiceOfferingVO.class);
+
+        when(serviceOfferingDao.findByIdIncludingRemoved(anyLong(), anyLong())).thenReturn(mockCurrentServiceOffering);
+        when(mockCurrentServiceOffering.getUseLocalStorage()).thenReturn(true);
+        when(serviceOfferingMock.getUseLocalStorage()).thenReturn(true);
+        when(mockCurrentServiceOffering.getSystemUse()).thenReturn(true);
+        when(serviceOfferingMock.getSystemUse()).thenReturn(true);
+        when(mockCurrentServiceOffering.getTags()).thenReturn("x,y");
+        when(serviceOfferingMock.getTags()).thenReturn("z,x,y");
+
+        virtualMachineManagerImpl.checkIfCanUpgrade(vmInstanceMock, serviceOfferingMock);
+    }
+}
diff --git a/engine/orchestration/test/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java b/engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
similarity index 100%
rename from engine/orchestration/test/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
rename to engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
diff --git a/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java b/engine/orchestration/src/test/java/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
similarity index 100%
rename from engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
rename to engine/orchestration/src/test/java/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
diff --git a/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java b/engine/orchestration/src/test/java/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
similarity index 100%
rename from engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
rename to engine/orchestration/src/test/java/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
diff --git a/engine/orchestration/test/resource/provisioningContext.xml b/engine/orchestration/src/test/resources/provisioningContext.xml
similarity index 100%
rename from engine/orchestration/test/resource/provisioningContext.xml
rename to engine/orchestration/src/test/resources/provisioningContext.xml
diff --git a/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java
deleted file mode 100644
index 9bc22c4..0000000
--- a/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java
+++ /dev/null
@@ -1,545 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.vm;
-
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-
-import com.cloud.service.dao.ServiceOfferingDao;
-import junit.framework.Assert;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
-
-import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd;
-import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
-import org.apache.cloudstack.framework.config.ConfigDepot;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.api.CheckVirtualMachineAnswer;
-import com.cloud.agent.api.CheckVirtualMachineCommand;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.MigrateWithStorageAnswer;
-import com.cloud.agent.api.MigrateWithStorageCommand;
-import com.cloud.agent.api.MigrateWithStorageCompleteAnswer;
-import com.cloud.agent.api.MigrateWithStorageCompleteCommand;
-import com.cloud.agent.api.MigrateWithStorageReceiveAnswer;
-import com.cloud.agent.api.MigrateWithStorageReceiveCommand;
-import com.cloud.agent.api.MigrateWithStorageSendAnswer;
-import com.cloud.agent.api.MigrateWithStorageSendCommand;
-import com.cloud.agent.api.PrepareForMigrationAnswer;
-import com.cloud.agent.api.PrepareForMigrationCommand;
-import com.cloud.agent.api.ScaleVmAnswer;
-import com.cloud.agent.api.ScaleVmCommand;
-import com.cloud.agent.api.StopAnswer;
-import com.cloud.agent.api.StopCommand;
-import com.cloud.capacity.CapacityManager;
-import com.cloud.dc.dao.ClusterDao;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.HostPodDao;
-import com.cloud.deploy.DeployDestination;
-import com.cloud.deploy.DeploymentPlanner;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.ManagementServerException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.exception.VirtualMachineMigrationException;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.hypervisor.HypervisorGuru;
-import com.cloud.hypervisor.HypervisorGuruManager;
-import com.cloud.offering.ServiceOffering;
-import com.cloud.service.ServiceOfferingVO;
-import com.cloud.storage.dao.DiskOfferingDao;
-import com.cloud.storage.dao.StoragePoolHostDao;
-import com.cloud.storage.dao.VMTemplateDao;
-import com.cloud.storage.dao.VolumeDao;
-import com.cloud.storage.Storage.ProvisioningType;
-import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.StoragePoolHostVO;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.VMTemplateVO;
-import com.cloud.user.Account;
-import com.cloud.user.AccountVO;
-import com.cloud.user.UserVO;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.user.dao.UserDao;
-import com.cloud.utils.Pair;
-import com.cloud.utils.db.EntityManager;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.VirtualMachine.Event;
-import com.cloud.vm.VirtualMachine.State;
-import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.dao.UserVmDao;
-import com.cloud.vm.dao.UserVmDetailsDao;
-import com.cloud.vm.dao.VMInstanceDao;
-import com.cloud.vm.snapshot.VMSnapshotManager;
-
-public class VirtualMachineManagerImplTest {
-
-    @Spy
-    VirtualMachineManagerImpl _vmMgr = new VirtualMachineManagerImpl();
-    @Mock
-    VolumeOrchestrationService _storageMgr;
-    @Mock
-    Account _account;
-    @Mock
-    CapacityManager _capacityMgr;
-    @Mock
-    AgentManager _agentMgr;
-    @Mock
-    AccountDao _accountDao;
-    @Mock
-    ConfigurationDao _configDao;
-    @Mock
-    HostDao _hostDao;
-    @Mock
-    UserDao _userDao;
-    @Mock
-    UserVmDao _vmDao;
-    @Mock
-    ItWorkDao _workDao;
-    @Mock
-    VMInstanceDao _vmInstanceDao;
-    @Mock
-    ServiceOfferingDao _offeringDao;
-    @Mock
-    VMTemplateDao _templateDao;
-    @Mock
-    VolumeDao _volsDao;
-    @Mock
-    RestoreVMCmd _restoreVMCmd;
-    @Mock
-    AccountVO _accountMock;
-    @Mock
-    UserVO _userMock;
-    @Mock
-    UserVmVO _vmMock;
-    @Mock
-    VMInstanceVO _vmInstance;
-    @Mock
-    ServiceOfferingVO _serviceOfferingMock;
-    @Mock
-    HostVO _host;
-    @Mock
-    VMTemplateVO _templateMock;
-    @Mock
-    VolumeVO _volumeMock;
-    @Mock
-    List<VolumeVO> _rootVols;
-    @Mock
-    ItWorkVO _work;
-    @Mock
-    HostVO hostVO;
-    @Mock
-    UserVmDetailVO _vmDetailVO;
-
-    @Mock
-    ClusterDao _clusterDao;
-    @Mock
-    HostPodDao _podDao;
-    @Mock
-    DataCenterDao _dcDao;
-    @Mock
-    DiskOfferingDao _diskOfferingDao;
-    @Mock
-    PrimaryDataStoreDao _storagePoolDao;
-    @Mock
-    UserVmDetailsDao _vmDetailsDao;
-    @Mock
-    StoragePoolHostDao _poolHostDao;
-    @Mock
-    NetworkOrchestrationService _networkMgr;
-    @Mock
-    HypervisorGuruManager _hvGuruMgr;
-    @Mock
-    VMSnapshotManager _vmSnapshotMgr;
-
-    // Mock objects for vm migration with storage test.
-    @Mock
-    DiskOfferingVO _diskOfferingMock;
-    @Mock
-    StoragePoolVO _srcStoragePoolMock;
-    @Mock
-    StoragePoolVO _destStoragePoolMock;
-    @Mock
-    HostVO _srcHostMock;
-    @Mock
-    HostVO _destHostMock;
-    @Mock
-    Map<Long, Long> _volumeToPoolMock;
-    @Mock
-    EntityManager _entityMgr;
-    @Mock
-    ConfigDepot _configDepot;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-
-        _vmMgr._templateDao = _templateDao;
-        _vmMgr._volsDao = _volsDao;
-        _vmMgr.volumeMgr = _storageMgr;
-        _vmMgr._capacityMgr = _capacityMgr;
-        _vmMgr._hostDao = _hostDao;
-        _vmMgr._nodeId = 1L;
-        _vmMgr._workDao = _workDao;
-        _vmMgr._agentMgr = _agentMgr;
-        _vmMgr._podDao = _podDao;
-        _vmMgr._clusterDao = _clusterDao;
-        _vmMgr._dcDao = _dcDao;
-        _vmMgr._diskOfferingDao = _diskOfferingDao;
-        _vmMgr._storagePoolDao = _storagePoolDao;
-        _vmMgr._poolHostDao = _poolHostDao;
-        _vmMgr._networkMgr = _networkMgr;
-        _vmMgr._hvGuruMgr = _hvGuruMgr;
-        _vmMgr._vmSnapshotMgr = _vmSnapshotMgr;
-        _vmMgr._vmDao = _vmInstanceDao;
-        _vmMgr._uservmDetailsDao = _vmDetailsDao;
-        _vmMgr._entityMgr = _entityMgr;
-        _vmMgr._configDepot = _configDepot;
-        _vmMgr._offeringDao = _offeringDao;
-        _vmMgr.hostAllocators = new ArrayList<>();
-
-        when(_vmMock.getId()).thenReturn(314l);
-        when(_vmInstance.getId()).thenReturn(1L);
-        when(_vmInstance.getServiceOfferingId()).thenReturn(2L);
-        when(_vmInstance.getInstanceName()).thenReturn("myVm");
-        when(_vmInstance.getHostId()).thenReturn(2L);
-        when(_vmInstance.getType()).thenReturn(VirtualMachine.Type.User);
-        when(_host.getId()).thenReturn(1L);
-        when(_hostDao.findById(anyLong())).thenReturn(null);
-        when(_entityMgr.findById(Matchers.eq(ServiceOffering.class), anyLong())).thenReturn(getSvcoffering(512));
-        when(_workDao.persist(_work)).thenReturn(_work);
-        when(_workDao.update("1", _work)).thenReturn(true);
-        when(_work.getId()).thenReturn("1");
-        doNothing().when(_work).setStep(ItWorkVO.Step.Done);
-        when(_vmInstanceDao.findByUuid(any(String.class))).thenReturn(_vmMock);
-        //doNothing().when(_volsDao).detachVolume(anyLong());
-        //when(_work.setStep(ItWorkVO.Step.Done)).thenReturn("1");
-
-    }
-
-    @Test(expected = CloudRuntimeException.class)
-    public void testScaleVM1() throws Exception {
-
-        DeployDestination dest = new DeployDestination(null, null, null, _host);
-        long l = 1L;
-
-        when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
-        _vmMgr.migrateForScale(_vmInstance.getUuid(), l, dest, l);
-
-    }
-
-    @Test(expected = CloudRuntimeException.class)
-    public void testScaleVM2() throws Exception {
-
-        new DeployDestination(null, null, null, _host);
-        doReturn(3L).when(_vmInstance).getId();
-        when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
-        ServiceOfferingVO newServiceOffering = getSvcoffering(512);
-        doReturn(1L).when(_vmInstance).getHostId();
-        doReturn(hostVO).when(_hostDao).findById(1L);
-        doReturn(1L).when(_vmInstance).getDataCenterId();
-        doReturn(1L).when(hostVO).getClusterId();
-        when(CapacityManager.CpuOverprovisioningFactor.valueIn(1L)).thenReturn(1.0f);
-        ScaleVmCommand reconfigureCmd =
-                new ScaleVmCommand("myVmName", newServiceOffering.getCpu(), newServiceOffering.getSpeed(), newServiceOffering.getSpeed(), newServiceOffering.getRamSize(),
-                        newServiceOffering.getRamSize(), newServiceOffering.getLimitCpuUse());
-        new ScaleVmAnswer(reconfigureCmd, true, "details");
-        when(_agentMgr.send(2l, reconfigureCmd)).thenReturn(null);
-        _vmMgr.reConfigureVm(_vmInstance.getUuid(), getSvcoffering(256), false);
-
-    }
-
-    @Test(expected = CloudRuntimeException.class)
-    public void testScaleVM3() throws Exception {
-
-        /*VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm);
-
-        Long srcHostId = vm.getHostId();
-        Long oldSvcOfferingId = vm.getServiceOfferingId();
-        if (srcHostId == null) {
-            throw new CloudRuntimeException("Unable to scale the vm because it doesn't have a host id");
-        }*/
-
-        when(_vmInstance.getHostId()).thenReturn(null);
-        when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
-        when(_vmInstanceDao.findByUuid(any(String.class))).thenReturn(_vmInstance);
-        DeploymentPlanner.ExcludeList excludeHostList = new DeploymentPlanner.ExcludeList();
-        _vmMgr.findHostAndMigrate(_vmInstance.getUuid(), 2l, excludeHostList);
-
-    }
-
-    private ServiceOfferingVO getSvcoffering(int ramSize) {
-
-        String name = "name";
-        String displayText = "displayText";
-        int cpu = 1;
-        //int ramSize = 256;
-        int speed = 128;
-
-        boolean ha = false;
-        boolean useLocalStorage = false;
-
-        ServiceOfferingVO serviceOffering =
-                new ServiceOfferingVO(name, cpu, ramSize, speed, null, null, ha, displayText, ProvisioningType.THIN, useLocalStorage, false, null, false, null, false);
-        return serviceOffering;
-    }
-
-    private void initializeMockConfigForMigratingVmWithVolumes() throws OperationTimedoutException, ResourceUnavailableException {
-
-        // Mock the source and destination hosts.
-        when(_srcHostMock.getId()).thenReturn(5L);
-        when(_destHostMock.getId()).thenReturn(6L);
-        when(_hostDao.findById(5L)).thenReturn(_srcHostMock);
-        when(_hostDao.findById(6L)).thenReturn(_destHostMock);
-
-        // Mock the vm being migrated.
-        when(_vmMock.getId()).thenReturn(1L);
-        when(_vmMock.getHypervisorType()).thenReturn(HypervisorType.XenServer);
-        when(_vmMock.getState()).thenReturn(State.Running).thenReturn(State.Running).thenReturn(State.Migrating).thenReturn(State.Migrating);
-        when(_vmMock.getHostId()).thenReturn(5L);
-        when(_vmInstance.getId()).thenReturn(1L);
-        when(_vmInstance.getServiceOfferingId()).thenReturn(2L);
-        when(_vmInstance.getInstanceName()).thenReturn("myVm");
-        when(_vmInstance.getHostId()).thenReturn(5L);
-        when(_vmInstance.getType()).thenReturn(VirtualMachine.Type.User);
-        when(_vmInstance.getState()).thenReturn(State.Running).thenReturn(State.Running).thenReturn(State.Migrating).thenReturn(State.Migrating);
-
-        // Mock the work item.
-        when(_workDao.persist(any(ItWorkVO.class))).thenReturn(_work);
-        when(_workDao.update("1", _work)).thenReturn(true);
-        when(_work.getId()).thenReturn("1");
-        doNothing().when(_work).setStep(ItWorkVO.Step.Done);
-
-        // Mock the vm guru and the user vm object that gets returned.
-        _vmMgr._vmGurus = new HashMap<VirtualMachine.Type, VirtualMachineGuru>();
-//        UserVmManagerImpl userVmManager = mock(UserVmManagerImpl.class);
-//        _vmMgr.registerGuru(VirtualMachine.Type.User, userVmManager);
-
-        // Mock the iteration over all the volumes of an instance.
-        Iterator<VolumeVO> volumeIterator = mock(Iterator.class);
-        when(_volsDao.findUsableVolumesForInstance(anyLong())).thenReturn(_rootVols);
-        when(_rootVols.iterator()).thenReturn(volumeIterator);
-        when(volumeIterator.hasNext()).thenReturn(true, false);
-        when(volumeIterator.next()).thenReturn(_volumeMock);
-
-        // Mock the disk offering and pool objects for a volume.
-        when(_volumeMock.getDiskOfferingId()).thenReturn(5L);
-        when(_volumeMock.getPoolId()).thenReturn(200L);
-        when(_volumeMock.getId()).thenReturn(5L);
-        when(_diskOfferingDao.findById(anyLong())).thenReturn(_diskOfferingMock);
-        when(_storagePoolDao.findById(200L)).thenReturn(_srcStoragePoolMock);
-        when(_storagePoolDao.findById(201L)).thenReturn(_destStoragePoolMock);
-
-        // Mock the volume to pool mapping.
-        when(_volumeToPoolMock.get(5L)).thenReturn(201L);
-        when(_destStoragePoolMock.getId()).thenReturn(201L);
-        when(_srcStoragePoolMock.getId()).thenReturn(200L);
-        when(_destStoragePoolMock.isLocal()).thenReturn(false);
-        when(_diskOfferingMock.getUseLocalStorage()).thenReturn(false);
-        when(_poolHostDao.findByPoolHost(anyLong(), anyLong())).thenReturn(mock(StoragePoolHostVO.class));
-
-        // Mock hypervisor guru.
-        HypervisorGuru guruMock = mock(HypervisorGuru.class);
-        when(_hvGuruMgr.getGuru(HypervisorType.XenServer)).thenReturn(guruMock);
-
-        when(_srcHostMock.getClusterId()).thenReturn(3L);
-        when(_destHostMock.getClusterId()).thenReturn(3L);
-
-        // Mock the commands and answers to the agent.
-        PrepareForMigrationAnswer prepAnswerMock = mock(PrepareForMigrationAnswer.class);
-        when(prepAnswerMock.getResult()).thenReturn(true);
-        when(_agentMgr.send(anyLong(), isA(PrepareForMigrationCommand.class))).thenReturn(prepAnswerMock);
-
-        MigrateWithStorageAnswer migAnswerMock = mock(MigrateWithStorageAnswer.class);
-        when(migAnswerMock.getResult()).thenReturn(true);
-        when(_agentMgr.send(anyLong(), isA(MigrateWithStorageCommand.class))).thenReturn(migAnswerMock);
-
-        MigrateWithStorageReceiveAnswer migRecAnswerMock = mock(MigrateWithStorageReceiveAnswer.class);
-        when(migRecAnswerMock.getResult()).thenReturn(true);
-        when(_agentMgr.send(anyLong(), isA(MigrateWithStorageReceiveCommand.class))).thenReturn(migRecAnswerMock);
-
-        MigrateWithStorageSendAnswer migSendAnswerMock = mock(MigrateWithStorageSendAnswer.class);
-        when(migSendAnswerMock.getResult()).thenReturn(true);
-        when(_agentMgr.send(anyLong(), isA(MigrateWithStorageSendCommand.class))).thenReturn(migSendAnswerMock);
-
-        MigrateWithStorageCompleteAnswer migCompleteAnswerMock = mock(MigrateWithStorageCompleteAnswer.class);
-        when(migCompleteAnswerMock.getResult()).thenReturn(true);
-        when(_agentMgr.send(anyLong(), isA(MigrateWithStorageCompleteCommand.class))).thenReturn(migCompleteAnswerMock);
-
-        CheckVirtualMachineAnswer checkVmAnswerMock = mock(CheckVirtualMachineAnswer.class);
-        when(checkVmAnswerMock.getResult()).thenReturn(true);
-        when(checkVmAnswerMock.getState()).thenReturn(PowerState.PowerOn);
-        when(_agentMgr.send(anyLong(), isA(CheckVirtualMachineCommand.class))).thenReturn(checkVmAnswerMock);
-
-        // Mock the state transitions of vm.
-        Pair<Long, Long> opaqueMock = new Pair<Long, Long>(_vmMock.getHostId(), _destHostMock.getId());
-        when(_vmSnapshotMgr.hasActiveVMSnapshotTasks(anyLong())).thenReturn(false);
-        when(_vmInstanceDao.updateState(State.Running, Event.MigrationRequested, State.Migrating, _vmMock, opaqueMock)).thenReturn(true);
-        when(_vmInstanceDao.updateState(State.Migrating, Event.OperationSucceeded, State.Running, _vmMock, opaqueMock)).thenReturn(true);
-    }
-
-    // Check migration of a vm with its volumes within a cluster.
-    @Test
-    public void testMigrateWithVolumeWithinCluster() throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,
-    VirtualMachineMigrationException, OperationTimedoutException {
-
-        initializeMockConfigForMigratingVmWithVolumes();
-        when(_srcHostMock.getClusterId()).thenReturn(3L);
-        when(_destHostMock.getClusterId()).thenReturn(3L);
-
-        _vmMgr.migrateWithStorage(_vmInstance.getUuid(), _srcHostMock.getId(), _destHostMock.getId(), _volumeToPoolMock);
-    }
-
-    // Check migration of a vm with its volumes across a cluster.
-    @Test
-    public void testMigrateWithVolumeAcrossCluster() throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,
-    VirtualMachineMigrationException, OperationTimedoutException {
-
-        initializeMockConfigForMigratingVmWithVolumes();
-        when(_srcHostMock.getClusterId()).thenReturn(3L);
-        when(_destHostMock.getClusterId()).thenReturn(4L);
-
-        _vmMgr.migrateWithStorage(_vmInstance.getUuid(), _srcHostMock.getId(), _destHostMock.getId(), _volumeToPoolMock);
-    }
-
-    // Check migration of a vm fails when src and destination pool are not of same type; that is, one is shared and
-    // other is local.
-    @Test(expected = CloudRuntimeException.class)
-    public void testMigrateWithVolumeFail1() throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,
-    VirtualMachineMigrationException, OperationTimedoutException {
-
-        initializeMockConfigForMigratingVmWithVolumes();
-        when(_srcHostMock.getClusterId()).thenReturn(3L);
-        when(_destHostMock.getClusterId()).thenReturn(3L);
-
-        when(_destStoragePoolMock.isLocal()).thenReturn(true);
-        when(_diskOfferingMock.getUseLocalStorage()).thenReturn(false);
-
-        _vmMgr.migrateWithStorage(_vmInstance.getUuid(), _srcHostMock.getId(), _destHostMock.getId(), _volumeToPoolMock);
-    }
-
-    // Check migration of a vm fails when vm is not in Running state.
-    @Test(expected = ConcurrentOperationException.class)
-    public void testMigrateWithVolumeFail2() throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,
-    VirtualMachineMigrationException, OperationTimedoutException {
-
-        initializeMockConfigForMigratingVmWithVolumes();
-        when(_srcHostMock.getClusterId()).thenReturn(3L);
-        when(_destHostMock.getClusterId()).thenReturn(3L);
-
-        when(_vmMock.getState()).thenReturn(State.Stopped);
-
-        _vmMgr.migrateWithStorage(_vmInstance.getUuid(), _srcHostMock.getId(), _destHostMock.getId(), _volumeToPoolMock);
-    }
-
-    @Test
-    public void testSendStopWithOkAnswer() throws Exception {
-        VirtualMachineGuru guru = mock(VirtualMachineGuru.class);
-        VirtualMachine vm = mock(VirtualMachine.class);
-        VirtualMachineProfile profile = mock(VirtualMachineProfile.class);
-        StopAnswer answer = new StopAnswer(new StopCommand(vm, false, false), "ok", true);
-        when(profile.getVirtualMachine()).thenReturn(vm);
-        when(vm.getHostId()).thenReturn(1L);
-        when(_agentMgr.send(anyLong(), (Command)any())).thenReturn(answer);
-
-        boolean actual = _vmMgr.sendStop(guru, profile, false, false);
-
-        Assert.assertTrue(actual);
-    }
-
-    @Test
-    public void testSendStopWithFailAnswer() throws Exception {
-        VirtualMachineGuru guru = mock(VirtualMachineGuru.class);
-        VirtualMachine vm = mock(VirtualMachine.class);
-        VirtualMachineProfile profile = mock(VirtualMachineProfile.class);
-        StopAnswer answer = new StopAnswer(new StopCommand(vm, false, false), "fail", false);
-        when(profile.getVirtualMachine()).thenReturn(vm);
-        when(vm.getHostId()).thenReturn(1L);
-        when(_agentMgr.send(anyLong(), (Command)any())).thenReturn(answer);
-
-        boolean actual = _vmMgr.sendStop(guru, profile, false, false);
-
-        Assert.assertFalse(actual);
-    }
-
-    @Test
-    public void testSendStopWithNullAnswer() throws Exception {
-        VirtualMachineGuru guru = mock(VirtualMachineGuru.class);
-        VirtualMachine vm = mock(VirtualMachine.class);
-        VirtualMachineProfile profile = mock(VirtualMachineProfile.class);
-        when(profile.getVirtualMachine()).thenReturn(vm);
-        when(vm.getHostId()).thenReturn(1L);
-        when(_agentMgr.send(anyLong(), (Command)any())).thenReturn(null);
-
-        boolean actual = _vmMgr.sendStop(guru, profile, false, false);
-
-        Assert.assertFalse(actual);
-    }
-
-    @Test
-    public void testExeceuteInSequence() {
-        assertTrue(_vmMgr.getExecuteInSequence(HypervisorType.XenServer) == false);
-        assertTrue(_vmMgr.getExecuteInSequence(HypervisorType.KVM) == false);
-        assertTrue(_vmMgr.getExecuteInSequence(HypervisorType.VMware) == HypervisorGuru.VmwareFullClone.value());
-        assertTrue(_vmMgr.getExecuteInSequence(HypervisorType.Ovm3) == VirtualMachineManager.ExecuteInSequence.value());
-    }
-
-    @Test
-    public void testCheckIfCanUpgrade() throws Exception {
-        when(_vmInstance.getState()).thenReturn(State.Stopped);
-        when(_serviceOfferingMock.isDynamic()).thenReturn(true);
-        when(_vmInstance.getServiceOfferingId()).thenReturn(1l);
-        when(_serviceOfferingMock.getId()).thenReturn(2l);
-
-        ServiceOfferingVO mockCurrentServiceOffering = mock(ServiceOfferingVO.class);
-
-        when(_offeringDao.findByIdIncludingRemoved(anyLong(), anyLong())).thenReturn(mockCurrentServiceOffering);
-        when(mockCurrentServiceOffering.getUseLocalStorage()).thenReturn(true);
-        when(_serviceOfferingMock.getUseLocalStorage()).thenReturn(true);
-        when(mockCurrentServiceOffering.getSystemUse()).thenReturn(true);
-        when(_serviceOfferingMock.getSystemUse()).thenReturn(true);
-        when(mockCurrentServiceOffering.getTags()).thenReturn("x,y");
-        when(_serviceOfferingMock.getTags()).thenReturn("z,x,y");
-
-        _vmMgr.checkIfCanUpgrade(_vmInstance, _serviceOfferingMock);
-    }
-}
diff --git a/engine/pom.xml b/engine/pom.xml
index 4e23f46..fe4109b 100644
--- a/engine/pom.xml
+++ b/engine/pom.xml
@@ -1,69 +1,70 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine</artifactId>
-  <name>Apache CloudStack Cloud Engine</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>cloudstack-checkstyle</id>
-              <phase>none</phase>
-              <inherited>false</inherited>
-            </execution>
-          </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <modules>
-    <module>api</module>
-    <module>orchestration</module>
-    <module>schema</module>
-    <module>storage</module>
-    <module>storage/volume</module>
-    <module>storage/image</module>
-    <module>storage/datamotion</module>
-    <module>storage/cache</module>
-    <module>storage/snapshot</module>
-    <module>storage/configdrive</module>
-    <module>components-api</module>
-    <module>network</module>
-    <module>service</module>
-  </modules>
-  <profiles>
-  <profile>
-      <id>integration-test</id>
-      <modules>
-        <module>storage/integration-test</module>
-      </modules>
-  </profile>
-  </profiles>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine</artifactId>
+    <name>Apache CloudStack Cloud Engine</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <modules>
+        <!-- keep in alphabetic order -->
+        <module>api</module>
+        <module>components-api</module>
+        <module>network</module>
+        <module>orchestration</module>
+        <module>schema</module>
+        <module>service</module>
+        <module>storage</module>
+        <module>storage/cache</module>
+        <module>storage/configdrive</module>
+        <module>storage/datamotion</module>
+        <module>storage/image</module>
+        <module>storage/snapshot</module>
+        <module>storage/volume</module>
+    </modules>
+    <profiles>
+        <profile>
+            <id>integration-test</id>
+            <modules>
+                <module>storage/integration-test</module>
+            </modules>
+        </profile>
+    </profiles>
 </project>
diff --git a/engine/schema/pom.xml b/engine/schema/pom.xml
index a8bdf35..78bb8f7 100644
--- a/engine/schema/pom.xml
+++ b/engine/schema/pom.xml
@@ -1,52 +1,52 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-schema</artifactId>
-  <name>Apache CloudStack Cloud Engine Schema Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-schema</artifactId>
+    <name>Apache CloudStack Cloud Engine Schema Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/schema/resources/META-INF/db/schema-227to228-premium.sql b/engine/schema/resources/META-INF/db/schema-227to228-premium.sql
deleted file mode 100755
index 8c3af0c..0000000
--- a/engine/schema/resources/META-INF/db/schema-227to228-premium.sql
+++ /dev/null
@@ -1,76 +0,0 @@
--- Licensed to the Apache Software Foundation (ASF) under one
--- or more contributor license agreements.  See the NOTICE file
--- distributed with this work for additional information
--- regarding copyright ownership.  The ASF licenses this file
--- to you under the Apache License, Version 2.0 (the
--- "License"); you may not use this file except in compliance
--- with the License.  You may obtain a copy of the License at
--- 
---   http://www.apache.org/licenses/LICENSE-2.0
--- 
--- Unless required by applicable law or agreed to in writing,
--- software distributed under the License is distributed on an
--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
--- KIND, either express or implied.  See the License for the
--- specific language governing permissions and limitations
--- under the License.
-
---;
--- Schema upgrade from 2.2.7 to 2.2.8;
---;
-CREATE TABLE IF NOT EXISTS `cloud`.`netapp_pool` (
-  `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
-  `name` varchar(255) NOT NULL UNIQUE COMMENT 'name for the pool',
-  `algorithm` varchar(255) NOT NULL COMMENT 'algorithm',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-
-CREATE TABLE IF NOT EXISTS `cloud`.`netapp_volume` (
-  `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
-  `ip_address` varchar(255) NOT NULL COMMENT 'ip address/fqdn of the volume',
-  `pool_id` bigint unsigned NOT NULL COMMENT 'id for the pool',
-  `pool_name` varchar(255) NOT NULL COMMENT 'name for the pool',
-  `aggregate_name` varchar(255) NOT NULL COMMENT 'name for the aggregate',
-  `volume_name` varchar(255) NOT NULL COMMENT 'name for the volume',
-  `volume_size` varchar(255) NOT NULL COMMENT 'volume size',
-  `snapshot_policy` varchar(255) NOT NULL COMMENT 'snapshot policy',
-  `snapshot_reservation` int NOT NULL COMMENT 'snapshot reservation',  
-  `username` varchar(255) NOT NULL COMMENT 'username',  
-  `password` varchar(200) COMMENT 'password',
-  `round_robin_marker` int COMMENT 'This marks the volume to be picked up for lun creation, RR fashion',
-  PRIMARY KEY (`ip_address`,`aggregate_name`,`volume_name`),
-  CONSTRAINT `fk_netapp_volume__pool_id` FOREIGN KEY `fk_netapp_volume__pool_id` (`pool_id`) REFERENCES `netapp_pool` (`id`) ON DELETE CASCADE,
-  INDEX `i_netapp_volume__pool_id`(`pool_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-
-CREATE TABLE IF NOT EXISTS `cloud`.`netapp_lun` (
-  `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
-  `lun_name` varchar(255) NOT NULL COMMENT 'lun name',
-  `target_iqn` varchar(255) NOT NULL COMMENT 'target iqn',
-  `path` varchar(255) NOT NULL COMMENT 'lun path',
-  `size` bigint NOT NULL COMMENT 'lun size',
-  `volume_id` bigint unsigned NOT NULL COMMENT 'parent volume id',
-  PRIMARY KEY (`id`),
-  CONSTRAINT `fk_netapp_lun__volume_id` FOREIGN KEY `fk_netapp_lun__volume_id` (`volume_id`) REFERENCES `netapp_volume` (`id`) ON DELETE CASCADE,
-  INDEX `i_netapp_lun__volume_id`(`volume_id`),
-  INDEX `i_netapp_lun__lun_name`(`lun_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
---;
--- Cleanup usage records for bug # 10727;
---;
-
-
-create table `cloud_usage`.`temp_usage` (  `vol_id` bigint unsigned, `created` DATETIME);
-
-insert into `cloud_usage`.`temp_usage` (vol_id, created) select id, max(created) from `cloud_usage`.`usage_volume` where deleted is null group by id having count(id) > 1;
-
-delete `cloud_usage`.`usage_volume` from `cloud_usage`.`usage_volume` inner join `cloud_usage`.`temp_usage` where `cloud_usage`.`usage_volume`.created = `cloud_usage`.`temp_usage`.created and `cloud_usage`.`usage_volume`.id = `cloud_usage`.`temp_usage`.vol_id and `cloud_usage`.`usage_volume`.deleted is null;
-
-drop table `cloud_usage`.`temp_usage`;
-
-update `cloud_usage`.`cloud_usage` set raw_usage = (raw_usage % 24) where usage_type =6 and raw_usage > 24 and (raw_usage % 24) <> 0;
-update `cloud_usage`.`cloud_usage` set raw_usage = 24 where usage_type =6 and raw_usage > 24 and (raw_usage % 24) = 0;
-
diff --git a/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java b/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java
deleted file mode 100644
index 158931b..0000000
--- a/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java
+++ /dev/null
@@ -1,712 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import com.cloud.upgrade.dao.DbUpgrade;
-import com.cloud.upgrade.dao.Upgrade217to218;
-import com.cloud.upgrade.dao.Upgrade218to22;
-import com.cloud.upgrade.dao.Upgrade218to224DomainVlans;
-import com.cloud.upgrade.dao.Upgrade2210to2211;
-import com.cloud.upgrade.dao.Upgrade2211to2212;
-import com.cloud.upgrade.dao.Upgrade2212to2213;
-import com.cloud.upgrade.dao.Upgrade2213to2214;
-import com.cloud.upgrade.dao.Upgrade2214to30;
-import com.cloud.upgrade.dao.Upgrade221to222;
-import com.cloud.upgrade.dao.Upgrade222to224;
-import com.cloud.upgrade.dao.Upgrade224to225;
-import com.cloud.upgrade.dao.Upgrade225to226;
-import com.cloud.upgrade.dao.Upgrade227to228;
-import com.cloud.upgrade.dao.Upgrade228to229;
-import com.cloud.upgrade.dao.Upgrade229to2210;
-import com.cloud.upgrade.dao.Upgrade301to302;
-import com.cloud.upgrade.dao.Upgrade302to303;
-import com.cloud.upgrade.dao.Upgrade302to40;
-import com.cloud.upgrade.dao.Upgrade303to304;
-import com.cloud.upgrade.dao.Upgrade304to305;
-import com.cloud.upgrade.dao.Upgrade305to306;
-import com.cloud.upgrade.dao.Upgrade306to307;
-import com.cloud.upgrade.dao.Upgrade307to410;
-import com.cloud.upgrade.dao.Upgrade30to301;
-import com.cloud.upgrade.dao.Upgrade40to41;
-import com.cloud.upgrade.dao.Upgrade410to420;
-import com.cloud.upgrade.dao.Upgrade420to421;
-import com.cloud.upgrade.dao.Upgrade421to430;
-import com.cloud.upgrade.dao.Upgrade430to440;
-import com.cloud.upgrade.dao.Upgrade431to440;
-import com.cloud.upgrade.dao.Upgrade432to440;
-import com.cloud.upgrade.dao.Upgrade440to441;
-import com.cloud.upgrade.dao.Upgrade441to442;
-import com.cloud.upgrade.dao.Upgrade442to450;
-import com.cloud.upgrade.dao.Upgrade443to450;
-import com.cloud.upgrade.dao.Upgrade444to450;
-import com.cloud.upgrade.dao.Upgrade450to451;
-import com.cloud.upgrade.dao.Upgrade451to452;
-import com.cloud.upgrade.dao.Upgrade452to460;
-import com.cloud.upgrade.dao.Upgrade453to460;
-import com.cloud.upgrade.dao.Upgrade460to461;
-import com.cloud.upgrade.dao.Upgrade461to470;
-import com.cloud.upgrade.dao.Upgrade470to471;
-import com.cloud.upgrade.dao.Upgrade471to480;
-import com.cloud.upgrade.dao.Upgrade480to481;
-import com.cloud.upgrade.dao.Upgrade481to490;
-import com.cloud.upgrade.dao.Upgrade490to4910;
-import com.cloud.upgrade.dao.Upgrade4910to4920;
-import com.cloud.upgrade.dao.Upgrade4920to4930;
-import com.cloud.upgrade.dao.Upgrade4930to41000;
-import com.cloud.upgrade.dao.Upgrade41000to41100;
-import com.cloud.upgrade.dao.Upgrade41100to41110;
-import com.cloud.upgrade.dao.UpgradeSnapshot217to224;
-import com.cloud.upgrade.dao.UpgradeSnapshot223to224;
-import com.cloud.upgrade.dao.VersionDao;
-import com.cloud.upgrade.dao.VersionDaoImpl;
-import com.cloud.upgrade.dao.VersionVO;
-import com.cloud.upgrade.dao.VersionVO.Step;
-import com.cloud.utils.component.SystemIntegrityChecker;
-import com.cloud.utils.db.GlobalLock;
-import com.cloud.utils.db.ScriptRunner;
-import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.google.common.collect.ImmutableList;
-import org.apache.cloudstack.utils.CloudStackVersion;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Lists.reverse;
-import static com.google.common.collect.ObjectArrays.concat;
-import static java.util.Collections.sort;
-
-public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
-    private static final Logger s_logger = Logger.getLogger(DatabaseUpgradeChecker.class);
-    private final ImmutableList<CloudStackVersion> availableVersions;
-    protected Map<CloudStackVersion, DbUpgrade[]> _upgradeMap = new HashMap<>();
-
-    @Inject
-    VersionDao _dao;
-
-    public DatabaseUpgradeChecker() {
-        _dao = new VersionDaoImpl();
-
-        _upgradeMap.put(CloudStackVersion.parse("2.1.7"),
-            new DbUpgrade[] {new Upgrade217to218(), new Upgrade218to22(), new Upgrade221to222(), new UpgradeSnapshot217to224(), new Upgrade222to224(), new Upgrade224to225(),
-                new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(),
-                new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(),
-                new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.1.8"),
-            new DbUpgrade[] {new Upgrade218to22(), new Upgrade221to222(), new UpgradeSnapshot217to224(), new Upgrade222to224(), new Upgrade218to224DomainVlans(),
-                new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(),
-                new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.1.9"),
-            new DbUpgrade[] {new Upgrade218to22(), new Upgrade221to222(), new UpgradeSnapshot217to224(), new Upgrade222to224(), new Upgrade218to224DomainVlans(),
-                new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(),
-                new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.1"),
-            new DbUpgrade[] {new Upgrade221to222(), new UpgradeSnapshot223to224(), new Upgrade222to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(),
-                new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(),
-                new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.2"),
-            new DbUpgrade[] {new Upgrade222to224(), new UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(),
-                new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(),
-                new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.3"),
-            new DbUpgrade[] {new Upgrade222to224(), new UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(),
-                new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(),
-                new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.4"),
-            new DbUpgrade[] {new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(),
-                new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.5"),
-            new DbUpgrade[] {new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(),
-                new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(),
-                new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.6"),
-            new DbUpgrade[] {new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(),
-                new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.7"),
-            new DbUpgrade[] {new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(),
-                new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.8"),
-            new DbUpgrade[] {new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(),
-                new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.9"),
-            new DbUpgrade[] {new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(),
-                new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.10"),
-            new DbUpgrade[] {new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
-                new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.12"),
-            new DbUpgrade[] {new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.13"),
-            new DbUpgrade[] {new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(),
-                new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.14"),
-            new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.0"),
-            new DbUpgrade[] {new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.1"),
-            new DbUpgrade[] {new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.2"),
-            new DbUpgrade[] {new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.0.0"),
-            new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.0.1"),
-            new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.0.2"),
-            new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.1.0"),
-            new DbUpgrade[] {new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.1.1"),
-            new DbUpgrade[] {new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.2.0"),
-            new DbUpgrade[] {new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.2.1"),
-            new DbUpgrade[] {new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.3.0"),
-            new DbUpgrade[] {new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.3.1"),
-            new DbUpgrade[] {new Upgrade431to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.3.2"),
-            new DbUpgrade[] {new Upgrade432to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.0"),
-            new DbUpgrade[] {new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.1"),
-            new DbUpgrade[] {new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.2"),
-            new DbUpgrade[] {new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.3"),
-            new DbUpgrade[] {new Upgrade443to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.4"),
-            new DbUpgrade[] {new Upgrade444to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.0"),
-            new DbUpgrade[] {new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.1"),
-            new DbUpgrade[] {new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.2"),
-            new DbUpgrade[] {new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                    new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.3"),
-            new DbUpgrade[] {new Upgrade453to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.6.0"),
-            new DbUpgrade[] {new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.6.1"),
-            new DbUpgrade[] {new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.6.2"),
-            new DbUpgrade[] {new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.7.0"),
-            new DbUpgrade[] {new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.7.1"),
-            new DbUpgrade[] {new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.7.2"),
-            new DbUpgrade[] {new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.8.0"),
-            new DbUpgrade[] {new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.8.1"),
-            new DbUpgrade[] {new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.8.2.0"),
-            new DbUpgrade[] {new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.0"),
-            new DbUpgrade[] {new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.1.0"),
-            new DbUpgrade[] {new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.2.0"),
-            new DbUpgrade[] {new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.3.0"),
-            new DbUpgrade[] {new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.3.1"),
-                new DbUpgrade[] {new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.10.0.0"),
-            new DbUpgrade[] {new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.11.0.0"),
-            new DbUpgrade[] {new Upgrade41100to41110()});
-
-        //CP Upgrades
-        _upgradeMap.put(CloudStackVersion.parse("3.0.3"),
-            new DbUpgrade[] {new Upgrade303to304(), new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.4"),
-            new DbUpgrade[] {new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.5"),
-            new DbUpgrade[] {new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.6"),
-            new DbUpgrade[] {new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.7"),
-            new DbUpgrade[] {new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.15"),
-            new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to303(), new Upgrade303to304(), new Upgrade304to305(),
-                new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.16"),
-            new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to303(), new Upgrade303to304(), new Upgrade304to305(),
-                new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110()});
-
-        final List<CloudStackVersion> sortedVersions = newArrayList(_upgradeMap.keySet());
-        sort(sortedVersions);
-
-        availableVersions = ImmutableList.copyOf(sortedVersions);
-    }
-
-    protected void runScript(Connection conn, InputStream file) {
-
-        try (InputStreamReader reader = new InputStreamReader(file)) {
-            ScriptRunner runner = new ScriptRunner(conn, false, true);
-            runner.runScript(reader);
-        } catch (IOException e) {
-            s_logger.error("Unable to read upgrade script", e);
-            throw new CloudRuntimeException("Unable to read upgrade script", e);
-        } catch (SQLException e) {
-            s_logger.error("Unable to execute upgrade script", e);
-            throw new CloudRuntimeException("Unable to execute upgrade script", e);
-        }
-
-    }
-
-    /**
-     *
-     * Calculates an upgrade path for the passed <code>dbVersion</code>.  The calculation assumes that the
-     * <code>dbVersion</code> required no schema migrations or data conversions and no upgrade path was defined
-     * for it.  Therefore, we find the most recent version with database migrations before the <code>dbVersion</code>
-     * and adopt that list.
-     *
-     * @param dbVersion The version from which the upgrade will occur
-     *
-     * @return The upgrade path from <code>dbVersion</code> to <code>currentVersion</code>
-     *
-     * @since 4.8.2.0
-     *
-     */
-    private DbUpgrade[] findMostRecentUpgradePath(final CloudStackVersion dbVersion) {
-
-        // Find the most recent version before dbVersion
-        for (CloudStackVersion version : reverse(availableVersions)) {
-            if (dbVersion.compareTo(version) < 0) {
-                return _upgradeMap.get(version);
-            }
-        }
-
-        // The current version was the latest and didn't have any migrations ...
-        return new DbUpgrade[0];
-
-    }
-
-    // Default visibility to support unit testing ...
-    DbUpgrade[] calculateUpgradePath(final CloudStackVersion dbVersion, final CloudStackVersion currentVersion) {
-
-        checkArgument(dbVersion != null);
-        checkArgument(currentVersion != null);
-        checkArgument(currentVersion.compareTo(dbVersion) > 0);
-
-        final DbUpgrade[] upgrades = _upgradeMap.containsKey(dbVersion) ? _upgradeMap.get(dbVersion) : findMostRecentUpgradePath(dbVersion);
-
-        // When there is no upgrade defined for the target version, we assume that there were no schema changes or
-        // data migrations required.  Based on that assumption, we add a noop DbUpgrade to the end of the list ...
-        final CloudStackVersion tailVersion = upgrades.length > 0 ? CloudStackVersion.parse(upgrades[upgrades.length - 1].getUpgradedVersion()) : dbVersion;
-
-        if (currentVersion.compareTo(tailVersion) != 0) {
-            return concat(upgrades, new NoopDbUpgrade(tailVersion, currentVersion));
-        }
-
-        return upgrades;
-
-    }
-
-    protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVersion) {
-        s_logger.info("Database upgrade must be performed from " + dbVersion + " to " + currentVersion);
-
-        final DbUpgrade[] upgrades = calculateUpgradePath(dbVersion, currentVersion);
-
-        boolean supportsRollingUpgrade = true;
-        for (DbUpgrade upgrade : upgrades) {
-            if (!upgrade.supportsRollingUpgrade()) {
-                supportsRollingUpgrade = false;
-                break;
-            }
-        }
-
-        if (!supportsRollingUpgrade && false) { // FIXME: Needs to detect if there are management servers running
-            // ClusterManagerImpl.arePeersRunning(null)) {
-            String errorMessage = "Unable to run upgrade because the upgrade sequence does not support rolling update and there are other management server nodes running";
-            s_logger.error(errorMessage);
-            throw new CloudRuntimeException(errorMessage);
-        }
-
-        for (DbUpgrade upgrade : upgrades) {
-            VersionVO version;
-            s_logger.debug("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade
-                .getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
-            TransactionLegacy txn = TransactionLegacy.open("Upgrade");
-            txn.start();
-            try {
-                Connection conn;
-                try {
-                    conn = txn.getConnection();
-                } catch (SQLException e) {
-                    String errorMessage = "Unable to upgrade the database";
-                    s_logger.error(errorMessage, e);
-                    throw new CloudRuntimeException(errorMessage, e);
-                }
-                InputStream[] scripts = upgrade.getPrepareScripts();
-                if (scripts != null) {
-                    for (InputStream script : scripts) {
-                        runScript(conn, script);
-                    }
-                }
-
-                upgrade.performDataMigration(conn);
-
-                version = new VersionVO(upgrade.getUpgradedVersion());
-                version = _dao.persist(version);
-
-                txn.commit();
-            } catch (CloudRuntimeException e) {
-                String errorMessage = "Unable to upgrade the database";
-                s_logger.error(errorMessage, e);
-                throw new CloudRuntimeException(errorMessage, e);
-            } finally {
-                txn.close();
-            }
-
-            // Run the corresponding '-cleanup.sql' script
-            txn = TransactionLegacy.open("Cleanup");
-            try {
-                s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade
-                    .getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
-
-                txn.start();
-                Connection conn;
-                try {
-                    conn = txn.getConnection();
-                } catch (SQLException e) {
-                    s_logger.error("Unable to cleanup the database", e);
-                    throw new CloudRuntimeException("Unable to cleanup the database", e);
-                }
-
-                InputStream[] scripts = upgrade.getCleanupScripts();
-                if (scripts != null) {
-                    for (InputStream script : scripts) {
-                        runScript(conn, script);
-                        s_logger.debug("Cleanup script " + upgrade.getClass().getSimpleName() + " is executed successfully");
-                    }
-                }
-                txn.commit();
-
-                txn.start();
-                version.setStep(Step.Complete);
-                version.setUpdated(new Date());
-                _dao.update(version.getId(), version);
-                txn.commit();
-                s_logger.debug("Upgrade completed for version " + version.getVersion());
-            } finally {
-                txn.close();
-            }
-        }
-    }
-
-    @Override
-    public void check() {
-        GlobalLock lock = GlobalLock.getInternLock("DatabaseUpgrade");
-        try {
-            s_logger.info("Grabbing lock to check for database upgrade.");
-            if (!lock.lock(20 * 60)) {
-                throw new CloudRuntimeException("Unable to acquire lock to check for database integrity.");
-            }
-
-            try {
-
-                final CloudStackVersion dbVersion = CloudStackVersion.parse(_dao.getCurrentVersion());
-                final String currentVersionValue = this.getClass().getPackage().getImplementationVersion();
-
-                if (StringUtils.isBlank(currentVersionValue)) {
-                    return;
-                }
-
-                final CloudStackVersion currentVersion = CloudStackVersion.parse(currentVersionValue);
-                s_logger.info("DB version = " + dbVersion + " Code Version = " + currentVersion);
-
-                if (dbVersion.compareTo(currentVersion) > 0) {
-                    throw new CloudRuntimeException("Database version " + dbVersion + " is higher than management software version " + currentVersionValue);
-                }
-
-                if (dbVersion.compareTo(currentVersion) == 0) {
-                    s_logger.info("DB version and code version matches so no upgrade needed.");
-                    return;
-                }
-
-                upgrade(dbVersion, currentVersion);
-            } finally {
-                lock.unlock();
-            }
-        } finally {
-            lock.releaseRef();
-        }
-    }
-
-    private static final class NoopDbUpgrade implements DbUpgrade {
-
-        private final String upgradedVersion;
-        private final String[] upgradeRange;
-
-        private NoopDbUpgrade(final CloudStackVersion fromVersion, final CloudStackVersion toVersion) {
-
-            super();
-
-            upgradedVersion = toVersion.toString();
-            upgradeRange = new String[] {fromVersion.toString(), toVersion.toString()};
-
-        }
-
-        @Override
-        public String[] getUpgradableVersionRange() {
-            return Arrays.copyOf(upgradeRange, upgradeRange.length);
-        }
-
-        @Override
-        public String getUpgradedVersion() {
-            return upgradedVersion;
-        }
-
-        @Override
-        public boolean supportsRollingUpgrade() {
-            return false;
-        }
-
-        @Override
-        public InputStream[] getPrepareScripts() {
-            return new InputStream[0];
-        }
-
-        @Override
-        public void performDataMigration(Connection conn) {
-
-        }
-
-        @Override
-        public InputStream[] getCleanupScripts() {
-            return new InputStream[0];
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/engine/schema/src/com/cloud/alert/AlertVO.java b/engine/schema/src/main/java/com/cloud/alert/AlertVO.java
similarity index 94%
rename from engine/schema/src/com/cloud/alert/AlertVO.java
rename to engine/schema/src/main/java/com/cloud/alert/AlertVO.java
index 70ef469..1f2cd9d 100644
--- a/engine/schema/src/com/cloud/alert/AlertVO.java
+++ b/engine/schema/src/main/java/com/cloud/alert/AlertVO.java
@@ -53,6 +53,9 @@
     @Column(name = "subject", length = 999)
     private String subject;
 
+    @Column(name = "content", length = 5000)
+    private String content;
+
     @Column(name = "sent_count")
     private int sentCount = 0;
 
@@ -191,4 +194,13 @@
     public void setName(String name) {
         this.name = name;
     }
+
+    @Override
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
 }
diff --git a/engine/schema/src/com/cloud/alert/dao/AlertDao.java b/engine/schema/src/main/java/com/cloud/alert/dao/AlertDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/alert/dao/AlertDao.java
rename to engine/schema/src/main/java/com/cloud/alert/dao/AlertDao.java
diff --git a/engine/schema/src/com/cloud/alert/dao/AlertDaoImpl.java b/engine/schema/src/main/java/com/cloud/alert/dao/AlertDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/alert/dao/AlertDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/alert/dao/AlertDaoImpl.java
diff --git a/engine/schema/src/com/cloud/capacity/CapacityVO.java b/engine/schema/src/main/java/com/cloud/capacity/CapacityVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/capacity/CapacityVO.java
rename to engine/schema/src/main/java/com/cloud/capacity/CapacityVO.java
diff --git a/engine/schema/src/com/cloud/capacity/dao/CapacityDao.java b/engine/schema/src/main/java/com/cloud/capacity/dao/CapacityDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/capacity/dao/CapacityDao.java
rename to engine/schema/src/main/java/com/cloud/capacity/dao/CapacityDao.java
diff --git a/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java b/engine/schema/src/main/java/com/cloud/capacity/dao/CapacityDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/capacity/dao/CapacityDaoImpl.java
diff --git a/engine/schema/src/com/cloud/certificate/CertificateVO.java b/engine/schema/src/main/java/com/cloud/certificate/CertificateVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/certificate/CertificateVO.java
rename to engine/schema/src/main/java/com/cloud/certificate/CertificateVO.java
diff --git a/engine/schema/src/com/cloud/certificate/CrlVO.java b/engine/schema/src/main/java/com/cloud/certificate/CrlVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/certificate/CrlVO.java
rename to engine/schema/src/main/java/com/cloud/certificate/CrlVO.java
diff --git a/engine/schema/src/com/cloud/certificate/dao/CertificateDao.java b/engine/schema/src/main/java/com/cloud/certificate/dao/CertificateDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/certificate/dao/CertificateDao.java
rename to engine/schema/src/main/java/com/cloud/certificate/dao/CertificateDao.java
diff --git a/engine/schema/src/com/cloud/certificate/dao/CertificateDaoImpl.java b/engine/schema/src/main/java/com/cloud/certificate/dao/CertificateDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/certificate/dao/CertificateDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/certificate/dao/CertificateDaoImpl.java
diff --git a/engine/schema/src/com/cloud/certificate/dao/CrlDao.java b/engine/schema/src/main/java/com/cloud/certificate/dao/CrlDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/certificate/dao/CrlDao.java
rename to engine/schema/src/main/java/com/cloud/certificate/dao/CrlDao.java
diff --git a/engine/schema/src/com/cloud/certificate/dao/CrlDaoImpl.java b/engine/schema/src/main/java/com/cloud/certificate/dao/CrlDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/certificate/dao/CrlDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/certificate/dao/CrlDaoImpl.java
diff --git a/engine/schema/src/com/cloud/cluster/agentlb/HostTransferMapVO.java b/engine/schema/src/main/java/com/cloud/cluster/agentlb/HostTransferMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/cluster/agentlb/HostTransferMapVO.java
rename to engine/schema/src/main/java/com/cloud/cluster/agentlb/HostTransferMapVO.java
diff --git a/engine/schema/src/com/cloud/cluster/agentlb/dao/HostTransferMapDao.java b/engine/schema/src/main/java/com/cloud/cluster/agentlb/dao/HostTransferMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/cluster/agentlb/dao/HostTransferMapDao.java
rename to engine/schema/src/main/java/com/cloud/cluster/agentlb/dao/HostTransferMapDao.java
diff --git a/engine/schema/src/com/cloud/cluster/agentlb/dao/HostTransferMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/cluster/agentlb/dao/HostTransferMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/cluster/agentlb/dao/HostTransferMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/cluster/agentlb/dao/HostTransferMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/configuration/ManagementServiceConfiguration.java b/engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfiguration.java
similarity index 100%
rename from engine/schema/src/com/cloud/configuration/ManagementServiceConfiguration.java
rename to engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfiguration.java
diff --git a/engine/schema/src/com/cloud/configuration/ManagementServiceConfigurationImpl.java b/engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfigurationImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/configuration/ManagementServiceConfigurationImpl.java
rename to engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfigurationImpl.java
diff --git a/engine/schema/src/com/cloud/configuration/ResourceCountVO.java b/engine/schema/src/main/java/com/cloud/configuration/ResourceCountVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/configuration/ResourceCountVO.java
rename to engine/schema/src/main/java/com/cloud/configuration/ResourceCountVO.java
diff --git a/engine/schema/src/com/cloud/configuration/ResourceLimitVO.java b/engine/schema/src/main/java/com/cloud/configuration/ResourceLimitVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/configuration/ResourceLimitVO.java
rename to engine/schema/src/main/java/com/cloud/configuration/ResourceLimitVO.java
diff --git a/engine/schema/src/com/cloud/configuration/dao/ResourceCountDao.java b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java
similarity index 96%
rename from engine/schema/src/com/cloud/configuration/dao/ResourceCountDao.java
rename to engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java
index c1ad254..28f2a53 100644
--- a/engine/schema/src/com/cloud/configuration/dao/ResourceCountDao.java
+++ b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDao.java
@@ -39,9 +39,6 @@
      */
     void setResourceCount(long ownerId, ResourceOwnerType ownerType, ResourceType type, long count);
 
-    @Deprecated
-    void updateDomainCount(long domainId, ResourceType type, boolean increment, long delta);
-
     boolean updateById(long id, boolean increment, long delta);
 
     void createResourceCounts(long ownerId, ResourceOwnerType ownerType);
@@ -60,13 +57,15 @@
 
     /**
      * Counts the number of CPU cores allocated for the given account.
+     *
      * Side note: This method is not using the "resource_count" table. It is executing the actual count instead.
      */
     long countCpuNumberAllocatedToAccount(long accountId);
 
     /**
      * Counts the amount of memory allocated for the given account.
+     *
      * Side note: This method is not using the "resource_count" table. It is executing the actual count instead.
      */
     long countMemoryAllocatedToAccount(long accountId);
-}
\ No newline at end of file
+}
diff --git a/engine/schema/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
similarity index 94%
rename from engine/schema/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
index 9cc8913..dbf22281 100644
--- a/engine/schema/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java
@@ -27,9 +27,6 @@
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
-import com.cloud.domain.DomainVO;
-import com.cloud.user.AccountVO;
-import com.cloud.utils.db.JoinBuilder;
 import org.springframework.stereotype.Component;
 
 import com.cloud.configuration.Resource;
@@ -37,11 +34,14 @@
 import com.cloud.configuration.Resource.ResourceType;
 import com.cloud.configuration.ResourceCountVO;
 import com.cloud.configuration.ResourceLimit;
+import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.exception.UnsupportedServiceException;
+import com.cloud.user.AccountVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.JoinBuilder;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.TransactionLegacy;
@@ -55,9 +55,9 @@
     private final SearchBuilder<ResourceCountVO> DomainSearch;
 
     @Inject
-    protected DomainDao _domainDao;
+    private DomainDao _domainDao;
     @Inject
-    protected AccountDao _accountDao;
+    private AccountDao _accountDao;
 
     public ResourceCountDaoImpl() {
         TypeSearch = createSearchBuilder();
@@ -121,16 +121,6 @@
     }
 
     @Override
-    @Deprecated
-    public void updateDomainCount(long domainId, ResourceType type, boolean increment, long delta) {
-        delta = increment ? delta : delta * -1;
-
-        ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type);
-        resourceCountVO.setCount(resourceCountVO.getCount() + delta);
-        update(resourceCountVO.getId(), resourceCountVO);
-    }
-
-    @Override
     public boolean updateById(long id, boolean increment, long delta) {
         delta = increment ? delta : delta * -1;
 
@@ -261,7 +251,6 @@
             + " join service_offering_view so on so.id = vm.service_offering_id "
             + " left join user_vm_details vmd on vmd.vm_id = vm.id and vmd.name = '%s' "
             + " where vm.type = 'User' and state not in ('Destroyed', 'Error', 'Expunging') and display_vm = true and account_id = ? ";
-
     @Override
     public long countCpuNumberAllocatedToAccount(long accountId) {
         String sqlCountCpuNumberAllocatedToAccount = String.format(baseSqlCountComputingResourceAllocatedToAccount, ResourceType.cpu, ResourceType.cpu, "cpuNumber");
@@ -282,11 +271,12 @@
 
             ResultSet rs = pstmt.executeQuery();
             if (!rs.next()) {
-              throw new CloudRuntimeException(String.format("An unexpected case happened while counting allocated computing resources for account: " + accountId));
+                throw new CloudRuntimeException(String.format("An unexpected case happened while counting allocated computing resources for account: " + accountId));
             }
             return rs.getLong("total");
         } catch (SQLException e) {
             throw new CloudRuntimeException(e);
         }
     }
+
 }
\ No newline at end of file
diff --git a/engine/schema/src/com/cloud/configuration/dao/ResourceLimitDao.java b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceLimitDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/configuration/dao/ResourceLimitDao.java
rename to engine/schema/src/main/java/com/cloud/configuration/dao/ResourceLimitDao.java
diff --git a/engine/schema/src/com/cloud/configuration/dao/ResourceLimitDaoImpl.java b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceLimitDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/configuration/dao/ResourceLimitDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/configuration/dao/ResourceLimitDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/AccountVlanMapVO.java b/engine/schema/src/main/java/com/cloud/dc/AccountVlanMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/AccountVlanMapVO.java
rename to engine/schema/src/main/java/com/cloud/dc/AccountVlanMapVO.java
diff --git a/engine/schema/src/com/cloud/dc/ClusterDetailsDao.java b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/ClusterDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDao.java
diff --git a/engine/schema/src/com/cloud/dc/ClusterDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/ClusterDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/ClusterDetailsVO.java b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/ClusterDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/dc/ClusterDetailsVO.java
diff --git a/engine/schema/src/com/cloud/dc/ClusterVO.java b/engine/schema/src/main/java/com/cloud/dc/ClusterVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/ClusterVO.java
rename to engine/schema/src/main/java/com/cloud/dc/ClusterVO.java
diff --git a/engine/schema/src/com/cloud/dc/ClusterVSMMapVO.java b/engine/schema/src/main/java/com/cloud/dc/ClusterVSMMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/ClusterVSMMapVO.java
rename to engine/schema/src/main/java/com/cloud/dc/ClusterVSMMapVO.java
diff --git a/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java b/engine/schema/src/main/java/com/cloud/dc/DataCenterDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
rename to engine/schema/src/main/java/com/cloud/dc/DataCenterDetailVO.java
diff --git a/engine/schema/src/com/cloud/dc/DataCenterIpAddressVO.java b/engine/schema/src/main/java/com/cloud/dc/DataCenterIpAddressVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/DataCenterIpAddressVO.java
rename to engine/schema/src/main/java/com/cloud/dc/DataCenterIpAddressVO.java
diff --git a/engine/schema/src/com/cloud/dc/DataCenterLinkLocalIpAddressVO.java b/engine/schema/src/main/java/com/cloud/dc/DataCenterLinkLocalIpAddressVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/DataCenterLinkLocalIpAddressVO.java
rename to engine/schema/src/main/java/com/cloud/dc/DataCenterLinkLocalIpAddressVO.java
diff --git a/engine/schema/src/com/cloud/dc/DataCenterVO.java b/engine/schema/src/main/java/com/cloud/dc/DataCenterVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/DataCenterVO.java
rename to engine/schema/src/main/java/com/cloud/dc/DataCenterVO.java
diff --git a/engine/schema/src/com/cloud/dc/DataCenterVnetVO.java b/engine/schema/src/main/java/com/cloud/dc/DataCenterVnetVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/DataCenterVnetVO.java
rename to engine/schema/src/main/java/com/cloud/dc/DataCenterVnetVO.java
diff --git a/engine/schema/src/com/cloud/dc/DomainVlanMapVO.java b/engine/schema/src/main/java/com/cloud/dc/DomainVlanMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/DomainVlanMapVO.java
rename to engine/schema/src/main/java/com/cloud/dc/DomainVlanMapVO.java
diff --git a/engine/schema/src/com/cloud/dc/HostPodVO.java b/engine/schema/src/main/java/com/cloud/dc/HostPodVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/HostPodVO.java
rename to engine/schema/src/main/java/com/cloud/dc/HostPodVO.java
diff --git a/engine/schema/src/com/cloud/dc/PodCluster.java b/engine/schema/src/main/java/com/cloud/dc/PodCluster.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/PodCluster.java
rename to engine/schema/src/main/java/com/cloud/dc/PodCluster.java
diff --git a/engine/schema/src/com/cloud/dc/PodVlanMapVO.java b/engine/schema/src/main/java/com/cloud/dc/PodVlanMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/PodVlanMapVO.java
rename to engine/schema/src/main/java/com/cloud/dc/PodVlanMapVO.java
diff --git a/engine/schema/src/com/cloud/dc/PodVlanVO.java b/engine/schema/src/main/java/com/cloud/dc/PodVlanVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/PodVlanVO.java
rename to engine/schema/src/main/java/com/cloud/dc/PodVlanVO.java
diff --git a/engine/schema/src/com/cloud/dc/StorageNetworkIpAddressVO.java b/engine/schema/src/main/java/com/cloud/dc/StorageNetworkIpAddressVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/StorageNetworkIpAddressVO.java
rename to engine/schema/src/main/java/com/cloud/dc/StorageNetworkIpAddressVO.java
diff --git a/engine/schema/src/com/cloud/dc/StorageNetworkIpRangeVO.java b/engine/schema/src/main/java/com/cloud/dc/StorageNetworkIpRangeVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/StorageNetworkIpRangeVO.java
rename to engine/schema/src/main/java/com/cloud/dc/StorageNetworkIpRangeVO.java
diff --git a/engine/schema/src/com/cloud/dc/VlanDetailsVO.java b/engine/schema/src/main/java/com/cloud/dc/VlanDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/VlanDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/dc/VlanDetailsVO.java
diff --git a/engine/schema/src/com/cloud/dc/VlanVO.java b/engine/schema/src/main/java/com/cloud/dc/VlanVO.java
similarity index 98%
rename from engine/schema/src/com/cloud/dc/VlanVO.java
rename to engine/schema/src/main/java/com/cloud/dc/VlanVO.java
index 50106e0..ebbd4bd 100644
--- a/engine/schema/src/com/cloud/dc/VlanVO.java
+++ b/engine/schema/src/main/java/com/cloud/dc/VlanVO.java
@@ -16,8 +16,6 @@
 // under the License.
 package com.cloud.dc;
 
-import com.cloud.utils.db.GenericDao;
-
 import java.util.Date;
 import java.util.UUID;
 
@@ -30,6 +28,8 @@
 import javax.persistence.Id;
 import javax.persistence.Table;
 
+import com.cloud.utils.db.GenericDao;
+
 @Entity
 @Table(name = "vlan")
 public class VlanVO implements Vlan {
@@ -57,7 +57,7 @@
     @Column(name = "data_center_id")
     long dataCenterId;
 
-    @Column(name = "description")
+    @Column(name = "ip4_range")
     String ipRange;
 
     @Column(name = "ip6_range")
@@ -185,7 +185,7 @@
     public String toString() {
         if (toString == null) {
             toString =
-                new StringBuilder("Vlan[").append(vlanTag)
+                    new StringBuilder("Vlan[").append(vlanTag)
                     .append("|")
                     .append(vlanGateway)
                     .append("|")
diff --git a/engine/schema/src/com/cloud/dc/dao/AccountVlanMapDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/AccountVlanMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/AccountVlanMapDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/AccountVlanMapDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/AccountVlanMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/AccountVlanMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/AccountVlanMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/AccountVlanMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/ClusterDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/ClusterDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/ClusterDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/ClusterDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/ClusterDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/ClusterDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/ClusterDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/ClusterDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/ClusterVSMMapDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/ClusterVSMMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/ClusterVSMMapDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/ClusterVSMMapDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/ClusterVSMMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterIpAddressDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterIpAddressDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterVnetDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterVnetDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DomainVlanMapDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/DomainVlanMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DomainVlanMapDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DomainVlanMapDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/DomainVlanMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/DomainVlanMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/DomainVlanMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/DomainVlanMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/HostPodDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/HostPodDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/HostPodDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/HostPodDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/HostPodDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/HostPodDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/HostPodDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/HostPodDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/PodVlanDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/PodVlanDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/PodVlanDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/PodVlanDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/PodVlanDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/PodVlanDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/PodVlanDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/PodVlanDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/PodVlanMapDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/PodVlanMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/PodVlanMapDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/PodVlanMapDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/PodVlanMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/PodVlanMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/PodVlanMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/PodVlanMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/StorageNetworkIpAddressDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpAddressDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/StorageNetworkIpAddressDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpAddressDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/StorageNetworkIpAddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpAddressDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/StorageNetworkIpAddressDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpAddressDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/StorageNetworkIpRangeDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpRangeDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/StorageNetworkIpRangeDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpRangeDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/StorageNetworkIpRangeDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpRangeDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/StorageNetworkIpRangeDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/StorageNetworkIpRangeDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/VlanDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/VlanDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/VlanDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/VlanDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/VlanDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/VlanDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java
diff --git a/engine/schema/src/com/cloud/dc/dao/VlanDetailsDao.java b/engine/schema/src/main/java/com/cloud/dc/dao/VlanDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/VlanDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/VlanDetailsDao.java
diff --git a/engine/schema/src/com/cloud/dc/dao/VlanDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/VlanDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/dc/dao/VlanDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/dc/dao/VlanDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/domain/DomainDetailVO.java b/engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/domain/DomainDetailVO.java
rename to engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java
diff --git a/engine/schema/src/com/cloud/domain/DomainVO.java b/engine/schema/src/main/java/com/cloud/domain/DomainVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/domain/DomainVO.java
rename to engine/schema/src/main/java/com/cloud/domain/DomainVO.java
diff --git a/engine/schema/src/com/cloud/domain/dao/DomainDao.java b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/domain/dao/DomainDao.java
rename to engine/schema/src/main/java/com/cloud/domain/dao/DomainDao.java
diff --git a/engine/schema/src/com/cloud/domain/dao/DomainDaoImpl.java b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/domain/dao/DomainDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/domain/dao/DomainDaoImpl.java
diff --git a/engine/schema/src/com/cloud/domain/dao/DomainDetailsDao.java b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/domain/dao/DomainDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java
diff --git a/engine/schema/src/com/cloud/domain/dao/DomainDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/domain/dao/DomainDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/event/EventVO.java b/engine/schema/src/main/java/com/cloud/event/EventVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/EventVO.java
rename to engine/schema/src/main/java/com/cloud/event/EventVO.java
diff --git a/engine/schema/src/com/cloud/event/UsageEventDetailsVO.java b/engine/schema/src/main/java/com/cloud/event/UsageEventDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/UsageEventDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/event/UsageEventDetailsVO.java
diff --git a/engine/schema/src/com/cloud/event/UsageEventVO.java b/engine/schema/src/main/java/com/cloud/event/UsageEventVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/UsageEventVO.java
rename to engine/schema/src/main/java/com/cloud/event/UsageEventVO.java
diff --git a/engine/schema/src/com/cloud/event/dao/EventDao.java b/engine/schema/src/main/java/com/cloud/event/dao/EventDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/dao/EventDao.java
rename to engine/schema/src/main/java/com/cloud/event/dao/EventDao.java
diff --git a/engine/schema/src/com/cloud/event/dao/EventDaoImpl.java b/engine/schema/src/main/java/com/cloud/event/dao/EventDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/dao/EventDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/event/dao/EventDaoImpl.java
diff --git a/engine/schema/src/com/cloud/event/dao/UsageEventDao.java b/engine/schema/src/main/java/com/cloud/event/dao/UsageEventDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/dao/UsageEventDao.java
rename to engine/schema/src/main/java/com/cloud/event/dao/UsageEventDao.java
diff --git a/engine/schema/src/com/cloud/event/dao/UsageEventDaoImpl.java b/engine/schema/src/main/java/com/cloud/event/dao/UsageEventDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/dao/UsageEventDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/event/dao/UsageEventDaoImpl.java
diff --git a/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDao.java b/engine/schema/src/main/java/com/cloud/event/dao/UsageEventDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/dao/UsageEventDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/event/dao/UsageEventDetailsDao.java
diff --git a/engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/event/dao/UsageEventDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/gpu/HostGpuGroupsVO.java b/engine/schema/src/main/java/com/cloud/gpu/HostGpuGroupsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/gpu/HostGpuGroupsVO.java
rename to engine/schema/src/main/java/com/cloud/gpu/HostGpuGroupsVO.java
diff --git a/engine/schema/src/com/cloud/gpu/VGPUTypesVO.java b/engine/schema/src/main/java/com/cloud/gpu/VGPUTypesVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/gpu/VGPUTypesVO.java
rename to engine/schema/src/main/java/com/cloud/gpu/VGPUTypesVO.java
diff --git a/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java b/engine/schema/src/main/java/com/cloud/gpu/dao/HostGpuGroupsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDao.java
rename to engine/schema/src/main/java/com/cloud/gpu/dao/HostGpuGroupsDao.java
diff --git a/engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDaoImpl.java b/engine/schema/src/main/java/com/cloud/gpu/dao/HostGpuGroupsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/gpu/dao/HostGpuGroupsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/gpu/dao/HostGpuGroupsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java b/engine/schema/src/main/java/com/cloud/gpu/dao/VGPUTypesDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/gpu/dao/VGPUTypesDao.java
rename to engine/schema/src/main/java/com/cloud/gpu/dao/VGPUTypesDao.java
diff --git a/engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java b/engine/schema/src/main/java/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/gpu/dao/VGPUTypesDaoImpl.java
diff --git a/engine/schema/src/com/cloud/host/DetailVO.java b/engine/schema/src/main/java/com/cloud/host/DetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/DetailVO.java
rename to engine/schema/src/main/java/com/cloud/host/DetailVO.java
diff --git a/engine/schema/src/com/cloud/host/HostTagVO.java b/engine/schema/src/main/java/com/cloud/host/HostTagVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/HostTagVO.java
rename to engine/schema/src/main/java/com/cloud/host/HostTagVO.java
diff --git a/engine/schema/src/com/cloud/host/HostVO.java b/engine/schema/src/main/java/com/cloud/host/HostVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/HostVO.java
rename to engine/schema/src/main/java/com/cloud/host/HostVO.java
diff --git a/engine/schema/src/com/cloud/host/dao/HostDao.java b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
similarity index 98%
rename from engine/schema/src/com/cloud/host/dao/HostDao.java
rename to engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
index 71c9cd2..2de3fcd 100644
--- a/engine/schema/src/com/cloud/host/dao/HostDao.java
+++ b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
@@ -61,8 +61,6 @@
 
     List<HostVO> listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag);
 
-    long countRoutingHostsByDataCenter(long dcId);
-
     List<HostVO> findAndUpdateApplianceToLoad(long lastPingSecondsAfter, long managementServerId);
 
     boolean updateResourceState(ResourceState oldState, ResourceState.Event event, ResourceState newState, Host vo);
diff --git a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java b/engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
similarity index 98%
rename from engine/schema/src/com/cloud/host/dao/HostDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
index e48bfd5..6eec7ba 100644
--- a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
@@ -32,7 +32,6 @@
 import javax.persistence.TableGenerator;
 
 import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
 
 import com.cloud.agent.api.VgpuTypesInfo;
 import com.cloud.cluster.agentlb.HostTransferMapVO;
@@ -70,7 +69,6 @@
 import com.cloud.utils.db.UpdateBuilder;
 import com.cloud.utils.exception.CloudRuntimeException;
 
-@Component
 @DB
 @TableGenerator(name = "host_req_sq", table = "op_host", pkColumnName = "id", valueColumnName = "sequence", allocationSize = 1)
 public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao { //FIXME: , ExternalIdDao {
@@ -80,7 +78,6 @@
 
     private static final String LIST_CLUSTERID_FOR_HOST_TAG = "select distinct cluster_id from host join host_tags on host.id = host_tags.host_id and host_tags.tag = ?";
 
-
     protected SearchBuilder<HostVO> TypePodDcStatusSearch;
 
     protected SearchBuilder<HostVO> IdStatusSearch;
@@ -920,16 +917,6 @@
         return s_seqFetcher.getNextSequence(Long.class, tg, hostId);
     }
 
-    /*TODO: this is used by mycloud, check if it needs resource state Enabled */
-    @Override
-    public long countRoutingHostsByDataCenter(long dcId) {
-        SearchCriteria<Long> sc = CountRoutingByDc.create();
-        sc.setParameters("dc", dcId);
-        sc.setParameters("type", Host.Type.Routing);
-        sc.setParameters("status", Status.Up.toString());
-        return customSearch(sc, null).get(0);
-    }
-
     @Override
     public boolean updateState(Status oldStatus, Event event, Status newStatus, Host vo, Object data) {
         // lock target row from beginning to avoid lock-promotion caused deadlock
diff --git a/engine/schema/src/com/cloud/host/dao/HostDetailsDao.java b/engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/dao/HostDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java
diff --git a/engine/schema/src/com/cloud/host/dao/HostDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/dao/HostDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/host/dao/HostTagsDao.java b/engine/schema/src/main/java/com/cloud/host/dao/HostTagsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/dao/HostTagsDao.java
rename to engine/schema/src/main/java/com/cloud/host/dao/HostTagsDao.java
diff --git a/engine/schema/src/com/cloud/host/dao/HostTagsDaoImpl.java b/engine/schema/src/main/java/com/cloud/host/dao/HostTagsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/host/dao/HostTagsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/host/dao/HostTagsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java b/engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
rename to engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
diff --git a/engine/schema/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDao.java b/engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDao.java
rename to engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDao.java
diff --git a/engine/schema/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java b/engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
similarity index 94%
rename from engine/schema/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
index b4d2f6f..a434138 100644
--- a/engine/schema/src/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/hypervisor/dao/HypervisorCapabilitiesDaoImpl.java
@@ -18,7 +18,7 @@
 
 import java.util.List;
 
-
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -66,6 +66,9 @@
 
     @Override
     public HypervisorCapabilitiesVO findByHypervisorTypeAndVersion(HypervisorType hypervisorType, String hypervisorVersion) {
+        if (StringUtils.isBlank(hypervisorVersion)) {
+            hypervisorVersion = DEFAULT_VERSION;
+        }
         SearchCriteria<HypervisorCapabilitiesVO> sc = HypervisorTypeAndVersionSearch.create();
         sc.setParameters("hypervisorType", hypervisorType);
         sc.setParameters("hypervisorVersion", hypervisorVersion);
@@ -76,11 +79,13 @@
     public Long getMaxGuestsLimit(HypervisorType hypervisorType, String hypervisorVersion) {
         Long defaultLimit = new Long(50);
         HypervisorCapabilitiesVO result = getCapabilities(hypervisorType, hypervisorVersion);
-        if (result == null)
+        if (result == null) {
             return defaultLimit;
+        }
         Long limit = result.getMaxGuestsLimit();
-        if (limit == null)
+        if (limit == null) {
             return defaultLimit;
+        }
         return limit;
     }
 
diff --git a/engine/schema/src/com/cloud/network/LBHealthCheckPolicyVO.java b/engine/schema/src/main/java/com/cloud/network/LBHealthCheckPolicyVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/LBHealthCheckPolicyVO.java
rename to engine/schema/src/main/java/com/cloud/network/LBHealthCheckPolicyVO.java
diff --git a/engine/schema/src/com/cloud/network/UserIpv6AddressVO.java b/engine/schema/src/main/java/com/cloud/network/UserIpv6AddressVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/UserIpv6AddressVO.java
rename to engine/schema/src/main/java/com/cloud/network/UserIpv6AddressVO.java
diff --git a/engine/schema/src/com/cloud/network/VpnUserVO.java b/engine/schema/src/main/java/com/cloud/network/VpnUserVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/VpnUserVO.java
rename to engine/schema/src/main/java/com/cloud/network/VpnUserVO.java
diff --git a/engine/schema/src/com/cloud/network/as/AutoScalePolicyConditionMapVO.java b/engine/schema/src/main/java/com/cloud/network/as/AutoScalePolicyConditionMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/AutoScalePolicyConditionMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/AutoScalePolicyConditionMapVO.java
diff --git a/engine/schema/src/com/cloud/network/as/AutoScalePolicyVO.java b/engine/schema/src/main/java/com/cloud/network/as/AutoScalePolicyVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/AutoScalePolicyVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/AutoScalePolicyVO.java
diff --git a/engine/schema/src/com/cloud/network/as/AutoScaleVmGroupPolicyMapVO.java b/engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmGroupPolicyMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/AutoScaleVmGroupPolicyMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmGroupPolicyMapVO.java
diff --git a/engine/schema/src/com/cloud/network/as/AutoScaleVmGroupVO.java b/engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmGroupVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/AutoScaleVmGroupVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmGroupVO.java
diff --git a/engine/schema/src/com/cloud/network/as/AutoScaleVmGroupVmMapVO.java b/engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmGroupVmMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/AutoScaleVmGroupVmMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmGroupVmMapVO.java
diff --git a/engine/schema/src/com/cloud/network/as/AutoScaleVmProfileVO.java b/engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmProfileVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/AutoScaleVmProfileVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/AutoScaleVmProfileVO.java
diff --git a/engine/schema/src/com/cloud/network/as/ConditionVO.java b/engine/schema/src/main/java/com/cloud/network/as/ConditionVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/ConditionVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/ConditionVO.java
diff --git a/engine/schema/src/com/cloud/network/as/CounterVO.java b/engine/schema/src/main/java/com/cloud/network/as/CounterVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/CounterVO.java
rename to engine/schema/src/main/java/com/cloud/network/as/CounterVO.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyConditionMapDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyConditionMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyConditionMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyConditionMapDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyConditionMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyConditionMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyConditionMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyConditionMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmProfileDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmProfileDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/ConditionDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/ConditionDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/ConditionDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/ConditionDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/ConditionDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/ConditionDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/ConditionDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/ConditionDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/CounterDao.java b/engine/schema/src/main/java/com/cloud/network/as/dao/CounterDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/CounterDao.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/CounterDao.java
diff --git a/engine/schema/src/com/cloud/network/as/dao/CounterDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/as/dao/CounterDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/AccountGuestVlanMapDao.java b/engine/schema/src/main/java/com/cloud/network/dao/AccountGuestVlanMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/AccountGuestVlanMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/AccountGuestVlanMapDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/AccountGuestVlanMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/AccountGuestVlanMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/AccountGuestVlanMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/AccountGuestVlanMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/AccountGuestVlanMapVO.java b/engine/schema/src/main/java/com/cloud/network/dao/AccountGuestVlanMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/AccountGuestVlanMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/AccountGuestVlanMapVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalFirewallDeviceDao.java b/engine/schema/src/main/java/com/cloud/network/dao/ExternalFirewallDeviceDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/ExternalFirewallDeviceDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/ExternalFirewallDeviceDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalFirewallDeviceDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/ExternalFirewallDeviceDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/ExternalFirewallDeviceDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/ExternalFirewallDeviceDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalFirewallDeviceVO.java b/engine/schema/src/main/java/com/cloud/network/dao/ExternalFirewallDeviceVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/ExternalFirewallDeviceVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/ExternalFirewallDeviceVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java b/engine/schema/src/main/java/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java b/engine/schema/src/main/java/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesCidrsDao.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesCidrsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesCidrsDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesCidrsDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesCidrsDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesCidrsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesCidrsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesCidrsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesCidrsVO.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesCidrsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesCidrsVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesCidrsVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesDao.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesDcidrsDao.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDcidrsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesDcidrsDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDcidrsDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesDcidrsDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDcidrsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesDcidrsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDcidrsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/FirewallRulesDestCidrsVO.java b/engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDestCidrsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/FirewallRulesDestCidrsVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDestCidrsVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/IPAddressDao.java b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/IPAddressDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/IPAddressDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/IPAddressVO.java b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/IPAddressVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/IPAddressVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/InlineLoadBalancerNicMapDao.java b/engine/schema/src/main/java/com/cloud/network/dao/InlineLoadBalancerNicMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/InlineLoadBalancerNicMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/InlineLoadBalancerNicMapDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/InlineLoadBalancerNicMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/InlineLoadBalancerNicMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/InlineLoadBalancerNicMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/InlineLoadBalancerNicMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/InlineLoadBalancerNicMapVO.java b/engine/schema/src/main/java/com/cloud/network/dao/InlineLoadBalancerNicMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/InlineLoadBalancerNicMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/InlineLoadBalancerNicMapVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/LBHealthCheckPolicyDao.java b/engine/schema/src/main/java/com/cloud/network/dao/LBHealthCheckPolicyDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LBHealthCheckPolicyDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LBHealthCheckPolicyDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/LBHealthCheckPolicyDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/LBHealthCheckPolicyDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LBHealthCheckPolicyDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LBHealthCheckPolicyDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/LBStickinessPolicyDao.java b/engine/schema/src/main/java/com/cloud/network/dao/LBStickinessPolicyDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LBStickinessPolicyDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LBStickinessPolicyDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/LBStickinessPolicyDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/LBStickinessPolicyDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LBStickinessPolicyDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LBStickinessPolicyDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/LBStickinessPolicyVO.java b/engine/schema/src/main/java/com/cloud/network/dao/LBStickinessPolicyVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LBStickinessPolicyVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LBStickinessPolicyVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerCertMapDao.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerCertMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerCertMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerCertMapDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerCertMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerCertMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerCertMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerCertMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerCertMapVO.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerCertMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerCertMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerCertMapVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerDao.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerVMMapDao.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVMMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerVMMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVMMapDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerVMMapVO.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVMMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerVMMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVMMapVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/LoadBalancerVO.java b/engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/LoadBalancerVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/LoadBalancerVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/MonitoringServiceDao.java b/engine/schema/src/main/java/com/cloud/network/dao/MonitoringServiceDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/MonitoringServiceDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/MonitoringServiceDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/MonitoringServiceDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/MonitoringServiceDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/MonitoringServiceDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/MonitoringServiceDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/MonitoringServiceVO.java b/engine/schema/src/main/java/com/cloud/network/dao/MonitoringServiceVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/MonitoringServiceVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/MonitoringServiceVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkAccountDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkAccountDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkAccountDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkAccountDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkAccountDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkAccountDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkAccountDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkAccountDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkAccountVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkAccountVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkAccountVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkAccountVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailsDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDomainDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDomainDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDomainDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDomainDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDomainDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDomainDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDomainDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDomainDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDomainVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDomainVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkDomainVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkDomainVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkExternalFirewallDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalFirewallDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkExternalFirewallDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalFirewallDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkExternalFirewallDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalFirewallDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkExternalFirewallDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalFirewallDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkExternalFirewallVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalFirewallVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkExternalFirewallVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalFirewallVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkExternalLoadBalancerDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalLoadBalancerDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkExternalLoadBalancerDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalLoadBalancerDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkExternalLoadBalancerDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalLoadBalancerDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkExternalLoadBalancerDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalLoadBalancerDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkExternalLoadBalancerVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalLoadBalancerVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkExternalLoadBalancerVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkExternalLoadBalancerVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkOpDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkOpDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkOpDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkOpDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkOpDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkOpDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkOpDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkOpDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkOpVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkOpVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkOpVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkOpVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkRuleConfigDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkRuleConfigDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkRuleConfigDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkRuleConfigDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkRuleConfigDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkRuleConfigDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkRuleConfigDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkRuleConfigDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkRuleConfigVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkRuleConfigVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkRuleConfigVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkRuleConfigVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkServiceMapDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkServiceMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkServiceMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkServiceMapDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkServiceMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkServiceMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkServiceMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkServiceMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkServiceMapVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkServiceMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkServiceMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkServiceMapVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkVO.java b/engine/schema/src/main/java/com/cloud/network/dao/NetworkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/NetworkVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/NetworkVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/OpRouterMonitorServiceDao.java b/engine/schema/src/main/java/com/cloud/network/dao/OpRouterMonitorServiceDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/OpRouterMonitorServiceDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/OpRouterMonitorServiceDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/OpRouterMonitorServiceDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/OpRouterMonitorServiceDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/OpRouterMonitorServiceDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/OpRouterMonitorServiceDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/OpRouterMonitorServiceVO.java b/engine/schema/src/main/java/com/cloud/network/dao/OpRouterMonitorServiceVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/OpRouterMonitorServiceVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/OpRouterMonitorServiceVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/OvsProviderDao.java b/engine/schema/src/main/java/com/cloud/network/dao/OvsProviderDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/OvsProviderDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/OvsProviderDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/OvsProviderDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/OvsProviderDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/OvsProviderDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/OvsProviderDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkDao.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkIsolationMethodDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkIsolationMethodDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkIsolationMethodDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkIsolationMethodDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkIsolationMethodVO.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkIsolationMethodVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkIsolationMethodVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkIsolationMethodVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkServiceProviderDao.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkServiceProviderDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkServiceProviderDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkServiceProviderDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkServiceProviderDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkServiceProviderDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkServiceProviderDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkServiceProviderDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkServiceProviderVO.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkServiceProviderVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkServiceProviderVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkServiceProviderVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTagDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTagDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkTagDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTagDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTagVO.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTagVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkTagVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTagVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDao.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTrafficTypeDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTrafficTypeDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkVO.java b/engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PhysicalNetworkVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PhysicalNetworkVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/PortProfileDao.java b/engine/schema/src/main/java/com/cloud/network/dao/PortProfileDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PortProfileDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PortProfileDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/PortProfileDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/PortProfileDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PortProfileDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PortProfileDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/PortProfileVO.java b/engine/schema/src/main/java/com/cloud/network/dao/PortProfileVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/PortProfileVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/PortProfileVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/RemoteAccessVpnDao.java b/engine/schema/src/main/java/com/cloud/network/dao/RemoteAccessVpnDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/RemoteAccessVpnDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/RemoteAccessVpnDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/RemoteAccessVpnDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/RemoteAccessVpnDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/RemoteAccessVpnDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/RemoteAccessVpnDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/RemoteAccessVpnVO.java b/engine/schema/src/main/java/com/cloud/network/dao/RemoteAccessVpnVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/RemoteAccessVpnVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/RemoteAccessVpnVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/RouterNetworkDao.java b/engine/schema/src/main/java/com/cloud/network/dao/RouterNetworkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/RouterNetworkDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/RouterNetworkDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/RouterNetworkDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/RouterNetworkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/RouterNetworkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/RouterNetworkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/RouterNetworkVO.java b/engine/schema/src/main/java/com/cloud/network/dao/RouterNetworkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/RouterNetworkVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/RouterNetworkVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayVO.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteCustomerGatewayVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteCustomerGatewayVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteVpnConnectionDao.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnConnectionDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteVpnConnectionDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnConnectionDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteVpnConnectionVO.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnConnectionVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteVpnConnectionVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnConnectionVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteVpnGatewayVO.java b/engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnGatewayVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/Site2SiteVpnGatewayVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/Site2SiteVpnGatewayVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/SslCertDao.java b/engine/schema/src/main/java/com/cloud/network/dao/SslCertDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/SslCertDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/SslCertDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/SslCertDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/SslCertDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/SslCertDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/SslCertDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/SslCertVO.java b/engine/schema/src/main/java/com/cloud/network/dao/SslCertVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/SslCertVO.java
rename to engine/schema/src/main/java/com/cloud/network/dao/SslCertVO.java
diff --git a/engine/schema/src/com/cloud/network/dao/UserIpv6AddressDao.java b/engine/schema/src/main/java/com/cloud/network/dao/UserIpv6AddressDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/UserIpv6AddressDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/UserIpv6AddressDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/UserIpv6AddressDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/UserIpv6AddressDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/VirtualRouterProviderDao.java b/engine/schema/src/main/java/com/cloud/network/dao/VirtualRouterProviderDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/VirtualRouterProviderDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/VirtualRouterProviderDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/VirtualRouterProviderDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/dao/VpnUserDao.java b/engine/schema/src/main/java/com/cloud/network/dao/VpnUserDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/VpnUserDao.java
rename to engine/schema/src/main/java/com/cloud/network/dao/VpnUserDao.java
diff --git a/engine/schema/src/com/cloud/network/dao/VpnUserDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/VpnUserDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/dao/VpnUserDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/dao/VpnUserDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/element/OvsProviderVO.java b/engine/schema/src/main/java/com/cloud/network/element/OvsProviderVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/element/OvsProviderVO.java
rename to engine/schema/src/main/java/com/cloud/network/element/OvsProviderVO.java
diff --git a/engine/schema/src/com/cloud/network/element/VirtualRouterProviderVO.java b/engine/schema/src/main/java/com/cloud/network/element/VirtualRouterProviderVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/element/VirtualRouterProviderVO.java
rename to engine/schema/src/main/java/com/cloud/network/element/VirtualRouterProviderVO.java
diff --git a/engine/schema/src/com/cloud/network/rules/FirewallRuleVO.java b/engine/schema/src/main/java/com/cloud/network/rules/FirewallRuleVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/rules/FirewallRuleVO.java
rename to engine/schema/src/main/java/com/cloud/network/rules/FirewallRuleVO.java
diff --git a/engine/schema/src/com/cloud/network/rules/PortForwardingRuleVO.java b/engine/schema/src/main/java/com/cloud/network/rules/PortForwardingRuleVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/rules/PortForwardingRuleVO.java
rename to engine/schema/src/main/java/com/cloud/network/rules/PortForwardingRuleVO.java
diff --git a/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java b/engine/schema/src/main/java/com/cloud/network/rules/dao/PortForwardingRulesDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java
rename to engine/schema/src/main/java/com/cloud/network/rules/dao/PortForwardingRulesDao.java
diff --git a/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/security/SecurityGroupRuleVO.java b/engine/schema/src/main/java/com/cloud/network/security/SecurityGroupRuleVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/SecurityGroupRuleVO.java
rename to engine/schema/src/main/java/com/cloud/network/security/SecurityGroupRuleVO.java
diff --git a/engine/schema/src/com/cloud/network/security/SecurityGroupRulesVO.java b/engine/schema/src/main/java/com/cloud/network/security/SecurityGroupRulesVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/SecurityGroupRulesVO.java
rename to engine/schema/src/main/java/com/cloud/network/security/SecurityGroupRulesVO.java
diff --git a/engine/schema/src/com/cloud/network/security/SecurityGroupVMMapVO.java b/engine/schema/src/main/java/com/cloud/network/security/SecurityGroupVMMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/SecurityGroupVMMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/security/SecurityGroupVMMapVO.java
diff --git a/engine/schema/src/com/cloud/network/security/SecurityGroupVO.java b/engine/schema/src/main/java/com/cloud/network/security/SecurityGroupVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/SecurityGroupVO.java
rename to engine/schema/src/main/java/com/cloud/network/security/SecurityGroupVO.java
diff --git a/engine/schema/src/com/cloud/network/security/SecurityGroupWork.java b/engine/schema/src/main/java/com/cloud/network/security/SecurityGroupWork.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/SecurityGroupWork.java
rename to engine/schema/src/main/java/com/cloud/network/security/SecurityGroupWork.java
diff --git a/engine/schema/src/com/cloud/network/security/SecurityGroupWorkVO.java b/engine/schema/src/main/java/com/cloud/network/security/SecurityGroupWorkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/SecurityGroupWorkVO.java
rename to engine/schema/src/main/java/com/cloud/network/security/SecurityGroupWorkVO.java
diff --git a/engine/schema/src/com/cloud/network/security/VmRulesetLogVO.java b/engine/schema/src/main/java/com/cloud/network/security/VmRulesetLogVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/VmRulesetLogVO.java
rename to engine/schema/src/main/java/com/cloud/network/security/VmRulesetLogVO.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupDao.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupDao.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupDao.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupRuleDao.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRuleDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupRuleDao.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRuleDao.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupRuleDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRuleDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupRuleDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRuleDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupRulesDao.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRulesDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupRulesDao.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRulesDao.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupRulesDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupVMMapDao.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupVMMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupVMMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupVMMapDao.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupWorkDao.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupWorkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupWorkDao.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupWorkDao.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDao.java b/engine/schema/src/main/java/com/cloud/network/security/dao/VmRulesetLogDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDao.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/VmRulesetLogDao.java
diff --git a/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/NetworkACLItemCidrsDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemCidrsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/NetworkACLItemCidrsDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemCidrsDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/NetworkACLItemCidrsVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemCidrsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/NetworkACLItemCidrsVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemCidrsVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/NetworkACLItemDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemDao.java
similarity index 78%
rename from engine/schema/src/com/cloud/network/vpc/NetworkACLItemDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemDao.java
index 21794cb..5903172 100644
--- a/engine/schema/src/com/cloud/network/vpc/NetworkACLItemDao.java
+++ b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemDao.java
@@ -20,7 +20,7 @@
 
 import com.cloud.utils.db.GenericDao;
 
-/*
+/**
  * Data Access Object for network_acl_item table
  */
 public interface NetworkACLItemDao extends GenericDao<NetworkACLItemVO, Long> {
@@ -36,4 +36,12 @@
     NetworkACLItemVO findByAclAndNumber(long aclId, int number);
 
     void loadCidrs(NetworkACLItemVO item);
+
+    /**
+     * Updated the network ACL item 'number' field.
+     *
+     * @param networkItemId is the ID of the network ACL rule that will have its 'number' field updated.
+     * @param newNumberValue is the new value that will be assigned to the 'number' field.
+     */
+    void updateNumberFieldNetworkItem(long networkItemId, int newNumberValue);
 }
diff --git a/engine/schema/src/com/cloud/network/vpc/NetworkACLItemVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemVO.java
similarity index 87%
rename from engine/schema/src/com/cloud/network/vpc/NetworkACLItemVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemVO.java
index 6eb9cb0..f28b312 100644
--- a/engine/schema/src/com/cloud/network/vpc/NetworkACLItemVO.java
+++ b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLItemVO.java
@@ -33,15 +33,13 @@
 import javax.persistence.Transient;
 
 import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils;
 
 @Entity
 @Table(name = "network_acl_item")
-public class NetworkACLItemVO implements NetworkACLItem {
+public class NetworkACLItemVO implements NetworkACLItem, Cloneable {
 
-    /**
-     *
-     */
     private static final long serialVersionUID = 2790623532888742060L;
 
     @Id
@@ -97,12 +95,15 @@
     @Column(name = "display", updatable = true, nullable = false)
     protected boolean display = true;
 
+    @Column(name = "reason", length = 2500)
+    private String reason;
+
     public NetworkACLItemVO() {
         uuid = UUID.randomUUID().toString();
     }
 
-    public NetworkACLItemVO(Integer portStart, Integer portEnd, String protocol, long aclId, List<String> sourceCidrs, Integer icmpCode, Integer icmpType,
-            TrafficType trafficType, Action action, int number) {
+    public NetworkACLItemVO(Integer portStart, Integer portEnd, String protocol, long aclId, List<String> sourceCidrs, Integer icmpCode, Integer icmpType, TrafficType trafficType, Action action,
+            int number, String reason) {
         sourcePortStart = portStart;
         sourcePortEnd = portEnd;
         this.protocol = protocol;
@@ -115,6 +116,7 @@
         this.trafficType = trafficType;
         this.action = action;
         this.number = number;
+        this.reason = reason;
     }
 
     public void setSourceCidrList(List<String> sourceCidrs) {
@@ -225,8 +227,8 @@
 
     public void setSourceCidrs(String sourceCidrs) {
         List<String> srcCidrs = new LinkedList<String>();
-        StringTokenizer st = new StringTokenizer(sourceCidrs,",;");
-        while(st.hasMoreTokens()) {
+        StringTokenizer st = new StringTokenizer(sourceCidrs, ",;");
+        while (st.hasMoreTokens()) {
             srcCidrs.add(st.nextToken());
         }
         this.sourceCidrs = srcCidrs;
@@ -252,4 +254,22 @@
     public boolean isDisplay() {
         return display;
     }
+
+    @Override
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    @Override
+    protected NetworkACLItemVO clone() {
+        try {
+            return (NetworkACLItemVO)super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new CloudRuntimeException(e);
+        }
+    }
 }
diff --git a/engine/schema/src/com/cloud/network/vpc/NetworkACLVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java
similarity index 93%
rename from engine/schema/src/com/cloud/network/vpc/NetworkACLVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java
index fb6a239..4eaa2b5 100644
--- a/engine/schema/src/com/cloud/network/vpc/NetworkACLVO.java
+++ b/engine/schema/src/main/java/com/cloud/network/vpc/NetworkACLVO.java
@@ -101,4 +101,12 @@
     public boolean isDisplay() {
         return display;
     }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
 }
diff --git a/engine/schema/src/com/cloud/network/vpc/PrivateIpVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/PrivateIpVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/PrivateIpVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/PrivateIpVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/StaticRouteVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/StaticRouteVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/StaticRouteVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/StaticRouteVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/VpcGatewayVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/VpcGatewayVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/VpcGatewayVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/VpcGatewayVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/VpcOfferingServiceMapVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/VpcOfferingServiceMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/VpcOfferingServiceMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/VpcOfferingServiceMapVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/VpcOfferingVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/VpcOfferingVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/VpcServiceMapVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/VpcServiceMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/VpcServiceMapVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/VpcServiceMapVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/VpcVO.java b/engine/schema/src/main/java/com/cloud/network/vpc/VpcVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/VpcVO.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/VpcVO.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/NetworkACLDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/NetworkACLDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/NetworkACLDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/NetworkACLDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/NetworkACLItemCidrsDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLItemCidrsDaoImpl.java
similarity index 99%
rename from engine/schema/src/com/cloud/network/vpc/dao/NetworkACLItemCidrsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLItemCidrsDaoImpl.java
index 395c9b2..4501f14 100644
--- a/engine/schema/src/com/cloud/network/vpc/dao/NetworkACLItemCidrsDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLItemCidrsDaoImpl.java
@@ -21,7 +21,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/NetworkACLItemDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLItemDaoImpl.java
similarity index 87%
rename from engine/schema/src/com/cloud/network/vpc/dao/NetworkACLItemDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLItemDaoImpl.java
index eb957a9..b88cc0d 100644
--- a/engine/schema/src/com/cloud/network/vpc/dao/NetworkACLItemDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/network/vpc/dao/NetworkACLItemDaoImpl.java
@@ -16,12 +16,12 @@
 // under the License.
 package com.cloud.network.vpc.dao;
 
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 import java.util.List;
 
 import javax.inject.Inject;
 
-import com.google.common.collect.Lists;
-import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import com.cloud.network.vpc.NetworkACLItem.State;
@@ -35,11 +35,12 @@
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.google.common.collect.Lists;
 
-@Component
 @DB()
+@Component
 public class NetworkACLItemDaoImpl extends GenericDaoBase<NetworkACLItemVO, Long> implements NetworkACLItemDao {
-    private static final Logger s_logger = Logger.getLogger(NetworkACLItemDaoImpl.class);
 
     protected final SearchBuilder<NetworkACLItemVO> AllFieldsSearch;
     protected final SearchBuilder<NetworkACLItemVO> NotRevokedSearch;
@@ -115,12 +116,14 @@
 
     @Override
     public List<NetworkACLItemVO> listByACL(Long aclId) {
-        if (aclId == null) return Lists.newArrayList();
+        if (aclId == null) {
+            return Lists.newArrayList();
+        }
 
         SearchCriteria<NetworkACLItemVO> sc = AllFieldsSearch.create();
         sc.setParameters("aclId", aclId);
         List<NetworkACLItemVO> list = listBy(sc);
-        for(NetworkACLItemVO item :list) {
+        for (NetworkACLItemVO item : list) {
             loadCidrs(item);
         }
         return list;
@@ -140,7 +143,7 @@
         sc.setParameters("aclId", aclId);
         sc.setParameters("number", number);
         NetworkACLItemVO vo = findOneBy(sc);
-        if(vo != null) {
+        if (vo != null) {
             loadCidrs(vo);
         }
         return vo;
@@ -172,4 +175,19 @@
         List<String> cidrs = _networkACLItemCidrsDao.getCidrs(item.getId());
         item.setSourceCidrList(cidrs);
     }
-}
+
+    private String sqlUpdateNumberFieldNetworkItem = "UPDATE network_acl_item SET number = ? where id =?";
+
+    @Override
+    public void updateNumberFieldNetworkItem(long networkItemId, int newNumberValue) {
+        try (TransactionLegacy txn = TransactionLegacy.currentTxn();
+                PreparedStatement pstmt = txn.prepareAutoCloseStatement(sqlUpdateNumberFieldNetworkItem)) {
+            pstmt.setLong(1, newNumberValue);
+            pstmt.setLong(2, networkItemId);
+            pstmt.executeUpdate();
+            txn.commit();
+        } catch (SQLException e) {
+            throw new CloudRuntimeException(e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/PrivateIpDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/PrivateIpDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/PrivateIpDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/PrivateIpDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/PrivateIpDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/PrivateIpDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/PrivateIpDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/PrivateIpDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/StaticRouteDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/StaticRouteDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingServiceMapDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingServiceMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingServiceMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingServiceMapDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingServiceMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingServiceMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcOfferingServiceMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcOfferingServiceMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcServiceMapDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcServiceMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcServiceMapDao.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcServiceMapDao.java
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcServiceMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcServiceMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/network/vpc/dao/VpcServiceMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcServiceMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/offerings/NetworkOfferingDetailsVO.java b/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/NetworkOfferingDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingDetailsVO.java
diff --git a/engine/schema/src/com/cloud/offerings/NetworkOfferingServiceMapVO.java b/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingServiceMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/NetworkOfferingServiceMapVO.java
rename to engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingServiceMapVO.java
diff --git a/engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java b/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java
rename to engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingVO.java
diff --git a/engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDao.java b/engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDao.java
rename to engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDao.java
diff --git a/engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java
diff --git a/engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDetailsDao.java b/engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDetailsDao.java
diff --git a/engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/dao/NetworkOfferingDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDao.java b/engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingServiceMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDao.java
rename to engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingServiceMapDao.java
diff --git a/engine/schema/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/projects/ProjectAccountVO.java b/engine/schema/src/main/java/com/cloud/projects/ProjectAccountVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/ProjectAccountVO.java
rename to engine/schema/src/main/java/com/cloud/projects/ProjectAccountVO.java
diff --git a/engine/schema/src/com/cloud/projects/ProjectInvitationVO.java b/engine/schema/src/main/java/com/cloud/projects/ProjectInvitationVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/ProjectInvitationVO.java
rename to engine/schema/src/main/java/com/cloud/projects/ProjectInvitationVO.java
diff --git a/engine/schema/src/com/cloud/projects/ProjectVO.java b/engine/schema/src/main/java/com/cloud/projects/ProjectVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/ProjectVO.java
rename to engine/schema/src/main/java/com/cloud/projects/ProjectVO.java
diff --git a/engine/schema/src/com/cloud/projects/dao/ProjectAccountDao.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/dao/ProjectAccountDao.java
rename to engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDao.java
diff --git a/engine/schema/src/com/cloud/projects/dao/ProjectAccountDaoImpl.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/dao/ProjectAccountDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java
diff --git a/engine/schema/src/com/cloud/projects/dao/ProjectDao.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/dao/ProjectDao.java
rename to engine/schema/src/main/java/com/cloud/projects/dao/ProjectDao.java
diff --git a/engine/schema/src/com/cloud/projects/dao/ProjectDaoImpl.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/dao/ProjectDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/projects/dao/ProjectDaoImpl.java
diff --git a/engine/schema/src/com/cloud/projects/dao/ProjectInvitationDao.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectInvitationDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/dao/ProjectInvitationDao.java
rename to engine/schema/src/main/java/com/cloud/projects/dao/ProjectInvitationDao.java
diff --git a/engine/schema/src/com/cloud/projects/dao/ProjectInvitationDaoImpl.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectInvitationDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/projects/dao/ProjectInvitationDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/projects/dao/ProjectInvitationDaoImpl.java
diff --git a/engine/schema/src/com/cloud/secstorage/CommandExecLogDao.java b/engine/schema/src/main/java/com/cloud/secstorage/CommandExecLogDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/secstorage/CommandExecLogDao.java
rename to engine/schema/src/main/java/com/cloud/secstorage/CommandExecLogDao.java
diff --git a/engine/schema/src/com/cloud/secstorage/CommandExecLogDaoImpl.java b/engine/schema/src/main/java/com/cloud/secstorage/CommandExecLogDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/secstorage/CommandExecLogDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/secstorage/CommandExecLogDaoImpl.java
diff --git a/engine/schema/src/com/cloud/secstorage/CommandExecLogVO.java b/engine/schema/src/main/java/com/cloud/secstorage/CommandExecLogVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/secstorage/CommandExecLogVO.java
rename to engine/schema/src/main/java/com/cloud/secstorage/CommandExecLogVO.java
diff --git a/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/service/ServiceOfferingDetailsVO.java
diff --git a/engine/schema/src/com/cloud/service/ServiceOfferingVO.java b/engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/service/ServiceOfferingVO.java
rename to engine/schema/src/main/java/com/cloud/service/ServiceOfferingVO.java
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDao.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/service/dao/ServiceOfferingDao.java
rename to engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDao.java
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/DiskOfferingVO.java b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
similarity index 93%
rename from engine/schema/src/com/cloud/storage/DiskOfferingVO.java
rename to engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
index 5de7f98..6fe6dc1 100644
--- a/engine/schema/src/com/cloud/storage/DiskOfferingVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
@@ -121,10 +121,10 @@
     @Enumerated(value = EnumType.STRING)
     private DiskCacheMode cacheMode;
 
-    @Column(name="provisioning_type")
+    @Column(name = "provisioning_type")
     Storage.ProvisioningType provisioningType;
 
-    @Column(name="display_offering")
+    @Column(name = "display_offering")
     boolean displayOffering = true;
 
     @Enumerated(EnumType.STRING)
@@ -138,8 +138,8 @@
         uuid = UUID.randomUUID().toString();
     }
 
-    public DiskOfferingVO(Long domainId, String name, String displayText, Storage.ProvisioningType provisioningType, long diskSize, String tags, boolean isCustomized,
-            Boolean isCustomizedIops, Long minIops, Long maxIops, DiskCacheMode cacheMode) {
+    public DiskOfferingVO(Long domainId, String name, String displayText, Storage.ProvisioningType provisioningType, long diskSize, String tags, boolean isCustomized, Boolean isCustomizedIops,
+            Long minIops, Long maxIops, DiskCacheMode cacheMode) {
         this.domainId = domainId;
         this.name = name;
         this.displayText = displayText;
@@ -157,8 +157,8 @@
         this.cacheMode = cacheMode;
     }
 
-    public DiskOfferingVO(Long domainId, String name, String displayText, Storage.ProvisioningType provisioningType, long diskSize, String tags, boolean isCustomized,
-            Boolean isCustomizedIops, Long minIops, Long maxIops) {
+    public DiskOfferingVO(Long domainId, String name, String displayText, Storage.ProvisioningType provisioningType, long diskSize, String tags, boolean isCustomized, Boolean isCustomizedIops,
+            Long minIops, Long maxIops) {
         this.domainId = domainId;
         this.name = name;
         this.displayText = displayText;
@@ -176,8 +176,8 @@
         state = State.Active;
     }
 
-    public DiskOfferingVO(String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable,
-            boolean useLocalStorage, boolean systemUse, boolean customized) {
+    public DiskOfferingVO(String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable, boolean useLocalStorage, boolean systemUse,
+            boolean customized) {
         domainId = null;
         type = Type.Service;
         this.name = name;
@@ -194,8 +194,8 @@
 
     // domain specific offerings constructor (null domainId implies public
     // offering)
-    public DiskOfferingVO(String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable,
-            boolean useLocalStorage, boolean systemUse, boolean customized, Long domainId) {
+    public DiskOfferingVO(String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable, boolean useLocalStorage, boolean systemUse,
+            boolean customized, Long domainId) {
         type = Type.Service;
         this.name = name;
         this.displayText = displayText;
@@ -210,8 +210,8 @@
         state = State.Active;
     }
 
-    public DiskOfferingVO(long id, String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable,
-            boolean useLocalStorage, boolean systemUse, boolean customized, boolean customizedIops, Long domainId, Long minIops, Long maxIops) {
+    public DiskOfferingVO(long id, String name, String displayText, Storage.ProvisioningType provisioningType, boolean mirrored, String tags, boolean recreatable, boolean useLocalStorage,
+            boolean systemUse, boolean customized, boolean customizedIops, Long domainId, Long minIops, Long maxIops) {
         this.id = id;
         type = Type.Service;
         this.name = name;
@@ -308,6 +308,7 @@
         return domainId;
     }
 
+    @Override
     public Type getType() {
         return type;
     }
@@ -349,7 +350,7 @@
     }
 
     @Override
-    public Storage.ProvisioningType getProvisioningType(){
+    public Storage.ProvisioningType getProvisioningType() {
         return provisioningType;
     }
 
@@ -514,4 +515,8 @@
     public Integer getHypervisorSnapshotReserve() {
         return hypervisorSnapshotReserve;
     }
+
+    public boolean isShared() {
+        return !useLocalStorage;
+    }
 }
diff --git a/engine/schema/src/com/cloud/storage/GuestOSCategoryVO.java b/engine/schema/src/main/java/com/cloud/storage/GuestOSCategoryVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/GuestOSCategoryVO.java
rename to engine/schema/src/main/java/com/cloud/storage/GuestOSCategoryVO.java
diff --git a/engine/schema/src/com/cloud/storage/GuestOSHypervisorVO.java b/engine/schema/src/main/java/com/cloud/storage/GuestOSHypervisorVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/GuestOSHypervisorVO.java
rename to engine/schema/src/main/java/com/cloud/storage/GuestOSHypervisorVO.java
diff --git a/engine/schema/src/com/cloud/storage/GuestOSVO.java b/engine/schema/src/main/java/com/cloud/storage/GuestOSVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/GuestOSVO.java
rename to engine/schema/src/main/java/com/cloud/storage/GuestOSVO.java
diff --git a/engine/schema/src/com/cloud/storage/LaunchPermissionVO.java b/engine/schema/src/main/java/com/cloud/storage/LaunchPermissionVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/LaunchPermissionVO.java
rename to engine/schema/src/main/java/com/cloud/storage/LaunchPermissionVO.java
diff --git a/engine/schema/src/com/cloud/storage/SnapshotPolicyVO.java b/engine/schema/src/main/java/com/cloud/storage/SnapshotPolicyVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/SnapshotPolicyVO.java
rename to engine/schema/src/main/java/com/cloud/storage/SnapshotPolicyVO.java
diff --git a/engine/schema/src/com/cloud/storage/SnapshotScheduleVO.java b/engine/schema/src/main/java/com/cloud/storage/SnapshotScheduleVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/SnapshotScheduleVO.java
rename to engine/schema/src/main/java/com/cloud/storage/SnapshotScheduleVO.java
diff --git a/engine/schema/src/com/cloud/storage/SnapshotVO.java b/engine/schema/src/main/java/com/cloud/storage/SnapshotVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/SnapshotVO.java
rename to engine/schema/src/main/java/com/cloud/storage/SnapshotVO.java
diff --git a/engine/schema/src/com/cloud/storage/StoragePoolHostAssoc.java b/engine/schema/src/main/java/com/cloud/storage/StoragePoolHostAssoc.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/StoragePoolHostAssoc.java
rename to engine/schema/src/main/java/com/cloud/storage/StoragePoolHostAssoc.java
diff --git a/engine/schema/src/com/cloud/storage/StoragePoolHostVO.java b/engine/schema/src/main/java/com/cloud/storage/StoragePoolHostVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/StoragePoolHostVO.java
rename to engine/schema/src/main/java/com/cloud/storage/StoragePoolHostVO.java
diff --git a/engine/schema/src/com/cloud/storage/StoragePoolTagVO.java b/engine/schema/src/main/java/com/cloud/storage/StoragePoolTagVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/StoragePoolTagVO.java
rename to engine/schema/src/main/java/com/cloud/storage/StoragePoolTagVO.java
diff --git a/engine/schema/src/com/cloud/storage/StoragePoolWorkVO.java b/engine/schema/src/main/java/com/cloud/storage/StoragePoolWorkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/StoragePoolWorkVO.java
rename to engine/schema/src/main/java/com/cloud/storage/StoragePoolWorkVO.java
diff --git a/engine/schema/src/com/cloud/storage/UploadVO.java b/engine/schema/src/main/java/com/cloud/storage/UploadVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/UploadVO.java
rename to engine/schema/src/main/java/com/cloud/storage/UploadVO.java
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java b/engine/schema/src/main/java/com/cloud/storage/VMTemplateDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VMTemplateDetailVO.java
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateHostVO.java b/engine/schema/src/main/java/com/cloud/storage/VMTemplateHostVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VMTemplateHostVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VMTemplateHostVO.java
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateStoragePoolVO.java b/engine/schema/src/main/java/com/cloud/storage/VMTemplateStoragePoolVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VMTemplateStoragePoolVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VMTemplateStoragePoolVO.java
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateVO.java b/engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VMTemplateVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateZoneVO.java b/engine/schema/src/main/java/com/cloud/storage/VMTemplateZoneVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VMTemplateZoneVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VMTemplateZoneVO.java
diff --git a/engine/schema/src/com/cloud/storage/VolumeDetailVO.java b/engine/schema/src/main/java/com/cloud/storage/VolumeDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VolumeDetailVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VolumeDetailVO.java
diff --git a/engine/schema/src/com/cloud/storage/VolumeHostVO.java b/engine/schema/src/main/java/com/cloud/storage/VolumeHostVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VolumeHostVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VolumeHostVO.java
diff --git a/engine/schema/src/com/cloud/storage/VolumeVO.java b/engine/schema/src/main/java/com/cloud/storage/VolumeVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/VolumeVO.java
rename to engine/schema/src/main/java/com/cloud/storage/VolumeVO.java
diff --git a/engine/schema/src/com/cloud/storage/dao/DiskOfferingDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/DiskOfferingDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/DiskOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/DiskOfferingDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSCategoryDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/GuestOSCategoryDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/GuestOSCategoryDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/GuestOSCategoryDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSCategoryDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/GuestOSCategoryDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/GuestOSCategoryDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/GuestOSCategoryDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/GuestOSDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/GuestOSDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/GuestOSDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/GuestOSDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/GuestOSDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/GuestOSDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/GuestOSHypervisorDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/GuestOSHypervisorDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/LaunchPermissionDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/LaunchPermissionDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/LaunchPermissionDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/LaunchPermissionDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/LaunchPermissionDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/LaunchPermissionDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/LaunchPermissionDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/LaunchPermissionDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDao.java
similarity index 84%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDao.java
index 1c11f9b..93ba720 100755
--- a/engine/schema/src/com/cloud/storage/dao/SnapshotDao.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDao.java
@@ -31,26 +31,14 @@
 
     List<SnapshotVO> listByVolumeId(Filter filter, long volumeId);
 
-    SnapshotVO findNextSnapshot(long parentSnapId);
-
     long getLastSnapshot(long volumeId, DataStoreRole role);
 
-    List<SnapshotVO> listByVolumeIdType(long volumeId, Type type);
-
     List<SnapshotVO> listByVolumeIdTypeNotDestroyed(long volumeId, Type type);
 
     List<SnapshotVO> listByVolumeIdIncludingRemoved(long volumeId);
 
-    List<SnapshotVO> listByBackupUuid(long volumeId, String backupUuid);
-
-    long updateSnapshotVersion(long volumeId, String from, String to);
-
     List<SnapshotVO> listByVolumeIdVersion(long volumeId, String version);
 
-    Long getSecHostId(long volumeId);
-
-    long updateSnapshotSecHost(long dcId, long secHostId);
-
     public Long countSnapshotsForAccount(long accountId);
 
     List<SnapshotVO> listByInstanceId(long instanceId, Snapshot.State... status);
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDaoImpl.java
similarity index 76%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDaoImpl.java
index 560edc9..5a3998a 100755
--- a/engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDaoImpl.java
@@ -55,16 +55,10 @@
     // TODO: we should remove these direct sqls
     private static final String GET_LAST_SNAPSHOT =
         "SELECT snapshots.id FROM snapshot_store_ref, snapshots where snapshots.id = snapshot_store_ref.snapshot_id AND snapshosts.volume_id = ? AND snapshot_store_ref.role = ? ORDER BY created DESC";
-    private static final String UPDATE_SNAPSHOT_VERSION = "UPDATE snapshots SET version = ? WHERE volume_id = ? AND version = ?";
-    private static final String GET_SECHOST_ID =
-        "SELECT store_id FROM snapshots, snapshot_store_ref where snapshots.id = snapshot_store_ref.snapshot_id AND volume_id = ? AND backup_snap_id IS NOT NULL AND sechost_id IS NOT NULL LIMIT 1";
-    private static final String UPDATE_SECHOST_ID = "UPDATE snapshots SET sechost_id = ? WHERE data_center_id = ?";
 
     private SearchBuilder<SnapshotVO> VolumeIdSearch;
     private SearchBuilder<SnapshotVO> VolumeIdTypeSearch;
     private SearchBuilder<SnapshotVO> VolumeIdTypeNotDestroyedSearch;
-    private SearchBuilder<SnapshotVO> ParentIdSearch;
-    private SearchBuilder<SnapshotVO> backupUuidSearch;
     private SearchBuilder<SnapshotVO> VolumeIdVersionSearch;
     private SearchBuilder<SnapshotVO> AccountIdSearch;
     private SearchBuilder<SnapshotVO> InstanceIdSearch;
@@ -79,25 +73,6 @@
     protected VolumeDao _volumeDao;
 
     @Override
-    public SnapshotVO findNextSnapshot(long snapshotId) {
-        SearchCriteria<SnapshotVO> sc = ParentIdSearch.create();
-        sc.setParameters("prevSnapshotId", snapshotId);
-        return findOneIncludingRemovedBy(sc);
-    }
-
-    @Override
-    public List<SnapshotVO> listByBackupUuid(long volumeId, String backupUuid) {
-        SearchCriteria<SnapshotVO> sc = backupUuidSearch.create();
-        sc.setParameters("backupUuid", backupUuid);
-        return listBy(sc, null);
-    }
-
-    @Override
-    public List<SnapshotVO> listByVolumeIdType(long volumeId, Type type) {
-        return listByVolumeIdType(null, volumeId, type);
-    }
-
-    @Override
     public List<SnapshotVO> listByVolumeIdTypeNotDestroyed(long volumeId, Type type) {
         SearchCriteria<SnapshotVO> sc = VolumeIdTypeNotDestroyedSearch.create();
         sc.setParameters("volumeId", volumeId);
@@ -168,17 +143,7 @@
         VolumeIdVersionSearch.and("volumeId", VolumeIdVersionSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
         VolumeIdVersionSearch.and("version", VolumeIdVersionSearch.entity().getVersion(), SearchCriteria.Op.EQ);
         VolumeIdVersionSearch.done();
-        /*
-         * ParentIdSearch = createSearchBuilder();
-         * ParentIdSearch.and("prevSnapshotId",
-         * ParentIdSearch.entity().getPrevSnapshotId(), SearchCriteria.Op.EQ);
-         * ParentIdSearch.done();
-         *
-         * backupUuidSearch = createSearchBuilder();
-         * backupUuidSearch.and("backupUuid",
-         * backupUuidSearch.entity().getBackupSnapshotId(),
-         * SearchCriteria.Op.EQ); backupUuidSearch.done();
-         */
+
         AccountIdSearch = createSearchBuilder();
         AccountIdSearch.and("accountId", AccountIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
         AccountIdSearch.done();
@@ -215,26 +180,6 @@
     }
 
     @Override
-    public Long getSecHostId(long volumeId) {
-
-        TransactionLegacy txn = TransactionLegacy.currentTxn();
-        PreparedStatement pstmt = null;
-        String sql = GET_SECHOST_ID;
-        try {
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setLong(1, volumeId);
-            ResultSet rs = pstmt.executeQuery();
-            if (rs.next()) {
-                return rs.getLong(1);
-            }
-        } catch (Exception ex) {
-            s_logger.info("[ignored]"
-                    + "caught something while getting sec. host id: " + ex.getLocalizedMessage());
-        }
-        return null;
-    }
-
-    @Override
     public long getLastSnapshot(long volumeId, DataStoreRole role) {
         TransactionLegacy txn = TransactionLegacy.currentTxn();
         PreparedStatement pstmt = null;
@@ -254,41 +199,6 @@
     }
 
     @Override
-    public long updateSnapshotVersion(long volumeId, String from, String to) {
-        TransactionLegacy txn = TransactionLegacy.currentTxn();
-        PreparedStatement pstmt = null;
-        String sql = UPDATE_SNAPSHOT_VERSION;
-        try {
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setString(1, to);
-            pstmt.setLong(2, volumeId);
-            pstmt.setString(3, from);
-            pstmt.executeUpdate();
-            return 1;
-        } catch (Exception ex) {
-            s_logger.error("error getting last snapshot", ex);
-        }
-        return 0;
-    }
-
-    @Override
-    public long updateSnapshotSecHost(long dcId, long secHostId) {
-        TransactionLegacy txn = TransactionLegacy.currentTxn();
-        PreparedStatement pstmt = null;
-        String sql = UPDATE_SECHOST_ID;
-        try {
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setLong(1, secHostId);
-            pstmt.setLong(2, dcId);
-            pstmt.executeUpdate();
-            return 1;
-        } catch (Exception ex) {
-            s_logger.error("error set secondary storage host id", ex);
-        }
-        return 0;
-    }
-
-    @Override
     public Long countSnapshotsForAccount(long accountId) {
         SearchCriteria<Long> sc = CountSnapshotsByAccount.create();
         sc.setParameters("account", accountId);
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotDetailsDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDetailsDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotDetailsVO.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotDetailsVO.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotPolicyDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotPolicyDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotPolicyDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotPolicyDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotScheduleDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotScheduleDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotScheduleDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotScheduleDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotScheduleDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/SnapshotScheduleDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/SnapshotScheduleDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/SnapshotScheduleDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolHostDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolHostDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolHostDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolHostDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolHostDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolHostDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolHostDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolHostDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolTagsDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolTagsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolTagsDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolTagsDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolTagsDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolTagsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolTagsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolTagsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolWorkDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolWorkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolWorkDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolWorkDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolWorkDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolWorkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/StoragePoolWorkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolWorkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/UploadDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/UploadDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/UploadDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/UploadDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/UploadDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/UploadDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/UploadDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/UploadDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDetailsDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateHostDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateHostDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateHostDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateHostDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplatePoolDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplatePoolDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplatePoolDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplatePoolDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateZoneDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateZoneDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateZoneDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateZoneDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateZoneDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java
similarity index 94%
rename from engine/schema/src/com/cloud/storage/dao/VolumeDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java
index a05dc1f..51d46a0 100644
--- a/engine/schema/src/com/cloud/storage/dao/VolumeDao.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java
@@ -34,6 +34,8 @@
 
     List<VolumeVO> findByAccount(long accountId);
 
+    List<VolumeVO> findIncludingRemovedByAccount(long accountId);
+
     Pair<Long, Long> getCountAndTotalByPool(long poolId);
 
     Pair<Long, Long> getNonDestroyedCountAndTotalByPool(long poolId);
@@ -93,33 +95,30 @@
     /**
      * Gets the Total Primary Storage space allocated for an account
      *
-     * @param account
      * @param list of ids of virtual router VMs under this account
      * @return total Primary Storage space (in bytes) used
      */
     long primaryStorageUsedForAccount(long accountId, List<Long> virtualRouters);
 
     /**
-     * Gets the Total Secondary Storage space used by volumes allocated for an
-     * account
-     *
-     * @param account
+     * Gets the Total Secondary Storage space used by volumes allocated for an account
      * @return total Secondary Storage space (in bytes) used
      */
     long secondaryStorageUsedForAccount(long accountId);
 
     /***
-     *
-     * @param volumeId
      * @return the scope of the storage pool where the volume is present (ZONE/CLUSTER)
      */
     ScopeType getVolumeStoragePoolScope(long volumeId);
 
     /***
      * Updates the destVol uuid with srcVol uuid and sets the srcVol uuid as null.
-     * @param srcVolId
-     * @param destVolId
      * @return returns true if transaction is successful.
      */
     boolean updateUuid(long srcVolId, long destVolId);
+
+    /**
+     *  Updates the disk offering for the given volume.
+     */
+    void updateDiskOffering(long volumeId, long diskOfferingId);
 }
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java
similarity index 92%
rename from engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java
index f691e30..663a5f5 100644
--- a/engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java
@@ -72,16 +72,13 @@
     // need to account for zone-wide primary storage where storage_pool has
     // null-value pod and cluster, where hypervisor information is stored in
     // storage_pool
-    protected static final String SELECT_HYPERTYPE_FROM_CLUSTER_VOLUME =
-        "SELECT c.hypervisor_type from volumes v, storage_pool s, cluster c where v.pool_id = s.id and s.cluster_id = c.id and v.id = ?";
+    protected static final String SELECT_HYPERTYPE_FROM_CLUSTER_VOLUME = "SELECT c.hypervisor_type from volumes v, storage_pool s, cluster c where v.pool_id = s.id and s.cluster_id = c.id and v.id = ?";
     protected static final String SELECT_HYPERTYPE_FROM_ZONE_VOLUME = "SELECT s.hypervisor from volumes v, storage_pool s where v.pool_id = s.id and v.id = ?";
     protected static final String SELECT_POOLSCOPE = "SELECT s.scope from storage_pool s, volumes v where s.id = v.pool_id and v.id = ?";
 
-    private static final String ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT =
-        "SELECT pool.id, SUM(IF(vol.state='Ready' AND vol.account_id = ?, 1, 0)) FROM `cloud`.`storage_pool` pool LEFT JOIN `cloud`.`volumes` vol ON pool.id = vol.pool_id WHERE pool.data_center_id = ? "
+    private static final String ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT = "SELECT pool.id, SUM(IF(vol.state='Ready' AND vol.account_id = ?, 1, 0)) FROM `cloud`.`storage_pool` pool LEFT JOIN `cloud`.`volumes` vol ON pool.id = vol.pool_id WHERE pool.data_center_id = ? "
             + " AND pool.pod_id = ? AND pool.cluster_id = ? " + " GROUP BY pool.id ORDER BY 2 ASC ";
-    private static final String ORDER_ZONE_WIDE_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT =
-        "SELECT pool.id, SUM(IF(vol.state='Ready' AND vol.account_id = ?, 1, 0)) FROM `cloud`.`storage_pool` pool LEFT JOIN `cloud`.`volumes` vol ON pool.id = vol.pool_id WHERE pool.data_center_id = ? "
+    private static final String ORDER_ZONE_WIDE_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT = "SELECT pool.id, SUM(IF(vol.state='Ready' AND vol.account_id = ?, 1, 0)) FROM `cloud`.`storage_pool` pool LEFT JOIN `cloud`.`volumes` vol ON pool.id = vol.pool_id WHERE pool.data_center_id = ? "
             + " AND pool.scope = 'ZONE' AND pool.status='Up' " + " GROUP BY pool.id ORDER BY 2 ASC ";
 
     @Override
@@ -100,6 +97,13 @@
     }
 
     @Override
+    public List<VolumeVO> findIncludingRemovedByAccount(long accountId) {
+        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
+        sc.setParameters("accountId", accountId);
+        return listIncludingRemovedBy(sc);
+    }
+
+    @Override
     public List<VolumeVO> findByInstance(long id) {
         SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
         sc.setParameters("instanceId", id);
@@ -276,12 +280,13 @@
         try {
             ScopeType scope = getVolumeStoragePoolScope(volumeId);
             if (scope != null) {
-                if (scope == ScopeType.CLUSTER || scope == ScopeType.HOST)
+                if (scope == ScopeType.CLUSTER || scope == ScopeType.HOST) {
                     sql = SELECT_HYPERTYPE_FROM_CLUSTER_VOLUME;
-                else if (scope == ScopeType.ZONE)
+                } else if (scope == ScopeType.ZONE) {
                     sql = SELECT_HYPERTYPE_FROM_ZONE_VOLUME;
-                else
+                } else {
                     s_logger.error("Unhandled scope type '" + scope + "' when running getHypervisorType on volume id " + volumeId);
+                }
 
                 pstmt = txn.prepareAutoCloseStatement(sql);
                 pstmt.setLong(1, volumeId);
@@ -511,34 +516,12 @@
             VolumeVO dbVol = findByIdIncludingRemoved(vo.getId());
             if (dbVol != null) {
                 StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
-                str.append(": DB Data={id=")
-                    .append(dbVol.getId())
-                    .append("; state=")
-                    .append(dbVol.getState())
-                    .append("; updatecount=")
-                    .append(dbVol.getUpdatedCount())
-                    .append(";updatedTime=")
-                    .append(dbVol.getUpdated());
-                str.append(": New Data={id=")
-                    .append(vo.getId())
-                    .append("; state=")
-                    .append(nextState)
-                    .append("; event=")
-                    .append(event)
-                    .append("; updatecount=")
-                    .append(vo.getUpdatedCount())
-                    .append("; updatedTime=")
-                    .append(vo.getUpdated());
-                str.append(": stale Data={id=")
-                    .append(vo.getId())
-                    .append("; state=")
-                    .append(currentState)
-                    .append("; event=")
-                    .append(event)
-                    .append("; updatecount=")
-                    .append(oldUpdated)
-                    .append("; updatedTime=")
-                    .append(oldUpdatedTime);
+                str.append(": DB Data={id=").append(dbVol.getId()).append("; state=").append(dbVol.getState()).append("; updatecount=").append(dbVol.getUpdatedCount()).append(";updatedTime=")
+                .append(dbVol.getUpdated());
+                str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatecount=").append(vo.getUpdatedCount())
+                .append("; updatedTime=").append(vo.getUpdated());
+                str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatecount=").append(oldUpdated)
+                .append("; updatedTime=").append(oldUpdatedTime);
             } else {
                 s_logger.debug("Unable to update volume: id=" + vo.getId() + ", as there is no such volume exists in the database anymore");
             }
@@ -685,4 +668,19 @@
         }
         return null;
     }
+
+    private String sqlUpdateDiskOffering = "UPDATE volumes SET disk_offering_id = ? where id =?";
+
+    @Override
+    public void updateDiskOffering(long volumeId, long diskOfferingId) {
+        try (TransactionLegacy txn = TransactionLegacy.currentTxn();
+                PreparedStatement pstmt = txn.prepareAutoCloseStatement(sqlUpdateDiskOffering)) {
+            pstmt.setLong(1, diskOfferingId);
+            pstmt.setLong(2, volumeId);
+            pstmt.executeUpdate();
+            txn.commit();
+        } catch (SQLException e) {
+            throw new CloudRuntimeException(e);
+        }
+    }
 }
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VolumeDetailsDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeHostDao.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeHostDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VolumeHostDao.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VolumeHostDao.java
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeHostDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VolumeHostDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/storage/dao/VolumeHostDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/storage/dao/VolumeHostDaoImpl.java
diff --git a/engine/schema/src/com/cloud/tags/ResourceTagVO.java b/engine/schema/src/main/java/com/cloud/tags/ResourceTagVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/tags/ResourceTagVO.java
rename to engine/schema/src/main/java/com/cloud/tags/ResourceTagVO.java
diff --git a/engine/schema/src/com/cloud/tags/dao/ResourceTagDao.java b/engine/schema/src/main/java/com/cloud/tags/dao/ResourceTagDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/tags/dao/ResourceTagDao.java
rename to engine/schema/src/main/java/com/cloud/tags/dao/ResourceTagDao.java
diff --git a/engine/schema/src/com/cloud/tags/dao/ResourceTagsDaoImpl.java b/engine/schema/src/main/java/com/cloud/tags/dao/ResourceTagsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/tags/dao/ResourceTagsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/tags/dao/ResourceTagsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/upgrade/DatabaseCreator.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/DatabaseCreator.java
rename to engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java
diff --git a/engine/schema/src/com/cloud/upgrade/DatabaseIntegrityChecker.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseIntegrityChecker.java
similarity index 98%
rename from engine/schema/src/com/cloud/upgrade/DatabaseIntegrityChecker.java
rename to engine/schema/src/main/java/com/cloud/upgrade/DatabaseIntegrityChecker.java
index 6111fb1..bb75aac 100644
--- a/engine/schema/src/com/cloud/upgrade/DatabaseIntegrityChecker.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseIntegrityChecker.java
@@ -26,7 +26,8 @@
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import com.cloud.maint.Version;
+import org.apache.cloudstack.utils.CloudStackVersion;
+
 import com.cloud.upgrade.dao.VersionDao;
 import com.cloud.utils.component.AdapterBase;
 import com.cloud.utils.component.ComponentLifecycle;
@@ -210,7 +211,7 @@
                     return false;
                 }
 
-                if (Version.compare(Version.trimToPatch(dbVersion), Version.trimToPatch("2.2.8")) != 0) {
+                if (CloudStackVersion.compare(dbVersion, "2.2.8") != 0) {
                     txn.commit();
                     return true;
                 }
diff --git a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
new file mode 100644
index 0000000..a69590a
--- /dev/null
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
@@ -0,0 +1,387 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.upgrade;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.ObjectArrays.concat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Date;
+
+import javax.inject.Inject;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import org.apache.cloudstack.utils.CloudStackVersion;
+
+import com.cloud.upgrade.dao.DbUpgrade;
+import com.cloud.upgrade.dao.Upgrade217to218;
+import com.cloud.upgrade.dao.Upgrade218to22;
+import com.cloud.upgrade.dao.Upgrade218to224DomainVlans;
+import com.cloud.upgrade.dao.Upgrade2210to2211;
+import com.cloud.upgrade.dao.Upgrade2211to2212;
+import com.cloud.upgrade.dao.Upgrade2212to2213;
+import com.cloud.upgrade.dao.Upgrade2213to2214;
+import com.cloud.upgrade.dao.Upgrade2214to30;
+import com.cloud.upgrade.dao.Upgrade221to222;
+import com.cloud.upgrade.dao.Upgrade222to224;
+import com.cloud.upgrade.dao.Upgrade224to225;
+import com.cloud.upgrade.dao.Upgrade225to226;
+import com.cloud.upgrade.dao.Upgrade227to228;
+import com.cloud.upgrade.dao.Upgrade228to229;
+import com.cloud.upgrade.dao.Upgrade229to2210;
+import com.cloud.upgrade.dao.Upgrade301to302;
+import com.cloud.upgrade.dao.Upgrade302to303;
+import com.cloud.upgrade.dao.Upgrade302to40;
+import com.cloud.upgrade.dao.Upgrade303to304;
+import com.cloud.upgrade.dao.Upgrade304to305;
+import com.cloud.upgrade.dao.Upgrade305to306;
+import com.cloud.upgrade.dao.Upgrade306to307;
+import com.cloud.upgrade.dao.Upgrade307to410;
+import com.cloud.upgrade.dao.Upgrade30to301;
+import com.cloud.upgrade.dao.Upgrade40to41;
+import com.cloud.upgrade.dao.Upgrade41000to41100;
+import com.cloud.upgrade.dao.Upgrade410to420;
+import com.cloud.upgrade.dao.Upgrade41100to41110;
+import com.cloud.upgrade.dao.Upgrade41110to41200;
+import com.cloud.upgrade.dao.Upgrade420to421;
+import com.cloud.upgrade.dao.Upgrade421to430;
+import com.cloud.upgrade.dao.Upgrade430to440;
+import com.cloud.upgrade.dao.Upgrade431to440;
+import com.cloud.upgrade.dao.Upgrade432to440;
+import com.cloud.upgrade.dao.Upgrade440to441;
+import com.cloud.upgrade.dao.Upgrade441to442;
+import com.cloud.upgrade.dao.Upgrade442to450;
+import com.cloud.upgrade.dao.Upgrade443to444;
+import com.cloud.upgrade.dao.Upgrade444to450;
+import com.cloud.upgrade.dao.Upgrade450to451;
+import com.cloud.upgrade.dao.Upgrade451to452;
+import com.cloud.upgrade.dao.Upgrade452to453;
+import com.cloud.upgrade.dao.Upgrade453to460;
+import com.cloud.upgrade.dao.Upgrade460to461;
+import com.cloud.upgrade.dao.Upgrade461to470;
+import com.cloud.upgrade.dao.Upgrade470to471;
+import com.cloud.upgrade.dao.Upgrade471to480;
+import com.cloud.upgrade.dao.Upgrade480to481;
+import com.cloud.upgrade.dao.Upgrade481to490;
+import com.cloud.upgrade.dao.Upgrade490to4910;
+import com.cloud.upgrade.dao.Upgrade4910to4920;
+import com.cloud.upgrade.dao.Upgrade4920to4930;
+import com.cloud.upgrade.dao.Upgrade4930to41000;
+import com.cloud.upgrade.dao.UpgradeSnapshot217to224;
+import com.cloud.upgrade.dao.UpgradeSnapshot223to224;
+import com.cloud.upgrade.dao.VersionDao;
+import com.cloud.upgrade.dao.VersionDaoImpl;
+import com.cloud.upgrade.dao.VersionVO;
+import com.cloud.upgrade.dao.VersionVO.Step;
+import com.cloud.utils.component.SystemIntegrityChecker;
+import com.cloud.utils.db.GlobalLock;
+import com.cloud.utils.db.ScriptRunner;
+import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
+    private static final Logger s_logger = Logger.getLogger(DatabaseUpgradeChecker.class);
+    private final DatabaseVersionHierarchy hierarchy;
+
+    @Inject
+    VersionDao _dao;
+
+    public DatabaseUpgradeChecker() {
+        _dao = new VersionDaoImpl();
+
+        hierarchy = DatabaseVersionHierarchy.builder()
+                // legacy
+                .next("2.1.7"   , new Upgrade217to218())
+                .next("2.1.7.1" , new UpgradeSnapshot217to224())
+                .next("2.1.8"   , new Upgrade218to22())
+                .next("2.1.8.1" , new Upgrade218to224DomainVlans())
+                .next("2.1.9"   , new Upgrade218to22())
+                .next("2.2.1"   , new Upgrade221to222())
+                .next("2.2.2"   , new Upgrade222to224())
+                .next("2.2.3"   , new Upgrade222to224())
+                .next("2.2.3.1" , new UpgradeSnapshot223to224())
+                .next("2.2.4"   , new Upgrade224to225())
+                .next("2.2.5"   , new Upgrade225to226())
+                .next("2.2.6"   , new Upgrade227to228())
+                .next("2.2.7"   , new Upgrade227to228())
+                .next("2.2.8"   , new Upgrade228to229())
+                .next("2.2.9"   , new Upgrade229to2210())
+                .next("2.2.10"  , new Upgrade2210to2211())
+                .next("2.2.11"  , new Upgrade2211to2212())
+                .next("2.2.12"  , new Upgrade2212to2213())
+                .next("2.2.13"  , new Upgrade2213to2214())
+                .next("2.2.14"  , new Upgrade2214to30())
+                .next("2.2.15"  , new Upgrade2214to30())
+                .next("2.2.16"  , new Upgrade2214to30())
+                .next("3.0.0"   , new Upgrade30to301())
+                .next("3.0.1"   , new Upgrade301to302())
+                .next("3.0.2"   , new Upgrade302to303())
+                .next("3.0.2.1" , new Upgrade302to40())
+                .next("3.0.3"   , new Upgrade303to304())
+                .next("3.0.4"   , new Upgrade304to305())
+                .next("3.0.5"   , new Upgrade305to306())
+                .next("3.0.6"   , new Upgrade306to307())
+                .next("3.0.7"   , new Upgrade307to410())
+
+                // recent
+                .next("4.0.0"   , new Upgrade40to41())
+                .next("4.0.1"   , new Upgrade40to41())
+                .next("4.0.2"   , new Upgrade40to41())
+                .next("4.1.0"   , new Upgrade410to420())
+                .next("4.1.1"   , new Upgrade410to420())
+                .next("4.2.0"   , new Upgrade420to421())
+                .next("4.2.1"   , new Upgrade421to430())
+                .next("4.3.0"   , new Upgrade430to440())
+                .next("4.3.1"   , new Upgrade431to440())
+                .next("4.3.2"   , new Upgrade432to440())
+                .next("4.4.0"   , new Upgrade440to441())
+                .next("4.4.1"   , new Upgrade441to442())
+                .next("4.4.2"   , new Upgrade442to450())
+                .next("4.4.3"   , new Upgrade443to444())
+                .next("4.4.4"   , new Upgrade444to450())
+                .next("4.5.0"   , new Upgrade450to451())
+                .next("4.5.1"   , new Upgrade451to452())
+                .next("4.5.2"   , new Upgrade452to453())
+                .next("4.5.3"   , new Upgrade453to460())
+                .next("4.6.0"   , new Upgrade460to461())
+                .next("4.6.1"   , new Upgrade461to470())
+                .next("4.6.2"   , new Upgrade461to470())
+                .next("4.7.0"   , new Upgrade470to471())
+                .next("4.7.1"   , new Upgrade471to480())
+                .next("4.7.2"   , new Upgrade471to480())
+                .next("4.8.0"   , new Upgrade480to481())
+                .next("4.8.1"   , new Upgrade481to490())
+                .next("4.8.2.0" , new Upgrade481to490())
+                .next("4.9.0"   , new Upgrade490to4910())
+                .next("4.9.1.0" , new Upgrade4910to4920())
+                .next("4.9.2.0" , new Upgrade4920to4930())
+                .next("4.9.3.0" , new Upgrade4930to41000())
+                .next("4.9.3.1" , new Upgrade4930to41000())
+                .next("4.10.0.0", new Upgrade41000to41100())
+                .next("4.11.0.0", new Upgrade41100to41110())
+                .next("4.11.1.0", new Upgrade41110to41200())
+                .build();
+    }
+
+    protected void runScript(Connection conn, InputStream file) {
+
+        try (InputStreamReader reader = new InputStreamReader(file)) {
+            ScriptRunner runner = new ScriptRunner(conn, false, true);
+            runner.runScript(reader);
+        } catch (IOException e) {
+            s_logger.error("Unable to read upgrade script", e);
+            throw new CloudRuntimeException("Unable to read upgrade script", e);
+        } catch (SQLException e) {
+            s_logger.error("Unable to execute upgrade script", e);
+            throw new CloudRuntimeException("Unable to execute upgrade script", e);
+        }
+
+    }
+
+    @VisibleForTesting
+    DbUpgrade[] calculateUpgradePath(final CloudStackVersion dbVersion, final CloudStackVersion currentVersion) {
+
+        checkArgument(dbVersion != null);
+        checkArgument(currentVersion != null);
+        checkArgument(currentVersion.compareTo(dbVersion) > 0);
+
+        final DbUpgrade[] upgrades = hierarchy.getPath(dbVersion, currentVersion);
+
+        // When there is no upgrade defined for the target version, we assume that there were no schema changes or
+        // data migrations required.  Based on that assumption, we add a noop DbUpgrade to the end of the list ...
+        final CloudStackVersion tailVersion = upgrades.length > 0 ? CloudStackVersion.parse(upgrades[upgrades.length - 1].getUpgradedVersion()) : dbVersion;
+
+        if (currentVersion.compareTo(tailVersion) != 0) {
+            return concat(upgrades, new NoopDbUpgrade(tailVersion, currentVersion));
+        }
+
+        return upgrades;
+
+    }
+
+    protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVersion) {
+        s_logger.info("Database upgrade must be performed from " + dbVersion + " to " + currentVersion);
+
+        final DbUpgrade[] upgrades = calculateUpgradePath(dbVersion, currentVersion);
+
+        for (DbUpgrade upgrade : upgrades) {
+            VersionVO version;
+            s_logger.debug("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade
+                .getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
+            TransactionLegacy txn = TransactionLegacy.open("Upgrade");
+            txn.start();
+            try {
+                Connection conn;
+                try {
+                    conn = txn.getConnection();
+                } catch (SQLException e) {
+                    String errorMessage = "Unable to upgrade the database";
+                    s_logger.error(errorMessage, e);
+                    throw new CloudRuntimeException(errorMessage, e);
+                }
+                InputStream[] scripts = upgrade.getPrepareScripts();
+                if (scripts != null) {
+                    for (InputStream script : scripts) {
+                        runScript(conn, script);
+                    }
+                }
+
+                upgrade.performDataMigration(conn);
+
+                version = new VersionVO(upgrade.getUpgradedVersion());
+                version = _dao.persist(version);
+
+                txn.commit();
+            } catch (CloudRuntimeException e) {
+                String errorMessage = "Unable to upgrade the database";
+                s_logger.error(errorMessage, e);
+                throw new CloudRuntimeException(errorMessage, e);
+            } finally {
+                txn.close();
+            }
+
+            // Run the corresponding '-cleanup.sql' script
+            txn = TransactionLegacy.open("Cleanup");
+            try {
+                s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade
+                    .getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
+
+                txn.start();
+                Connection conn;
+                try {
+                    conn = txn.getConnection();
+                } catch (SQLException e) {
+                    s_logger.error("Unable to cleanup the database", e);
+                    throw new CloudRuntimeException("Unable to cleanup the database", e);
+                }
+
+                InputStream[] scripts = upgrade.getCleanupScripts();
+                if (scripts != null) {
+                    for (InputStream script : scripts) {
+                        runScript(conn, script);
+                        s_logger.debug("Cleanup script " + upgrade.getClass().getSimpleName() + " is executed successfully");
+                    }
+                }
+                txn.commit();
+
+                txn.start();
+                version.setStep(Step.Complete);
+                version.setUpdated(new Date());
+                _dao.update(version.getId(), version);
+                txn.commit();
+                s_logger.debug("Upgrade completed for version " + version.getVersion());
+            } finally {
+                txn.close();
+            }
+        }
+    }
+
+    @Override
+    public void check() {
+        GlobalLock lock = GlobalLock.getInternLock("DatabaseUpgrade");
+        try {
+            s_logger.info("Grabbing lock to check for database upgrade.");
+            if (!lock.lock(20 * 60)) {
+                throw new CloudRuntimeException("Unable to acquire lock to check for database integrity.");
+            }
+
+            try {
+
+                final CloudStackVersion dbVersion = CloudStackVersion.parse(_dao.getCurrentVersion());
+                final String currentVersionValue = this.getClass().getPackage().getImplementationVersion();
+
+                if (StringUtils.isBlank(currentVersionValue)) {
+                    return;
+                }
+
+                final CloudStackVersion currentVersion = CloudStackVersion.parse(currentVersionValue);
+                s_logger.info("DB version = " + dbVersion + " Code Version = " + currentVersion);
+
+                if (dbVersion.compareTo(currentVersion) > 0) {
+                    throw new CloudRuntimeException("Database version " + dbVersion + " is higher than management software version " + currentVersionValue);
+                }
+
+                if (dbVersion.compareTo(currentVersion) == 0) {
+                    s_logger.info("DB version and code version matches so no upgrade needed.");
+                    return;
+                }
+
+                upgrade(dbVersion, currentVersion);
+            } finally {
+                lock.unlock();
+            }
+        } finally {
+            lock.releaseRef();
+        }
+    }
+
+    @VisibleForTesting
+    protected static final class NoopDbUpgrade implements DbUpgrade {
+
+        private final String upgradedVersion;
+        private final String[] upgradeRange;
+
+        private NoopDbUpgrade(final CloudStackVersion fromVersion, final CloudStackVersion toVersion) {
+
+            super();
+
+            upgradedVersion = toVersion.toString();
+            upgradeRange = new String[] {fromVersion.toString(), toVersion.toString()};
+
+        }
+
+        @Override
+        public String[] getUpgradableVersionRange() {
+            return Arrays.copyOf(upgradeRange, upgradeRange.length);
+        }
+
+        @Override
+        public String getUpgradedVersion() {
+            return upgradedVersion;
+        }
+
+        @Override
+        public boolean supportsRollingUpgrade() {
+            return false;
+        }
+
+        @Override
+        public InputStream[] getPrepareScripts() {
+            return new InputStream[0];
+        }
+
+        @Override
+        public void performDataMigration(Connection conn) {
+
+        }
+
+        @Override
+        public InputStream[] getCleanupScripts() {
+            return new InputStream[0];
+        }
+
+    }
+}
diff --git a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java
new file mode 100644
index 0000000..35b2faa
--- /dev/null
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java
@@ -0,0 +1,186 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.upgrade;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import com.google.common.collect.ImmutableList;
+
+import org.apache.cloudstack.utils.CloudStackVersion;
+
+import com.cloud.upgrade.dao.DbUpgrade;
+
+/**
+ * @since 4.12.0.0
+ */
+public final class DatabaseVersionHierarchy {
+    private final ImmutableList<VersionNode> hierarchy;
+
+    private DatabaseVersionHierarchy(ImmutableList<VersionNode> hierarchy) {
+        this.hierarchy = hierarchy;
+    }
+
+    public static DatabaseVersionHierarchyBuilder builder() {
+        return new DatabaseVersionHierarchyBuilder();
+    }
+
+    /**
+     * Check if current hierarchy of Database Versions contains <code>version</code>.
+     *
+     * @param version The version to check if hierarchy contains it
+     *
+     * @return true if hierarchy contains the version, false if not
+     */
+    public boolean contains(final CloudStackVersion version) {
+        return toList().contains(version);
+    }
+
+    /**
+     * Calculates an  upgrade path for the  passed <code>fromVersion</code>.  If the  <code>fromVersion</code>
+     * doesn't exist in list  of  available <code>VersionNode</code> hierarchy,  then calculation assumes that
+     * the <code>fromVersion</code> required no schema migrations or data conversions and no  upgrade path was
+     * defined  for it.  Therefore,  we  find  the most  recent  version  with  database migrations before the
+     * <code>fromVersion</code> and adopt that upgrade path list.
+     *
+     * @param fromVersion The version from which the upgrade will occur
+     *
+     * @return The upgrade path from <code>fromVersion</code> to <code>LATEST</code> version.
+     */
+    public DbUpgrade[] getPath(final CloudStackVersion fromVersion) {
+        return getPath(fromVersion, null);
+    }
+
+    /**
+     * Calculates an  upgrade path for the  passed <code>fromVersion</code> and <code>toVersion</code>. If the
+     * <code>fromVersion</code> doesn't exist in list  of available <code>VersionNode</code> hierarchy,   then
+     * calculation assumes that the <code>fromVersion</code> required no schema migrations or data conversions
+     * and no  upgrade path was defined  for it.  Therefore, we find  the most recent  version  with  database
+     * migrations before the <code>fromVersion</code> and adopt that upgrade path list up to <code>toVersion</code>.
+     * If <code>toVersion</code> is null, we're going to find the upgrade path up to the latest available version.
+     *
+     * @param fromVersion The version from which the upgrade will occur
+     * @param toVersion The version up to which the upgrade will occur (can be null)
+     *
+     * @return The upgrade path from <code>fromVersion</code> to <code>toVersion</code>
+     */
+    public DbUpgrade[] getPath(final CloudStackVersion fromVersion, final CloudStackVersion toVersion) {
+        if (fromVersion == null) {
+            return new DbUpgrade[0];
+        }
+
+        // we cannot find the version specified, so get the
+        // most recent one immediately before this version
+        if (!contains(fromVersion)) {
+            return getPath(getRecentVersion(fromVersion), toVersion);
+        }
+
+        final Predicate<? super VersionNode> predicate;
+
+        if (toVersion == null) {
+            // all the available versions greater than or equal to fromVersion
+            predicate = node -> node.version.compareTo(fromVersion) > -1;
+        } else {
+            // all the available versions greater than or equal to fromVersion AND less than toVersion
+            predicate = node -> node.version.compareTo(fromVersion) > -1 && node.version.compareTo(toVersion) < 0;
+        }
+
+        // get upgrade path from version forward (include version itself in the path)
+        return hierarchy
+                    .stream()
+                    .filter(predicate)
+                    .filter(distinct(node -> node.upgrader.getUpgradedVersion()))
+                    .map(node -> node.upgrader)
+                    .toArray(DbUpgrade[]::new);
+    }
+
+    /**
+     * Find the most recent <code>CloudStackVersion</code> immediately before <code>fromVersion</code>
+     *
+     * @param fromVersion The version to look up its immediate previous available version
+     *
+     * @return The <code>CloudStackVersion</code> or null
+     *
+     * @since 4.8.2.0 (refactored in 4.11.1.0)
+     */
+    private CloudStackVersion getRecentVersion(final CloudStackVersion fromVersion) {
+        if (fromVersion == null) {
+            return null;
+        }
+
+        // find the most recent version immediately before fromVersion
+        return toList()
+                 .reverse()
+                 .stream()
+                 .filter(version -> fromVersion.compareTo(version) < 0)
+                 .findFirst()
+                 .orElse(null);
+    }
+
+    /**
+     * Generate immutable list of available <code>CloudstackVersion</code> in the hierarchy
+     *
+     * @return list of available versions
+     */
+    public ImmutableList<CloudStackVersion> toList() {
+        List<CloudStackVersion> versions = hierarchy
+                                                .stream()
+                                                .map(node -> node.version)
+                                                .collect(Collectors.toList());
+
+        return ImmutableList.copyOf(versions);
+    }
+
+    /**
+     * Find the distinct <code>VersionNode</code> based on the provided <code>getUpgradedVersion()</code>
+     */
+    private Predicate<VersionNode> distinct(Function<VersionNode, String> keyExtractor) {
+        Map<String, Boolean> seen = new ConcurrentHashMap<>();
+        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
+    }
+
+    private static class VersionNode {
+        final CloudStackVersion version;
+        final DbUpgrade upgrader;
+
+        private VersionNode(final CloudStackVersion version, final DbUpgrade upgrader) {
+            this.version = version;
+            this.upgrader = upgrader;
+        }
+    }
+
+    public static final class DatabaseVersionHierarchyBuilder {
+        private final List<VersionNode> hierarchyBuilder = new LinkedList<>();
+
+        private DatabaseVersionHierarchyBuilder() {
+        }
+
+        public DatabaseVersionHierarchyBuilder next(final String version, final DbUpgrade upgrader) {
+            hierarchyBuilder.add(new VersionNode(CloudStackVersion.parse(version), upgrader));
+            return this;
+        }
+
+        public DatabaseVersionHierarchy build() {
+            return new DatabaseVersionHierarchy(ImmutableList.copyOf(hierarchyBuilder));
+        }
+    }
+}
\ No newline at end of file
diff --git a/engine/schema/src/com/cloud/upgrade/dao/DatabaseAccessObject.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/DatabaseAccessObject.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/DatabaseAccessObject.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/DatabaseAccessObject.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/DbUpgrade.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgrade.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/DbUpgrade.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgrade.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/DbUpgradeUtils.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgradeUtils.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/DbUpgradeUtils.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgradeUtils.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/LegacyDbUpgrade.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/LegacyDbUpgrade.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/LegacyDbUpgrade.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/LegacyDbUpgrade.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade217to218.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade217to218.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade217to218.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade217to218.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade218to22.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade218to22.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to224DomainVlans.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade218to224DomainVlans.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade218to224DomainVlans.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade218to224DomainVlans.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22Premium.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade218to22Premium.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22Premium.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade218to22Premium.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2210to2211.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2210to2211.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade2210to2211.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2210to2211.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2211to2212.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2211to2212.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade2211to2212.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2211to2212.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2211to2212Premium.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2211to2212Premium.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade2211to2212Premium.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2211to2212Premium.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2212to2213.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2212to2213.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade2212to2213.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2212to2213.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2213to2214.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2213to2214.java
similarity index 96%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade2213to2214.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2213to2214.java
index f155d6f..9dc3f5b 100644
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2213to2214.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2213to2214.java
@@ -91,16 +91,6 @@
             throw new CloudRuntimeException("Unable to execute cloud_usage usage_event table update", e);
         }
 
-        //Drop netapp_volume primary key and add it again
-        DbUpgradeUtils.dropPrimaryKeyIfExists(conn, "cloud.netapp_volume");
-        try {
-            PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`netapp_volume` add PRIMARY KEY (`id`)");
-            pstmt.executeUpdate();
-            pstmt.close();
-        } catch (SQLException e) {
-            throw new CloudRuntimeException("Unable to update primary key for netapp_volume", e);
-        }
-
         //Drop i_snapshots__removed key (if exists) and re-add it again
         keys = new ArrayList<String>();
         keys.add("i_snapshots__removed");
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2214to30.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2214to30.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade2214to30.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade2214to30.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade221to222.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade221to222.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade221to222.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade221to222.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade221to222Premium.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade221to222Premium.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade221to222Premium.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade221to222Premium.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade222to224.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade222to224.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224Premium.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade222to224Premium.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224Premium.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade222to224Premium.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade224to225.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade224to225.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade224to225.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade224to225.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade225to226.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade225to226.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade225to226.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade225to226.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade227to228.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade227to228.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade227to228.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade227to228.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade227to228Premium.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade227to228Premium.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade227to228Premium.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade227to228Premium.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade228to229.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade228to229.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade228to229.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade228to229.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade229to2210.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade229to2210.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade229to2210.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade229to2210.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade301to302.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade301to302.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade301to302.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade301to302.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to303.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade302to303.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade302to303.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade302to303.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to40.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade302to40.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade302to40.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade302to40.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade303to304.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade303to304.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade303to304.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade303to304.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade304to305.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade304to305.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade304to305.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade304to305.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade305to306.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade305to306.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade305to306.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade305to306.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade306to307.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade306to307.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade307to410.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade307to410.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade307to410.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade307to410.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30to301.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade30to301.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade30to301.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade30to301.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade30xBase.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade30xBase.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade40to41.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade40to41.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade40to41.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade40to41.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade41000to41100.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41000to41100.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade41000to41100.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41000to41100.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade410to420.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade410to420.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade41100to41110.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41100to41110.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade41100to41110.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41100to41110.java
diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41110to41200.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41110to41200.java
new file mode 100644
index 0000000..c4fdd94
--- /dev/null
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41110to41200.java
@@ -0,0 +1,68 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package com.cloud.upgrade.dao;
+
+import java.io.InputStream;
+import java.sql.Connection;
+
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class Upgrade41110to41200 implements DbUpgrade {
+
+    @Override
+    public String[] getUpgradableVersionRange() {
+        return new String[] {"4.11.1.0", "4.12.0.0"};
+    }
+
+    @Override
+    public String getUpgradedVersion() {
+        return "4.12.0.0";
+    }
+
+    @Override
+    public boolean supportsRollingUpgrade() {
+        return false;
+    }
+
+    @Override
+    public InputStream[] getPrepareScripts() {
+        final String scriptFile = "META-INF/db/schema-41110to41200.sql";
+        final InputStream script = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
+        if (script == null) {
+            throw new CloudRuntimeException("Unable to find " + scriptFile);
+        }
+
+        return new InputStream[] {script};
+    }
+
+    @Override
+    public void performDataMigration(Connection conn) {
+
+    }
+
+    @Override
+    public InputStream[] getCleanupScripts() {
+        final String scriptFile = "META-INF/db/schema-41110to41200-cleanup.sql";
+        final InputStream script = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
+        if (script == null) {
+            throw new CloudRuntimeException("Unable to find " + scriptFile);
+        }
+
+        return new InputStream[] {script};
+    }
+}
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade420to421.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade420to421.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade421to430.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade421to430.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade430to440.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade430to440.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade430to440.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade430to440.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade431to440.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade431to440.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade431to440.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade431to440.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade432to440.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade432to440.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade432to440.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade432to440.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade440to441.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade440to441.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade440to441.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade440to441.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade441to442.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade441to442.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade441to442.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade441to442.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade442to450.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade442to450.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade442to450.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade442to450.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade443to444.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade443to444.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade443to444.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade443to444.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade443to450.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade443to450.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade443to450.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade443to450.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade444to450.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade444to450.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade444to450.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade444to450.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade450to451.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade450to451.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade451to452.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade451to452.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade451to452.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade451to452.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade452to453.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade452to453.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade452to453.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade452to453.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade452to460.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade452to460.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade452to460.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade452to460.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade453to460.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade453to460.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade453to460.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade453to460.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade460to461.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade460to461.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade460to461.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade460to461.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade461to470.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade461to470.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade461to470.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade461to470.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade470to471.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade470to471.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade470to471.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade470to471.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade471to480.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade471to480.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade471to480.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade471to480.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade480to481.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade480to481.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade480to481.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade480to481.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade481to490.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade481to490.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade481to490.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade481to490.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade490to4910.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade490to4910.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade490to4910.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade490to4910.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade4910to4920.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade4910to4920.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade4910to4920.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade4910to4920.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade4920to4930.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade4920to4930.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade4920to4930.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade4920to4930.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade4930to41000.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade4930to41000.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/Upgrade4930to41000.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade4930to41000.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/UpgradeSnapshot217to224.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/UpgradeSnapshot217to224.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/UpgradeSnapshot217to224.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/UpgradeSnapshot217to224.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/UpgradeSnapshot223to224.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/UpgradeSnapshot223to224.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/UpgradeSnapshot223to224.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/UpgradeSnapshot223to224.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/VersionDao.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/VersionDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/VersionDao.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/VersionDao.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/VersionDaoImpl.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/VersionDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/VersionDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/VersionDaoImpl.java
diff --git a/engine/schema/src/com/cloud/upgrade/dao/VersionVO.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/VersionVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/upgrade/dao/VersionVO.java
rename to engine/schema/src/main/java/com/cloud/upgrade/dao/VersionVO.java
diff --git a/engine/schema/src/com/cloud/usage/ExternalPublicIpStatisticsVO.java b/engine/schema/src/main/java/com/cloud/usage/ExternalPublicIpStatisticsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/ExternalPublicIpStatisticsVO.java
rename to engine/schema/src/main/java/com/cloud/usage/ExternalPublicIpStatisticsVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageIPAddressVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageIPAddressVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageIPAddressVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageIPAddressVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageJobVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageJobVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageJobVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageJobVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageLoadBalancerPolicyVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageLoadBalancerPolicyVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageLoadBalancerPolicyVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageLoadBalancerPolicyVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageNetworkOfferingVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageNetworkOfferingVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageNetworkOfferingVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageNetworkOfferingVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageNetworkVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageNetworkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageNetworkVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageNetworkVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsagePortForwardingRuleVO.java b/engine/schema/src/main/java/com/cloud/usage/UsagePortForwardingRuleVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsagePortForwardingRuleVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsagePortForwardingRuleVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageSecurityGroupVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageSecurityGroupVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageSecurityGroupVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageSecurityGroupVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageSnapshotOnPrimaryVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageSnapshotOnPrimaryVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageSnapshotOnPrimaryVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageSnapshotOnPrimaryVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageStorageVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageStorageVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageStorageVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageStorageVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageVMInstanceVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageVMInstanceVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageVMInstanceVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageVMSnapshotVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageVMSnapshotVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageVMSnapshotVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageVMSnapshotVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageVPNUserVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageVPNUserVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageVPNUserVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageVPNUserVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageVmDiskVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageVmDiskVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageVmDiskVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageVmDiskVO.java
diff --git a/engine/schema/src/com/cloud/usage/UsageVolumeVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageVolumeVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/UsageVolumeVO.java
rename to engine/schema/src/main/java/com/cloud/usage/UsageVolumeVO.java
diff --git a/engine/schema/src/com/cloud/usage/dao/ExternalPublicIpStatisticsDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/ExternalPublicIpStatisticsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/ExternalPublicIpStatisticsDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/ExternalPublicIpStatisticsDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/ExternalPublicIpStatisticsDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/ExternalPublicIpStatisticsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/ExternalPublicIpStatisticsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/ExternalPublicIpStatisticsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageDaoImpl.java
similarity index 98%
rename from engine/schema/src/com/cloud/usage/dao/UsageDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageDaoImpl.java
index 626b8cc..3bdf79a 100644
--- a/engine/schema/src/com/cloud/usage/dao/UsageDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/usage/dao/UsageDaoImpl.java
@@ -91,7 +91,7 @@
             txn.commit();
         } catch (Exception ex) {
             txn.rollback();
-            s_logger.error("error retrieving usage vm instances for account id: " + accountId);
+            s_logger.error("error retrieving usage vm instances for account id: " + accountId, ex);
         } finally {
             txn.close();
         }
@@ -169,7 +169,7 @@
             txn.commit();
         } catch (Exception ex) {
             txn.rollback();
-            s_logger.error("error saving account to cloud_usage db", ex);
+            s_logger.error("error updating account to cloud_usage db", ex);
             throw new CloudRuntimeException(ex.getMessage());
         }
     }
@@ -237,7 +237,7 @@
             txn.commit();
         } catch (Exception ex) {
             txn.rollback();
-            s_logger.error("error saving user stats to cloud_usage db", ex);
+            s_logger.error("error updating user stats to cloud_usage db", ex);
             throw new CloudRuntimeException(ex.getMessage());
         }
     }
@@ -340,7 +340,7 @@
             txn.commit();
         } catch (Exception ex) {
             txn.rollback();
-            s_logger.error("error saving vm disk stats to cloud_usage db", ex);
+            s_logger.error("error updating vm disk stats to cloud_usage db", ex);
             throw new CloudRuntimeException(ex.getMessage());
         }
 
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageIPAddressDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageIPAddressDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageIPAddressDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageIPAddressDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageIPAddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageIPAddressDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageIPAddressDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageIPAddressDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageJobDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageJobDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageJobDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageJobDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageLoadBalancerPolicyDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageLoadBalancerPolicyDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageLoadBalancerPolicyDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageLoadBalancerPolicyDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageLoadBalancerPolicyDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageLoadBalancerPolicyDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageLoadBalancerPolicyDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageLoadBalancerPolicyDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageNetworkOfferingDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkOfferingDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageNetworkOfferingDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkOfferingDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageNetworkOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkOfferingDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageNetworkOfferingDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworkOfferingDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsagePortForwardingRuleDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsagePortForwardingRuleDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsagePortForwardingRuleDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsagePortForwardingRuleDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsagePortForwardingRuleDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsagePortForwardingRuleDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsagePortForwardingRuleDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsagePortForwardingRuleDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageSecurityGroupDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageSecurityGroupDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageSecurityGroupDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageSecurityGroupDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageSecurityGroupDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageSecurityGroupDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageSecurityGroupDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageSecurityGroupDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageStorageDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageStorageDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageStorageDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageStorageDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageStorageDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageStorageDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageStorageDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageStorageDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVMInstanceDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMInstanceDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVMInstanceDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMInstanceDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVMInstanceDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMInstanceDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVMInstanceDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMInstanceDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVPNUserDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVPNUserDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVPNUserDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVPNUserDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVPNUserDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVPNUserDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVPNUserDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVPNUserDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVmDiskDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVmDiskDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVmDiskDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVmDiskDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVmDiskDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVmDiskDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVmDiskDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVmDiskDaoImpl.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVolumeDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVolumeDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVolumeDao.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVolumeDao.java
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageVolumeDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVolumeDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/usage/dao/UsageVolumeDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVolumeDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/AccountDetailVO.java b/engine/schema/src/main/java/com/cloud/user/AccountDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/AccountDetailVO.java
rename to engine/schema/src/main/java/com/cloud/user/AccountDetailVO.java
diff --git a/engine/schema/src/com/cloud/user/AccountDetailsDao.java b/engine/schema/src/main/java/com/cloud/user/AccountDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/AccountDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/user/AccountDetailsDao.java
diff --git a/engine/schema/src/com/cloud/user/AccountDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/AccountDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/AccountDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/AccountDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/AccountVO.java b/engine/schema/src/main/java/com/cloud/user/AccountVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/AccountVO.java
rename to engine/schema/src/main/java/com/cloud/user/AccountVO.java
diff --git a/engine/schema/src/com/cloud/user/SSHKeyPairVO.java b/engine/schema/src/main/java/com/cloud/user/SSHKeyPairVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/SSHKeyPairVO.java
rename to engine/schema/src/main/java/com/cloud/user/SSHKeyPairVO.java
diff --git a/engine/schema/src/com/cloud/user/UserAccountVO.java b/engine/schema/src/main/java/com/cloud/user/UserAccountVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/UserAccountVO.java
rename to engine/schema/src/main/java/com/cloud/user/UserAccountVO.java
diff --git a/engine/schema/src/com/cloud/user/UserStatisticsVO.java b/engine/schema/src/main/java/com/cloud/user/UserStatisticsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/UserStatisticsVO.java
rename to engine/schema/src/main/java/com/cloud/user/UserStatisticsVO.java
diff --git a/engine/schema/src/com/cloud/user/UserStatsLogVO.java b/engine/schema/src/main/java/com/cloud/user/UserStatsLogVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/UserStatsLogVO.java
rename to engine/schema/src/main/java/com/cloud/user/UserStatsLogVO.java
diff --git a/engine/schema/src/com/cloud/user/UserVO.java b/engine/schema/src/main/java/com/cloud/user/UserVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/UserVO.java
rename to engine/schema/src/main/java/com/cloud/user/UserVO.java
diff --git a/engine/schema/src/com/cloud/user/VmDiskStatisticsVO.java b/engine/schema/src/main/java/com/cloud/user/VmDiskStatisticsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/VmDiskStatisticsVO.java
rename to engine/schema/src/main/java/com/cloud/user/VmDiskStatisticsVO.java
diff --git a/engine/schema/src/com/cloud/user/dao/AccountDao.java b/engine/schema/src/main/java/com/cloud/user/dao/AccountDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/AccountDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/AccountDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/AccountDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/AccountDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/AccountDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/dao/SSHKeyPairDao.java b/engine/schema/src/main/java/com/cloud/user/dao/SSHKeyPairDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/SSHKeyPairDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/SSHKeyPairDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/SSHKeyPairDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/SSHKeyPairDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserAccountDao.java b/engine/schema/src/main/java/com/cloud/user/dao/UserAccountDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserAccountDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserAccountDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserAccountDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/UserAccountDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserAccountDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserAccountDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserDao.java b/engine/schema/src/main/java/com/cloud/user/dao/UserDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/UserDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserStatisticsDao.java b/engine/schema/src/main/java/com/cloud/user/dao/UserStatisticsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserStatisticsDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserStatisticsDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserStatisticsDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/UserStatisticsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserStatisticsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserStatisticsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserStatsLogDao.java b/engine/schema/src/main/java/com/cloud/user/dao/UserStatsLogDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserStatsLogDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserStatsLogDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/UserStatsLogDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/UserStatsLogDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/UserStatsLogDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/UserStatsLogDaoImpl.java
diff --git a/engine/schema/src/com/cloud/user/dao/VmDiskStatisticsDao.java b/engine/schema/src/main/java/com/cloud/user/dao/VmDiskStatisticsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/VmDiskStatisticsDao.java
rename to engine/schema/src/main/java/com/cloud/user/dao/VmDiskStatisticsDao.java
diff --git a/engine/schema/src/com/cloud/user/dao/VmDiskStatisticsDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/VmDiskStatisticsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/user/dao/VmDiskStatisticsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/user/dao/VmDiskStatisticsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/ConsoleProxyVO.java b/engine/schema/src/main/java/com/cloud/vm/ConsoleProxyVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/ConsoleProxyVO.java
rename to engine/schema/src/main/java/com/cloud/vm/ConsoleProxyVO.java
diff --git a/engine/schema/src/com/cloud/vm/DomainRouterVO.java b/engine/schema/src/main/java/com/cloud/vm/DomainRouterVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/DomainRouterVO.java
rename to engine/schema/src/main/java/com/cloud/vm/DomainRouterVO.java
diff --git a/engine/schema/src/com/cloud/vm/InstanceGroupVMMapVO.java b/engine/schema/src/main/java/com/cloud/vm/InstanceGroupVMMapVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/InstanceGroupVMMapVO.java
rename to engine/schema/src/main/java/com/cloud/vm/InstanceGroupVMMapVO.java
diff --git a/engine/schema/src/com/cloud/vm/InstanceGroupVO.java b/engine/schema/src/main/java/com/cloud/vm/InstanceGroupVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/InstanceGroupVO.java
rename to engine/schema/src/main/java/com/cloud/vm/InstanceGroupVO.java
diff --git a/engine/schema/src/com/cloud/vm/ItWorkDao.java b/engine/schema/src/main/java/com/cloud/vm/ItWorkDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/ItWorkDao.java
rename to engine/schema/src/main/java/com/cloud/vm/ItWorkDao.java
diff --git a/engine/schema/src/com/cloud/vm/ItWorkDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/ItWorkDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/ItWorkDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/ItWorkDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/ItWorkVO.java b/engine/schema/src/main/java/com/cloud/vm/ItWorkVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/ItWorkVO.java
rename to engine/schema/src/main/java/com/cloud/vm/ItWorkVO.java
diff --git a/engine/schema/src/com/cloud/vm/NicDetailVO.java b/engine/schema/src/main/java/com/cloud/vm/NicDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/NicDetailVO.java
rename to engine/schema/src/main/java/com/cloud/vm/NicDetailVO.java
diff --git a/engine/schema/src/com/cloud/vm/NicExtraDhcpOptionVO.java b/engine/schema/src/main/java/com/cloud/vm/NicExtraDhcpOptionVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/NicExtraDhcpOptionVO.java
rename to engine/schema/src/main/java/com/cloud/vm/NicExtraDhcpOptionVO.java
diff --git a/engine/schema/src/com/cloud/vm/NicVO.java b/engine/schema/src/main/java/com/cloud/vm/NicVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/NicVO.java
rename to engine/schema/src/main/java/com/cloud/vm/NicVO.java
diff --git a/engine/schema/src/com/cloud/vm/SecondaryStorageVmVO.java b/engine/schema/src/main/java/com/cloud/vm/SecondaryStorageVmVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/SecondaryStorageVmVO.java
rename to engine/schema/src/main/java/com/cloud/vm/SecondaryStorageVmVO.java
diff --git a/engine/schema/src/com/cloud/vm/UserVmCloneSettingVO.java b/engine/schema/src/main/java/com/cloud/vm/UserVmCloneSettingVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/UserVmCloneSettingVO.java
rename to engine/schema/src/main/java/com/cloud/vm/UserVmCloneSettingVO.java
diff --git a/engine/schema/src/com/cloud/vm/UserVmDetailVO.java b/engine/schema/src/main/java/com/cloud/vm/UserVmDetailVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/UserVmDetailVO.java
rename to engine/schema/src/main/java/com/cloud/vm/UserVmDetailVO.java
diff --git a/engine/schema/src/com/cloud/vm/UserVmVO.java b/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/UserVmVO.java
rename to engine/schema/src/main/java/com/cloud/vm/UserVmVO.java
diff --git a/engine/schema/src/com/cloud/vm/VMInstanceVO.java b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/VMInstanceVO.java
rename to engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
diff --git a/engine/schema/src/com/cloud/vm/dao/ConsoleProxyDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/ConsoleProxyDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/ConsoleProxyDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/ConsoleProxyDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/ConsoleProxyDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/ConsoleProxyDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/ConsoleProxyDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/ConsoleProxyDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/DomainRouterDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/DomainRouterDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/InstanceGroupDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/InstanceGroupDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/InstanceGroupDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/InstanceGroupDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/InstanceGroupVMMapDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupVMMapDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/InstanceGroupVMMapDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupVMMapDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/InstanceGroupVMMapDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupVMMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/InstanceGroupVMMapDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/InstanceGroupVMMapDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDetailsDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicDetailsDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicExtraDhcpOptionDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicExtraDhcpOptionDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicExtraDhcpOptionDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicExtraDhcpOptionDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicExtraDhcpOptionDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicExtraDhcpOptionDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicExtraDhcpOptionDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicExtraDhcpOptionDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicIpAliasDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicIpAliasDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicIpAliasDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicIpAliasDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicIpAliasDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicIpAliasDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicIpAliasDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicIpAliasDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicIpAliasVO.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicIpAliasVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicIpAliasVO.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicIpAliasVO.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicSecondaryIpDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicSecondaryIpDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicSecondaryIpDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicSecondaryIpDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicSecondaryIpDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicSecondaryIpDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicSecondaryIpDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicSecondaryIpDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/NicSecondaryIpVO.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicSecondaryIpVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/NicSecondaryIpVO.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/NicSecondaryIpVO.java
diff --git a/engine/schema/src/com/cloud/vm/dao/SecondaryStorageVmDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/SecondaryStorageVmDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/SecondaryStorageVmDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/SecondaryStorageVmDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/SecondaryStorageVmDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmCloneSettingDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmCloneSettingDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/UserVmCloneSettingDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmCloneSettingDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmCloneSettingDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmCloneSettingDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/UserVmCloneSettingDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmCloneSettingDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/UserVmDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java
similarity index 99%
rename from engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java
index d13234d..10a133c 100644
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -410,7 +410,7 @@
             }
             catch (Exception e)
             {
-                s_logger.error("listVmDetails:Exception:" + e.getMessage());
+                s_logger.error("listPodIdsHavingVmsforAccount:Exception:" + e.getMessage());
             }
         }
 
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmData.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmData.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/UserVmData.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmData.java
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java
diff --git a/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotDetailsVO.java b/engine/schema/src/main/java/com/cloud/vm/snapshot/VMSnapshotDetailsVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/snapshot/VMSnapshotDetailsVO.java
rename to engine/schema/src/main/java/com/cloud/vm/snapshot/VMSnapshotDetailsVO.java
diff --git a/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java b/engine/schema/src/main/java/com/cloud/vm/snapshot/VMSnapshotVO.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java
rename to engine/schema/src/main/java/com/cloud/vm/snapshot/VMSnapshotVO.java
diff --git a/engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDao.java b/engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDao.java
rename to engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDao.java
diff --git a/engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
diff --git a/engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDao.java b/engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDao.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDao.java
rename to engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDao.java
diff --git a/engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDaoImpl.java
rename to engine/schema/src/main/java/com/cloud/vm/snapshot/dao/VMSnapshotDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/acl/RolePermissionVO.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/RolePermissionVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/acl/RolePermissionVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/acl/RolePermissionVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/acl/RoleVO.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/RoleVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/acl/RoleVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/acl/RoleVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/acl/dao/RoleDao.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RoleDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/acl/dao/RoleDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RoleDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/acl/dao/RoleDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RoleDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/acl/dao/RoleDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RoleDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/acl/dao/RolePermissionsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RolePermissionsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/acl/dao/RolePermissionsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RolePermissionsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/acl/dao/RolePermissionsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RolePermissionsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/acl/dao/RolePermissionsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/acl/dao/RolePermissionsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/AffinityGroupDomainMapVO.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/AffinityGroupDomainMapVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/AffinityGroupDomainMapVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/AffinityGroupDomainMapVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/AffinityGroupVMMapVO.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/AffinityGroupVMMapVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/AffinityGroupVMMapVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/AffinityGroupVMMapVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/AffinityGroupVO.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/AffinityGroupVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/AffinityGroupVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/AffinityGroupVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDao.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDao.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupDomainMapDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/annotation/AnnotationVO.java b/engine/schema/src/main/java/org/apache/cloudstack/annotation/AnnotationVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/annotation/AnnotationVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/annotation/AnnotationVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/annotation/dao/AnnotationDao.java b/engine/schema/src/main/java/org/apache/cloudstack/annotation/dao/AnnotationDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/annotation/dao/AnnotationDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/annotation/dao/AnnotationDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/annotation/dao/AnnotationDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/annotation/dao/AnnotationDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/annotation/dao/AnnotationDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/annotation/dao/AnnotationDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMComputeTagVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMComputeTagVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMComputeTagVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMComputeTagVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMNetworkMapVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMNetworkMapVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMNetworkMapVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMNetworkMapVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMRootDiskTagVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMRootDiskTagVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMRootDiskTagVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMRootDiskTagVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VolumeReservationVO.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VolumeReservationVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VolumeReservationVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VolumeReservationVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDao.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMComputeTagDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDao.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMEntityDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDao.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMReservationDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDao.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMRootDiskTagDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDao.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VolumeReservationDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/ha/HAConfigVO.java b/engine/schema/src/main/java/org/apache/cloudstack/ha/HAConfigVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/ha/HAConfigVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/ha/HAConfigVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/ha/dao/HAConfigDao.java b/engine/schema/src/main/java/org/apache/cloudstack/ha/dao/HAConfigDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/ha/dao/HAConfigDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/ha/dao/HAConfigDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/ha/dao/HAConfigDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/ha/dao/HAConfigDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/ha/dao/HAConfigDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/ha/dao/HAConfigDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/lb/ApplicationLoadBalancerRuleVO.java b/engine/schema/src/main/java/org/apache/cloudstack/lb/ApplicationLoadBalancerRuleVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/lb/ApplicationLoadBalancerRuleVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/lb/ApplicationLoadBalancerRuleVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDao.java b/engine/schema/src/main/java/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/lb/dao/ApplicationLoadBalancerRuleDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementVO.java b/engine/schema/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDao.java b/engine/schema/src/main/java/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/outofbandmanagement/dao/OutOfBandManagementDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/PortableIpDao.java b/engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/PortableIpDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/PortableIpDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/PortableIpDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/PortableIpRangeDao.java b/engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpRangeDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/PortableIpRangeDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpRangeDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/PortableIpRangeDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpRangeDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/PortableIpRangeDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpRangeDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/PortableIpRangeVO.java b/engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpRangeVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/PortableIpRangeVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpRangeVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/PortableIpVO.java b/engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/PortableIpVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/PortableIpVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/RegionSyncVO.java b/engine/schema/src/main/java/org/apache/cloudstack/region/RegionSyncVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/RegionSyncVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/RegionSyncVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/RegionVO.java b/engine/schema/src/main/java/org/apache/cloudstack/region/RegionVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/RegionVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/RegionVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/dao/RegionDao.java b/engine/schema/src/main/java/org/apache/cloudstack/region/dao/RegionDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/dao/RegionDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/dao/RegionDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/dao/RegionDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/region/dao/RegionDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/dao/RegionDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/dao/RegionDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java b/engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java b/engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleDao.java b/engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java b/engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/AutoScaleVmGroupDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/AutoScaleVmGroupDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/AutoScaleVmGroupDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/AutoScaleVmGroupDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/AutoScaleVmProfileDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/AutoScaleVmProfileDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/AutoScaleVmProfileDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/AutoScaleVmProfileDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/DiskOfferingDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/DiskOfferingDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/DiskOfferingDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/DiskOfferingDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/FirewallRuleDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/GuestOsDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/GuestOsDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/GuestOsDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/GuestOsDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/LBHealthCheckPolicyDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/LBHealthCheckPolicyDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/LBHealthCheckPolicyDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/LBHealthCheckPolicyDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/LBStickinessPolicyDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/LBStickinessPolicyDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/LBStickinessPolicyDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/LBStickinessPolicyDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/NetworkACLItemDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/NetworkACLItemDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/NetworkACLItemDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/NetworkACLItemDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/NetworkACLListDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/NetworkACLListDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/NetworkACLListDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/NetworkACLListDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/RemoteAccessVpnDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/RemoteAccessVpnDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/RemoteAccessVpnDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/RemoteAccessVpnDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/Site2SiteCustomerGatewayDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/Site2SiteCustomerGatewayDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/Site2SiteCustomerGatewayDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/Site2SiteCustomerGatewayDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/Site2SiteVpnConnectionDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/Site2SiteVpnConnectionDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/Site2SiteVpnConnectionDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/Site2SiteVpnConnectionDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/Site2SiteVpnGatewayDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/Site2SiteVpnGatewayDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/Site2SiteVpnGatewayDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/Site2SiteVpnGatewayDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/SnapshotPolicyDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/SnapshotPolicyDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/SnapshotPolicyDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/SnapshotPolicyDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/UserDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/UserDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/UserDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/UserDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/UserIpAddressDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/UserIpAddressDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/UserIpAddressDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/UserIpAddressDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/VpcDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/VpcDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/VpcDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/VpcDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/VpcGatewayDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/VpcGatewayDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/VpcGatewayDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/VpcGatewayDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmGroupDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/AutoScaleVmProfileDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/DiskOfferingDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/FirewallRuleDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/GuestOsDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBHealthCheckPolicyDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/LBStickinessPolicyDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLItemDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/NetworkACLListDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/RemoteAccessVpnDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteCustomerGatewayDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnConnectionDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/Site2SiteVpnGatewayDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/SnapshotPolicyDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/UserIpAddressDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/dao/VpcGatewayDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
similarity index 97%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
index 3cd5905..fee9dc2 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
@@ -231,23 +231,21 @@
 
     @Override
     public List<StoragePoolVO> listBy(long datacenterId, Long podId, Long clusterId, ScopeType scope) {
+        SearchCriteria<StoragePoolVO> sc = null;
         if (clusterId != null) {
-            SearchCriteria<StoragePoolVO> sc = DcPodSearch.create();
-            sc.setParameters("datacenterId", datacenterId);
-            sc.setParameters("podId", podId);
-            sc.setParameters("status", Status.Up);
-            sc.setParameters("scope", scope);
-
+            sc = DcPodSearch.create();
             sc.setParameters("cluster", clusterId);
-            return listBy(sc);
         } else {
-            SearchCriteria<StoragePoolVO> sc = DcPodAnyClusterSearch.create();
-            sc.setParameters("datacenterId", datacenterId);
-            sc.setParameters("podId", podId);
-            sc.setParameters("status", Status.Up);
-            sc.setParameters("scope", scope);
-            return listBy(sc);
+            sc = DcPodAnyClusterSearch.create();
+
         }
+        sc.setParameters("datacenterId", datacenterId);
+        sc.setParameters("podId", podId);
+        sc.setParameters("status", Status.Up);
+        if (scope != null) {
+            sc.setParameters("scope", scope);
+        }
+        return listBy(sc);
     }
 
     @Override
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
similarity index 86%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
index 20cff56..50f311a 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
+++ b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
@@ -26,7 +26,7 @@
 import com.cloud.utils.fsm.StateDao;
 
 public interface SnapshotDataStoreDao extends GenericDao<SnapshotDataStoreVO, Long>,
-        StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Event, DataObjectInStore> {
+StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Event, DataObjectInStore> {
 
     List<SnapshotDataStoreVO> listByStoreId(long id, DataStoreRole role);
 
@@ -63,5 +63,10 @@
 
     SnapshotDataStoreVO findByVolume(long volumeId, DataStoreRole role);
 
+    /**
+     * List all snapshots in 'snapshot_store_ref' by volume and data store role. Therefore, it is possible to list all snapshots that are in the primary storage or in the secondary storage.
+     */
+    List<SnapshotDataStoreVO> listAllByVolumeAndDataStore(long volumeId, DataStoreRole role);
+
     List<SnapshotDataStoreVO> listByState(ObjectInDataStoreStateMachine.State... states);
 }
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailsDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailsDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailsDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolDetailsDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
similarity index 100%
rename from engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
rename to engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
diff --git a/engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml b/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
similarity index 100%
rename from engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
rename to engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
diff --git a/engine/schema/resources/META-INF/cloudstack/system/spring-engine-schema-system-checkers-context.xml b/engine/schema/src/main/resources/META-INF/cloudstack/system/spring-engine-schema-system-checkers-context.xml
similarity index 100%
rename from engine/schema/resources/META-INF/cloudstack/system/spring-engine-schema-system-checkers-context.xml
rename to engine/schema/src/main/resources/META-INF/cloudstack/system/spring-engine-schema-system-checkers-context.xml
diff --git a/engine/schema/resources/META-INF/db/create-default-role-api-mappings.sql b/engine/schema/src/main/resources/META-INF/db/create-default-role-api-mappings.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/create-default-role-api-mappings.sql
rename to engine/schema/src/main/resources/META-INF/db/create-default-role-api-mappings.sql
diff --git a/engine/schema/resources/META-INF/db/data-217to218.sql b/engine/schema/src/main/resources/META-INF/db/data-217to218.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/data-217to218.sql
rename to engine/schema/src/main/resources/META-INF/db/data-217to218.sql
diff --git a/engine/schema/resources/META-INF/db/schema-20to21.sql b/engine/schema/src/main/resources/META-INF/db/schema-20to21.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-20to21.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-20to21.sql
diff --git a/engine/schema/resources/META-INF/db/schema-217to218.sql b/engine/schema/src/main/resources/META-INF/db/schema-217to218.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-217to218.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-217to218.sql
diff --git a/engine/schema/resources/META-INF/db/schema-21to22-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-21to22-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-21to22-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-21to22-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-21to22-premium.sql b/engine/schema/src/main/resources/META-INF/db/schema-21to22-premium.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-21to22-premium.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-21to22-premium.sql
diff --git a/engine/schema/resources/META-INF/db/schema-21to22.sql b/engine/schema/src/main/resources/META-INF/db/schema-21to22.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-21to22.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-21to22.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2210to2211.sql b/engine/schema/src/main/resources/META-INF/db/schema-2210to2211.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2210to2211.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2210to2211.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2211to2212-premium.sql b/engine/schema/src/main/resources/META-INF/db/schema-2211to2212-premium.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2211to2212-premium.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2211to2212-premium.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2211to2212.sql b/engine/schema/src/main/resources/META-INF/db/schema-2211to2212.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2211to2212.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2211to2212.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2212to2213.sql b/engine/schema/src/main/resources/META-INF/db/schema-2212to2213.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2212to2213.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2212to2213.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2213to2214.sql b/engine/schema/src/main/resources/META-INF/db/schema-2213to2214.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2213to2214.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2213to2214.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2214to30-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-2214to30-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2214to30-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2214to30-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-2214to30.sql b/engine/schema/src/main/resources/META-INF/db/schema-2214to30.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-2214to30.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-2214to30.sql
diff --git a/engine/schema/resources/META-INF/db/schema-221to222-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-221to222-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-221to222-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-221to222-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-221to222-premium.sql b/engine/schema/src/main/resources/META-INF/db/schema-221to222-premium.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-221to222-premium.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-221to222-premium.sql
diff --git a/engine/schema/resources/META-INF/db/schema-221to222.sql b/engine/schema/src/main/resources/META-INF/db/schema-221to222.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-221to222.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-221to222.sql
diff --git a/engine/schema/resources/META-INF/db/schema-222to224-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-222to224-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-222to224-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-222to224-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-222to224-premium.sql b/engine/schema/src/main/resources/META-INF/db/schema-222to224-premium.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-222to224-premium.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-222to224-premium.sql
diff --git a/engine/schema/resources/META-INF/db/schema-222to224.sql b/engine/schema/src/main/resources/META-INF/db/schema-222to224.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-222to224.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-222to224.sql
diff --git a/engine/schema/resources/META-INF/db/schema-224to225-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-224to225-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-224to225-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-224to225-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-224to225.sql b/engine/schema/src/main/resources/META-INF/db/schema-224to225.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-224to225.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-224to225.sql
diff --git a/engine/schema/resources/META-INF/db/schema-225to226.sql b/engine/schema/src/main/resources/META-INF/db/schema-225to226.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-225to226.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-225to226.sql
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-227to228-premium.sql b/engine/schema/src/main/resources/META-INF/db/schema-227to228-premium.sql
new file mode 100755
index 0000000..26d555e
--- /dev/null
+++ b/engine/schema/src/main/resources/META-INF/db/schema-227to228-premium.sql
@@ -0,0 +1,37 @@
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+-- 
+--   http://www.apache.org/licenses/LICENSE-2.0
+-- 
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+
+--;
+-- Schema upgrade from 2.2.7 to 2.2.8;
+--;
+
+--;
+-- Cleanup usage records for bug # 10727;
+--;
+
+
+create table `cloud_usage`.`temp_usage` (  `vol_id` bigint unsigned, `created` DATETIME);
+
+insert into `cloud_usage`.`temp_usage` (vol_id, created) select id, max(created) from `cloud_usage`.`usage_volume` where deleted is null group by id having count(id) > 1;
+
+delete `cloud_usage`.`usage_volume` from `cloud_usage`.`usage_volume` inner join `cloud_usage`.`temp_usage` where `cloud_usage`.`usage_volume`.created = `cloud_usage`.`temp_usage`.created and `cloud_usage`.`usage_volume`.id = `cloud_usage`.`temp_usage`.vol_id and `cloud_usage`.`usage_volume`.deleted is null;
+
+drop table `cloud_usage`.`temp_usage`;
+
+update `cloud_usage`.`cloud_usage` set raw_usage = (raw_usage % 24) where usage_type =6 and raw_usage > 24 and (raw_usage % 24) <> 0;
+update `cloud_usage`.`cloud_usage` set raw_usage = 24 where usage_type =6 and raw_usage > 24 and (raw_usage % 24) = 0;
+
diff --git a/engine/schema/resources/META-INF/db/schema-227to228.sql b/engine/schema/src/main/resources/META-INF/db/schema-227to228.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-227to228.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-227to228.sql
diff --git a/engine/schema/resources/META-INF/db/schema-228to229.sql b/engine/schema/src/main/resources/META-INF/db/schema-228to229.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-228to229.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-228to229.sql
diff --git a/engine/schema/resources/META-INF/db/schema-229to2210.sql b/engine/schema/src/main/resources/META-INF/db/schema-229to2210.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-229to2210.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-229to2210.sql
diff --git a/engine/schema/resources/META-INF/db/schema-22beta1to22beta2.sql b/engine/schema/src/main/resources/META-INF/db/schema-22beta1to22beta2.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-22beta1to22beta2.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-22beta1to22beta2.sql
diff --git a/engine/schema/resources/META-INF/db/schema-22beta3to22beta4.sql b/engine/schema/src/main/resources/META-INF/db/schema-22beta3to22beta4.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-22beta3to22beta4.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-22beta3to22beta4.sql
diff --git a/engine/schema/resources/META-INF/db/schema-301to302-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-301to302-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-301to302-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-301to302-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-301to302.sql b/engine/schema/src/main/resources/META-INF/db/schema-301to302.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-301to302.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-301to302.sql
diff --git a/engine/schema/resources/META-INF/db/schema-302to303.sql b/engine/schema/src/main/resources/META-INF/db/schema-302to303.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-302to303.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-302to303.sql
diff --git a/engine/schema/resources/META-INF/db/schema-302to40-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-302to40-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-302to40-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-302to40-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-302to40.sql b/engine/schema/src/main/resources/META-INF/db/schema-302to40.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-302to40.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-302to40.sql
diff --git a/engine/schema/resources/META-INF/db/schema-304to305-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-304to305-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-304to305-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-304to305-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-304to305.sql b/engine/schema/src/main/resources/META-INF/db/schema-304to305.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-304to305.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-304to305.sql
diff --git a/engine/schema/resources/META-INF/db/schema-305to306-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-305to306-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-305to306-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-305to306-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-305to306.sql b/engine/schema/src/main/resources/META-INF/db/schema-305to306.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-305to306.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-305to306.sql
diff --git a/engine/schema/resources/META-INF/db/schema-306to307.sql b/engine/schema/src/main/resources/META-INF/db/schema-306to307.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-306to307.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-306to307.sql
diff --git a/engine/schema/resources/META-INF/db/schema-307to410-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-307to410-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-307to410-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-307to410-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-307to410.sql b/engine/schema/src/main/resources/META-INF/db/schema-307to410.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-307to410.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-307to410.sql
diff --git a/engine/schema/resources/META-INF/db/schema-30to301.sql b/engine/schema/src/main/resources/META-INF/db/schema-30to301.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-30to301.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-30to301.sql
diff --git a/engine/schema/resources/META-INF/db/schema-40to410-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-40to410-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-40to410-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-40to410-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-40to410.sql b/engine/schema/src/main/resources/META-INF/db/schema-40to410.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-40to410.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-40to410.sql
diff --git a/engine/schema/resources/META-INF/db/schema-41000to41100-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-41000to41100-cleanup.sql
similarity index 99%
rename from engine/schema/resources/META-INF/db/schema-41000to41100-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-41000to41100-cleanup.sql
index d7a080e..f8d9ce9 100644
--- a/engine/schema/resources/META-INF/db/schema-41000to41100-cleanup.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41000to41100-cleanup.sql
@@ -66,4 +66,4 @@
             left join
         `cloud`.`async_job` ON async_job.instance_id = user.id
             and async_job.instance_type = 'User'
-            and async_job.job_status = 0;
+            and async_job.job_status = 0;
\ No newline at end of file
diff --git a/engine/schema/resources/META-INF/db/schema-41000to41100.sql b/engine/schema/src/main/resources/META-INF/db/schema-41000to41100.sql
similarity index 99%
rename from engine/schema/resources/META-INF/db/schema-41000to41100.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-41000to41100.sql
index b3efce4..2db644f 100644
--- a/engine/schema/resources/META-INF/db/schema-41000to41100.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41000to41100.sql
@@ -607,4 +607,4 @@
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.sslcerts','name', 'varchar(255) NULL default NULL COMMENT ''Name of the Certificate'' ');
-CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.network_offerings','service_package_id', 'varchar(255) NULL default NULL COMMENT ''Netscaler ControlCenter Service Package'' ');
\ No newline at end of file
+CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.network_offerings','service_package_id', 'varchar(255) NULL default NULL COMMENT ''Netscaler ControlCenter Service Package'' ');
diff --git a/engine/schema/resources/META-INF/db/schema-410to420-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-410to420-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-410to420-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-410to420-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-410to420.sql b/engine/schema/src/main/resources/META-INF/db/schema-410to420.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-410to420.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-410to420.sql
diff --git a/engine/schema/resources/META-INF/db/schema-41100to41110-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-41100to41110-cleanup.sql
similarity index 94%
rename from engine/schema/resources/META-INF/db/schema-41100to41110-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-41100to41110-cleanup.sql
index 2c5855e..e6a5b3d 100644
--- a/engine/schema/resources/META-INF/db/schema-41100to41110-cleanup.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41100to41110-cleanup.sql
@@ -16,7 +16,7 @@
 -- under the License.
 
 --;
--- Schema upgrade from 4.11.0.0 to 4.11.1.0
+-- Schema cleanup after 4.11.0.0 to 4.11.1.0 upgrade
 --;
 
 DELETE FROM `cloud`.`configuration` WHERE `name`='vmware.ports.per.dvportgroup';
diff --git a/engine/schema/resources/META-INF/db/schema-41100to41110.sql b/engine/schema/src/main/resources/META-INF/db/schema-41100to41110.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-41100to41110.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-41100to41110.sql
diff --git a/engine/schema/resources/META-INF/db/schema-41100to41110-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200-cleanup.sql
similarity index 85%
copy from engine/schema/resources/META-INF/db/schema-41100to41110-cleanup.sql
copy to engine/schema/src/main/resources/META-INF/db/schema-41110to41200-cleanup.sql
index 2c5855e..a72b33f 100644
--- a/engine/schema/resources/META-INF/db/schema-41100to41110-cleanup.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200-cleanup.sql
@@ -16,7 +16,5 @@
 -- under the License.
 
 --;
--- Schema upgrade from 4.11.0.0 to 4.11.1.0
---;
-
-DELETE FROM `cloud`.`configuration` WHERE `name`='vmware.ports.per.dvportgroup';
+-- Schema upgrade cleanup from 4.11.1.0 to 4.12.0.0
+--;
\ No newline at end of file
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
new file mode 100644
index 0000000..de6865f
--- /dev/null
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
@@ -0,0 +1,37 @@
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+
+--;
+-- Schema upgrade from 4.11.1.0 to 4.12.0.0
+--;
+
+-- [CLOUDSTACK-10314] Add reason column to ACL rule table
+ALTER TABLE `cloud`.`network_acl_item` ADD COLUMN `reason` VARCHAR(2500) AFTER `display`;
+
+-- [CLOUDSTACK-9846] Make provision to store content and subject for Alerts in separate columns.
+ALTER TABLE `cloud`.`alert` ADD COLUMN `content` VARCHAR(5000);
+
+-- Fix the name of the column used to hold IPv4 range in 'vlan' table.
+ALTER TABLE `vlan` CHANGE `description` `ip4_range` varchar(255);
+
+-- [CLOUDSTACK-10344] bug when moving ACL rules (change order with drag and drop)
+-- We are only adding the permission to the default rules. Any custom rule must be configured by the root admin.
+INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 2, 'moveNetworkAclItem', 'ALLOW', 100) ON DUPLICATE KEY UPDATE rule=rule;
+INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 3, 'moveNetworkAclItem', 'ALLOW', 302) ON DUPLICATE KEY UPDATE rule=rule;
+INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 4, 'moveNetworkAclItem', 'ALLOW', 260) ON DUPLICATE KEY UPDATE rule=rule;
+
+UPDATE `cloud`.`async_job` SET `removed` = now() WHERE `removed` IS NULL;
\ No newline at end of file
diff --git a/engine/schema/resources/META-INF/db/schema-420to421.sql b/engine/schema/src/main/resources/META-INF/db/schema-420to421.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-420to421.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-420to421.sql
diff --git a/engine/schema/resources/META-INF/db/schema-421to430-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-421to430-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-421to430-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-421to430-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-421to430.sql b/engine/schema/src/main/resources/META-INF/db/schema-421to430.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-421to430.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-421to430.sql
diff --git a/engine/schema/resources/META-INF/db/schema-430to440-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-430to440-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-430to440-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-430to440-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-430to440.sql b/engine/schema/src/main/resources/META-INF/db/schema-430to440.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-430to440.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-430to440.sql
diff --git a/engine/schema/resources/META-INF/db/schema-440to441-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-440to441-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-440to441-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-440to441-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-440to441.sql b/engine/schema/src/main/resources/META-INF/db/schema-440to441.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-440to441.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-440to441.sql
diff --git a/engine/schema/resources/META-INF/db/schema-441to442.sql b/engine/schema/src/main/resources/META-INF/db/schema-441to442.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-441to442.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-441to442.sql
diff --git a/engine/schema/resources/META-INF/db/schema-442to450-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-442to450-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-442to450-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-442to450-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-442to450.sql b/engine/schema/src/main/resources/META-INF/db/schema-442to450.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-442to450.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-442to450.sql
diff --git a/engine/schema/resources/META-INF/db/schema-443to444.sql b/engine/schema/src/main/resources/META-INF/db/schema-443to444.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-443to444.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-443to444.sql
diff --git a/engine/schema/resources/META-INF/db/schema-450to451-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-450to451-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-450to451-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-450to451-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-450to451.sql b/engine/schema/src/main/resources/META-INF/db/schema-450to451.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-450to451.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-450to451.sql
diff --git a/engine/schema/resources/META-INF/db/schema-451to452-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-451to452-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-451to452-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-451to452-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-451to452.sql b/engine/schema/src/main/resources/META-INF/db/schema-451to452.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-451to452.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-451to452.sql
diff --git a/engine/schema/resources/META-INF/db/schema-452to453-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-452to453-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-452to453-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-452to453-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-452to453.sql b/engine/schema/src/main/resources/META-INF/db/schema-452to453.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-452to453.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-452to453.sql
diff --git a/engine/schema/resources/META-INF/db/schema-452to460-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-452to460-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-452to460-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-452to460-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-452to460.sql b/engine/schema/src/main/resources/META-INF/db/schema-452to460.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-452to460.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-452to460.sql
diff --git a/engine/schema/resources/META-INF/db/schema-460to461-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-460to461-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-460to461-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-460to461-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-460to461.sql b/engine/schema/src/main/resources/META-INF/db/schema-460to461.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-460to461.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-460to461.sql
diff --git a/engine/schema/resources/META-INF/db/schema-461to470-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-461to470-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-461to470-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-461to470-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-461to470.sql b/engine/schema/src/main/resources/META-INF/db/schema-461to470.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-461to470.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-461to470.sql
diff --git a/engine/schema/resources/META-INF/db/schema-470to471-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-470to471-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-470to471-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-470to471-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-470to471.sql b/engine/schema/src/main/resources/META-INF/db/schema-470to471.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-470to471.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-470to471.sql
diff --git a/engine/schema/resources/META-INF/db/schema-471to480-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-471to480-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-471to480-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-471to480-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-471to480.sql b/engine/schema/src/main/resources/META-INF/db/schema-471to480.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-471to480.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-471to480.sql
diff --git a/engine/schema/resources/META-INF/db/schema-480to481-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-480to481-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-480to481-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-480to481-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-480to481.sql b/engine/schema/src/main/resources/META-INF/db/schema-480to481.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-480to481.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-480to481.sql
diff --git a/engine/schema/resources/META-INF/db/schema-481to490-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-481to490-cleanup.sql
similarity index 98%
rename from engine/schema/resources/META-INF/db/schema-481to490-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-481to490-cleanup.sql
index adf566e..0b426dc 100644
--- a/engine/schema/resources/META-INF/db/schema-481to490-cleanup.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-481to490-cleanup.sql
@@ -47,9 +47,6 @@
 ALTER TABLE `cloud`.`iam_policy_permission` DROP INDEX `id` ;
 ALTER TABLE `cloud`.`image_store_details` DROP INDEX `id` ;
 ALTER TABLE `cloud`.`instance_group` DROP INDEX `id` ;
-ALTER TABLE `cloud`.`netapp_lun` DROP INDEX `id` ;
-ALTER TABLE `cloud`.`netapp_pool` DROP INDEX `id` ;
-ALTER TABLE `cloud`.`netapp_volume` DROP INDEX `id` ;
 ALTER TABLE `cloud`.`network_acl_item_cidrs` DROP INDEX `id` ;
 ALTER TABLE `cloud`.`network_offerings` DROP INDEX `id` ;
 ALTER TABLE `cloud`.`nic_secondary_ips` DROP INDEX `id` ;
diff --git a/engine/schema/resources/META-INF/db/schema-481to490.sql b/engine/schema/src/main/resources/META-INF/db/schema-481to490.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-481to490.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-481to490.sql
diff --git a/engine/schema/resources/META-INF/db/schema-490to4910-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-490to4910-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-490to4910-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-490to4910-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-490to4910.sql b/engine/schema/src/main/resources/META-INF/db/schema-490to4910.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-490to4910.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-490to4910.sql
diff --git a/engine/schema/resources/META-INF/db/schema-4910to4920-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-4910to4920-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-4910to4920-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-4910to4920-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-4910to4920.sql b/engine/schema/src/main/resources/META-INF/db/schema-4910to4920.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-4910to4920.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-4910to4920.sql
diff --git a/engine/schema/resources/META-INF/db/schema-4920to4930-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-4920to4930-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-4920to4930-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-4920to4930-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-4920to4930.sql b/engine/schema/src/main/resources/META-INF/db/schema-4920to4930.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-4920to4930.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-4920to4930.sql
diff --git a/engine/schema/resources/META-INF/db/schema-4930to41000-cleanup.sql b/engine/schema/src/main/resources/META-INF/db/schema-4930to41000-cleanup.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-4930to41000-cleanup.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-4930to41000-cleanup.sql
diff --git a/engine/schema/resources/META-INF/db/schema-4930to41000.sql b/engine/schema/src/main/resources/META-INF/db/schema-4930to41000.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-4930to41000.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-4930to41000.sql
diff --git a/engine/schema/resources/META-INF/db/schema-level.sql b/engine/schema/src/main/resources/META-INF/db/schema-level.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-level.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-level.sql
diff --git a/engine/schema/resources/META-INF/db/schema-snapshot-217to224.sql b/engine/schema/src/main/resources/META-INF/db/schema-snapshot-217to224.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-snapshot-217to224.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-snapshot-217to224.sql
diff --git a/engine/schema/resources/META-INF/db/schema-snapshot-223to224.sql b/engine/schema/src/main/resources/META-INF/db/schema-snapshot-223to224.sql
similarity index 100%
rename from engine/schema/resources/META-INF/db/schema-snapshot-223to224.sql
rename to engine/schema/src/main/resources/META-INF/db/schema-snapshot-223to224.sql
diff --git a/engine/schema/test/com/cloud/storage/dao/StoragePoolTagsDaoImplTest.java b/engine/schema/src/test/java/com/cloud/storage/dao/StoragePoolTagsDaoImplTest.java
similarity index 100%
rename from engine/schema/test/com/cloud/storage/dao/StoragePoolTagsDaoImplTest.java
rename to engine/schema/src/test/java/com/cloud/storage/dao/StoragePoolTagsDaoImplTest.java
diff --git a/engine/schema/test/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
similarity index 67%
rename from engine/schema/test/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
rename to engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
index 15bfd8a..3e2995d 100644
--- a/engine/schema/test/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
+++ b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
@@ -16,23 +16,29 @@
 // under the License.
 package com.cloud.upgrade;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+import org.apache.cloudstack.utils.CloudStackVersion;
+
+import com.cloud.upgrade.DatabaseUpgradeChecker.NoopDbUpgrade;
 import com.cloud.upgrade.dao.DbUpgrade;
-import com.cloud.upgrade.dao.Upgrade452to460;
+import com.cloud.upgrade.dao.Upgrade41000to41100;
+import com.cloud.upgrade.dao.Upgrade41100to41110;
+import com.cloud.upgrade.dao.Upgrade41110to41200;
+import com.cloud.upgrade.dao.Upgrade452to453;
+import com.cloud.upgrade.dao.Upgrade453to460;
 import com.cloud.upgrade.dao.Upgrade460to461;
 import com.cloud.upgrade.dao.Upgrade461to470;
 import com.cloud.upgrade.dao.Upgrade470to471;
 import com.cloud.upgrade.dao.Upgrade471to480;
 import com.cloud.upgrade.dao.Upgrade480to481;
 import com.cloud.upgrade.dao.Upgrade490to4910;
-import com.cloud.upgrade.dao.Upgrade41100to41110;
-import org.apache.cloudstack.utils.CloudStackVersion;
-import org.junit.Test;
-
-import java.util.Arrays;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 
 public class DatabaseUpgradeCheckerTest {
 
@@ -70,18 +76,18 @@
         assertTrue(upgrades.length >= 1);
         assertTrue(upgrades[0] instanceof Upgrade490to4910);
 
-        assertTrue(Arrays.equals(new String[] { "4.9.0", currentVersion.toString()}, upgrades[0].getUpgradableVersionRange()));
+        assertTrue(Arrays.equals(new String[] {"4.9.0", currentVersion.toString()}, upgrades[0].getUpgradableVersionRange()));
         assertEquals(currentVersion.toString(), upgrades[0].getUpgradedVersion());
 
     }
 
     @Test
-    public void testCalculateUpgradePath4110to4111() {
+    public void testCalculateUpgradePath410to412() {
 
-        final CloudStackVersion dbVersion = CloudStackVersion.parse("4.11.0.0");
+        final CloudStackVersion dbVersion = CloudStackVersion.parse("4.10.0.0");
         assertNotNull(dbVersion);
 
-        final CloudStackVersion currentVersion = CloudStackVersion.parse("4.11.1.0");
+        final CloudStackVersion currentVersion = CloudStackVersion.parse("4.12.0.0");
         assertNotNull(currentVersion);
 
         final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
@@ -89,11 +95,12 @@
 
         assertNotNull(upgrades);
         assertTrue(upgrades.length >= 1);
-        assertTrue(upgrades[0] instanceof Upgrade41100to41110);
+        assertTrue(upgrades[0] instanceof Upgrade41000to41100);
+        assertTrue(upgrades[1] instanceof Upgrade41100to41110);
+        assertTrue(upgrades[2] instanceof Upgrade41110to41200);
 
-        assertTrue(Arrays.equals(new String[] { "4.11.0.0", currentVersion.toString()},
-                upgrades[0].getUpgradableVersionRange()));
-        assertEquals(currentVersion.toString(), upgrades[0].getUpgradedVersion());
+        assertTrue(Arrays.equals(new String[] {"4.11.0.0", "4.11.1.0"}, upgrades[1].getUpgradableVersionRange()));
+        assertEquals(currentVersion.toString(), upgrades[2].getUpgradedVersion());
 
     }
 
@@ -131,15 +138,33 @@
 
         assertNotNull(upgrades);
 
-        assertTrue(upgrades[0] instanceof Upgrade452to460);
-        assertTrue(upgrades[1] instanceof Upgrade460to461);
-        assertTrue(upgrades[2] instanceof Upgrade461to470);
-        assertTrue(upgrades[3] instanceof Upgrade470to471);
-        assertTrue(upgrades[4] instanceof Upgrade471to480);
-        assertTrue(upgrades[5] instanceof Upgrade480to481);
+        assertTrue(upgrades[0] instanceof Upgrade452to453);
+        assertTrue(upgrades[1] instanceof Upgrade453to460);
+        assertTrue(upgrades[2] instanceof Upgrade460to461);
+        assertTrue(upgrades[3] instanceof Upgrade461to470);
+        assertTrue(upgrades[4] instanceof Upgrade470to471);
+        assertTrue(upgrades[5] instanceof Upgrade471to480);
+        assertTrue(upgrades[6] instanceof Upgrade480to481);
 
-        assertTrue(Arrays.equals(new String[] { "4.8.1", currentVersion.toString()}, upgrades[6].getUpgradableVersionRange()));
-        assertEquals(currentVersion.toString(), upgrades[6].getUpgradedVersion());
-
+        assertTrue(Arrays.equals(new String[] {"4.8.1", currentVersion.toString()}, upgrades[upgrades.length - 1].getUpgradableVersionRange()));
+        assertEquals(currentVersion.toString(), upgrades[upgrades.length - 1].getUpgradedVersion());
     }
+
+    @Test
+    public void testCalculateUpgradePathUnkownDbVersion() {
+
+        final CloudStackVersion dbVersion = CloudStackVersion.parse("4.99.0.0");
+        assertNotNull(dbVersion);
+
+        final CloudStackVersion currentVersion = CloudStackVersion.parse("4.99.1.0");
+        assertNotNull(currentVersion);
+
+        final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
+        final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
+        assertNotNull(upgrades);
+        assertTrue(upgrades.length == 1);
+        assertTrue(upgrades[0] instanceof NoopDbUpgrade);
+
+     }
+
 }
diff --git a/engine/schema/test/com/cloud/upgrade/dao/DatabaseAccessObjectTest.java b/engine/schema/src/test/java/com/cloud/upgrade/dao/DatabaseAccessObjectTest.java
similarity index 100%
rename from engine/schema/test/com/cloud/upgrade/dao/DatabaseAccessObjectTest.java
rename to engine/schema/src/test/java/com/cloud/upgrade/dao/DatabaseAccessObjectTest.java
diff --git a/engine/schema/test/com/cloud/upgrade/dao/DbUpgradeUtilsTest.java b/engine/schema/src/test/java/com/cloud/upgrade/dao/DbUpgradeUtilsTest.java
similarity index 100%
rename from engine/schema/test/com/cloud/upgrade/dao/DbUpgradeUtilsTest.java
rename to engine/schema/src/test/java/com/cloud/upgrade/dao/DbUpgradeUtilsTest.java
diff --git a/engine/schema/test/com/cloud/usage/dao/UsageStorageDaoImplTest.java b/engine/schema/src/test/java/com/cloud/usage/dao/UsageStorageDaoImplTest.java
similarity index 100%
rename from engine/schema/test/com/cloud/usage/dao/UsageStorageDaoImplTest.java
rename to engine/schema/src/test/java/com/cloud/usage/dao/UsageStorageDaoImplTest.java
diff --git a/engine/schema/test/com/cloud/vm/dao/VMInstanceDaoImplTest.java b/engine/schema/src/test/java/com/cloud/vm/dao/VMInstanceDaoImplTest.java
similarity index 100%
rename from engine/schema/test/com/cloud/vm/dao/VMInstanceDaoImplTest.java
rename to engine/schema/src/test/java/com/cloud/vm/dao/VMInstanceDaoImplTest.java
diff --git a/engine/schema/test/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImplTest.java b/engine/schema/src/test/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImplTest.java
similarity index 100%
rename from engine/schema/test/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImplTest.java
rename to engine/schema/src/test/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImplTest.java
diff --git a/engine/schema/test/resources/db.properties b/engine/schema/src/test/resources/db.properties
similarity index 100%
rename from engine/schema/test/resources/db.properties
rename to engine/schema/src/test/resources/db.properties
diff --git a/engine/service/pom.xml b/engine/service/pom.xml
index 0b6af09..1b411a8 100644
--- a/engine/service/pom.xml
+++ b/engine/service/pom.xml
@@ -1,95 +1,93 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <artifactId>cloud-engine-service</artifactId>
-  <packaging>war</packaging>
-  <name>Apache CloudStack Cloud Engine Service</name>
-  <url>http://www.cloudstack.org</url>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-orchestration</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-network</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-context</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-web</artifactId>
-    </dependency>
-  </dependencies>
-  <build>
-    <finalName>engine</finalName>
-    <plugins>
-      <plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${cs.jetty.version}</version>
-        <configuration>
-          <scanIntervalSeconds>10</scanIntervalSeconds>
-          <webApp>
-            <contextPath>/engine</contextPath>
-          </webApp>
-          <connectors>
-            <connector
-              implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
-              <port>1736</port>
-              <maxIdleTime>60000</maxIdleTime>
-            </connector>
-          </connectors>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>cloud-engine-service</artifactId>
+    <packaging>war</packaging>
+    <name>Apache CloudStack Cloud Engine Service</name>
+    <url>http://www.cloudstack.org</url>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-orchestration</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-network</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>engine</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>${cs.jetty.version}</version>
+                <configuration>
+                    <scanIntervalSeconds>10</scanIntervalSeconds>
+                    <webApp>
+                        <contextPath>/engine</contextPath>
+                    </webApp>
+                    <connectors>
+                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
+                            <port>1736</port>
+                            <maxIdleTime>60000</maxIdleTime>
+                        </connector>
+                    </connectors>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/engine/storage/cache/pom.xml b/engine/storage/cache/pom.xml
index 6a2b2260..7b36645 100644
--- a/engine/storage/cache/pom.xml
+++ b/engine/storage/cache/pom.xml
@@ -1,33 +1,42 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-cache</artifactId>
-  <name>Apache CloudStack Engine Storage Cache Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-cache</artifactId>
+    <name>Apache CloudStack Engine Storage Cache Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java b/engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
similarity index 100%
rename from engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
rename to engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/allocator/StorageCacheAllocator.java
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java b/engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
similarity index 100%
rename from engine/storage/cache/src/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
rename to engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/allocator/StorageCacheRandomAllocator.java
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java b/engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
similarity index 100%
rename from engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
rename to engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithm.java b/engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithm.java
similarity index 100%
rename from engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithm.java
rename to engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithm.java
diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRU.java b/engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRU.java
similarity index 100%
rename from engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRU.java
rename to engine/storage/cache/src/main/java/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRU.java
diff --git a/engine/storage/cache/resources/META-INF/cloudstack/core/spring-engine-storage-cache-core-context.xml b/engine/storage/cache/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-cache-core-context.xml
similarity index 100%
rename from engine/storage/cache/resources/META-INF/cloudstack/core/spring-engine-storage-cache-core-context.xml
rename to engine/storage/cache/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-cache-core-context.xml
diff --git a/engine/storage/configdrive/pom.xml b/engine/storage/configdrive/pom.xml
index a2fd698..16223f9 100644
--- a/engine/storage/configdrive/pom.xml
+++ b/engine/storage/configdrive/pom.xml
@@ -1,43 +1,42 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-configdrive</artifactId>
-  <name>Apache CloudStack Framework - Storage Config Drive Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-configdrive</artifactId>
+    <name>Apache CloudStack Framework - Storage Config Drive Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDrive.java b/engine/storage/configdrive/src/main/java/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
similarity index 100%
rename from engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
rename to engine/storage/configdrive/src/main/java/org/apache/cloudstack/storage/configdrive/ConfigDrive.java
diff --git a/engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java b/engine/storage/configdrive/src/main/java/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
similarity index 100%
rename from engine/storage/configdrive/src/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
rename to engine/storage/configdrive/src/main/java/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilder.java
diff --git a/engine/storage/configdrive/test/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilderTest.java b/engine/storage/configdrive/src/test/java/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilderTest.java
similarity index 100%
rename from engine/storage/configdrive/test/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilderTest.java
rename to engine/storage/configdrive/src/test/java/org/apache/cloudstack/storage/configdrive/ConfigDriveBuilderTest.java
diff --git a/engine/storage/datamotion/pom.xml b/engine/storage/datamotion/pom.xml
index 15e48dc..9aceddd 100644
--- a/engine/storage/datamotion/pom.xml
+++ b/engine/storage/datamotion/pom.xml
@@ -1,41 +1,49 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-datamotion</artifactId>
-  <name>Apache CloudStack Engine Storage Data Motion Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-      <scope>runtime</scope>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-datamotion</artifactId>
+    <name>Apache CloudStack Engine Storage Data Motion Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
similarity index 100%
rename from engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
rename to engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java
similarity index 100%
rename from engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java
rename to engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
similarity index 82%
rename from engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
rename to engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
index fc445cf..74ad8cb 100644
--- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
+++ b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
@@ -50,6 +50,7 @@
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.StorageManager;
+import com.cloud.storage.StoragePool;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.VolumeDetailVO;
 import com.cloud.storage.Volume;
@@ -85,8 +86,10 @@
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver;
 import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.StorageAction;
 import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StrategyPriority;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
@@ -295,7 +298,7 @@
             VolumeInfo srcVolumeInfo = (VolumeInfo)srcData;
             TemplateInfo destTemplateInfo = (TemplateInfo)destData;
 
-            handleCreateTemplateFromVolume(srcVolumeInfo, destTemplateInfo, callback);
+            handleCreateTemplateFromManagedVolume(srcVolumeInfo, destTemplateInfo, callback);
         }
         else {
             handleError(OPERATION_NOT_SUPPORTED, callback);
@@ -309,7 +312,7 @@
 
         if (canHandleSrc && (destData instanceof TemplateInfo || destData instanceof SnapshotInfo) &&
                 (destData.getDataStore().getRole() == DataStoreRole.Image || destData.getDataStore().getRole() == DataStoreRole.ImageCache)) {
-            handleCopyDataToSecondaryStorage(srcSnapshotInfo, destData, callback);
+            handleCopyAsyncToSecondaryStorage(srcSnapshotInfo, destData, callback);
         } else if (destData instanceof VolumeInfo) {
             handleCopyAsyncForSnapshotToVolume(srcSnapshotInfo, (VolumeInfo)destData, callback);
         } else {
@@ -319,24 +322,26 @@
 
     private void handleCopyAsyncForSnapshotToVolume(SnapshotInfo srcSnapshotInfo, VolumeInfo destVolumeInfo,
                                                     AsyncCompletionCallback<CopyCommandResult> callback) {
+        boolean canHandleSrc = canHandle(srcSnapshotInfo);
         boolean canHandleDest = canHandle(destVolumeInfo);
 
-        if (!canHandleDest) {
+        if (canHandleSrc && canHandleDest) {
+            if (srcSnapshotInfo.getDataStore().getId() == destVolumeInfo.getDataStore().getId()) {
+                handleCreateManagedVolumeFromManagedSnapshot(srcSnapshotInfo, destVolumeInfo, callback);
+            } else {
+                String errMsg = "To perform this operation, the source and destination primary storages must be the same.";
+
+                handleError(errMsg, callback);
+            }
+        }
+        else if (!canHandleSrc && !canHandleDest) {
             handleError(OPERATION_NOT_SUPPORTED, callback);
         }
-
-        boolean canHandleSrc = canHandle(srcSnapshotInfo);
-
-        if (!canHandleSrc) {
-            handleCreateVolumeFromSnapshotOnSecondaryStorage(srcSnapshotInfo, destVolumeInfo, callback);
+        else if (canHandleSrc) {
+            handleCreateNonManagedVolumeFromManagedSnapshot(srcSnapshotInfo, destVolumeInfo, callback);
         }
-
-        if (srcSnapshotInfo.getDataStore().getId() == destVolumeInfo.getDataStore().getId()) {
-            handleCreateVolumeFromSnapshotBothOnStorageSystem(srcSnapshotInfo, destVolumeInfo, callback);
-        } else {
-            String errMsg = "To perform this operation, the source and destination primary storages must be the same.";
-
-            handleError(errMsg, callback);
+        else {
+            handleCreateManagedVolumeFromNonManagedSnapshot(srcSnapshotInfo, destVolumeInfo, callback);
         }
     }
 
@@ -436,7 +441,7 @@
                 hostVO = getHost(srcVolumeInfo.getDataCenterId(), hypervisorType, false);
             }
 
-            volumePath = copyVolumeToSecondaryStorage(srcVolumeInfo, destVolumeInfo, hostVO,
+            volumePath = copyManagedVolumeToSecondaryStorage(srcVolumeInfo, destVolumeInfo, hostVO,
                     "Unable to copy the volume from managed storage to secondary storage");
         }
         catch (Exception ex) {
@@ -503,7 +508,7 @@
             setCertainVolumeValuesNull(destVolumeInfo.getId());
 
             // migrate the volume via the hypervisor
-            String path = migrateVolume(srcVolumeInfo, destVolumeInfo, hostVO, "Unable to migrate the volume from managed storage to non-managed storage");
+            String path = migrateVolumeForKVM(srcVolumeInfo, destVolumeInfo, hostVO, "Unable to migrate the volume from managed storage to non-managed storage");
 
             updateVolumePath(destVolumeInfo.getId(), path);
         }
@@ -625,48 +630,17 @@
         try {
             HypervisorType hypervisorType = srcVolumeInfo.getHypervisorType();
 
-            if (!HypervisorType.KVM.equals(hypervisorType)) {
-                throw new CloudRuntimeException("Currently, only the KVM hypervisor type is supported for the migration of a volume " +
+            if (!HypervisorType.XenServer.equals(hypervisorType) && !HypervisorType.KVM.equals(hypervisorType)) {
+                throw new CloudRuntimeException("Currently, only the XenServer and KVM hypervisor types are supported for the migration of a volume " +
                         "from non-managed storage to managed storage.");
             }
 
-            VirtualMachine vm = srcVolumeInfo.getAttachedVM();
-
-            if (vm != null && vm.getState() != VirtualMachine.State.Stopped) {
-                throw new CloudRuntimeException("Currently, if a volume to migrate from non-managed storage to managed storage is attached to " +
-                        "a VM, the VM must be in the Stopped state.");
-            }
-
-            destVolumeInfo.getDataStore().getDriver().createAsync(destVolumeInfo.getDataStore(), destVolumeInfo, null);
-
-            VolumeVO volumeVO = _volumeDao.findById(destVolumeInfo.getId());
-
-            volumeVO.setPath(volumeVO.get_iScsiName());
-
-            _volumeDao.update(volumeVO.getId(), volumeVO);
-
-            destVolumeInfo = _volumeDataFactory.getVolume(destVolumeInfo.getId(), destVolumeInfo.getDataStore());
-
-            long srcStoragePoolId = srcVolumeInfo.getPoolId();
-            StoragePoolVO srcStoragePoolVO = _storagePoolDao.findById(srcStoragePoolId);
-
-            HostVO hostVO;
-
-            if (srcStoragePoolVO.getClusterId() != null) {
-                hostVO = getHostInCluster(srcStoragePoolVO.getClusterId());
+            if (HypervisorType.XenServer.equals(hypervisorType)) {
+                handleVolumeMigrationForXenServer(srcVolumeInfo, destVolumeInfo);
             }
             else {
-                hostVO = getHost(destVolumeInfo.getDataCenterId(), hypervisorType, false);
+                handleVolumeMigrationForKVM(srcVolumeInfo, destVolumeInfo);
             }
-
-            // migrate the volume via the hypervisor
-            migrateVolume(srcVolumeInfo, destVolumeInfo, hostVO, "Unable to migrate the volume from non-managed storage to managed storage");
-
-            volumeVO = _volumeDao.findById(destVolumeInfo.getId());
-
-            volumeVO.setFormat(ImageFormat.QCOW2);
-
-            _volumeDao.update(volumeVO.getId(), volumeVO);
         }
         catch (Exception ex) {
             errMsg = "Migration operation failed in 'StorageSystemDataMotionStrategy.handleVolumeMigrationFromNonManagedStorageToManagedStorage': " +
@@ -696,6 +670,155 @@
         }
     }
 
+    private void handleVolumeMigrationForXenServer(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo) {
+        VirtualMachine vm = srcVolumeInfo.getAttachedVM();
+
+        if (vm == null || vm.getState() != VirtualMachine.State.Running) {
+            throw new CloudRuntimeException("Currently, a volume to migrate from non-managed storage to managed storage on XenServer must be attached to " +
+                    "a VM in the Running state.");
+        }
+
+        destVolumeInfo.getDataStore().getDriver().createAsync(destVolumeInfo.getDataStore(), destVolumeInfo, null);
+
+        destVolumeInfo = _volumeDataFactory.getVolume(destVolumeInfo.getId(), destVolumeInfo.getDataStore());
+
+        handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
+        HostVO hostVO = _hostDao.findById(vm.getHostId());
+
+        _volumeService.grantAccess(destVolumeInfo, hostVO, destVolumeInfo.getDataStore());
+
+        String value = _configDao.getValue(Config.MigrateWait.key());
+        int waitInterval = NumbersUtil.parseInt(value, Integer.parseInt(Config.MigrateWait.getDefaultValue()));
+
+        StoragePool destPool = (StoragePool)dataStoreMgr.getDataStore(destVolumeInfo.getDataStore().getId(), DataStoreRole.Primary);
+
+        MigrateVolumeCommand command = new MigrateVolumeCommand(srcVolumeInfo.getId(), srcVolumeInfo.getPath(), destPool, srcVolumeInfo.getAttachedVmName(),
+                srcVolumeInfo.getVolumeType(), waitInterval);
+
+        Map<String, String> details = new HashMap<>();
+
+        details.put(DiskTO.MANAGED, Boolean.TRUE.toString());
+        details.put(DiskTO.IQN, destVolumeInfo.get_iScsiName());
+        details.put(DiskTO.STORAGE_HOST, destPool.getHostAddress());
+
+        command.setDestDetails(details);
+
+        EndPoint ep = selector.select(srcVolumeInfo, StorageAction.MIGRATEVOLUME);
+
+        Answer answer;
+
+        if (ep == null) {
+            String errMsg = "No remote endpoint to send command to; check if host or SSVM is down";
+
+            LOGGER.error(errMsg);
+
+            answer = new Answer(command, false, errMsg);
+        } else {
+            answer = ep.sendMessage(command);
+        }
+
+        handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+
+        if (answer == null || !answer.getResult()) {
+            handleFailedVolumeMigration(srcVolumeInfo, destVolumeInfo, hostVO);
+
+            throw new CloudRuntimeException("Failed to migrate volume with ID " + srcVolumeInfo.getId() + " to storage pool with ID " + destPool.getId());
+        } else {
+            handleSuccessfulVolumeMigration(srcVolumeInfo, destPool, (MigrateVolumeAnswer)answer);
+        }
+    }
+
+    private void handleSuccessfulVolumeMigration(VolumeInfo srcVolumeInfo, StoragePool destPool, MigrateVolumeAnswer migrateVolumeAnswer) {
+        VolumeVO volumeVO = _volumeDao.findById(srcVolumeInfo.getId());
+
+        volumeVO.setPath(migrateVolumeAnswer.getVolumePath());
+
+        String chainInfo = migrateVolumeAnswer.getVolumeChainInfo();
+
+        if (chainInfo != null) {
+            volumeVO.setChainInfo(chainInfo);
+        }
+
+        volumeVO.setPodId(destPool.getPodId());
+        volumeVO.setPoolId(destPool.getId());
+        volumeVO.setLastPoolId(srcVolumeInfo.getPoolId());
+
+        _volumeDao.update(srcVolumeInfo.getId(), volumeVO);
+    }
+
+    private void handleFailedVolumeMigration(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo, HostVO hostVO) {
+        try {
+            _volumeService.revokeAccess(destVolumeInfo, hostVO, destVolumeInfo.getDataStore());
+        }
+        catch (Exception ex) {
+            LOGGER.warn("Failed to revoke access to the volume with the following ID: " + destVolumeInfo.getId());
+        }
+
+        try {
+            VolumeDetailVO volumeDetailVO = new VolumeDetailVO(destVolumeInfo.getId(), PrimaryDataStoreDriver.BASIC_DELETE_BY_FOLDER,
+                    Boolean.TRUE.toString(), false);
+
+            volumeDetailsDao.persist(volumeDetailVO);
+
+            destVolumeInfo.getDataStore().getDriver().deleteAsync(destVolumeInfo.getDataStore(), destVolumeInfo, null);
+
+            volumeDetailsDao.removeDetails(srcVolumeInfo.getId());
+        }
+        catch (Exception ex) {
+            LOGGER.warn(ex.getMessage());
+        }
+
+        VolumeVO volumeVO = _volumeDao.findById(srcVolumeInfo.getId());
+
+        volumeVO.setPoolId(srcVolumeInfo.getPoolId());
+        volumeVO.setLastPoolId(srcVolumeInfo.getLastPoolId());
+        volumeVO.setFolder(srcVolumeInfo.getFolder());
+        volumeVO.set_iScsiName(srcVolumeInfo.get_iScsiName());
+
+        _volumeDao.update(srcVolumeInfo.getId(), volumeVO);
+    }
+
+    private void handleVolumeMigrationForKVM(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo) {
+        VirtualMachine vm = srcVolumeInfo.getAttachedVM();
+
+        if (vm != null && vm.getState() != VirtualMachine.State.Stopped) {
+            throw new CloudRuntimeException("Currently, if a volume to migrate from non-managed storage to managed storage on KVM is attached to " +
+                    "a VM, the VM must be in the Stopped state.");
+        }
+
+        destVolumeInfo.getDataStore().getDriver().createAsync(destVolumeInfo.getDataStore(), destVolumeInfo, null);
+
+        VolumeVO volumeVO = _volumeDao.findById(destVolumeInfo.getId());
+
+        volumeVO.setPath(volumeVO.get_iScsiName());
+
+        _volumeDao.update(volumeVO.getId(), volumeVO);
+
+        destVolumeInfo = _volumeDataFactory.getVolume(destVolumeInfo.getId(), destVolumeInfo.getDataStore());
+
+        long srcStoragePoolId = srcVolumeInfo.getPoolId();
+        StoragePoolVO srcStoragePoolVO = _storagePoolDao.findById(srcStoragePoolId);
+
+        HostVO hostVO;
+
+        if (srcStoragePoolVO.getClusterId() != null) {
+            hostVO = getHostInCluster(srcStoragePoolVO.getClusterId());
+        }
+        else {
+            hostVO = getHost(destVolumeInfo.getDataCenterId(), HypervisorType.KVM, false);
+        }
+
+        // migrate the volume via the hypervisor
+        migrateVolumeForKVM(srcVolumeInfo, destVolumeInfo, hostVO, "Unable to migrate the volume from non-managed storage to managed storage");
+
+        volumeVO = _volumeDao.findById(destVolumeInfo.getId());
+
+        volumeVO.setFormat(ImageFormat.QCOW2);
+
+        _volumeDao.update(volumeVO.getId(), volumeVO);
+    }
+
     /**
      * This function is responsible for copying a snapshot from managed storage to secondary storage. This is used in the following two cases:
      * 1) When creating a template from a snapshot
@@ -705,7 +828,7 @@
      * @param destData destination (can be template or snapshot)
      * @param callback callback for async
      */
-    private void handleCopyDataToSecondaryStorage(SnapshotInfo snapshotInfo, DataObject destData, AsyncCompletionCallback<CopyCommandResult> callback) {
+    private void handleCopyAsyncToSecondaryStorage(SnapshotInfo snapshotInfo, DataObject destData, AsyncCompletionCallback<CopyCommandResult> callback) {
         String errMsg = null;
         CopyCmdAnswer copyCmdAnswer = null;
         boolean usingBackendSnapshot = false;
@@ -786,13 +909,7 @@
                         disconnectHostFromVolume(hostVO, srcDataStore.getId(), iqn);
                     }
 
-                    if (copyCmdAnswer == null || !copyCmdAnswer.getResult()) {
-                        if (copyCmdAnswer != null && !StringUtils.isEmpty(copyCmdAnswer.getDetails())) {
-                            throw new CloudRuntimeException(copyCmdAnswer.getDetails());
-                        } else {
-                            throw new CloudRuntimeException("Unable to create volume from snapshot");
-                        }
-                    }
+                    verifyCopyCmdAnswer(copyCmdAnswer, snapshotInfo);
 
                     vmdk = copyCmdAnswer.getNewData().getPath();
                     uuid = UUID.randomUUID().toString();
@@ -829,9 +946,10 @@
                 copyCmdAnswer = (CopyCmdAnswer)_agentMgr.send(hostVO.getId(), copyCommand);
 
                 if (!copyCmdAnswer.getResult()) {
-                    // We were not able to copy. Handle it.
                     errMsg = copyCmdAnswer.getDetails();
 
+                    LOGGER.warn(errMsg);
+
                     throw new CloudRuntimeException(errMsg);
                 }
 
@@ -925,14 +1043,155 @@
         }
     }
 
+    private void handleCreateNonManagedVolumeFromManagedSnapshot(SnapshotInfo snapshotInfo, VolumeInfo volumeInfo,
+                                                                 AsyncCompletionCallback<CopyCommandResult> callback) {
+        if (!HypervisorType.XenServer.equals(snapshotInfo.getHypervisorType())) {
+            String errMsg = "Creating a volume on non-managed storage from a snapshot on managed storage is currently only supported with XenServer.";
+
+            handleError(errMsg, callback);
+        }
+
+        long volumeStoragePoolId = volumeInfo.getDataStore().getId();
+        StoragePoolVO volumeStoragePoolVO = _storagePoolDao.findById(volumeStoragePoolId);
+
+        if (volumeStoragePoolVO.getClusterId() == null) {
+            String errMsg = "To create a non-managed volume from a managed snapshot, the destination storage pool must be cluster scoped.";
+
+            handleError(errMsg, callback);
+        }
+
+        String errMsg = null;
+        CopyCmdAnswer copyCmdAnswer = null;
+
+        boolean usingBackendSnapshot = false;
+
+        try {
+            snapshotInfo.processEvent(Event.CopyingRequested);
+
+            usingBackendSnapshot = usingBackendSnapshotFor(snapshotInfo);
+
+            if (usingBackendSnapshot) {
+                boolean computeClusterSupportsVolumeClone = clusterDao.getSupportsResigning(volumeStoragePoolVO.getClusterId());
+
+                if (!computeClusterSupportsVolumeClone) {
+                    String noSupportForResignErrMsg = "Unable to locate an applicable host with which to perform a resignature operation : Cluster ID = " +
+                            volumeStoragePoolVO.getClusterId();
+
+                    LOGGER.warn(noSupportForResignErrMsg);
+
+                    throw new CloudRuntimeException(noSupportForResignErrMsg);
+                }
+
+                createVolumeFromSnapshot(snapshotInfo);
+
+                HostVO hostVO = getHost(snapshotInfo.getDataCenterId(), HypervisorType.XenServer, true);
+
+                copyCmdAnswer = performResignature(snapshotInfo, hostVO, null, true);
+
+                verifyCopyCmdAnswer(copyCmdAnswer, snapshotInfo);
+            }
+
+            String value = _configDao.getValue(Config.PrimaryStorageDownloadWait.toString());
+            int primaryStorageDownloadWait = NumbersUtil.parseInt(value, Integer.parseInt(Config.PrimaryStorageDownloadWait.getDefaultValue()));
+
+            CopyCommand copyCommand = new CopyCommand(snapshotInfo.getTO(), volumeInfo.getTO(), primaryStorageDownloadWait,
+                    VirtualMachineManager.ExecuteInSequence.value());
+
+            HostVO hostVO = getHostInCluster(volumeStoragePoolVO.getClusterId());
+
+            if (!usingBackendSnapshot) {
+                long snapshotStoragePoolId = snapshotInfo.getDataStore().getId();
+                DataStore snapshotDataStore = dataStoreMgr.getDataStore(snapshotStoragePoolId, DataStoreRole.Primary);
+
+                _volumeService.grantAccess(snapshotInfo, hostVO, snapshotDataStore);
+            }
+
+            Map<String, String> srcDetails = getSnapshotDetails(snapshotInfo);
+
+            copyCommand.setOptions(srcDetails);
+
+            copyCmdAnswer = (CopyCmdAnswer)_agentMgr.send(hostVO.getId(), copyCommand);
+
+            if (!copyCmdAnswer.getResult()) {
+                errMsg = copyCmdAnswer.getDetails();
+
+                LOGGER.warn(errMsg);
+
+                throw new CloudRuntimeException(errMsg);
+            }
+        }
+        catch (Exception ex) {
+            errMsg = "Copy operation failed in 'StorageSystemDataMotionStrategy.handleCreateNonManagedVolumeFromManagedSnapshot': " + ex.getMessage();
+
+            throw new CloudRuntimeException(errMsg);
+        }
+        finally {
+            try {
+                HostVO hostVO = getHostInCluster(volumeStoragePoolVO.getClusterId());
+
+                long snapshotStoragePoolId = snapshotInfo.getDataStore().getId();
+                DataStore snapshotDataStore = dataStoreMgr.getDataStore(snapshotStoragePoolId, DataStoreRole.Primary);
+
+                _volumeService.revokeAccess(snapshotInfo, hostVO, snapshotDataStore);
+            }
+            catch (Exception e) {
+                LOGGER.debug("Failed to revoke access from dest volume", e);
+            }
+
+            if (usingBackendSnapshot) {
+                deleteVolumeFromSnapshot(snapshotInfo);
+            }
+
+            try {
+                if (StringUtils.isEmpty(errMsg)) {
+                    snapshotInfo.processEvent(Event.OperationSuccessed);
+                }
+                else {
+                    snapshotInfo.processEvent(Event.OperationFailed);
+                }
+            }
+            catch (Exception ex) {
+                LOGGER.warn("Error processing snapshot event: " + ex.getMessage(), ex);
+            }
+
+            if (copyCmdAnswer == null) {
+                copyCmdAnswer = new CopyCmdAnswer(errMsg);
+            }
+
+            CopyCommandResult result = new CopyCommandResult(null, copyCmdAnswer);
+
+            result.setResult(errMsg);
+
+            callback.complete(result);
+        }
+    }
+
+    private void verifyCopyCmdAnswer(CopyCmdAnswer copyCmdAnswer, DataObject dataObject) {
+        if (copyCmdAnswer == null) {
+            throw new CloudRuntimeException("Unable to create a volume from a " + dataObject.getType().toString().toLowerCase() + " (copyCmdAnswer == null)");
+        }
+
+        if (copyCmdAnswer.getResult()) {
+            return;
+        }
+
+        String details = copyCmdAnswer.getDetails();
+
+        if (StringUtils.isEmpty(details)) {
+            throw new CloudRuntimeException("Unable to create a volume from a " + dataObject.getType().toString().toLowerCase() + " (no error details specified)");
+        }
+
+        throw new CloudRuntimeException(details);
+    }
+
     /**
-     * Creates a volume on the storage from a snapshot that resides on the secondary storage (archived snapshot).
+     * Creates a managed volume on the storage from a snapshot that resides on the secondary storage (archived snapshot).
      * @param snapshotInfo snapshot on secondary
      * @param volumeInfo volume to be created on the storage
      * @param callback for async
      */
-    private void handleCreateVolumeFromSnapshotOnSecondaryStorage(SnapshotInfo snapshotInfo, VolumeInfo volumeInfo,
-                                                                  AsyncCompletionCallback<CopyCommandResult> callback) {
+    private void handleCreateManagedVolumeFromNonManagedSnapshot(SnapshotInfo snapshotInfo, VolumeInfo volumeInfo,
+                                                                 AsyncCompletionCallback<CopyCommandResult> callback) {
         String errMsg = null;
         CopyCmdAnswer copyCmdAnswer = null;
 
@@ -960,6 +1219,8 @@
             volumeInfo.processEvent(Event.MigrationRequested);
             volumeInfo = _volumeDataFactory.getVolume(volumeInfo.getId(), volumeInfo.getDataStore());
 
+            handleQualityOfServiceForVolumeMigration(volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
             hostVO = getHost(snapshotInfo.getDataCenterId(), snapshotInfo.getHypervisorType(), false);
 
             // copy the volume from secondary via the hypervisor
@@ -980,12 +1241,13 @@
             }
         }
         catch (Exception ex) {
-            errMsg = "Copy operation failed in 'StorageSystemDataMotionStrategy.handleCreateVolumeFromSnapshotOnSecondaryStorage': " +
-                    ex.getMessage();
+            errMsg = "Copy operation failed in 'StorageSystemDataMotionStrategy.handleCreateManagedVolumeFromNonManagedSnapshot': " + ex.getMessage();
 
             throw new CloudRuntimeException(errMsg);
         }
         finally {
+            handleQualityOfServiceForVolumeMigration(volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+
             if (copyCmdAnswer == null) {
                 copyCmdAnswer = new CopyCmdAnswer(errMsg);
             }
@@ -1093,13 +1355,7 @@
 
                 copyCmdAnswer = performResignature(volumeInfo, hostVO, extraDetails);
 
-                if (copyCmdAnswer == null || !copyCmdAnswer.getResult()) {
-                    if (copyCmdAnswer != null && !StringUtils.isEmpty(copyCmdAnswer.getDetails())) {
-                        throw new CloudRuntimeException(copyCmdAnswer.getDetails());
-                    } else {
-                        throw new CloudRuntimeException("Unable to create a volume from a template");
-                    }
-                }
+                verifyCopyCmdAnswer(copyCmdAnswer, templateInfo);
 
                 // If using VMware, have the host rescan its software HBA if dynamic discovery is in use.
                 if (HypervisorType.VMware.equals(templateInfo.getHypervisorType())) {
@@ -1145,11 +1401,13 @@
         }
     }
 
-    private void handleCreateVolumeFromSnapshotBothOnStorageSystem(SnapshotInfo snapshotInfo, VolumeInfo volumeInfo,
-                                                                   AsyncCompletionCallback<CopyCommandResult> callback) {
+    private void handleCreateManagedVolumeFromManagedSnapshot(SnapshotInfo snapshotInfo, VolumeInfo volumeInfo,
+                                                              AsyncCompletionCallback<CopyCommandResult> callback) {
         String errMsg = null;
         CopyCmdAnswer copyCmdAnswer = null;
 
+        boolean useCloning = true;
+
         try {
             verifyFormat(snapshotInfo);
 
@@ -1171,8 +1429,9 @@
                 }
             }
 
-            boolean canStorageSystemCreateVolumeFromVolume = canStorageSystemCreateVolumeFromVolume(snapshotInfo);
-            boolean useCloning = usingBackendSnapshot || (canStorageSystemCreateVolumeFromVolume && computeClusterSupportsVolumeClone);
+            boolean canStorageSystemCreateVolumeFromVolume = canStorageSystemCreateVolumeFromVolume(snapshotInfo.getDataStore().getId());
+
+            useCloning = usingBackendSnapshot || (canStorageSystemCreateVolumeFromVolume && computeClusterSupportsVolumeClone);
 
             VolumeDetailVO volumeDetail = null;
 
@@ -1232,16 +1491,12 @@
                     // even when we don't need those hosts to do this kind of copy work
                     hostVO = getHost(snapshotInfo.getDataCenterId(), snapshotInfo.getHypervisorType(), false);
 
+                    handleQualityOfServiceForVolumeMigration(volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
                     copyCmdAnswer = performCopyOfVdi(volumeInfo, snapshotInfo, hostVO);
                 }
 
-                if (copyCmdAnswer == null || !copyCmdAnswer.getResult()) {
-                    if (copyCmdAnswer != null && !StringUtils.isEmpty(copyCmdAnswer.getDetails())) {
-                        throw new CloudRuntimeException(copyCmdAnswer.getDetails());
-                    } else {
-                        throw new CloudRuntimeException("Unable to create volume from snapshot");
-                    }
-                }
+                verifyCopyCmdAnswer(copyCmdAnswer, snapshotInfo);
             }
             else if (HypervisorType.KVM.equals(snapshotInfo.getHypervisorType())) {
                 VolumeObjectTO newVolume = new VolumeObjectTO();
@@ -1257,12 +1512,16 @@
             }
         }
         catch (Exception ex) {
-            errMsg = "Copy operation failed in 'StorageSystemDataMotionStrategy.handleCreateVolumeFromSnapshotBothOnStorageSystem': " +
+            errMsg = "Copy operation failed in 'StorageSystemDataMotionStrategy.handleCreateManagedVolumeFromManagedSnapshot': " +
                     ex.getMessage();
 
             throw new CloudRuntimeException(errMsg);
         }
         finally {
+            if (useCloning) {
+                handleQualityOfServiceForVolumeMigration(volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+            }
+
             if (copyCmdAnswer == null) {
                 copyCmdAnswer = new CopyCmdAnswer(errMsg);
             }
@@ -1289,6 +1548,8 @@
 
             HostVO hostVO = getHost(dataCenterId, hypervisorType, false);
 
+            handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
             // copy the volume from secondary via the hypervisor
             copyCmdAnswer = copyImageToVolume(srcVolumeInfo, destVolumeInfo, hostVO);
 
@@ -1308,6 +1569,8 @@
             throw new CloudRuntimeException(errMsg);
         }
         finally {
+            handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+
             if (copyCmdAnswer == null) {
                 copyCmdAnswer = new CopyCmdAnswer(errMsg);
             }
@@ -1393,6 +1656,15 @@
         }
     }
 
+    private void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState qualityOfServiceState) {
+        try {
+            ((PrimaryDataStoreDriver)volumeInfo.getDataStore().getDriver()).handleQualityOfServiceForVolumeMigration(volumeInfo, qualityOfServiceState);
+        }
+        catch (Exception ex) {
+            LOGGER.warn(ex);
+        }
+    }
+
     private SnapshotDetailsVO handleSnapshotDetails(long csSnapshotId, String value) {
         String name = "tempVolume";
 
@@ -1452,6 +1724,8 @@
 
                 destVolumeInfo = _volumeDataFactory.getVolume(destVolume.getId(), destDataStore);
 
+                handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
                 _volumeService.grantAccess(destVolumeInfo, destHost, destDataStore);
 
                 String connectedPath = connectHostToVolume(destHost, destVolumeInfo.getPoolId(), destVolumeInfo.get_iScsiName());
@@ -1554,6 +1828,8 @@
             VolumeInfo srcVolumeInfo = entry.getKey();
             VolumeInfo destVolumeInfo = entry.getValue();
 
+            handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+
             if (success) {
                 srcVolumeInfo.processEvent(Event.OperationSuccessed);
                 destVolumeInfo.processEvent(Event.OperationSuccessed);
@@ -1660,18 +1936,18 @@
         details.put(ModifyTargetsCommand.STORAGE_HOST, storagePool.getHostAddress());
         details.put(ModifyTargetsCommand.STORAGE_PORT, String.valueOf(storagePool.getPort()));
 
-        ModifyTargetsCommand modifyTargetsCommand = new ModifyTargetsCommand();
+        ModifyTargetsCommand cmd = new ModifyTargetsCommand();
 
         List<Map<String, String>> targets = new ArrayList<>();
 
         targets.add(details);
 
-        modifyTargetsCommand.setTargets(targets);
-        modifyTargetsCommand.setApplyToAllHostsInCluster(true);
-        modifyTargetsCommand.setAdd(add);
-        modifyTargetsCommand.setTargetTypeToRemove(ModifyTargetsCommand.TargetTypeToRemove.DYNAMIC);
+        cmd.setTargets(targets);
+        cmd.setApplyToAllHostsInCluster(true);
+        cmd.setAdd(add);
+        cmd.setTargetTypeToRemove(ModifyTargetsCommand.TargetTypeToRemove.DYNAMIC);
 
-        return modifyTargetsCommand;
+        return cmd;
     }
 
     private List<String> sendModifyTargetsCommand(ModifyTargetsCommand cmd, long hostId) {
@@ -1721,20 +1997,28 @@
         }
     }
 
-    private boolean canStorageSystemCreateVolumeFromVolume(SnapshotInfo snapshotInfo) {
-        boolean supportsCloningVolumeFromVolume = false;
+    private boolean canStorageSystemCreateVolumeFromVolume(long storagePoolId) {
+        return storageSystemSupportsCapability(storagePoolId, DataStoreCapabilities.CAN_CREATE_VOLUME_FROM_VOLUME.toString());
+    }
 
-        DataStore dataStore = dataStoreMgr.getDataStore(snapshotInfo.getDataStore().getId(), DataStoreRole.Primary);
+    private boolean canStorageSystemCreateVolumeFromSnapshot(long storagePoolId) {
+        return storageSystemSupportsCapability(storagePoolId, DataStoreCapabilities.CAN_CREATE_VOLUME_FROM_SNAPSHOT.toString());
+    }
+
+    private boolean storageSystemSupportsCapability(long storagePoolId, String capability) {
+        boolean supportsCapability = false;
+
+        DataStore dataStore = dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
 
         Map<String, String> mapCapabilities = dataStore.getDriver().getCapabilities();
 
         if (mapCapabilities != null) {
-            String value = mapCapabilities.get(DataStoreCapabilities.CAN_CREATE_VOLUME_FROM_VOLUME.toString());
+            String value = mapCapabilities.get(capability);
 
-            supportsCloningVolumeFromVolume = Boolean.valueOf(value);
+            supportsCapability = Boolean.valueOf(value);
         }
 
-        return supportsCloningVolumeFromVolume;
+        return supportsCapability;
     }
 
     private String getVolumeProperty(long volumeId, String property) {
@@ -1757,7 +2041,7 @@
         return null;
     }
 
-    private void handleCreateTemplateFromVolume(VolumeInfo volumeInfo, TemplateInfo templateInfo, AsyncCompletionCallback<CopyCommandResult> callback) {
+    private void handleCreateTemplateFromManagedVolume(VolumeInfo volumeInfo, TemplateInfo templateInfo, AsyncCompletionCallback<CopyCommandResult> callback) {
         boolean srcVolumeDetached = volumeInfo.getAttachedVM() == null;
 
         String errMsg = null;
@@ -1775,9 +2059,12 @@
 
             String value = _configDao.getValue(Config.PrimaryStorageDownloadWait.toString());
             int primaryStorageDownloadWait = NumberUtils.toInt(value, Integer.parseInt(Config.PrimaryStorageDownloadWait.getDefaultValue()));
+
             CopyCommand copyCommand = new CopyCommand(volumeInfo.getTO(), templateInfo.getTO(), primaryStorageDownloadWait, VirtualMachineManager.ExecuteInSequence.value());
 
             try {
+                handleQualityOfServiceForVolumeMigration(volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
                 if (srcVolumeDetached) {
                     _volumeService.grantAccess(volumeInfo, hostVO, srcDataStore);
                 }
@@ -1789,8 +2076,10 @@
                 copyCmdAnswer = (CopyCmdAnswer)_agentMgr.send(hostVO.getId(), copyCommand);
 
                 if (!copyCmdAnswer.getResult()) {
-                    // We were not able to copy. Handle it.
                     errMsg = copyCmdAnswer.getDetails();
+
+                    LOGGER.warn(errMsg);
+
                     throw new CloudRuntimeException(errMsg);
                 }
 
@@ -1808,14 +2097,17 @@
                 throw new CloudRuntimeException(msg + ex.getMessage(), ex);
             }
             finally {
-                try {
-                    if (srcVolumeDetached) {
+                if (srcVolumeDetached) {
+                    try {
                         _volumeService.revokeAccess(volumeInfo, hostVO, srcDataStore);
                     }
+                    catch (Exception ex) {
+                        LOGGER.warn("Error revoking access to volume (Volume ID = " + volumeInfo.getId() + "): " + ex.getMessage(), ex);
+                    }
                 }
-                catch (Exception ex) {
-                    LOGGER.warn("Error revoking access to volume (Volume ID = " + volumeInfo.getId() + "): " + ex.getMessage(), ex);
-                }
+
+                handleQualityOfServiceForVolumeMigration(volumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+
                 if (copyCmdAnswer == null || !copyCmdAnswer.getResult()) {
                     if (copyCmdAnswer != null && !StringUtils.isEmpty(copyCmdAnswer.getDetails())) {
                         errMsg = copyCmdAnswer.getDetails();
@@ -2104,7 +2396,7 @@
         return leafData;
     }
 
-    private String migrateVolume(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo, HostVO hostVO, String errMsg) {
+    private String migrateVolumeForKVM(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo, HostVO hostVO, String errMsg) {
         boolean srcVolumeDetached = srcVolumeInfo.getAttachedVM() == null;
 
         try {
@@ -2118,6 +2410,8 @@
                 _volumeService.grantAccess(srcVolumeInfo, hostVO, srcVolumeInfo.getDataStore());
             }
 
+            handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
             _volumeService.grantAccess(destVolumeInfo, hostVO, destVolumeInfo.getDataStore());
 
             MigrateVolumeAnswer migrateVolumeAnswer = (MigrateVolumeAnswer)_agentMgr.send(hostVO.getId(), migrateVolumeCommand);
@@ -2164,9 +2458,12 @@
 
             throw new CloudRuntimeException(msg + ex.getMessage(), ex);
         }
+        finally {
+            handleQualityOfServiceForVolumeMigration(destVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
+        }
     }
 
-    private String copyVolumeToSecondaryStorage(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo, HostVO hostVO, String errMsg) {
+    private String copyManagedVolumeToSecondaryStorage(VolumeInfo srcVolumeInfo, VolumeInfo destVolumeInfo, HostVO hostVO, String errMsg) {
         boolean srcVolumeDetached = srcVolumeInfo.getAttachedVM() == null;
 
         try {
@@ -2179,6 +2476,8 @@
             copyVolumeCommand.setSrcData(srcVolumeInfo.getTO());
             copyVolumeCommand.setSrcDetails(srcDetails);
 
+            handleQualityOfServiceForVolumeMigration(srcVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.MIGRATION);
+
             if (srcVolumeDetached) {
                 _volumeService.grantAccess(srcVolumeInfo, hostVO, srcVolumeInfo.getDataStore());
             }
@@ -2207,6 +2506,8 @@
             if (srcVolumeDetached) {
                 _volumeService.revokeAccess(srcVolumeInfo, hostVO, srcVolumeInfo.getDataStore());
             }
+
+            handleQualityOfServiceForVolumeMigration(srcVolumeInfo, PrimaryDataStoreDriver.QualityOfServiceState.NO_MIGRATION);
         }
     }
 
diff --git a/engine/storage/datamotion/resources/META-INF/cloudstack/core/spring-engine-storage-datamotion-core-context.xml b/engine/storage/datamotion/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-datamotion-core-context.xml
similarity index 100%
rename from engine/storage/datamotion/resources/META-INF/cloudstack/core/spring-engine-storage-datamotion-core-context.xml
rename to engine/storage/datamotion/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-datamotion-core-context.xml
diff --git a/engine/storage/datamotion/resources/META-INF/cloudstack/storage/spring-engine-storage-datamotion-storage-context.xml b/engine/storage/datamotion/src/main/resources/META-INF/cloudstack/storage/spring-engine-storage-datamotion-storage-context.xml
similarity index 100%
rename from engine/storage/datamotion/resources/META-INF/cloudstack/storage/spring-engine-storage-datamotion-storage-context.xml
rename to engine/storage/datamotion/src/main/resources/META-INF/cloudstack/storage/spring-engine-storage-datamotion-storage-context.xml
diff --git a/engine/storage/datamotion/test/org/apache/cloudstack/storage/motion/AncientDataMotionStrategyTest.java b/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategyTest.java
similarity index 100%
rename from engine/storage/datamotion/test/org/apache/cloudstack/storage/motion/AncientDataMotionStrategyTest.java
rename to engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategyTest.java
diff --git a/engine/storage/datamotion/test/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java b/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
similarity index 100%
rename from engine/storage/datamotion/test/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
rename to engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
diff --git a/engine/storage/image/pom.xml b/engine/storage/image/pom.xml
index d8c03d4..7d4f2cd 100644
--- a/engine/storage/image/pom.xml
+++ b/engine/storage/image/pom.xml
@@ -1,29 +1,37 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-image</artifactId>
-  <name>Apache CloudStack Engine Storage Image Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-image</artifactId>
+    <name>Apache CloudStack Engine Storage Image Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java
similarity index 100%
rename from engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java
rename to engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
similarity index 100%
rename from engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
rename to engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
similarity index 100%
rename from engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
rename to engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java
similarity index 100%
rename from engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java
rename to engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/store/TemplateObject.java
similarity index 100%
rename from engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
rename to engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/store/TemplateObject.java
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/ImageStoreLifeCycle.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/store/lifecycle/ImageStoreLifeCycle.java
similarity index 100%
rename from engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/ImageStoreLifeCycle.java
rename to engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/store/lifecycle/ImageStoreLifeCycle.java
diff --git a/engine/storage/image/resources/META-INF/cloudstack/core/spring-engine-storage-image-core-context.xml b/engine/storage/image/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-image-core-context.xml
similarity index 100%
rename from engine/storage/image/resources/META-INF/cloudstack/core/spring-engine-storage-image-core-context.xml
rename to engine/storage/image/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-image-core-context.xml
diff --git a/engine/storage/integration-test/pom.xml b/engine/storage/integration-test/pom.xml
index 2e8576d7..5b64fdf 100644
--- a/engine/storage/integration-test/pom.xml
+++ b/engine/storage/integration-test/pom.xml
@@ -1,182 +1,186 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-integration-test</artifactId>
-  <name>Apache CloudStack Engine Storage integration test Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-snapshot</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-datamotion</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-     <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-cache</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.aspectj</groupId>
-      <artifactId>aspectjrt</artifactId>
-      <version>1.7.1</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-     <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-volume-default</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-secondary-storage</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-image-default</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-      <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-image-s3</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-image-swift</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.testng</groupId>
-      <artifactId>testng</artifactId>
-      <version>6.1.1</version>
-      <scope>test</scope>
-    </dependency>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>testCompile</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-       <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy
-                  todir="${basedir}/target/test-classes/">
-                  <fileset dir="${basedir}/../../../utils/conf/">
-                    <include name="db.properties" />
-                  </fileset>
-                </copy>
-              </target>
-            </configuration>  
-            </execution>
-          </executions>  
-          </plugin>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-integration-test</artifactId>
+    <name>Apache CloudStack Engine Storage integration test Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-snapshot</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-datamotion</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-cache</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-default</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-secondary-storage</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-image-default</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-image-s3</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-image-swift</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>testCompile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-resource</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <copy todir="${basedir}/target/test-classes/">
+                                    <fileset dir="${basedir}/../../../utils/conf/">
+                                        <include name="db.properties" />
+                                    </fileset>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/engine/storage/integration-test/test/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java b/engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java
similarity index 96%
rename from engine/storage/integration-test/test/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java
rename to engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java
index 38b4f29..be8d04a 100644
--- a/engine/storage/integration-test/test/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java
+++ b/engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java
@@ -22,15 +22,13 @@
 
 import javax.inject.Inject;
 
-import junit.framework.Assert;
-
+import org.apache.cloudstack.storage.test.CloudStackTestNGBase;
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import org.apache.cloudstack.storage.test.CloudStackTestNGBase;
-
 import com.cloud.vm.snapshot.VMSnapshotDetailsVO;
 
 @RunWith(SpringJUnit4ClassRunner.class)
@@ -41,7 +39,7 @@
 
     @Test
     public void testVmSnapshotDetails() {
-        VMSnapshotDetailsVO detailsVO = new VMSnapshotDetailsVO(1L, "test", "foo", display);
+        VMSnapshotDetailsVO detailsVO = new VMSnapshotDetailsVO(1L, "test", "foo", true);
         vmsnapshotDetailsDao.persist(detailsVO);
         Map<String, String> details = vmsnapshotDetailsDao.listDetailsKeyPairs(1L);
         Assert.assertTrue(details.containsKey("test"));
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/MockLocalNfsSecondaryStorageResource.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/MockLocalNfsSecondaryStorageResource.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/MockLocalNfsSecondaryStorageResource.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/MockLocalNfsSecondaryStorageResource.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java
similarity index 97%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java
index 3c4caee..0d2ebf5 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java
@@ -22,16 +22,6 @@
 
 import javax.inject.Inject;
 
-import junit.framework.Assert;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
@@ -41,6 +31,13 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import com.cloud.configuration.Config;
 import com.cloud.dc.ClusterVO;
@@ -58,6 +55,7 @@
 import com.cloud.org.Managed.ManagedState;
 import com.cloud.storage.DiskOfferingVO;
 import com.cloud.storage.ScopeType;
+import com.cloud.storage.Storage;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
@@ -72,6 +70,8 @@
 import com.cloud.vm.DiskProfile;
 import com.cloud.vm.VirtualMachineProfile;
 
+import junit.framework.Assert;
+
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations = "classpath:/storageContext.xml")
 public class StorageAllocatorTest {
@@ -119,8 +119,8 @@
 
     protected void createDb() {
         DataCenterVO dc =
-            new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
-                true, null, null);
+                new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
+                        true, null, null);
         dc = dcDao.persist(dc);
         dcId = dc.getId();
 
@@ -164,8 +164,8 @@
         diskOfferingId = diskOffering.getId();
 
         volume =
-            new VolumeVO(Volume.Type.ROOT, "volume", dcId, 1, 1, diskOffering.getId(), diskOffering.getDiskSize(), diskOffering.getMinIops(), diskOffering.getMaxIops(),
-                "");
+                new VolumeVO(Volume.Type.ROOT, "volume", dcId, 1, 1, diskOffering.getId(), Storage.ProvisioningType.THIN, diskOffering.getDiskSize(), diskOffering.getMinIops(),
+                        diskOffering.getMaxIops(), "");
         volume = volumeDao.persist(volume);
         volumeId = volume.getId();
     }
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/allocator/StorageAllocatorTestConfiguration.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTestConfiguration.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/allocator/StorageAllocatorTestConfiguration.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTestConfiguration.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRUTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRUTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRUTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/cache/manager/StorageCacheReplacementAlgorithmLRUTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/AllTests.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/AllTests.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/AllTests.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/AllTests.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/AopTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/AopTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/AopTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/AopTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/AopTestAdvice.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/AopTestAdvice.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/AopTestAdvice.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/AopTestAdvice.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
similarity index 96%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
index 0e4755e..c6003af 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java
@@ -154,7 +154,7 @@
                 VmwareServerDiscoverer discover = new VmwareServerDiscoverer();
 
                 Map<? extends ServerResource, Map<String, String>> resources =
-                    discover.find(host.getDataCenterId(), host.getPodId(), host.getClusterId(), uri, userName, password, null);
+                        discover.find(host.getDataCenterId(), host.getPodId(), host.getClusterId(), uri, userName, password, null);
                 for (Map.Entry<? extends ServerResource, Map<String, String>> entry : resources.entrySet()) {
                     resource = entry.getKey();
                 }
@@ -266,20 +266,16 @@
     }
 
     @Override
-    public boolean reconnect(long hostId) {
-        // TODO Auto-generated method stub
-        return false;
+    public void reconnect(long hostId) {
     }
 
     @Override
     public boolean isAgentAttached(long hostId) {
-        // TODO Auto-generated method stub
         return false;
     }
 
     @Override
     public boolean handleDirectConnectAgent(Host host, StartupCommand[] cmds, ServerResource resource, boolean forRebalance, boolean newHost) throws ConnectionException {
-        // TODO Auto-generated method stub
         return false;
     }
 
@@ -290,4 +286,13 @@
     @Override
     public void notifyMonitorsOfRemovedHost(long hostId, long clusterId) {
     }
+
+    @Override
+    public void disconnectWithInvestigation(long hostId, Event event) {
+
+    }
+
+    @Override
+    public void notifyMonitorsOfNewlyAddedHost(long hostId) {
+    }
 }
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/DirectAgentTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/EndpointSelectorTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/EndpointSelectorTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/EndpointSelectorTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/EndpointSelectorTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakeDriverTestConfiguration.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/FakeDriverTestConfiguration.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakeDriverTestConfiguration.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/FakeDriverTestConfiguration.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockLocalHostEndPoint.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/MockLocalHostEndPoint.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockLocalHostEndPoint.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/MockLocalHostEndPoint.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockRpcCallBack.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/MockRpcCallBack.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockRpcCallBack.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/MockRpcCallBack.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/S3TemplateTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/S3TemplateTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/S3TemplateTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/S3TemplateTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java
similarity index 96%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java
index 1b5746d..0185c0d 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java
@@ -26,14 +26,6 @@
 
 import javax.inject.Inject;
 
-import junit.framework.Assert;
-
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.springframework.test.context.ContextConfiguration;
-import org.testng.AssertJUnit;
-import org.testng.annotations.Test;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -67,6 +59,11 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Command;
@@ -90,6 +87,7 @@
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Snapshot;
+import com.cloud.storage.Snapshot.LocationType;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage;
 import com.cloud.storage.Storage.ImageFormat;
@@ -104,6 +102,8 @@
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 
+import junit.framework.Assert;
+
 @ContextConfiguration(locations = {"classpath:/storageContext.xml"})
 public class SnapshotTest extends CloudStackTestNGBase {
     @Inject
@@ -182,8 +182,8 @@
         } else {
             // create data center
             DataCenterVO dc =
-                new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
-                    true, null, null);
+                    new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
+                            true, null, null);
             dc = dcDao.persist(dc);
             dcId = dc.getId();
             // create pod
@@ -340,14 +340,13 @@
     private SnapshotVO createSnapshotInDb(VolumeInfo volume) {
         Snapshot.Type snapshotType = Snapshot.Type.MANUAL;
         SnapshotVO snapshotVO =
-            new SnapshotVO(volume.getDataCenterId(), 2, 1, volume.getId(), 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(),
-                volume.getSize(), HypervisorType.XenServer);
+                new SnapshotVO(volume.getDataCenterId(), 2, 1, volume.getId(), 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(),
+                        volume.getSize(), 1L, 100L, HypervisorType.XenServer, LocationType.PRIMARY);
         return this.snapshotDao.persist(snapshotVO);
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-
-        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, "");
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, Storage.ProvisioningType.THIN, 1000, 0L, 0L, "");
         volume.setDataCenterId(this.dcId);
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);
@@ -361,7 +360,7 @@
         VolumeVO volume = createVolume(image.getId(), primaryStore.getId());
         VolumeInfo volInfo = this.volFactory.getVolume(volume.getId());
         AsyncCallFuture<VolumeApiResult> future =
-            this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image));
+                this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image));
 
         VolumeApiResult result;
         result = future.get();
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
similarity index 78%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
index 8c7b06d..a3961ac 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
@@ -36,16 +36,6 @@
 
 import javax.inject.Inject;
 
-import junit.framework.Assert;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Matchers;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
@@ -65,6 +55,13 @@
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.volume.VolumeObject;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.DataCenter;
@@ -81,6 +78,7 @@
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Snapshot;
+import com.cloud.storage.Snapshot.LocationType;
 import com.cloud.storage.SnapshotPolicyVO;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage;
@@ -97,6 +95,8 @@
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.db.Merovingian2;
 
+import junit.framework.Assert;
+
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations = {"classpath:/fakeDriverTestContext.xml"})
 public class SnapshotTestWithFakeData {
@@ -148,8 +148,8 @@
         // create data center
 
         DataCenterVO dc =
-            new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, DataCenter.NetworkType.Basic, null,
-                null, true, true, null, null);
+                new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, DataCenter.NetworkType.Basic, null,
+                        null, true, true, null, null);
         dc = dcDao.persist(dc);
         dcId = dc.getId();
         // create pod
@@ -206,21 +206,21 @@
     private SnapshotVO createSnapshotInDb() {
         Snapshot.Type snapshotType = Snapshot.Type.RECURRING;
         SnapshotVO snapshotVO =
-            new SnapshotVO(dcId, 2, 1, 1L, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, Hypervisor.HypervisorType.XenServer);
+                new SnapshotVO(dcId, 2, 1, 1L, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, 1L, 100L, Hypervisor.HypervisorType.XenServer,
+                        LocationType.PRIMARY);
         return snapshotDao.persist(snapshotVO);
     }
 
     private SnapshotVO createSnapshotInDb(Long volumeId) {
         Snapshot.Type snapshotType = Snapshot.Type.DAILY;
         SnapshotVO snapshotVO =
-            new SnapshotVO(dcId, 2, 1, volumeId, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100,
-                Hypervisor.HypervisorType.XenServer);
+                new SnapshotVO(dcId, 2, 1, 1L, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, 1L, 100L, Hypervisor.HypervisorType.XenServer,
+                        LocationType.PRIMARY);
         return snapshotDao.persist(snapshotVO);
     }
 
     private VolumeInfo createVolume(Long templateId, DataStore store) {
-        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), dcId, 1L, 1L, 1L, 1000, 0L, 0L, "");
-        ;
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), dcId, 1L, 1L, 1L, Storage.ProvisioningType.THIN, 1000, 0L, 0L, "");
         volume.setPoolId(store.getId());
 
         volume = volumeDao.persist(volume);
@@ -261,7 +261,7 @@
             SnapshotDataStoreVO storeRef = snapshotDataStoreDao.findByStoreSnapshot(store.getRole(), store.getId(), snapshotVO.getId());
             Assert.assertTrue(storeRef != null);
             Assert.assertTrue(storeRef.getState() == ObjectInDataStoreStateMachine.State.Ready);
-            snapshotInfo = result.getSnashot();
+            snapshotInfo = result.getSnapshot();
             boolean deletResult = snapshotService.deleteSnapshot(snapshotInfo);
             Assert.assertTrue(deletResult);
             snapshotDataStoreDao.expunge(storeRef.getId());
@@ -305,55 +305,55 @@
     }
 
     protected SnapshotPolicyVO createSnapshotPolicy(Long volId) {
-        SnapshotPolicyVO policyVO = new SnapshotPolicyVO(volId, "jfkd", "fdfd", DateUtil.IntervalType.DAILY, 8);
-        policyVO = snapshotPolicyDao.persist(policyVO);
-        return policyVO;
-    }
-
-    @Test
-    public void testConcurrentSnapshot() throws URISyntaxException, InterruptedException, ExecutionException {
-        DataStore store = createDataStore();
-        final FakePrimaryDataStoreDriver dataStoreDriver = (FakePrimaryDataStoreDriver)store.getDriver();
-        dataStoreDriver.makeTakeSnapshotSucceed(true);
-        final VolumeInfo volumeInfo = createVolume(1L, store);
-        Assert.assertTrue(volumeInfo.getState() == Volume.State.Ready);
-        vol = volumeInfo;
-        // final SnapshotPolicyVO policyVO = createSnapshotPolicy(vol.getId());
-
-        ExecutorService pool = Executors.newFixedThreadPool(2);
-        boolean result = false;
-        List<Future<Boolean>> future = new ArrayList<Future<Boolean>>();
-        for (int i = 0; i < 12; i++) {
-            final int cnt = i;
-            Future<Boolean> task = pool.submit(new Callable<Boolean>() {
-                @Override
-                public Boolean call() throws Exception {
-                    boolean r = true;
-                    try {
-                        SnapshotVO snapshotVO = createSnapshotInDb(vol.getId());
-                        VolumeObject volumeObject = (VolumeObject)vol;
-                        Account account = mock(Account.class);
-                        when(account.getId()).thenReturn(1L);
-                        CreateSnapshotPayload createSnapshotPayload = mock(CreateSnapshotPayload.class);
-                        when(createSnapshotPayload.getAccount()).thenReturn(account);
-                        when(createSnapshotPayload.getSnapshotId()).thenReturn(snapshotVO.getId());
-                        when(createSnapshotPayload.getSnapshotPolicyId()).thenReturn(0L);
-                        volumeObject.addPayload(createSnapshotPayload);
-                        if (cnt > 8) {
-                            mockStorageMotionStrategy.makeBackupSnapshotSucceed(false);
-                        }
-                        SnapshotInfo newSnapshot = volumeService.takeSnapshot(vol);
-                        if (newSnapshot == null) {
-                            r = false;
-                        }
-                    } catch (Exception e) {
-                        r = false;
-                    }
-                    return r;
-                }
-            });
-            Assert.assertTrue(task.get());
+        SnapshotPolicyVO policyVO = new SnapshotPolicyVO(volId, "jfkd", "fdfd", DateUtil.IntervalType.DAILY, 8, true);
+            policyVO = snapshotPolicyDao.persist(policyVO);
+            return policyVO;
         }
 
+        @Test
+        public void testConcurrentSnapshot() throws URISyntaxException, InterruptedException, ExecutionException {
+            DataStore store = createDataStore();
+            final FakePrimaryDataStoreDriver dataStoreDriver = (FakePrimaryDataStoreDriver)store.getDriver();
+            dataStoreDriver.makeTakeSnapshotSucceed(true);
+            final VolumeInfo volumeInfo = createVolume(1L, store);
+            Assert.assertTrue(volumeInfo.getState() == Volume.State.Ready);
+            vol = volumeInfo;
+            // final SnapshotPolicyVO policyVO = createSnapshotPolicy(vol.getId());
+
+            ExecutorService pool = Executors.newFixedThreadPool(2);
+            boolean result = false;
+            List<Future<Boolean>> future = new ArrayList<Future<Boolean>>();
+            for (int i = 0; i < 12; i++) {
+                final int cnt = i;
+                Future<Boolean> task = pool.submit(new Callable<Boolean>() {
+                    @Override
+                    public Boolean call() throws Exception {
+                        boolean r = true;
+                        try {
+                            SnapshotVO snapshotVO = createSnapshotInDb(vol.getId());
+                            VolumeObject volumeObject = (VolumeObject)vol;
+                            Account account = mock(Account.class);
+                            when(account.getId()).thenReturn(1L);
+                            CreateSnapshotPayload createSnapshotPayload = mock(CreateSnapshotPayload.class);
+                            when(createSnapshotPayload.getAccount()).thenReturn(account);
+                            when(createSnapshotPayload.getSnapshotId()).thenReturn(snapshotVO.getId());
+                            when(createSnapshotPayload.getSnapshotPolicyId()).thenReturn(0L);
+                            volumeObject.addPayload(createSnapshotPayload);
+                            if (cnt > 8) {
+                                mockStorageMotionStrategy.makeBackupSnapshotSucceed(false);
+                            }
+                            SnapshotInfo newSnapshot = volumeService.takeSnapshot(vol);
+                            if (newSnapshot == null) {
+                                r = false;
+                            }
+                        } catch (Exception e) {
+                            r = false;
+                        }
+                        return r;
+                    }
+                });
+                Assert.assertTrue(task.get());
+            }
+
+        }
     }
-}
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/StorageFactoryBean.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/StorageFactoryBean.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/StorageFactoryBean.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/StorageFactoryBean.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/StorageTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/StorageTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/StorageTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/StorageTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TemplateTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TemplateTest.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TemplateTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TemplateTest.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestConfiguration.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestConfiguration.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestConfiguration.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestConfiguration.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestHttp.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestHttp.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestHttp.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestHttp.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestNG.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestNG.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestNG.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestNG.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestNGAop.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestNGAop.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/TestNGAop.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/TestNGAop.java
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java
similarity index 97%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java
index 0fc6f59..9a680ed 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeServiceTest.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java
@@ -29,12 +29,6 @@
 
 import javax.inject.Inject;
 
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.springframework.test.context.ContextConfiguration;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
@@ -56,6 +50,11 @@
 import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.dc.ClusterVO;
@@ -75,6 +74,7 @@
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Storage;
+import com.cloud.storage.Storage.ProvisioningType;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.VMTemplateVO;
@@ -139,8 +139,8 @@
         }
         // create data center
         DataCenterVO dc =
-            new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
-                true, null, null);
+                new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
+                        true, null, null);
         dc = dcDao.persist(dc);
         dcId = dc.getId();
         // create pod
@@ -361,7 +361,7 @@
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, "");
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, ProvisioningType.THIN, 1000, 0L, 0L, "");
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);
         return volume;
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java
similarity index 96%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java
index c274d76..8642174 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java
@@ -26,14 +26,6 @@
 
 import javax.inject.Inject;
 
-import junit.framework.Assert;
-
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.springframework.test.context.ContextConfiguration;
-import org.testng.AssertJUnit;
-import org.testng.annotations.Test;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -58,6 +50,11 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Command;
@@ -82,6 +79,7 @@
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Storage;
 import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.Storage.ProvisioningType;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.StoragePoolStatus;
@@ -92,6 +90,8 @@
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 
+import junit.framework.Assert;
+
 @ContextConfiguration(locations = {"classpath:/storageContext.xml"})
 public class VolumeTest extends CloudStackTestNGBase {
     @Inject
@@ -158,8 +158,8 @@
         } else {
             // create data center
             DataCenterVO dc =
-                new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
-                    true, null, null);
+                    new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
+                            true, null, null);
             dc = dcDao.persist(dc);
             dcId = dc.getId();
             // create pod
@@ -263,7 +263,6 @@
 
     public DataStore createPrimaryDataStore() {
         try {
-            String uuid = UUID.nameUUIDFromBytes(this.getPrimaryStorageUrl().getBytes()).toString();
             List<StoragePoolVO> pools = primaryDataStoreDao.findPoolByName(this.primaryName);
             if (pools.size() > 0) {
                 return this.dataStoreMgr.getPrimaryDataStore(pools.get(0).getId());
@@ -314,8 +313,7 @@
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, "");
-        ;
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, ProvisioningType.THIN, 1000, 0L, 0L, "");
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);
         return volume;
@@ -329,7 +327,7 @@
         VolumeVO volume = createVolume(image.getId(), primaryStore.getId());
         VolumeInfo volInfo = this.volFactory.getVolume(volume.getId());
         AsyncCallFuture<VolumeApiResult> future =
-            this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image));
+                this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image));
         try {
             VolumeApiResult result = future.get();
 
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java
similarity index 96%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java
index 1f3aff0..98af170 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java
+++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java
@@ -26,12 +26,6 @@
 
 import javax.inject.Inject;
 
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.springframework.test.context.ContextConfiguration;
-import org.testng.AssertJUnit;
-import org.testng.annotations.Test;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -54,6 +48,11 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.dc.ClusterDetailsDao;
@@ -78,6 +77,7 @@
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Storage;
+import com.cloud.storage.Storage.ProvisioningType;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.StoragePoolStatus;
@@ -154,8 +154,8 @@
         } else {
             // create data center
             DataCenterVO dc =
-                new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
-                    true, null, null);
+                    new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true,
+                            true, null, null);
             dc = dcDao.persist(dc);
             dcId = dc.getId();
             // create pod
@@ -315,8 +315,7 @@
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, "");
-        ;
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, ProvisioningType.THIN, 1000, 0L, 0L, "");
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);
         return volume;
@@ -330,7 +329,7 @@
         VolumeVO volume = createVolume(image.getId(), primaryStore.getId());
         VolumeInfo volInfo = this.volFactory.getVolume(volume.getId());
         AsyncCallFuture<VolumeApiResult> future =
-            this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image));
+                this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image));
         try {
             VolumeApiResult result = future.get();
 
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/XenEndpoint.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/XenEndpoint.java
similarity index 100%
rename from engine/storage/integration-test/test/org/apache/cloudstack/storage/test/XenEndpoint.java
rename to engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/XenEndpoint.java
diff --git a/engine/storage/integration-test/test/resources/StorageAllocatorTestContext.xml b/engine/storage/integration-test/src/test/resources/StorageAllocatorTestContext.xml
similarity index 100%
rename from engine/storage/integration-test/test/resources/StorageAllocatorTestContext.xml
rename to engine/storage/integration-test/src/test/resources/StorageAllocatorTestContext.xml
diff --git a/engine/storage/integration-test/test/resources/component.xml b/engine/storage/integration-test/src/test/resources/component.xml
similarity index 100%
rename from engine/storage/integration-test/test/resources/component.xml
rename to engine/storage/integration-test/src/test/resources/component.xml
diff --git a/engine/storage/integration-test/test/resource/fakeDriverTestContext.xml b/engine/storage/integration-test/src/test/resources/fakeDriverTestContext.xml
similarity index 100%
rename from engine/storage/integration-test/test/resource/fakeDriverTestContext.xml
rename to engine/storage/integration-test/src/test/resources/fakeDriverTestContext.xml
diff --git a/engine/storage/integration-test/test/resources/s3_testng.xml b/engine/storage/integration-test/src/test/resources/s3_testng.xml
similarity index 100%
rename from engine/storage/integration-test/test/resources/s3_testng.xml
rename to engine/storage/integration-test/src/test/resources/s3_testng.xml
diff --git a/engine/storage/integration-test/test/resources/storageContext.xml b/engine/storage/integration-test/src/test/resources/storageContext.xml
similarity index 100%
rename from engine/storage/integration-test/test/resources/storageContext.xml
rename to engine/storage/integration-test/src/test/resources/storageContext.xml
diff --git a/engine/storage/integration-test/test/resources/testng.xml b/engine/storage/integration-test/src/test/resources/testng.xml
similarity index 100%
rename from engine/storage/integration-test/test/resources/testng.xml
rename to engine/storage/integration-test/src/test/resources/testng.xml
diff --git a/engine/storage/pom.xml b/engine/storage/pom.xml
index f798044..7ef1abd 100644
--- a/engine/storage/pom.xml
+++ b/engine/storage/pom.xml
@@ -1,61 +1,69 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage</artifactId>
-  <name>Apache CloudStack Engine Storage Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <!-- 
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    -->
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-secondary-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage</artifactId>
+    <name>Apache CloudStack Engine Storage Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+<!--
+         <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+ -->
+         <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-secondary-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/engine/storage/snapshot/pom.xml b/engine/storage/snapshot/pom.xml
index 8dd8450..1c9211f 100644
--- a/engine/storage/snapshot/pom.xml
+++ b/engine/storage/snapshot/pom.xml
@@ -1,48 +1,56 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-snapshot</artifactId>
-  <name>Apache CloudStack Engine Storage Snapshot Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-      <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-api</artifactId>
-          <version>${project.version}</version>
-          <type>test-jar</type>
-          <scope>test</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-engine-storage-volume</artifactId>
-          <version>${project.version}</version>
-      </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-snapshot</artifactId>
+    <name>Apache CloudStack Engine Storage Snapshot Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
     <build>
         <plugins>
             <plugin>
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotBackupException.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotBackupException.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotBackupException.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotBackupException.java
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
similarity index 86%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
index ad58f42..11d61df 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
+++ b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
@@ -28,9 +28,9 @@
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+import org.apache.commons.collections.CollectionUtils;
 
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.SnapshotVO;
@@ -38,14 +38,13 @@
 import com.cloud.utils.exception.CloudRuntimeException;
 
 public class SnapshotDataFactoryImpl implements SnapshotDataFactory {
+
     @Inject
-    SnapshotDao snapshotDao;
+    private SnapshotDao snapshotDao;
     @Inject
-    SnapshotDataStoreDao snapshotStoreDao;
+    private SnapshotDataStoreDao snapshotStoreDao;
     @Inject
-    DataStoreManager storeMgr;
-    @Inject
-    VolumeDataFactory volumeFactory;
+    private DataStoreManager storeMgr;
 
     @Override
     public SnapshotInfo getSnapshot(long snapshotId, DataStore store) {
@@ -66,16 +65,16 @@
 
     @Override
     public List<SnapshotInfo> getSnapshots(long volumeId, DataStoreRole role) {
-
-        SnapshotDataStoreVO snapshotStore = snapshotStoreDao.findByVolume(volumeId, role);
-        if (snapshotStore == null) {
+        List<SnapshotDataStoreVO> allSnapshotsFromVolumeAndDataStore = snapshotStoreDao.listAllByVolumeAndDataStore(volumeId, role);
+        if (CollectionUtils.isEmpty(allSnapshotsFromVolumeAndDataStore)) {
             return new ArrayList<>();
         }
-        DataStore store = storeMgr.getDataStore(snapshotStore.getDataStoreId(), role);
-        List<SnapshotVO> volSnapShots = snapshotDao.listByVolumeId(volumeId);
         List<SnapshotInfo> infos = new ArrayList<>();
-        for(SnapshotVO snapshot: volSnapShots) {
+        for (SnapshotDataStoreVO snapshotDataStoreVO : allSnapshotsFromVolumeAndDataStore) {
+            DataStore store = storeMgr.getDataStore(snapshotDataStoreVO.getDataStoreId(), role);
+            SnapshotVO snapshot = snapshotDao.findById(snapshotDataStoreVO.getSnapshotId());
             SnapshotObject info = SnapshotObject.getSnapshotObject(snapshot, store);
+
             infos.add(info);
         }
         return infos;
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
similarity index 97%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
index 601959b..9c51370 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
+++ b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
@@ -262,6 +262,7 @@
         SnapshotObject snapObj = (SnapshotObject)snapshot;
         AsyncCallFuture<SnapshotResult> future = new AsyncCallFuture<SnapshotResult>();
         SnapshotResult result = new SnapshotResult(snapshot, null);
+        Snapshot.State origState = snapObj.getState();
         try {
             snapObj.processEvent(Snapshot.Event.BackupToSecondary);
 
@@ -281,7 +282,13 @@
             s_logger.debug("Failed to copy snapshot", e);
             result.setResult("Failed to copy snapshot:" + e.toString());
             try {
-                snapObj.processEvent(Snapshot.Event.OperationFailed);
+                // When error archiving an already existing snapshot, emit OperationNotPerformed.
+                // This will ensure that the original snapshot does not get deleted
+                if (origState.equals(Snapshot.State.BackedUp)) {
+                    snapObj.processEvent(Snapshot.Event.OperationNotPerformed);
+                } else {
+                    snapObj.processEvent(Snapshot.Event.OperationFailed);
+                }
             } catch (NoTransitionException e1) {
                 s_logger.debug("Failed to change state: " + e1.toString());
             }
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
similarity index 96%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
index 287c378..57f8938 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
+++ b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
@@ -42,6 +42,7 @@
         stateMachine.addTransition(Snapshot.State.CreatedOnPrimary, Event.OperationNotPerformed, Snapshot.State.BackedUp);
         stateMachine.addTransition(Snapshot.State.BackingUp, Event.OperationSucceeded, Snapshot.State.BackedUp);
         stateMachine.addTransition(Snapshot.State.BackingUp, Event.OperationFailed, Snapshot.State.Error);
+        stateMachine.addTransition(Snapshot.State.BackingUp, Event.OperationNotPerformed, State.BackedUp);
         stateMachine.addTransition(Snapshot.State.BackedUp, Event.DestroyRequested, Snapshot.State.Destroying);
         stateMachine.addTransition(Snapshot.State.BackedUp, Event.CopyingRequested, Snapshot.State.Copying);
         stateMachine.addTransition(Snapshot.State.BackedUp, Event.BackupToSecondary, Snapshot.State.BackingUp);
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategyBase.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStrategyBase.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategyBase.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotStrategyBase.java
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/StorageSystemSnapshotStrategy.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/StorageSystemSnapshotStrategy.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/StorageSystemSnapshotStrategy.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/StorageSystemSnapshotStrategy.java
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
similarity index 100%
rename from engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
rename to engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
diff --git a/engine/storage/snapshot/resources/META-INF/cloudstack/core/spring-engine-storage-snapshot-core-context.xml b/engine/storage/snapshot/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-snapshot-core-context.xml
similarity index 100%
rename from engine/storage/snapshot/resources/META-INF/cloudstack/core/spring-engine-storage-snapshot-core-context.xml
rename to engine/storage/snapshot/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-snapshot-core-context.xml
diff --git a/engine/storage/snapshot/resources/META-INF/cloudstack/storage/spring-engine-storage-snapshot-storage-context.xml b/engine/storage/snapshot/src/main/resources/META-INF/cloudstack/storage/spring-engine-storage-snapshot-storage-context.xml
similarity index 100%
rename from engine/storage/snapshot/resources/META-INF/cloudstack/storage/spring-engine-storage-snapshot-storage-context.xml
rename to engine/storage/snapshot/src/main/resources/META-INF/cloudstack/storage/spring-engine-storage-snapshot-storage-context.xml
diff --git a/engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImplTest.java b/engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImplTest.java
new file mode 100644
index 0000000..aad339b
--- /dev/null
+++ b/engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImplTest.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.snapshot;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
+import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.cloud.storage.DataStoreRole;
+import com.cloud.storage.SnapshotVO;
+import com.cloud.storage.dao.SnapshotDao;
+import com.cloud.utils.component.ComponentContext;
+
+@RunWith(PowerMockRunner.class)
+public class SnapshotDataFactoryImplTest {
+
+    @Spy
+    @InjectMocks
+    private SnapshotDataFactoryImpl snapshotDataFactoryImpl = new SnapshotDataFactoryImpl();
+
+    @Mock
+    private SnapshotDataStoreDao snapshotStoreDaoMock;
+    @Mock
+    private DataStoreManager dataStoreManagerMock;
+    @Mock
+    private SnapshotDao snapshotDaoMock;
+
+    private long volumeMockId = 1;
+
+    @Test
+    public void getSnapshotsByVolumeAndDataStoreTestNoSnapshotDataStoreVOFound() {
+        Mockito.doReturn(new ArrayList<>()).when(snapshotStoreDaoMock).listAllByVolumeAndDataStore(volumeMockId, DataStoreRole.Primary);
+
+        List<SnapshotInfo> snapshots = snapshotDataFactoryImpl.getSnapshots(volumeMockId, DataStoreRole.Primary);
+
+        Assert.assertTrue(snapshots.isEmpty());
+    }
+
+    @Test
+    @PrepareForTest({ComponentContext.class})
+    public void getSnapshotsByVolumeAndDataStoreTest() {
+        PowerMockito.mockStatic(ComponentContext.class);
+        PowerMockito.when(ComponentContext.inject(SnapshotObject.class)).thenReturn(new SnapshotObject());
+
+        SnapshotDataStoreVO snapshotDataStoreVoMock = Mockito.mock(SnapshotDataStoreVO.class);
+        Mockito.doReturn(volumeMockId).when(snapshotDataStoreVoMock).getVolumeId();
+
+        long snapshotId = 1223;
+        long dataStoreId = 34567;
+        Mockito.doReturn(snapshotId).when(snapshotDataStoreVoMock).getSnapshotId();
+        Mockito.doReturn(dataStoreId).when(snapshotDataStoreVoMock).getDataStoreId();
+
+        SnapshotVO snapshotVoMock  = Mockito.mock(SnapshotVO.class);
+        Mockito.doReturn(snapshotId).when(snapshotVoMock).getId();
+
+        DataStoreRole dataStoreRole = DataStoreRole.Primary;
+        DataStore dataStoreMock = Mockito.mock(DataStore.class);
+        Mockito.doReturn(dataStoreId).when(dataStoreMock).getId();
+        Mockito.doReturn(dataStoreRole).when(dataStoreMock).getRole();
+
+        List<SnapshotDataStoreVO> snapshotDataStoreVOs = new ArrayList<>();
+        snapshotDataStoreVOs.add(snapshotDataStoreVoMock);
+
+        Mockito.doReturn(snapshotDataStoreVOs).when(snapshotStoreDaoMock).listAllByVolumeAndDataStore(volumeMockId, dataStoreRole);
+        Mockito.doReturn(dataStoreMock).when(dataStoreManagerMock).getDataStore(dataStoreId, dataStoreRole);
+        Mockito.doReturn(snapshotVoMock).when(snapshotDaoMock).findById(snapshotId);
+
+        List<SnapshotInfo> snapshots = snapshotDataFactoryImpl.getSnapshots(volumeMockId, dataStoreRole);
+
+        Assert.assertEquals(1, snapshots.size());
+
+        SnapshotInfo snapshotInfo = snapshots.get(0);
+        Assert.assertEquals(dataStoreMock, snapshotInfo.getDataStore());
+        Assert.assertEquals(snapshotVoMock, ((SnapshotObject)snapshotInfo).getSnapshotVO());
+
+        PowerMockito.verifyStatic();
+        ComponentContext.inject(SnapshotObject.class);
+    }
+}
diff --git a/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java b/engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotStrategyTest.java
similarity index 97%
rename from engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java
rename to engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotStrategyTest.java
index 22cf9c1..4420c19 100644
--- a/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java
+++ b/engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotStrategyTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package src;
+package org.apache.cloudstack.storage.vmsnapshot;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -25,8 +25,10 @@
 
 import javax.inject.Inject;
 
-import junit.framework.TestCase;
-
+import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotStrategy;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+import org.apache.cloudstack.test.utils.SpringUtils;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -43,13 +45,6 @@
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.AnnotationConfigContextLoader;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotStrategy;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.cloudstack.storage.vmsnapshot.DefaultVMSnapshotStrategy;
-import org.apache.cloudstack.storage.vmsnapshot.VMSnapshotHelper;
-import org.apache.cloudstack.test.utils.SpringUtils;
-
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.CreateVMSnapshotAnswer;
@@ -76,6 +71,8 @@
 import com.cloud.vm.snapshot.VMSnapshotVO;
 import com.cloud.vm.snapshot.dao.VMSnapshotDao;
 
+import junit.framework.TestCase;
+
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
 public class VMSnapshotStrategyTest extends TestCase {
@@ -245,9 +242,8 @@
     }
 
     @Configuration
-    @ComponentScan(basePackageClasses = {NetUtils.class, DefaultVMSnapshotStrategy.class},
-                   includeFilters = {@ComponentScan.Filter(value = TestConfiguration.Library.class, type = FilterType.CUSTOM)},
-                   useDefaultFilters = false)
+    @ComponentScan(basePackageClasses = {NetUtils.class, DefaultVMSnapshotStrategy.class}, includeFilters = {
+            @ComponentScan.Filter(value = TestConfiguration.Library.class, type = FilterType.CUSTOM)}, useDefaultFilters = false)
     public static class TestConfiguration extends SpringUtils.CloudStackTestConfiguration {
 
         public static class Library implements TypeFilter {
diff --git a/engine/storage/snapshot/test/resources/SnapshotManagerTestContext.xml b/engine/storage/snapshot/src/test/resources/SnapshotManagerTestContext.xml
similarity index 100%
rename from engine/storage/snapshot/test/resources/SnapshotManagerTestContext.xml
rename to engine/storage/snapshot/src/test/resources/SnapshotManagerTestContext.xml
diff --git a/engine/storage/snapshot/test/resources/db.properties b/engine/storage/snapshot/src/test/resources/db.properties
similarity index 100%
rename from engine/storage/snapshot/test/resources/db.properties
rename to engine/storage/snapshot/src/test/resources/db.properties
diff --git a/engine/storage/snapshot/test/src/SnapshotDataFactoryTest.java b/engine/storage/snapshot/test/src/SnapshotDataFactoryTest.java
deleted file mode 100644
index 6edaff1..0000000
--- a/engine/storage/snapshot/test/src/SnapshotDataFactoryTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package src;
-
-import junit.framework.TestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-
-//@RunWith(SpringJUnit4ClassRunner.class)
-//@ContextConfiguration(locations = "classpath:/SnapshotManagerTestContext.xml")
-public class SnapshotDataFactoryTest extends TestCase {
-    // @Inject SnapshotDataFactory snapshotFactory;
-
-    @Before
-    public void setup() throws Exception {
-        // ComponentContext.initComponentsLifeCycle();
-
-    }
-
-    @Test
-    public void testGestSnapshot() {
-        // snapshotFactory.getSnapshot(snapshotId);
-    }
-
-}
diff --git a/engine/storage/src/org/apache/cloudstack/storage/BaseType.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/BaseType.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/BaseType.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/BaseType.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/LocalHostEndpoint.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/LocalHostEndpoint.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/RemoteHostEndPoint.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/RemoteHostEndPoint.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
similarity index 97%
rename from engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
index b040c74..6e9c682 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
+++ b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java
@@ -48,11 +48,6 @@
     protected List<StoragePool> select(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) {
         s_logger.debug("ClusterScopeStoragePoolAllocator looking for storage pool");
 
-        if (dskCh.useLocalStorage()) {
-            // cluster wide allocator should bail out in case of local disk
-            return null;
-        }
-
         List<StoragePool> suitablePools = new ArrayList<StoragePool>();
 
         long dcId = plan.getDataCenterId();
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/backup/SnapshotOnBackupStoreInfo.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/backup/SnapshotOnBackupStoreInfo.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/backup/SnapshotOnBackupStoreInfo.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/backup/SnapshotOnBackupStoreInfo.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/backup/datastore/BackupStoreInfo.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/backup/datastore/BackupStoreInfo.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/backup/datastore/BackupStoreInfo.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/backup/datastore/BackupStoreInfo.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManager.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/DataObjectManager.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManager.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/DataObjectManager.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelper.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelper.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelper.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelper.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/StorageStrategyFactoryImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/StorageStrategyFactoryImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/helper/StorageStrategyFactoryImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/helper/StorageStrategyFactoryImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/VMSnapshotHelperImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/VMSnapshotHelperImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/helper/VMSnapshotHelperImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/helper/VMSnapshotHelperImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/ImageStoreDriver.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/ImageStoreDriver.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreHelper.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
similarity index 93%
rename from engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
index c3e48b9..6ca6b23 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
+++ b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
@@ -16,14 +16,17 @@
 // under the License.
 package org.apache.cloudstack.storage.image.db;
 
-import com.cloud.storage.DataStoreRole;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria.Op;
-import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.utils.db.UpdateBuilder;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
@@ -33,19 +36,18 @@
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.dao.SnapshotDao;
-import javax.inject.Inject;
-import com.cloud.hypervisor.Hypervisor;
-import java.util.ArrayList;
+import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Filter;
-import javax.naming.ConfigurationException;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.utils.db.UpdateBuilder;
 
 @Component
 public class SnapshotDataStoreDaoImpl extends GenericDaoBase<SnapshotDataStoreVO, Long> implements SnapshotDataStoreDao {
@@ -176,33 +178,33 @@
             if (dbVol != null) {
                 StringBuilder str = new StringBuilder("Unable to update ").append(dataObj.toString());
                 str.append(": DB Data={id=")
-                    .append(dbVol.getId())
-                    .append("; state=")
-                    .append(dbVol.getState())
-                    .append("; updatecount=")
-                    .append(dbVol.getUpdatedCount())
-                    .append(";updatedTime=")
-                    .append(dbVol.getUpdated());
+                .append(dbVol.getId())
+                .append("; state=")
+                .append(dbVol.getState())
+                .append("; updatecount=")
+                .append(dbVol.getUpdatedCount())
+                .append(";updatedTime=")
+                .append(dbVol.getUpdated());
                 str.append(": New Data={id=")
-                    .append(dataObj.getId())
-                    .append("; state=")
-                    .append(nextState)
-                    .append("; event=")
-                    .append(event)
-                    .append("; updatecount=")
-                    .append(dataObj.getUpdatedCount())
-                    .append("; updatedTime=")
-                    .append(dataObj.getUpdated());
+                .append(dataObj.getId())
+                .append("; state=")
+                .append(nextState)
+                .append("; event=")
+                .append(event)
+                .append("; updatecount=")
+                .append(dataObj.getUpdatedCount())
+                .append("; updatedTime=")
+                .append(dataObj.getUpdated());
                 str.append(": stale Data={id=")
-                    .append(dataObj.getId())
-                    .append("; state=")
-                    .append(currentState)
-                    .append("; event=")
-                    .append(event)
-                    .append("; updatecount=")
-                    .append(oldUpdated)
-                    .append("; updatedTime=")
-                    .append(oldUpdatedTime);
+                .append(dataObj.getId())
+                .append("; state=")
+                .append(currentState)
+                .append("; event=")
+                .append(event)
+                .append("; updatecount=")
+                .append(oldUpdated)
+                .append("; updatedTime=")
+                .append(oldUpdatedTime);
             } else {
                 s_logger.debug("Unable to update objectIndatastore: id=" + dataObj.getId() + ", as there is no such object exists in the database anymore");
             }
@@ -254,7 +256,7 @@
         TransactionLegacy txn = TransactionLegacy.currentTxn();
         try (
                 PreparedStatement pstmt = txn.prepareStatement(findLatestSnapshot);
-            ){
+                ){
             pstmt.setString(1, role.toString());
             pstmt.setLong(2, volumeId);
             try (ResultSet rs = pstmt.executeQuery();) {
@@ -275,7 +277,7 @@
         TransactionLegacy txn = TransactionLegacy.currentTxn();
         try (
                 PreparedStatement pstmt = txn.prepareStatement(findOldestSnapshot);
-            ){
+                ){
             pstmt.setString(1, role.toString());
             pstmt.setLong(2, volumeId);
             try (ResultSet rs = pstmt.executeQuery();) {
@@ -319,6 +321,14 @@
     }
 
     @Override
+    public List<SnapshotDataStoreVO> listAllByVolumeAndDataStore(long volumeId, DataStoreRole role) {
+        SearchCriteria<SnapshotDataStoreVO> sc = volumeSearch.create();
+        sc.setParameters("volume_id", volumeId);
+        sc.setParameters("store_role", role);
+        return listBy(sc);
+    }
+
+    @Override
     public SnapshotDataStoreVO findByVolume(long volumeId, DataStoreRole role) {
         SearchCriteria<SnapshotDataStoreVO> sc = volumeSearch.create();
         sc.setParameters("volume_id", volumeId);
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/BAREMETAL.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/BAREMETAL.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/BAREMETAL.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/BAREMETAL.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/ISO.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/ISO.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/ISO.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/ISO.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/ImageFormat.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/ImageFormat.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/ImageFormat.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/ImageFormat.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/OVA.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/OVA.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/OVA.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/OVA.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/QCOW2.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/QCOW2.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/QCOW2.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/QCOW2.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/RAW.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/RAW.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/RAW.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/RAW.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/Unknown.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/Unknown.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/Unknown.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/Unknown.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/VHD.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/VHD.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/VHDX.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/VHDX.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/format/VHDX.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/format/VHDX.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotHelper.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotHelper.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotHelper.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotHelper.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEvent.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/VolumeEvent.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEvent.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/volume/VolumeEvent.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
similarity index 100%
rename from engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
rename to engine/storage/src/main/java/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java
diff --git a/engine/storage/resources/META-INF/cloudstack/core/spring-engine-storage-core-context.xml b/engine/storage/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-core-context.xml
similarity index 100%
rename from engine/storage/resources/META-INF/cloudstack/core/spring-engine-storage-core-context.xml
rename to engine/storage/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-core-context.xml
diff --git a/engine/storage/resources/META-INF/cloudstack/storage-allocator/module.properties b/engine/storage/src/main/resources/META-INF/cloudstack/storage-allocator/module.properties
similarity index 100%
rename from engine/storage/resources/META-INF/cloudstack/storage-allocator/module.properties
rename to engine/storage/src/main/resources/META-INF/cloudstack/storage-allocator/module.properties
diff --git a/engine/storage/resources/META-INF/cloudstack/storage-allocator/spring-engine-storage-storage-allocator-context.xml b/engine/storage/src/main/resources/META-INF/cloudstack/storage-allocator/spring-engine-storage-storage-allocator-context.xml
similarity index 100%
rename from engine/storage/resources/META-INF/cloudstack/storage-allocator/spring-engine-storage-storage-allocator-context.xml
rename to engine/storage/src/main/resources/META-INF/cloudstack/storage-allocator/spring-engine-storage-storage-allocator-context.xml
diff --git a/engine/storage/src/org/apache/cloudstack/storage/EndPoint.java b/engine/storage/src/org/apache/cloudstack/storage/EndPoint.java
deleted file mode 100644
index b248758..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/EndPoint.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java
deleted file mode 100644
index b248758..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java
deleted file mode 100644
index b248758..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
diff --git a/engine/storage/test/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriorityTest.java b/engine/storage/src/test/java/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriorityTest.java
similarity index 100%
rename from engine/storage/test/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriorityTest.java
rename to engine/storage/src/test/java/org/apache/cloudstack/engine/subsystem/api/storage/StrategyPriorityTest.java
diff --git a/engine/storage/test/org/apache/cloudstack/storage/BaseTypeTest.java b/engine/storage/src/test/java/org/apache/cloudstack/storage/BaseTypeTest.java
similarity index 100%
rename from engine/storage/test/org/apache/cloudstack/storage/BaseTypeTest.java
rename to engine/storage/src/test/java/org/apache/cloudstack/storage/BaseTypeTest.java
diff --git a/engine/storage/storage.ucls b/engine/storage/storage.ucls
index 197432e..7f3c9fb 100644
--- a/engine/storage/storage.ucls
+++ b/engine/storage/storage.ucls
@@ -20,7 +20,7 @@
   generalizations="true" realizations="true" associations="true" dependencies="false" nesting-relationships="true">    
   <class id="1" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore" project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java" 
     binary="false">    
     <position height="-1" width="-1" x="418" y="554"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -30,7 +30,7 @@
   </class>  
   <interface id="2" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle" project="cloud-engine-api" 
-    file="/cloud-engine-api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java" 
+    file="/cloud-engine-api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java" 
     binary="false">    
     <position height="-1" width="-1" x="727" y="1011"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -40,7 +40,7 @@
   </interface>  
   <interface id="3" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver" project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java" 
     binary="false">    
     <position height="-1" width="-1" x="1494" y="1138"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -51,7 +51,7 @@
   <interface id="4" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/StorageProtocolTransformer.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/validator/StorageProtocolTransformer.java" 
     binary="false">    
     <position height="-1" width="-1" x="1584" y="606"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -61,7 +61,7 @@
   </interface>  
   <interface id="5" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider" project="cloud-engine-api" 
-    file="/cloud-engine-api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java" 
+    file="/cloud-engine-api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java" 
     binary="false">    
     <position height="-1" width="-1" x="189" y="87"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -72,7 +72,7 @@
   <class id="6" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.xenserver.XenNfsConfigurator"
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xenserver/XenNfsConfigurator.java"
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/xenserver/XenNfsConfigurator.java"
     binary="false">    
     <position height="-1" width="-1" x="1482" y="448"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -83,7 +83,7 @@
   <class id="7" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.xenserver.AbstractXenConfigurator"
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xenserver/AbstractXenConfigurator.java"
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/xenserver/AbstractXenConfigurator.java"
     binary="false">    
     <position height="-1" width="-1" x="1536" y="278"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -94,7 +94,7 @@
   <class id="8" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.AbstractPrimaryDataStoreConfigurator" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java" 
     binary="false">    
     <position height="-1" width="-1" x="1386" y="104"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -104,7 +104,7 @@
   </class>  
   <interface id="9" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore" project="cloud-engine-storage"
-    file="/cloud-engine-storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java" binary="false">    
+    file="/cloud-engine-storage/src/main/java/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java" binary="false">    
     <position height="-1" width="-1" x="770" y="-4"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
       <attributes public="false" package="true" protected="true" private="true"/>      
@@ -114,7 +114,7 @@
   <interface id="10" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java" 
     binary="false">    
     <position height="-1" width="-1" x="1394" y="-75"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -125,7 +125,7 @@
   <class id="11" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.validator.NfsProtocolTransformer" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsProtocolTransformer.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/validator/NfsProtocolTransformer.java" 
     binary="false">    
     <position height="-1" width="-1" x="1557" y="830"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -136,7 +136,7 @@
   <class id="12" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.lifecycle.DefaultXenServerPrimaryDataStoreLifeCycle"
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenServerPrimaryDataStoreLifeCycle.java"
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenServerPrimaryDataStoreLifeCycle.java"
     binary="false">    
     <position height="-1" width="-1" x="724" y="1502"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -147,7 +147,7 @@
   <class id="13" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.lifecycle.DefaultPrimaryDataStoreLifeCycleImpl" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java" 
     binary="false">    
     <position height="-1" width="-1" x="487" y="1290"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -158,7 +158,7 @@
   <class id="14" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.xenserver.XenServerIscsiConfigurator"
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/xenserver/XenServerIscsiConfigurator.java"
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/xenserver/XenServerIscsiConfigurator.java"
     binary="false">    
     <position height="-1" width="-1" x="1817" y="450"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -169,7 +169,7 @@
   <class id="15" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.kvm.AbstractKvmConfigurator" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java" 
     binary="false">    
     <position height="-1" width="-1" x="2255" y="278"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -180,7 +180,7 @@
   <class id="16" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.kvm.KvmNfsConfigurator" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java" 
     binary="false">    
     <position height="-1" width="-1" x="2155" y="459"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -191,7 +191,7 @@
   <class id="17" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.kvm.KvmCLVMConfigurator" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java" 
     binary="false">    
     <position height="-1" width="-1" x="2515" y="453"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -202,7 +202,7 @@
   <class id="18" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.validator.ISCSIProtocolTransformer" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIProtocolTransformer.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIProtocolTransformer.java" 
     binary="false">    
     <position height="-1" width="-1" x="1935" y="823"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
@@ -213,7 +213,7 @@
   <class id="19" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.storage.datastore.configurator.validator.CLVMProtocolTransformer" 
     project="cloud-engine-storage-volume" 
-    file="/cloud-engine-storage-volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMProtocolTransformer.java" 
+    file="/cloud-engine-storage-volume/src/main/java/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMProtocolTransformer.java" 
     binary="false">    
     <position height="-1" width="-1" x="2319" y="824"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
diff --git a/engine/storage/volume/pom.xml b/engine/storage/volume/pom.xml
index a7fecea..37c9e7e 100644
--- a/engine/storage/volume/pom.xml
+++ b/engine/storage/volume/pom.xml
@@ -1,52 +1,60 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-engine-storage-volume</artifactId>
-  <name>Apache CloudStack Engine Storage Volume Component</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-engine</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-engine-storage-volume</artifactId>
+    <name>Apache CloudStack Engine Storage Volume Component</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-engine</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreProviderManagerImpl.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreProviderManagerImpl.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreProviderManagerImpl.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreProviderManagerImpl.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/manager/data model.ucls
similarity index 88%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/manager/data model.ucls
index 8d7a696..b28a5cc 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls
+++ b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/manager/data model.ucls
@@ -20,7 +20,7 @@
   associations="true" dependencies="false" nesting-relationships="true">  
   <interface id="1" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.DataObject" project="cloud-engine-api" 
-    file="/cloud-engine-api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java" binary="false">    
+    file="/cloud-engine-api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/DataObject.java" binary="false">    
     <position height="-1" width="-1" x="311" y="101"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
       <attributes public="true" package="true" protected="true" private="true"/>      
@@ -29,7 +29,7 @@
   </interface>  
   <interface id="2" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo" project="cloud-engine-api" 
-    file="/cloud-engine-api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeInfo.java" binary="false">    
+    file="/cloud-engine-api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeInfo.java" binary="false">    
     <position height="-1" width="-1" x="146" y="279"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
       <attributes public="true" package="true" protected="true" private="true"/>      
@@ -38,7 +38,7 @@
   </interface>  
   <interface id="3" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo" project="cloud-engine-api" 
-    file="/cloud-engine-api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java" binary="false">    
+    file="/cloud-engine-api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java" binary="false">    
     <position height="-1" width="-1" x="361" y="282"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
       <attributes public="true" package="true" protected="true" private="true"/>      
@@ -47,7 +47,7 @@
   </interface>  
   <interface id="4" corner="BOTTOM_RIGHT" language="java" 
     name="org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo" project="cloud-engine-api" 
-    file="/cloud-engine-api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateInfo.java" binary="false">    
+    file="/cloud-engine-api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/TemplateInfo.java" binary="false">    
     <position height="-1" width="-1" x="573" y="292"/>    
     <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" visibility="true">      
       <attributes public="true" package="true" protected="true" private="true"/>      
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/DataStoreType.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/DataStoreType.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/DataStoreType.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/DataStoreType.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/ISCSI.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/ISCSI.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/ISCSI.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/ISCSI.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/NetworkFileSystem.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/NetworkFileSystem.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/NetworkFileSystem.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/NetworkFileSystem.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/SharedMount.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/SharedMount.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/datastore/type/SharedMount.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/type/SharedMount.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeObject.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeObject.java
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
similarity index 100%
rename from engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
rename to engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
diff --git a/engine/storage/volume/resources/META-INF/cloudstack/core/spring-engine-storage-volume-core-context.xml b/engine/storage/volume/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-volume-core-context.xml
similarity index 100%
rename from engine/storage/volume/resources/META-INF/cloudstack/core/spring-engine-storage-volume-core-context.xml
rename to engine/storage/volume/src/main/resources/META-INF/cloudstack/core/spring-engine-storage-volume-core-context.xml
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/VolumeObjectTest.java b/engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/VolumeObjectTest.java
similarity index 100%
rename from engine/storage/volume/test/org/apache/cloudstack/storage/volume/VolumeObjectTest.java
rename to engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/VolumeObjectTest.java
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java b/engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
similarity index 100%
rename from engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
rename to engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/Server.java b/engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/Server.java
similarity index 100%
rename from engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/Server.java
rename to engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/Server.java
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/Server1.java b/engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/Server1.java
similarity index 100%
rename from engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/Server1.java
rename to engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/Server1.java
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java b/engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
similarity index 100%
rename from engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
rename to engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestInProcessAsync.java b/engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/TestInProcessAsync.java
similarity index 100%
rename from engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestInProcessAsync.java
rename to engine/storage/volume/src/test/java/org/apache/cloudstack/storage/volume/test/TestInProcessAsync.java
diff --git a/engine/storage/volume/test/resource/testContext.xml b/engine/storage/volume/src/test/resource/testContext.xml
similarity index 100%
rename from engine/storage/volume/test/resource/testContext.xml
rename to engine/storage/volume/src/test/resource/testContext.xml
diff --git a/framework/agent-lb/pom.xml b/framework/agent-lb/pom.xml
index 244855a..da033ec 100644
--- a/framework/agent-lb/pom.xml
+++ b/framework/agent-lb/pom.xml
@@ -1,32 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <name>Apache CloudStack Agent Management Servers Load Balancer</name>
     <artifactId>cloud-framework-agent-lb</artifactId>
     <parent>
         <artifactId>cloudstack-framework</artifactId>
         <groupId>org.apache.cloudstack</groupId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <version>4.12.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
-
 </project>
diff --git a/framework/agent-lb/src/org/apache/cloudstack/agent/lb/IndirectAgentLB.java b/framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java
similarity index 100%
rename from framework/agent-lb/src/org/apache/cloudstack/agent/lb/IndirectAgentLB.java
rename to framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLB.java
diff --git a/framework/agent-lb/src/org/apache/cloudstack/agent/lb/IndirectAgentLBAlgorithm.java b/framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBAlgorithm.java
similarity index 100%
rename from framework/agent-lb/src/org/apache/cloudstack/agent/lb/IndirectAgentLBAlgorithm.java
rename to framework/agent-lb/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBAlgorithm.java
diff --git a/framework/ca/pom.xml b/framework/ca/pom.xml
index 731d037..f179fb9 100644
--- a/framework/ca/pom.xml
+++ b/framework/ca/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-ca</artifactId>
-  <name>Apache CloudStack Framework - Certificate Authority</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-ca</artifactId>
+    <name>Apache CloudStack Framework - Certificate Authority</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/framework/ca/src/org/apache/cloudstack/framework/ca/CAProvider.java b/framework/ca/src/main/java/org/apache/cloudstack/framework/ca/CAProvider.java
similarity index 100%
rename from framework/ca/src/org/apache/cloudstack/framework/ca/CAProvider.java
rename to framework/ca/src/main/java/org/apache/cloudstack/framework/ca/CAProvider.java
diff --git a/framework/ca/src/org/apache/cloudstack/framework/ca/CAService.java b/framework/ca/src/main/java/org/apache/cloudstack/framework/ca/CAService.java
similarity index 100%
rename from framework/ca/src/org/apache/cloudstack/framework/ca/CAService.java
rename to framework/ca/src/main/java/org/apache/cloudstack/framework/ca/CAService.java
diff --git a/framework/ca/src/org/apache/cloudstack/framework/ca/Certificate.java b/framework/ca/src/main/java/org/apache/cloudstack/framework/ca/Certificate.java
similarity index 100%
rename from framework/ca/src/org/apache/cloudstack/framework/ca/Certificate.java
rename to framework/ca/src/main/java/org/apache/cloudstack/framework/ca/Certificate.java
diff --git a/framework/cluster/pom.xml b/framework/cluster/pom.xml
index 5aa3ef5..c9b61d6 100644
--- a/framework/cluster/pom.xml
+++ b/framework/cluster/pom.xml
@@ -1,45 +1,54 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-cluster</artifactId>
-  <name>Apache CloudStack Framework - Clustering</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-cluster</artifactId>
+    <name>Apache CloudStack Framework - Clustering</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/cluster/src/com/cloud/cluster/ActiveFencingException.java b/framework/cluster/src/main/java/com/cloud/cluster/ActiveFencingException.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ActiveFencingException.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ActiveFencingException.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterFenceManager.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManager.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterFenceManager.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManager.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterFenceManagerImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManagerImpl.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterFenceManagerImpl.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManagerImpl.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterInvalidSessionException.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterInvalidSessionException.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterInvalidSessionException.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterInvalidSessionException.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManager.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManager.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterManager.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterManager.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerListener.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterManagerListener.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerMBean.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerMBean.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterManagerMBean.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerMBean.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerMBeanImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerMBeanImpl.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterManagerMBeanImpl.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerMBeanImpl.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerMessage.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerMessage.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterManagerMessage.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerMessage.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterNodeJoinEventArgs.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterNodeJoinEventArgs.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterNodeJoinEventArgs.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterNodeJoinEventArgs.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterNodeLeftEventArgs.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterNodeLeftEventArgs.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterNodeLeftEventArgs.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterNodeLeftEventArgs.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterService.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterService.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterService.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterService.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceAdapter.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceAdapter.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServiceAdapter.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceAdapter.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServicePdu.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServicePdu.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServicePdu.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServicePdu.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceRequestPdu.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceRequestPdu.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServiceRequestPdu.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceRequestPdu.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletAdapter.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletAdapter.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServiceServletAdapter.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletAdapter.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletContainer.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletContainer.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletHttpHandler.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletHttpHandler.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServiceServletHttpHandler.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletHttpHandler.java
diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletImpl.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ClusterServiceServletImpl.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ClusterServiceServletImpl.java
diff --git a/framework/cluster/src/com/cloud/cluster/ManagementServerHost.java b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHost.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ManagementServerHost.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHost.java
diff --git a/framework/cluster/src/com/cloud/cluster/ManagementServerHostPeerVO.java b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostPeerVO.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ManagementServerHostPeerVO.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostPeerVO.java
diff --git a/framework/cluster/src/com/cloud/cluster/ManagementServerHostVO.java b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostVO.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/ManagementServerHostVO.java
rename to framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostVO.java
diff --git a/framework/cluster/src/com/cloud/cluster/RemoteMethodConstants.java b/framework/cluster/src/main/java/com/cloud/cluster/RemoteMethodConstants.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/RemoteMethodConstants.java
rename to framework/cluster/src/main/java/com/cloud/cluster/RemoteMethodConstants.java
diff --git a/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDao.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDao.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDao.java
rename to framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDao.java
diff --git a/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java
rename to framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java
diff --git a/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostPeerDao.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDao.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostPeerDao.java
rename to framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDao.java
diff --git a/framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java
similarity index 100%
rename from framework/cluster/src/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java
rename to framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java
diff --git a/framework/cluster/resources/META-INF/cloudstack/core/spring-framework-cluster-core-context.xml b/framework/cluster/src/main/resources/META-INF/cloudstack/core/spring-framework-cluster-core-context.xml
similarity index 100%
rename from framework/cluster/resources/META-INF/cloudstack/core/spring-framework-cluster-core-context.xml
rename to framework/cluster/src/main/resources/META-INF/cloudstack/core/spring-framework-cluster-core-context.xml
diff --git a/framework/cluster/test/com/cloud/cluster/ClusterServiceServletAdapterTest.java b/framework/cluster/src/test/java/com/cloud/cluster/ClusterServiceServletAdapterTest.java
similarity index 100%
rename from framework/cluster/test/com/cloud/cluster/ClusterServiceServletAdapterTest.java
rename to framework/cluster/src/test/java/com/cloud/cluster/ClusterServiceServletAdapterTest.java
diff --git a/framework/config/pom.xml b/framework/config/pom.xml
index 1aac545..b3c2abe 100644
--- a/framework/config/pom.xml
+++ b/framework/config/pom.xml
@@ -1,33 +1,42 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-config</artifactId>
-  <name>Apache CloudStack Framework - Configuration</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-config</artifactId>
+    <name>Apache CloudStack Framework - Configuration</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/config/src/org/apache/cloudstack/config/Configuration.java b/framework/config/src/main/java/org/apache/cloudstack/config/Configuration.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/config/Configuration.java
rename to framework/config/src/main/java/org/apache/cloudstack/config/Configuration.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/ConfigDepot.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigDepot.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/ConfigDepot.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigDepot.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/ConfigDepotAdmin.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigDepotAdmin.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/ConfigDepotAdmin.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigDepotAdmin.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/ConfigKey.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
similarity index 97%
rename from framework/config/src/org/apache/cloudstack/framework/config/ConfigKey.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
index 1734b98..2ace24d 100644
--- a/framework/config/src/org/apache/cloudstack/framework/config/ConfigKey.java
+++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
@@ -152,7 +152,7 @@
             return value();
         }
 
-        String value = s_depot != null ? s_depot.scoped(this).getConfigValue(id, this) : null;
+        String value = s_depot != null ? s_depot.findScopedConfigStorage(this).getConfigValue(id, this) : null;
         if (value == null) {
             return value();
         } else {
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/Configurable.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/Configurable.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/Configurable.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/Configurable.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/ScopedConfigStorage.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/ScopedConfigStorage.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDao.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java
similarity index 98%
rename from framework/config/src/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java
index 6a85b90..bb49ce1 100644
--- a/framework/config/src/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java
+++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java
@@ -166,7 +166,7 @@
         return _configDao;
     }
 
-    public ScopedConfigStorage scoped(ConfigKey<?> config) {
+    public ScopedConfigStorage findScopedConfigStorage(ConfigKey<?> config) {
         for (ScopedConfigStorage storage : _scopedStorages) {
             if (storage.getScope() == config.scope()) {
                 return storage;
diff --git a/framework/config/src/org/apache/cloudstack/framework/config/impl/ConfigurationVO.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigurationVO.java
similarity index 100%
rename from framework/config/src/org/apache/cloudstack/framework/config/impl/ConfigurationVO.java
rename to framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigurationVO.java
diff --git a/framework/config/resources/META-INF/cloudstack/system/spring-framework-config-system-context-inheritable.xml b/framework/config/src/main/resources/META-INF/cloudstack/system/spring-framework-config-system-context-inheritable.xml
similarity index 100%
rename from framework/config/resources/META-INF/cloudstack/system/spring-framework-config-system-context-inheritable.xml
rename to framework/config/src/main/resources/META-INF/cloudstack/system/spring-framework-config-system-context-inheritable.xml
diff --git a/framework/config/resources/META-INF/cloudstack/system/spring-framework-config-system-context.xml b/framework/config/src/main/resources/META-INF/cloudstack/system/spring-framework-config-system-context.xml
similarity index 100%
rename from framework/config/resources/META-INF/cloudstack/system/spring-framework-config-system-context.xml
rename to framework/config/src/main/resources/META-INF/cloudstack/system/spring-framework-config-system-context.xml
diff --git a/framework/config/test/org/apache/cloudstack/framework/config/ConfigKeyTest.java b/framework/config/src/test/java/org/apache/cloudstack/framework/config/ConfigKeyTest.java
similarity index 100%
rename from framework/config/test/org/apache/cloudstack/framework/config/ConfigKeyTest.java
rename to framework/config/src/test/java/org/apache/cloudstack/framework/config/ConfigKeyTest.java
diff --git a/framework/config/test/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java b/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java
similarity index 100%
rename from framework/config/test/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java
rename to framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java
diff --git a/framework/db/pom.xml b/framework/db/pom.xml
index d0a81a2..b2edee1 100644
--- a/framework/db/pom.xml
+++ b/framework/db/pom.xml
@@ -1,63 +1,71 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-db</artifactId>
-  <name>Apache CloudStack Framework - Database</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>net.sf.ehcache</groupId>
-      <artifactId>ehcache-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.persistence</groupId>
-      <artifactId>javax.persistence</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-dbcp2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${cs.commons-io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-pool2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>com/cloud/utils/testcase/*TestCase*</exclude>
-            <exclude>com/cloud/utils/db/*Test*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-db</artifactId>
+    <name>Apache CloudStack Framework - Database</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>net.sf.ehcache</groupId>
+            <artifactId>ehcache-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.persistence</groupId>
+            <artifactId>javax.persistence</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>com/cloud/utils/testcase/*TestCase*</exclude>
+                        <exclude>com/cloud/utils/db/*Test*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/framework/db/src/com/cloud/dao/EntityManagerImpl.java b/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java
similarity index 100%
rename from framework/db/src/com/cloud/dao/EntityManagerImpl.java
rename to framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java
diff --git a/framework/db/src/com/cloud/utils/crypt/EncryptionSecretKeyChanger.java b/framework/db/src/main/java/com/cloud/utils/crypt/EncryptionSecretKeyChanger.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/crypt/EncryptionSecretKeyChanger.java
rename to framework/db/src/main/java/com/cloud/utils/crypt/EncryptionSecretKeyChanger.java
diff --git a/framework/db/src/com/cloud/utils/db/Attribute.java b/framework/db/src/main/java/com/cloud/utils/db/Attribute.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/Attribute.java
rename to framework/db/src/main/java/com/cloud/utils/db/Attribute.java
diff --git a/framework/db/src/com/cloud/utils/db/ConnectionConcierge.java b/framework/db/src/main/java/com/cloud/utils/db/ConnectionConcierge.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/ConnectionConcierge.java
rename to framework/db/src/main/java/com/cloud/utils/db/ConnectionConcierge.java
diff --git a/framework/db/src/com/cloud/utils/db/ConnectionConciergeMBean.java b/framework/db/src/main/java/com/cloud/utils/db/ConnectionConciergeMBean.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/ConnectionConciergeMBean.java
rename to framework/db/src/main/java/com/cloud/utils/db/ConnectionConciergeMBean.java
diff --git a/framework/db/src/com/cloud/utils/db/DB.java b/framework/db/src/main/java/com/cloud/utils/db/DB.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/DB.java
rename to framework/db/src/main/java/com/cloud/utils/db/DB.java
diff --git a/framework/db/src/com/cloud/utils/db/DbUtil.java b/framework/db/src/main/java/com/cloud/utils/db/DbUtil.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/DbUtil.java
rename to framework/db/src/main/java/com/cloud/utils/db/DbUtil.java
diff --git a/framework/db/src/com/cloud/utils/db/DriverLoader.java b/framework/db/src/main/java/com/cloud/utils/db/DriverLoader.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/DriverLoader.java
rename to framework/db/src/main/java/com/cloud/utils/db/DriverLoader.java
diff --git a/framework/db/src/com/cloud/utils/db/EcInfo.java b/framework/db/src/main/java/com/cloud/utils/db/EcInfo.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/EcInfo.java
rename to framework/db/src/main/java/com/cloud/utils/db/EcInfo.java
diff --git a/framework/db/src/com/cloud/utils/db/Encrypt.java b/framework/db/src/main/java/com/cloud/utils/db/Encrypt.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/Encrypt.java
rename to framework/db/src/main/java/com/cloud/utils/db/Encrypt.java
diff --git a/framework/db/src/com/cloud/utils/db/Filter.java b/framework/db/src/main/java/com/cloud/utils/db/Filter.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/Filter.java
rename to framework/db/src/main/java/com/cloud/utils/db/Filter.java
diff --git a/framework/db/src/com/cloud/utils/db/GenericDao.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/GenericDao.java
rename to framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
diff --git a/framework/db/src/com/cloud/utils/db/GenericDaoBase.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
similarity index 98%
rename from framework/db/src/com/cloud/utils/db/GenericDaoBase.java
rename to framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
index 304a122..442d3cc 100644
--- a/framework/db/src/com/cloud/utils/db/GenericDaoBase.java
+++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
@@ -1315,6 +1315,10 @@
     public Pair<List<T>, Integer> searchAndCount(final SearchCriteria<T> sc, final Filter filter) {
         List<T> objects = search(sc, filter, null, false);
         Integer count = getCount(sc);
+        // Count cannot be less than the result set but can be higher due to pagination, see CLOUDSTACK-10320
+        if (count < objects.size()) {
+            count = objects.size();
+        }
         return new Pair<List<T>, Integer>(objects, count);
     }
 
@@ -1323,6 +1327,11 @@
     public Pair<List<T>, Integer> searchAndDistinctCount(final SearchCriteria<T> sc, final Filter filter) {
         List<T> objects = search(sc, filter, null, false);
         Integer count = getDistinctCount(sc);
+        // Count cannot be 0 if there is at least a result in the list, see CLOUDSTACK-10320
+        if (count == 0 && !objects.isEmpty()) {
+            // Cannot assume if it's more than one since the count is distinct vs search
+            count = 1;
+        }
         return new Pair<List<T>, Integer>(objects, count);
     }
 
@@ -1331,6 +1340,11 @@
     public Pair<List<T>, Integer> searchAndDistinctCount(final SearchCriteria<T> sc, final Filter filter, final String[] distinctColumns) {
         List<T> objects = search(sc, filter, null, false);
         Integer count = getDistinctCount(sc, distinctColumns);
+        // Count cannot be 0 if there is at least a result in the list, see CLOUDSTACK-10320
+        if (count == 0 && !objects.isEmpty()) {
+            // Cannot assume if it's more than one since the count is distinct vs search
+            count = 1;
+        }
         return new Pair<List<T>, Integer>(objects, count);
     }
 
diff --git a/framework/db/src/com/cloud/utils/db/GenericQueryBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/GenericQueryBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/GenericQueryBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/GenericQueryBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/GenericSearchBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/GenericSearchBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/GenericSearchBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/GenericSearchBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/GlobalLock.java b/framework/db/src/main/java/com/cloud/utils/db/GlobalLock.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/GlobalLock.java
rename to framework/db/src/main/java/com/cloud/utils/db/GlobalLock.java
diff --git a/framework/db/src/com/cloud/utils/db/GroupBy.java b/framework/db/src/main/java/com/cloud/utils/db/GroupBy.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/GroupBy.java
rename to framework/db/src/main/java/com/cloud/utils/db/GroupBy.java
diff --git a/framework/db/src/com/cloud/utils/db/JoinBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/JoinBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/JoinBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/JoinBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/JoinType.java b/framework/db/src/main/java/com/cloud/utils/db/JoinType.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/JoinType.java
rename to framework/db/src/main/java/com/cloud/utils/db/JoinType.java
diff --git a/framework/db/src/com/cloud/utils/db/Merovingian2.java b/framework/db/src/main/java/com/cloud/utils/db/Merovingian2.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/Merovingian2.java
rename to framework/db/src/main/java/com/cloud/utils/db/Merovingian2.java
diff --git a/framework/db/src/com/cloud/utils/db/MerovingianMBean.java b/framework/db/src/main/java/com/cloud/utils/db/MerovingianMBean.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/MerovingianMBean.java
rename to framework/db/src/main/java/com/cloud/utils/db/MerovingianMBean.java
diff --git a/framework/db/src/com/cloud/utils/db/QueryBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/QueryBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/QueryBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/QueryBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/ScriptRunner.java b/framework/db/src/main/java/com/cloud/utils/db/ScriptRunner.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/ScriptRunner.java
rename to framework/db/src/main/java/com/cloud/utils/db/ScriptRunner.java
diff --git a/framework/db/src/com/cloud/utils/db/SearchBase.java b/framework/db/src/main/java/com/cloud/utils/db/SearchBase.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/SearchBase.java
rename to framework/db/src/main/java/com/cloud/utils/db/SearchBase.java
diff --git a/framework/db/src/com/cloud/utils/db/SearchBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/SearchBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/SearchBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/SearchBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/SearchCriteria.java b/framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/SearchCriteria.java
rename to framework/db/src/main/java/com/cloud/utils/db/SearchCriteria.java
diff --git a/framework/db/src/com/cloud/utils/db/SequenceFetcher.java b/framework/db/src/main/java/com/cloud/utils/db/SequenceFetcher.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/SequenceFetcher.java
rename to framework/db/src/main/java/com/cloud/utils/db/SequenceFetcher.java
diff --git a/framework/db/src/com/cloud/utils/db/SqlGenerator.java b/framework/db/src/main/java/com/cloud/utils/db/SqlGenerator.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/SqlGenerator.java
rename to framework/db/src/main/java/com/cloud/utils/db/SqlGenerator.java
diff --git a/framework/db/src/com/cloud/utils/db/StateMachine.java b/framework/db/src/main/java/com/cloud/utils/db/StateMachine.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/StateMachine.java
rename to framework/db/src/main/java/com/cloud/utils/db/StateMachine.java
diff --git a/framework/db/src/com/cloud/utils/db/Transaction.java b/framework/db/src/main/java/com/cloud/utils/db/Transaction.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/Transaction.java
rename to framework/db/src/main/java/com/cloud/utils/db/Transaction.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionAttachment.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionAttachment.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionAttachment.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionAttachment.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionCallback.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionCallback.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionCallback.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionCallback.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionCallbackNoReturn.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionCallbackNoReturn.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionCallbackNoReturn.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionCallbackNoReturn.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionCallbackWithException.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionCallbackWithException.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionCallbackWithException.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionCallbackWithException.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionCallbackWithExceptionNoReturn.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionCallbackWithExceptionNoReturn.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionCallbackWithExceptionNoReturn.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionCallbackWithExceptionNoReturn.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionContextBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionContextBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionContextBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionContextBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionContextInterceptor.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionContextInterceptor.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionContextInterceptor.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionContextInterceptor.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionContextListener.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionContextListener.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionContextListener.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionContextListener.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionLegacy.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionLegacy.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionMBean.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionMBean.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionMBean.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionMBean.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionMBeanImpl.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionMBeanImpl.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionMBeanImpl.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionMBeanImpl.java
diff --git a/framework/db/src/com/cloud/utils/db/TransactionStatus.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionStatus.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/TransactionStatus.java
rename to framework/db/src/main/java/com/cloud/utils/db/TransactionStatus.java
diff --git a/framework/db/src/com/cloud/utils/db/UpdateBuilder.java b/framework/db/src/main/java/com/cloud/utils/db/UpdateBuilder.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/UpdateBuilder.java
rename to framework/db/src/main/java/com/cloud/utils/db/UpdateBuilder.java
diff --git a/framework/db/src/com/cloud/utils/db/UpdateFilter.java b/framework/db/src/main/java/com/cloud/utils/db/UpdateFilter.java
similarity index 100%
rename from framework/db/src/com/cloud/utils/db/UpdateFilter.java
rename to framework/db/src/main/java/com/cloud/utils/db/UpdateFilter.java
diff --git a/framework/db/resources/META-INF/cloudstack/system/spring-framework-db-system-context.xml b/framework/db/src/main/resources/META-INF/cloudstack/system/spring-framework-db-system-context.xml
similarity index 100%
rename from framework/db/resources/META-INF/cloudstack/system/spring-framework-db-system-context.xml
rename to framework/db/src/main/resources/META-INF/cloudstack/system/spring-framework-db-system-context.xml
diff --git a/framework/db/test/db.properties b/framework/db/src/test/db.properties
similarity index 100%
rename from framework/db/test/db.properties
rename to framework/db/src/test/db.properties
diff --git a/framework/db/test/com/cloud/utils/DbUtilTest.java b/framework/db/src/test/java/com/cloud/utils/DbUtilTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/DbUtilTest.java
rename to framework/db/src/test/java/com/cloud/utils/DbUtilTest.java
diff --git a/framework/db/test/com/cloud/utils/db/DbAnnotatedBase.java b/framework/db/src/test/java/com/cloud/utils/db/DbAnnotatedBase.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/DbAnnotatedBase.java
rename to framework/db/src/test/java/com/cloud/utils/db/DbAnnotatedBase.java
diff --git a/framework/db/test/com/cloud/utils/db/DbAnnotatedBaseDerived.java b/framework/db/src/test/java/com/cloud/utils/db/DbAnnotatedBaseDerived.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/DbAnnotatedBaseDerived.java
rename to framework/db/src/test/java/com/cloud/utils/db/DbAnnotatedBaseDerived.java
diff --git a/framework/db/test/com/cloud/utils/db/DbTestDao.java b/framework/db/src/test/java/com/cloud/utils/db/DbTestDao.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/DbTestDao.java
rename to framework/db/src/test/java/com/cloud/utils/db/DbTestDao.java
diff --git a/framework/db/test/com/cloud/utils/db/DbTestUtils.java b/framework/db/src/test/java/com/cloud/utils/db/DbTestUtils.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/DbTestUtils.java
rename to framework/db/src/test/java/com/cloud/utils/db/DbTestUtils.java
diff --git a/framework/db/test/com/cloud/utils/db/DbTestVO.java b/framework/db/src/test/java/com/cloud/utils/db/DbTestVO.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/DbTestVO.java
rename to framework/db/src/test/java/com/cloud/utils/db/DbTestVO.java
diff --git a/framework/db/test/com/cloud/utils/db/DummyComponent.java b/framework/db/src/test/java/com/cloud/utils/db/DummyComponent.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/DummyComponent.java
rename to framework/db/src/test/java/com/cloud/utils/db/DummyComponent.java
diff --git a/framework/db/test/com/cloud/utils/db/ElementCollectionTest.java b/framework/db/src/test/java/com/cloud/utils/db/ElementCollectionTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/ElementCollectionTest.java
rename to framework/db/src/test/java/com/cloud/utils/db/ElementCollectionTest.java
diff --git a/framework/db/test/com/cloud/utils/db/FilterTest.java b/framework/db/src/test/java/com/cloud/utils/db/FilterTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/FilterTest.java
rename to framework/db/src/test/java/com/cloud/utils/db/FilterTest.java
diff --git a/framework/db/test/com/cloud/utils/db/GenericDaoBaseTest.java b/framework/db/src/test/java/com/cloud/utils/db/GenericDaoBaseTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/GenericDaoBaseTest.java
rename to framework/db/src/test/java/com/cloud/utils/db/GenericDaoBaseTest.java
diff --git a/framework/db/test/com/cloud/utils/db/GlobalLockTest.java b/framework/db/src/test/java/com/cloud/utils/db/GlobalLockTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/GlobalLockTest.java
rename to framework/db/src/test/java/com/cloud/utils/db/GlobalLockTest.java
diff --git a/framework/db/test/com/cloud/utils/db/GroupByTest.java b/framework/db/src/test/java/com/cloud/utils/db/GroupByTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/GroupByTest.java
rename to framework/db/src/test/java/com/cloud/utils/db/GroupByTest.java
diff --git a/framework/db/test/com/cloud/utils/db/Merovingian2Test.java b/framework/db/src/test/java/com/cloud/utils/db/Merovingian2Test.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/Merovingian2Test.java
rename to framework/db/src/test/java/com/cloud/utils/db/Merovingian2Test.java
diff --git a/framework/db/test/com/cloud/utils/db/TestTransaction.java b/framework/db/src/test/java/com/cloud/utils/db/TestTransaction.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/TestTransaction.java
rename to framework/db/src/test/java/com/cloud/utils/db/TestTransaction.java
diff --git a/framework/db/test/com/cloud/utils/db/TransactionContextBuilderTest.java b/framework/db/src/test/java/com/cloud/utils/db/TransactionContextBuilderTest.java
similarity index 100%
rename from framework/db/test/com/cloud/utils/db/TransactionContextBuilderTest.java
rename to framework/db/src/test/java/com/cloud/utils/db/TransactionContextBuilderTest.java
diff --git a/framework/db/test/resources/db.properties b/framework/db/src/test/resources/db.properties
similarity index 100%
rename from framework/db/test/resources/db.properties
rename to framework/db/src/test/resources/db.properties
diff --git a/framework/direct-download/pom.xml b/framework/direct-download/pom.xml
index 6e101e8..865dfef 100644
--- a/framework/direct-download/pom.xml
+++ b/framework/direct-download/pom.xml
@@ -1,31 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>cloud-framework-direct-download</artifactId>
     <name>Apache CloudStack Framework - Direct Download to Primary Storage</name>
     <parent>
         <artifactId>cloudstack-framework</artifactId>
         <groupId>org.apache.cloudstack</groupId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <version>4.12.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 </project>
\ No newline at end of file
diff --git a/framework/direct-download/src/org/apache/cloudstack/framework/agent/direct/download/DirectDownloadService.java b/framework/direct-download/src/main/java/org/apache/cloudstack/framework/agent/direct/download/DirectDownloadService.java
similarity index 100%
rename from framework/direct-download/src/org/apache/cloudstack/framework/agent/direct/download/DirectDownloadService.java
rename to framework/direct-download/src/main/java/org/apache/cloudstack/framework/agent/direct/download/DirectDownloadService.java
diff --git a/framework/events/pom.xml b/framework/events/pom.xml
index ab8ba22..4572af6 100644
--- a/framework/events/pom.xml
+++ b/framework/events/pom.xml
@@ -1,36 +1,45 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-events</artifactId>
-  <name>Apache CloudStack Framework - Event Notification</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-events</artifactId>
+    <name>Apache CloudStack Framework - Event Notification</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/Event.java b/framework/events/src/main/java/org/apache/cloudstack/framework/events/Event.java
similarity index 100%
rename from framework/events/src/org/apache/cloudstack/framework/events/Event.java
rename to framework/events/src/main/java/org/apache/cloudstack/framework/events/Event.java
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/EventBus.java b/framework/events/src/main/java/org/apache/cloudstack/framework/events/EventBus.java
similarity index 100%
rename from framework/events/src/org/apache/cloudstack/framework/events/EventBus.java
rename to framework/events/src/main/java/org/apache/cloudstack/framework/events/EventBus.java
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/EventBusException.java b/framework/events/src/main/java/org/apache/cloudstack/framework/events/EventBusException.java
similarity index 100%
rename from framework/events/src/org/apache/cloudstack/framework/events/EventBusException.java
rename to framework/events/src/main/java/org/apache/cloudstack/framework/events/EventBusException.java
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/EventSubscriber.java b/framework/events/src/main/java/org/apache/cloudstack/framework/events/EventSubscriber.java
similarity index 100%
rename from framework/events/src/org/apache/cloudstack/framework/events/EventSubscriber.java
rename to framework/events/src/main/java/org/apache/cloudstack/framework/events/EventSubscriber.java
diff --git a/framework/events/src/org/apache/cloudstack/framework/events/EventTopic.java b/framework/events/src/main/java/org/apache/cloudstack/framework/events/EventTopic.java
similarity index 100%
rename from framework/events/src/org/apache/cloudstack/framework/events/EventTopic.java
rename to framework/events/src/main/java/org/apache/cloudstack/framework/events/EventTopic.java
diff --git a/framework/ipc/pom.xml b/framework/ipc/pom.xml
index b84f905..c64a9a4 100644
--- a/framework/ipc/pom.xml
+++ b/framework/ipc/pom.xml
@@ -1,60 +1,68 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-ipc</artifactId>
-  <name>Apache CloudStack Framework - IPC</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>cglib</groupId>
-      <artifactId>cglib-nodep</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>    
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>  
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-ipc</artifactId>
+    <name>Apache CloudStack Framework - IPC</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/framework/ipc/src/com/cloud/agent/manager/Commands.java b/framework/ipc/src/main/java/com/cloud/agent/manager/Commands.java
similarity index 100%
rename from framework/ipc/src/com/cloud/agent/manager/Commands.java
rename to framework/ipc/src/main/java/com/cloud/agent/manager/Commands.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallFuture.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCallFuture.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallFuture.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCallFuture.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallbackDispatcher.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCallbackDispatcher.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallbackDispatcher.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCallbackDispatcher.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallbackDriver.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCallbackDriver.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallbackDriver.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCallbackDriver.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncRpcContext.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncRpcContext.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncRpcContext.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/async/AsyncRpcContext.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/InplaceAsyncCallbackDriver.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/async/InplaceAsyncCallbackDriver.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/async/InplaceAsyncCallbackDriver.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/async/InplaceAsyncCallbackDriver.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientMessageBus.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientMessageBus.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/client/ClientMessageBus.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientMessageBus.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportConnection.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportConnection.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportConnection.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportConnection.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportEndpoint.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportEndpoint.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportEndpoint.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportEndpoint.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportEndpointSite.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportEndpointSite.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportEndpointSite.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportEndpointSite.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportProvider.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/client/ClientTransportProvider.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBus.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageBus.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBus.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageBus.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusEndpoint.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageBusEndpoint.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusEndpoint.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageBusEndpoint.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDetector.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageDetector.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDetector.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageDetector.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDispatcher.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageDispatcher.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDispatcher.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageDispatcher.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageHandler.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageHandler.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageHandler.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageHandler.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageSubscriber.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageSubscriber.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageSubscriber.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/MessageSubscriber.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/PublishScope.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/PublishScope.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/messagebus/PublishScope.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/messagebus/PublishScope.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallRequestPdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallRequestPdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallRequestPdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallRequestPdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallResponsePdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallResponsePdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallResponsePdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallResponsePdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallbackDispatcher.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallbackDispatcher.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallbackDispatcher.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallbackDispatcher.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallbackListener.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallbackListener.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcCallbackListener.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcCallbackListener.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcClientCall.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcClientCall.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcClientCall.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcClientCall.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcClientCallImpl.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcClientCallImpl.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcClientCallImpl.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcClientCallImpl.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcException.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcException.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcException.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcException.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcIOException.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcIOException.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcIOException.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcIOException.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcProvider.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcProvider.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcProvider.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcProvider.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcProviderImpl.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcProviderImpl.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcProviderImpl.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcProviderImpl.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServerCall.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServerCall.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServerCall.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServerCall.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServerCallImpl.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServerCallImpl.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServerCallImpl.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServerCallImpl.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServiceDispatcher.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServiceDispatcher.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServiceDispatcher.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServiceDispatcher.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServiceEndpoint.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServiceEndpoint.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServiceEndpoint.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServiceEndpoint.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServiceHandler.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServiceHandler.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcServiceHandler.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcServiceHandler.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcTimeoutException.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcTimeoutException.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/rpc/RpcTimeoutException.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/rpc/RpcTimeoutException.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/JsonMessageSerializer.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/JsonMessageSerializer.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/serializer/JsonMessageSerializer.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/JsonMessageSerializer.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/MessageSerializer.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/MessageSerializer.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/serializer/MessageSerializer.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/MessageSerializer.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireName.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/OnwireName.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireName.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/serializer/OnwireName.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/server/ServerMessageBus.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/server/ServerMessageBus.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/server/ServerMessageBus.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/server/ServerMessageBus.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/server/ServerTransportProvider.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/server/ServerTransportProvider.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/server/ServerTransportProvider.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/server/ServerTransportProvider.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAddress.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAddress.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAddress.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAddress.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAddressMapper.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAddressMapper.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAddressMapper.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAddressMapper.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAttachRequestPdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAttachRequestPdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAttachRequestPdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAttachRequestPdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAttachResponsePdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAttachResponsePdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportAttachResponsePdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportAttachResponsePdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportConnectRequestPdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportConnectRequestPdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportConnectRequestPdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportConnectRequestPdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportConnectResponsePdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportConnectResponsePdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportConnectResponsePdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportConnectResponsePdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportDataPdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportDataPdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportDataPdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportDataPdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportEndpoint.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportEndpoint.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportEndpoint.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportEndpoint.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportEndpointSite.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportEndpointSite.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportEndpointSite.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportEndpointSite.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportMultiplexier.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportMultiplexier.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportMultiplexier.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportMultiplexier.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportPdu.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportPdu.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportPdu.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportPdu.java
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/transport/TransportProvider.java b/framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportProvider.java
similarity index 100%
rename from framework/ipc/src/org/apache/cloudstack/framework/transport/TransportProvider.java
rename to framework/ipc/src/main/java/org/apache/cloudstack/framework/transport/TransportProvider.java
diff --git a/framework/ipc/resources/META-INF/cloudstack/core/spring-framework-ipc-core-context.xml b/framework/ipc/src/main/resources/META-INF/cloudstack/core/spring-framework-ipc-core-context.xml
similarity index 100%
rename from framework/ipc/resources/META-INF/cloudstack/core/spring-framework-ipc-core-context.xml
rename to framework/ipc/src/main/resources/META-INF/cloudstack/core/spring-framework-ipc-core-context.xml
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/codestyle/AsyncSampleCallee.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/codestyle/AsyncSampleCallee.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/codestyle/AsyncSampleCallee.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/codestyle/AsyncSampleCallee.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/codestyle/AsyncSampleEventDrivenStyleCaller.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/codestyle/AsyncSampleEventDrivenStyleCaller.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/codestyle/AsyncSampleEventDrivenStyleCaller.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/codestyle/AsyncSampleEventDrivenStyleCaller.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/codestyle/AsyncSampleListenerStyleCaller.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/codestyle/AsyncSampleListenerStyleCaller.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/codestyle/AsyncSampleListenerStyleCaller.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/codestyle/AsyncSampleListenerStyleCaller.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServerApp.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagementServerApp.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServerApp.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagementServerApp.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent2.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent2.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent2.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleManagerComponent2.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareAnswer.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareAnswer.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareAnswer.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareAnswer.java
diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareCommand.java b/framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareCommand.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareCommand.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/framework/sampleserver/SampleStoragePrepareCommand.java
diff --git a/framework/ipc/test/org/apache/cloudstack/messagebus/TestMessageBus.java b/framework/ipc/src/test/java/org/apache/cloudstack/messagebus/TestMessageBus.java
similarity index 100%
rename from framework/ipc/test/org/apache/cloudstack/messagebus/TestMessageBus.java
rename to framework/ipc/src/test/java/org/apache/cloudstack/messagebus/TestMessageBus.java
diff --git a/framework/ipc/test/resources/MessageBusTestContext.xml b/framework/ipc/src/test/resources/MessageBusTestContext.xml
similarity index 100%
rename from framework/ipc/test/resources/MessageBusTestContext.xml
rename to framework/ipc/src/test/resources/MessageBusTestContext.xml
diff --git a/framework/ipc/test/resources/SampleManagementServerAppContext.xml b/framework/ipc/src/test/resources/SampleManagementServerAppContext.xml
similarity index 100%
rename from framework/ipc/test/resources/SampleManagementServerAppContext.xml
rename to framework/ipc/src/test/resources/SampleManagementServerAppContext.xml
diff --git a/framework/ipc/test/resources/log4j-cloud.xml b/framework/ipc/src/test/resources/log4j-cloud.xml
similarity index 100%
rename from framework/ipc/test/resources/log4j-cloud.xml
rename to framework/ipc/src/test/resources/log4j-cloud.xml
diff --git a/framework/jobs/pom.xml b/framework/jobs/pom.xml
index 5ba34d5..dccb9a5 100644
--- a/framework/jobs/pom.xml
+++ b/framework/jobs/pom.xml
@@ -1,77 +1,77 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-jobs</artifactId>
-  <name>Apache CloudStack Framework - Jobs</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>  
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-cluster</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${cs.commons-io.version}</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-jobs</artifactId>
+    <name>Apache CloudStack Framework - Jobs</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-cluster</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJob.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJob.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobDispatcher.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobDispatcher.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobDispatcher.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobDispatcher.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobExecutionContext.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobMBean.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobMBean.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobMBean.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobMBean.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobManager.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobManager.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJobManager.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/AsyncJobManager.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/Outcome.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/Outcome.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/Outcome.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/Outcome.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobDao.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobDao.java
similarity index 99%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobDao.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobDao.java
index 8778bef..b2b685d 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobDao.java
+++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobDao.java
@@ -24,6 +24,7 @@
 import com.cloud.utils.db.GenericDao;
 
 public interface AsyncJobDao extends GenericDao<AsyncJobVO, Long> {
+
     AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId);
 
     List<AsyncJobVO> findInstancePendingAsyncJobs(String instanceType, Long accountId);
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobDaoImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobDaoImpl.java
similarity index 95%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobDaoImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobDaoImpl.java
index 0ccd4ad..ef992ff 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobDaoImpl.java
+++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobDaoImpl.java
@@ -21,6 +21,7 @@
 import java.util.Date;
 import java.util.List;
 
+import org.apache.cloudstack.api.ApiConstants;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
@@ -71,7 +72,7 @@
         expiringUnfinishedAsyncJobSearch.done();
 
         expiringCompletedAsyncJobSearch = createSearchBuilder();
-        expiringCompletedAsyncJobSearch.and("created", expiringCompletedAsyncJobSearch.entity().getCreated(), SearchCriteria.Op.LTEQ);
+        expiringCompletedAsyncJobSearch.and(ApiConstants.REMOVED, expiringCompletedAsyncJobSearch.entity().getRemoved(), SearchCriteria.Op.LTEQ);
         expiringCompletedAsyncJobSearch.and("completeMsId", expiringCompletedAsyncJobSearch.entity().getCompleteMsid(), SearchCriteria.Op.NNULL);
         expiringCompletedAsyncJobSearch.and("jobStatus", expiringCompletedAsyncJobSearch.entity().getStatus(), SearchCriteria.Op.NEQ);
         expiringCompletedAsyncJobSearch.done();
@@ -168,11 +169,11 @@
     }
 
     @Override
-    public List<AsyncJobVO> getExpiredCompletedJobs(Date cutTime, int limit) {
-        SearchCriteria<AsyncJobVO> sc = expiringCompletedAsyncJobSearch.create();
-        sc.setParameters("created", cutTime);
+    public List<AsyncJobVO> getExpiredCompletedJobs(final Date cutTime, final int limit) {
+        final SearchCriteria<AsyncJobVO> sc = expiringCompletedAsyncJobSearch.create();
+        sc.setParameters(ApiConstants.REMOVED, cutTime);
         sc.setParameters("jobStatus", JobInfo.Status.IN_PROGRESS);
-        Filter filter = new Filter(AsyncJobVO.class, "created", true, 0L, (long)limit);
+        final Filter filter = new Filter(AsyncJobVO.class, ApiConstants.REMOVED, true, 0L, (long)limit);
         return listIncludingRemovedBy(sc, filter);
     }
 
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDao.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDao.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDao.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDao.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDaoImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDaoImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDaoImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJoinMapDaoImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDao.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDao.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDao.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDao.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDaoImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDaoImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDaoImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/AsyncJobJournalDaoImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueDao.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueDao.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueDao.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueDao.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueDaoImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueDaoImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueDaoImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueDaoImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDao.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDao.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDao.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDao.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDaoImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDaoImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDaoImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/SyncQueueItemDaoImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDao.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDao.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDao.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDao.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobJoinMapVO.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobJoinMapVO.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobJoinMapVO.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobJoinMapVO.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobJournalVO.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobJournalVO.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobJournalVO.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobJournalVO.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMBeanImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobMBeanImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMBeanImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobMBeanImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java
similarity index 96%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java
index 3ce96a6..1845dbf 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java
+++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java
@@ -161,7 +161,7 @@
 
     @Override
     public AsyncJobVO getAsyncJob(long jobId) {
-        return _jobDao.findById(jobId);
+        return _jobDao.findByIdIncludingRemoved(jobId);
     }
 
     @Override
@@ -286,9 +286,9 @@
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Wake up jobs related to job-" + jobId);
         }
-        List<Long> wakeupList = Transaction.execute(new TransactionCallback<List<Long>>() {
+        final List<Long> wakeupList = Transaction.execute(new TransactionCallback<List<Long>>() {
             @Override
-            public List<Long> doInTransaction(TransactionStatus status) {
+            public List<Long> doInTransaction(final TransactionStatus status) {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Update db status for job-" + jobId);
                 }
@@ -302,14 +302,16 @@
                     job.setResult(null);
                 }
 
-                job.setLastUpdated(DateUtil.currentGMTTime());
+                final Date currentGMTTime = DateUtil.currentGMTTime();
+                job.setLastUpdated(currentGMTTime);
+                job.setRemoved(currentGMTTime);
                 job.setExecutingMsid(null);
                 _jobDao.update(jobId, job);
 
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Wake up jobs joined with job-" + jobId + " and disjoin all subjobs created from job- " + jobId);
                 }
-                List<Long> wakeupList = wakeupByJoinedJobCompletion(jobId);
+                final List<Long> wakeupList = wakeupByJoinedJobCompletion(jobId);
                 _joinMapDao.disjoinAllJobs(jobId);
 
                 // purge the job sync item from queue
@@ -445,8 +447,8 @@
     }
 
     @Override
-    public AsyncJob queryJob(long jobId, boolean updatePollTime) {
-        AsyncJobVO job = _jobDao.findById(jobId);
+    public AsyncJob queryJob(final long jobId, final boolean updatePollTime) {
+        final AsyncJobVO job = _jobDao.findByIdIncludingRemoved(jobId);
 
         if (updatePollTime) {
             job.setLastPolled(DateUtil.currentGMTTime());
@@ -482,7 +484,7 @@
         throw new CloudRuntimeException("Unable to find dispatcher name: " + dispatcherName);
     }
 
-    private AsyncJobDispatcher getWakeupDispatcher(AsyncJob job) {
+    private AsyncJobDispatcher findWakeupDispatcher(AsyncJob job) {
         if (_jobDispatchers != null) {
             List<AsyncJobJoinMapVO> joinRecords = _joinMapDao.listJoinRecords(job.getId());
             if (joinRecords.size() > 0) {
@@ -567,7 +569,7 @@
                     }
 
                     if ((getAndResetPendingSignals(job) & AsyncJob.Constants.SIGNAL_MASK_WAKEUP) != 0) {
-                        AsyncJobDispatcher jobDispatcher = getWakeupDispatcher(job);
+                        AsyncJobDispatcher jobDispatcher = findWakeupDispatcher(job);
                         if (jobDispatcher != null) {
                             jobDispatcher.runJob(job);
                         } else {
@@ -1025,8 +1027,8 @@
                     // purge sync queue item running on this ms node
                     _queueMgr.cleanupActiveQueueItems(msid, true);
                     // reset job status for all jobs running on this ms node
-                    List<AsyncJobVO> jobs = _jobDao.getResetJobs(msid);
-                    for (AsyncJobVO job : jobs) {
+                    final List<AsyncJobVO> jobs = _jobDao.getResetJobs(msid);
+                    for (final AsyncJobVO job : jobs) {
                         if (s_logger.isDebugEnabled()) {
                             s_logger.debug("Cancel left-over job-" + job.getId());
                         }
@@ -1034,12 +1036,15 @@
                         job.setResultCode(ApiErrorCode.INTERNAL_ERROR.getHttpCode());
                         job.setResult("job cancelled because of management server restart or shutdown");
                         job.setCompleteMsid(msid);
+                        final Date currentGMTTime = DateUtil.currentGMTTime();
+                        job.setLastUpdated(currentGMTTime);
+                        job.setRemoved(currentGMTTime);
                         _jobDao.update(job.getId(), job);
                         if (s_logger.isDebugEnabled()) {
                             s_logger.debug("Purge queue item for cancelled job-" + job.getId());
                         }
                         _queueMgr.purgeAsyncJobQueueItemId(job.getId());
-                        if (job.getInstanceType().equals(ApiCommandJobType.Volume.toString())) {
+                        if (ApiCommandJobType.Volume.toString().equals(job.getInstanceType())) {
 
                             try {
                                 _volumeDetailsDao.removeDetail(job.getInstanceId(), "SNAPSHOT_ID");
@@ -1049,8 +1054,8 @@
                             }
                         }
                     }
-                    List<SnapshotDetailsVO> snapshotList = _snapshotDetailsDao.findDetails(AsyncJob.Constants.MS_ID, Long.toString(msid), false);
-                    for (SnapshotDetailsVO snapshotDetailsVO : snapshotList) {
+                    final List<SnapshotDetailsVO> snapshotList = _snapshotDetailsDao.findDetails(AsyncJob.Constants.MS_ID, Long.toString(msid), false);
+                    for (final SnapshotDetailsVO snapshotDetailsVO : snapshotList) {
                         SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotDetailsVO.getResourceId(), DataStoreRole.Primary);
                         snapshotSrv.processEventOnSnapshotObject(snapshot, Snapshot.Event.OperationFailed);
                         _snapshotDetailsDao.removeDetail(snapshotDetailsVO.getResourceId(), AsyncJob.Constants.MS_ID);
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
similarity index 97%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
index 0ca9ed5..9d30c2c 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
+++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
@@ -373,6 +373,15 @@
     }
 
     @Override
+    public Date getRemoved() {
+        return removed;
+    }
+
+    public void setRemoved(final Date removed) {
+        this.removed = removed;
+    }
+
+    @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();
         sb.append("AsyncJobVO {id:").append(getId());
@@ -392,6 +401,7 @@
         sb.append(", lastUpdated: ").append(getLastUpdated());
         sb.append(", lastPolled: ").append(getLastPolled());
         sb.append(", created: ").append(getCreated());
+        sb.append(", removed: ").append(getRemoved());
         sb.append("}");
         return sb.toString();
     }
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/OutcomeImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/OutcomeImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/OutcomeImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/OutcomeImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueItem.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueItem.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueItem.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueItem.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueItemVO.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueItemVO.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueItemVO.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueItemVO.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManager.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueManager.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManager.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueManager.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueVO.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueVO.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueVO.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/SyncQueueVO.java
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/VmWorkJobVO.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/VmWorkJobVO.java
similarity index 100%
rename from framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/VmWorkJobVO.java
rename to framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/VmWorkJobVO.java
diff --git a/framework/jobs/resources/META-INF/cloudstack/core/spring-framework-jobs-core-context.xml b/framework/jobs/src/main/resources/META-INF/cloudstack/core/spring-framework-jobs-core-context.xml
similarity index 100%
rename from framework/jobs/resources/META-INF/cloudstack/core/spring-framework-jobs-core-context.xml
rename to framework/jobs/src/main/resources/META-INF/cloudstack/core/spring-framework-jobs-core-context.xml
diff --git a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java b/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java
similarity index 100%
rename from framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java
rename to framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java
diff --git a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTestConfiguration.java b/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTestConfiguration.java
similarity index 100%
rename from framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTestConfiguration.java
rename to framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTestConfiguration.java
diff --git a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDashboard.java b/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobTestDashboard.java
similarity index 100%
rename from framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDashboard.java
rename to framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobTestDashboard.java
diff --git a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java b/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java
similarity index 100%
rename from framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java
rename to framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java
diff --git a/framework/jobs/test/resources/AsyncJobManagerTestContext.xml b/framework/jobs/src/test/resources/AsyncJobManagerTestContext.xml
similarity index 100%
rename from framework/jobs/test/resources/AsyncJobManagerTestContext.xml
rename to framework/jobs/src/test/resources/AsyncJobManagerTestContext.xml
diff --git a/framework/jobs/test/resources/commonContext.xml b/framework/jobs/src/test/resources/commonContext.xml
similarity index 100%
rename from framework/jobs/test/resources/commonContext.xml
rename to framework/jobs/src/test/resources/commonContext.xml
diff --git a/framework/jobs/test/resources/db.properties b/framework/jobs/src/test/resources/db.properties
similarity index 100%
rename from framework/jobs/test/resources/db.properties
rename to framework/jobs/src/test/resources/db.properties
diff --git a/framework/jobs/test/resources/log4j.properties b/framework/jobs/src/test/resources/log4j.properties
similarity index 100%
rename from framework/jobs/test/resources/log4j.properties
rename to framework/jobs/src/test/resources/log4j.properties
diff --git a/framework/managed-context/pom.xml b/framework/managed-context/pom.xml
index 17f8093..d960e2f 100644
--- a/framework/managed-context/pom.xml
+++ b/framework/managed-context/pom.xml
@@ -1,36 +1,36 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-managed-context</artifactId>
-  <name>Apache CloudStack Framework - Managed Context</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-maven-standard</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../maven-standard/pom.xml</relativePath>
-  </parent>
-  <dependencies>
-      <dependency>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-api</artifactId>
-      </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-managed-context</artifactId>
+    <name>Apache CloudStack Framework - Managed Context</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/pom.xml b/framework/pom.xml
index 3aab9c4..c4d554a 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -1,62 +1,63 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloudstack-framework</artifactId>
-  <name>Apache CloudStack Framework</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>cloudstack-checkstyle</id>
-              <phase>none</phase>
-              <inherited>false</inherited>
-            </execution>
-          </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <modules>
-    <module>ipc</module>
-    <module>ca</module>
-    <module>rest</module>
-    <module>events</module>
-    <module>jobs</module>
-    <module>quota</module>
-    <module>cluster</module>
-    <module>db</module>
-    <module>config</module>
-    <module>managed-context</module>
-    <module>spring/lifecycle</module>
-    <module>spring/module</module>
-    <module>security</module>
-    <module>agent-lb</module>
-    <module>direct-download</module>
-  </modules>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloudstack-framework</artifactId>
+    <name>Apache CloudStack Framework</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <modules>
+        <!-- keep in alphabetic order -->
+        <module>agent-lb</module>
+        <module>ca</module>
+        <module>cluster</module>
+        <module>config</module>
+        <module>db</module>
+        <module>direct-download</module>
+        <module>events</module>
+        <module>ipc</module>
+        <module>jobs</module>
+        <module>managed-context</module>
+        <module>quota</module>
+        <module>rest</module>
+        <module>security</module>
+        <module>spring/lifecycle</module>
+        <module>spring/module</module>
+    </modules>
 </project>
diff --git a/framework/quota/pom.xml b/framework/quota/pom.xml
index 8d864e0..6bbafdf 100644
--- a/framework/quota/pom.xml
+++ b/framework/quota/pom.xml
@@ -1,73 +1,50 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-quota</artifactId>
-  <name>Apache CloudStack Framework - Quota</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>${cs.junit.version}</version>
-        <scope>test</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-all</artifactId>
-        <version>${cs.mockito.version}</version>
-        <scope>test</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.powermock</groupId>
-        <artifactId>powermock-module-junit4</artifactId>
-        <version>${cs.powermock.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>org.powermock</groupId>
-        <artifactId>powermock-api-mockito</artifactId>
-        <version>${cs.powermock.version}</version>
-        <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>${cs.commons-lang3.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>javax.mail</groupId>
-      <artifactId>mail</artifactId>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-quota</artifactId>
+    <name>Apache CloudStack Framework - Quota</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/quota/src/org/apache/cloudstack/quota/QuotaAlertManager.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaAlertManager.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/QuotaAlertManager.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaAlertManager.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/QuotaAlertManagerImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaAlertManagerImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/QuotaAlertManagerImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaAlertManagerImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/QuotaManager.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManager.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/QuotaManager.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManager.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/QuotaManagerImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/QuotaManagerImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/QuotaStatement.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaStatement.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/QuotaStatement.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaStatement.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/QuotaStatementImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaStatementImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/QuotaStatementImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaStatementImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/constant/QuotaConfig.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaConfig.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/constant/QuotaConfig.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaConfig.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/constant/QuotaTypes.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaTypes.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/constant/QuotaTypes.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaTypes.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaAccountDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaAccountDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaAccountDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaAccountDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaAccountDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaAccountDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaAccountDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaAccountDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaBalanceDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaBalanceDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaBalanceDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaBalanceDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaBalanceDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaBalanceDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaBalanceDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaBalanceDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaCreditsDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaCreditsDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaCreditsDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaCreditsDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaCreditsDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaCreditsDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaCreditsDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaCreditsDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaEmailTemplatesDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaTariffDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaTariffDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaUsageDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaUsageDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaUsageDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaUsageDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/QuotaUsageDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaUsageDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/QuotaUsageDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/QuotaUsageDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/ServiceOfferingDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/ServiceOfferingDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/ServiceOfferingDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/ServiceOfferingDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/ServiceOfferingDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/ServiceOfferingDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/ServiceOfferingDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/ServiceOfferingDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/UserVmDetailsDao.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/UserVmDetailsDao.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/UserVmDetailsDao.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/UserVmDetailsDao.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/dao/UserVmDetailsDaoImpl.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/dao/UserVmDetailsDaoImpl.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/dao/UserVmDetailsDaoImpl.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/dao/UserVmDetailsDaoImpl.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/QuotaAccountVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaAccountVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/QuotaAccountVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaAccountVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/QuotaBalanceVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaBalanceVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/QuotaBalanceVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaBalanceVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/QuotaCreditsVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaCreditsVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/QuotaCreditsVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaCreditsVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/QuotaEmailTemplatesVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaEmailTemplatesVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/QuotaEmailTemplatesVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaEmailTemplatesVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/QuotaTariffVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaTariffVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/QuotaTariffVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaTariffVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/QuotaUsageVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaUsageVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/QuotaUsageVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/QuotaUsageVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/ServiceOfferingVO.java
diff --git a/framework/quota/src/org/apache/cloudstack/quota/vo/UserVmDetailVO.java b/framework/quota/src/main/java/org/apache/cloudstack/quota/vo/UserVmDetailVO.java
similarity index 100%
rename from framework/quota/src/org/apache/cloudstack/quota/vo/UserVmDetailVO.java
rename to framework/quota/src/main/java/org/apache/cloudstack/quota/vo/UserVmDetailVO.java
diff --git a/framework/quota/resources/META-INF/cloudstack/quota/spring-framework-quota-context.xml b/framework/quota/src/main/resources/META-INF/cloudstack/quota/spring-framework-quota-context.xml
similarity index 100%
rename from framework/quota/resources/META-INF/cloudstack/quota/spring-framework-quota-context.xml
rename to framework/quota/src/main/resources/META-INF/cloudstack/quota/spring-framework-quota-context.xml
diff --git a/framework/quota/test/org/apache/cloudstack/quota/QuotaAlertManagerImplTest.java b/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaAlertManagerImplTest.java
similarity index 100%
rename from framework/quota/test/org/apache/cloudstack/quota/QuotaAlertManagerImplTest.java
rename to framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaAlertManagerImplTest.java
diff --git a/framework/quota/test/org/apache/cloudstack/quota/QuotaManagerImplTest.java b/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaManagerImplTest.java
similarity index 100%
rename from framework/quota/test/org/apache/cloudstack/quota/QuotaManagerImplTest.java
rename to framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaManagerImplTest.java
diff --git a/framework/quota/test/org/apache/cloudstack/quota/QuotaStatementTest.java b/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaStatementTest.java
similarity index 100%
rename from framework/quota/test/org/apache/cloudstack/quota/QuotaStatementTest.java
rename to framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaStatementTest.java
diff --git a/framework/quota/test/org/apache/cloudstack/quota/constant/QuotaTypesTest.java b/framework/quota/src/test/java/org/apache/cloudstack/quota/constant/QuotaTypesTest.java
similarity index 100%
rename from framework/quota/test/org/apache/cloudstack/quota/constant/QuotaTypesTest.java
rename to framework/quota/src/test/java/org/apache/cloudstack/quota/constant/QuotaTypesTest.java
diff --git a/framework/rest/pom.xml b/framework/rest/pom.xml
index 8ae7e6b..798ed97 100644
--- a/framework/rest/pom.xml
+++ b/framework/rest/pom.xml
@@ -1,78 +1,78 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <artifactId>cloud-framework-rest</artifactId>
-  <name>Apache CloudStack Framework - REST</name>
-  <build>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>com.fasterxml.jackson.module</groupId>
-      <artifactId>jackson-module-jaxb-annotations</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-annotations</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-core</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-databind</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.jaxrs</groupId>
-      <artifactId>jackson-jaxrs-json-provider</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cxf</groupId>
-      <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-      <version>${cs.cxf.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.eclipse.jetty</groupId>
-          <artifactId>jetty-server</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-servlet_3.0_spec</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>com.sun.xml.bind</groupId>
-          <artifactId>jaxb-impl</artifactId>
-        </exclusion>        
-      </exclusions>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>cloud-framework-rest</artifactId>
+    <name>Apache CloudStack Framework - REST</name>
+    <build>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.fasterxml.jackson.module</groupId>
+            <artifactId>jackson-module-jaxb-annotations</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.jaxrs</groupId>
+            <artifactId>jackson-jaxrs-json-provider</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>${cs.cxf.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-server</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.geronimo.specs</groupId>
+                    <artifactId>geronimo-servlet_3.0_spec</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.sun.xml.bind</groupId>
+                    <artifactId>jaxb-impl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/rest/src/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationIntrospector.java b/framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationIntrospector.java
similarity index 100%
rename from framework/rest/src/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationIntrospector.java
rename to framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationIntrospector.java
diff --git a/framework/rest/src/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationModule.java b/framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationModule.java
similarity index 100%
rename from framework/rest/src/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationModule.java
rename to framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationModule.java
diff --git a/framework/rest/src/org/apache/cloudstack/framework/ws/jackson/UriSerializer.java b/framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/UriSerializer.java
similarity index 100%
rename from framework/rest/src/org/apache/cloudstack/framework/ws/jackson/UriSerializer.java
rename to framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/UriSerializer.java
diff --git a/framework/rest/src/org/apache/cloudstack/framework/ws/jackson/UrisSerializer.java b/framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/UrisSerializer.java
similarity index 100%
rename from framework/rest/src/org/apache/cloudstack/framework/ws/jackson/UrisSerializer.java
rename to framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/UrisSerializer.java
diff --git a/framework/rest/src/org/apache/cloudstack/framework/ws/jackson/Url.java b/framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/Url.java
similarity index 100%
rename from framework/rest/src/org/apache/cloudstack/framework/ws/jackson/Url.java
rename to framework/rest/src/main/java/org/apache/cloudstack/framework/ws/jackson/Url.java
diff --git a/framework/rest/test/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationTest.java b/framework/rest/src/test/java/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationTest.java
similarity index 100%
rename from framework/rest/test/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationTest.java
rename to framework/rest/src/test/java/org/apache/cloudstack/framework/ws/jackson/CSJacksonAnnotationTest.java
diff --git a/framework/security/pom.xml b/framework/security/pom.xml
index cc6a62b..42fa7b4 100644
--- a/framework/security/pom.xml
+++ b/framework/security/pom.xml
@@ -1,60 +1,61 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-framework-security</artifactId>
-  <name>Apache CloudStack Framework - Security</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-framework</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-framework-security</artifactId>
+    <name>Apache CloudStack Framework - Security</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-framework</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keys/KeysManager.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keys/KeysManager.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keys/KeysManager.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keys/KeysManager.java
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keys/KeysManagerImpl.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keys/KeysManagerImpl.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keys/KeysManagerImpl.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keys/KeysManagerImpl.java
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreDao.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreDao.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreDao.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreDao.java
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreDaoImpl.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreDaoImpl.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreDaoImpl.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreDaoImpl.java
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreManager.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreManager.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreManager.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreManager.java
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreManagerImpl.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreManagerImpl.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreManagerImpl.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreManagerImpl.java
diff --git a/framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreVO.java b/framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreVO.java
similarity index 100%
rename from framework/security/src/org/apache/cloudstack/framework/security/keystore/KeystoreVO.java
rename to framework/security/src/main/java/org/apache/cloudstack/framework/security/keystore/KeystoreVO.java
diff --git a/framework/security/resources/META-INF/cloudstack/core/spring-framework-security-core-context.xml b/framework/security/src/main/resources/META-INF/cloudstack/core/spring-framework-security-core-context.xml
similarity index 100%
rename from framework/security/resources/META-INF/cloudstack/core/spring-framework-security-core-context.xml
rename to framework/security/src/main/resources/META-INF/cloudstack/core/spring-framework-security-core-context.xml
diff --git a/framework/spring/lifecycle/pom.xml b/framework/spring/lifecycle/pom.xml
index 5732c8d..85ac0a4 100644
--- a/framework/spring/lifecycle/pom.xml
+++ b/framework/spring/lifecycle/pom.xml
@@ -1,13 +1,21 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-    license agreements. See the NOTICE file distributed with this work for additional 
-    information regarding copyright ownership. The ASF licenses this file to 
-    you under the Apache License, Version 2.0 (the "License"); you may not use 
-    this file except in compliance with the License. You may obtain a copy of 
-    the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-    by applicable law or agreed to in writing, software distributed under the 
-    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-    OF ANY KIND, either express or implied. See the License for the specific 
-    language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
@@ -15,9 +23,9 @@
     <name>Apache CloudStack Framework - Spring Life Cycle</name>
     <parent>
         <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-maven-standard</artifactId>
-        <version>4.11.2.0-SNAPSHOT</version>
-        <relativePath>../../../maven-standard/pom.xml</relativePath>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
     </parent>
     <dependencies>
         <dependency>
diff --git a/framework/spring/module/pom.xml b/framework/spring/module/pom.xml
index c3967a8..90b3f98 100644
--- a/framework/spring/module/pom.xml
+++ b/framework/spring/module/pom.xml
@@ -1,18 +1,18 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
@@ -23,9 +23,9 @@
     <name>Apache CloudStack Framework - Spring Module</name>
     <parent>
         <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-maven-standard</artifactId>
-        <version>4.11.2.0-SNAPSHOT</version>
-        <relativePath>../../../maven-standard/pom.xml</relativePath>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
     </parent>
     <dependencies>
         <dependency>
@@ -36,7 +36,6 @@
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
-            <version>${cs.commons-io.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
diff --git a/maven-standard/pom.xml b/maven-standard/pom.xml
deleted file mode 100644
index b1fe050..0000000
--- a/maven-standard/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-maven-standard</artifactId>
-  <name>Apache CloudStack Maven Conventions Parent</name>
-  <description>Historically ACS was built with a custom build system mixing ant and wscript.  When the conversion to maven was done the existing directory structure in git was kept.  So the src, testing, and resources folders in ACS don't follow the standard maven conventions.  This parent pom forces the folders back to the standard conventions</description>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <build>
-    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
-    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
-    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
-    <outputDirectory>${basedir}/target/classes</outputDirectory>
-    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
-    <resources>
-      <resource>
-        <directory>${basedir}/src/main/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>${basedir}/src/test/resources</directory>
-      </testResource>
-    </testResources>
-  </build>
-</project>
diff --git a/packaging/build-deb.sh b/packaging/build-deb.sh
index d8f2f8f..e9d2399 100755
--- a/packaging/build-deb.sh
+++ b/packaging/build-deb.sh
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-#set -e
+set -e
 
 #
 # This script builds Debian packages for CloudStack and does
@@ -40,18 +40,114 @@
 # docker run -ti -v /tmp:/src ubuntu:14.04 /bin/bash -c "apt-get update && apt-get install -y dpkg-dev python debhelper openjdk-8-jdk genisoimage python-mysql.connector maven lsb-release devscripts dh-systemd python-setuptools && /src/cloudstack/packaging/build-deb.sh"
 #
 
-cd `dirname $0`
-cd ..
+function usage() {
+    cat << USAGE
+Usage: ./build-deb.sh [OPTIONS]...
+Package CloudStack for Debian based distribution.
 
-DCH=$(which dch)
-if [ -z "$DCH" ] ; then
+If there's a "branding" string in the POM version (e.g. x.y.z.a-NAME[-SNAPSHOT]), the branding name will
+be used in the final generated package like: cloudstack-management_x.y.z.a-NAME-SNAPSHOT~xenial_all.deb
+note that you can override/provide "branding" string with "-b, --brand" flag as well.
+
+Optional arguments:
+   -b, --brand string                      Set branding to be used in package name (it will override any branding string in POM version)
+   -T, --use-timestamp                     Use epoch timestamp instead of SNAPSHOT in the package name (if not provided, use "SNAPSHOT")
+
+Other arguments:
+   -h, --help                              Display this help message and exit
+
+Examples:
+   build-deb.sh --use-timestamp
+   build-deb.sh --brand foo
+
+USAGE
+    exit 0
+}
+
+BRANDING=""
+USE_TIMESTAMP="false"
+
+while [ -n "$1" ]; do
+    case "$1" in
+        -h | --help)
+            usage
+            ;;
+
+        -b | --brand)
+            if [ -n "$BRANDING" ]; then
+                echo "ERROR: you have already entered value for -b, --brand"
+                exit 1
+            else
+                BRANDING=$2
+                shift 2
+            fi
+            ;;
+
+        -T | --use-timestamp)
+            if [ "$USE_TIMESTAMP" == "true" ]; then
+                echo "ERROR: you have already entered value for -T, --use-timestamp"
+                exit 1
+            else
+                USE_TIMESTAMP="true"
+                shift 1
+            fi
+            ;;
+
+        -*|*)
+            echo "ERROR: no such option $1. -h or --help for help"
+            exit 1
+            ;;
+    esac
+done
+
+if [ -z "$(which dch)" ] ; then
     echo -e "dch not found, please install devscripts at first. \nDEB Build Failed"
-    exit
+    exit 1
+fi
+
+NOW="$(date +%s)"
+PWD=$(cd $(dirname "$0") && pwd -P)
+cd $PWD/../
+
+# Fail early if working directory is NOT clean and --use-timestamp was provided
+if [ "$USE_TIMESTAMP" == "true" ]; then
+    if [ -n "$(cd $PWD; git status -s)" ]; then
+        echo "Erro: You have uncommitted changes and asked for --use-timestamp to be used."
+        echo "      --use-timestamp flag is going to temporarily change  POM versions  and"
+        echo "      revert them at the end of build, and there's no  way we can do partial"
+        echo "      revert. Please commit your changes first or omit --use-timestamp flag."
+        exit 1
+    fi
 fi
 
 VERSION=$(head -n1 debian/changelog  |awk -F [\(\)] '{print $2}')
 DISTCODE=$(lsb_release -sc)
 
+if [ "$USE_TIMESTAMP" == "true" ]; then
+    # use timestamp instead of SNAPSHOT
+    if echo "$VERSION" | grep -q SNAPSHOT ; then
+        # apply/override branding, if provided
+        if [ "$BRANDING" != "" ]; then
+            VERSION=$(echo "$VERSION" | cut -d '-' -f 1) # remove any existing branding from POM version to be overriden
+            VERSION="$VERSION-$BRANDING-$NOW"
+        else
+            VERSION=`echo $VERSION | sed 's/-SNAPSHOT/-'$NOW'/g'`
+        fi
+
+        branch=$(cd $PWD; git rev-parse --abbrev-ref HEAD)
+        (cd $PWD; ./tools/build/setnextversion.sh --version $VERSION --sourcedir . --branch $branch --no-commit)
+    fi
+else
+    # apply/override branding, if provided
+    if [ "$BRANDING" != "" ]; then
+        VERSION=$(echo "$VERSION" | cut -d '-' -f 1) # remove any existing branding from POM version to be overriden
+        VERSION="$VERSION-$BRANDING"
+
+        branch=$(cd $PWD; git rev-parse --abbrev-ref HEAD)
+        (cd $PWD; ./tools/build/setnextversion.sh --version $VERSION --sourcedir . --branch $branch --no-commit)
+    fi
+fi
+
 /bin/cp debian/changelog /tmp/changelog.orig
 
 dch -b -v "${VERSION}~${DISTCODE}" -u low -m "Apache CloudStack Release ${VERSION}"
@@ -61,3 +157,7 @@
 dpkg-buildpackage -uc -us -b
 
 /bin/mv /tmp/changelog.orig debian/changelog
+
+if [ "$USE_TIMESTAMP" == "true" ]; then
+    (cd $PWD; git reset --hard)
+fi
diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec
index 68e2c56..b83ba35 100644
--- a/packaging/centos63/cloud.spec
+++ b/packaging/centos63/cloud.spec
@@ -24,13 +24,8 @@
 Name:      cloudstack
 Summary:   CloudStack IaaS Platform
 #http://fedoraproject.org/wiki/PackageNamingGuidelines#Pre-Release_packages
-%if "%{?_prerelease}" != ""
-%define _maventag %{_ver}-SNAPSHOT
+%define _maventag %{_fullver}
 Release:   %{_rel}%{dist}
-%else
-%define _maventag %{_ver}
-Release:   %{_rel}%{dist}
-%endif
 
 %{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 
@@ -260,7 +255,7 @@
 cp packaging/centos63/cloudstack-sccs ${RPM_BUILD_ROOT}/usr/bin
  
 mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts/network/cisco
-cp -r plugins/network-elements/cisco-vnmc/scripts/network/cisco/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts/network/cisco
+cp -r plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts/network/cisco
 
 # Management
 mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/
diff --git a/packaging/centos7/cloud.spec b/packaging/centos7/cloud.spec
index a4f4dcc..94ebcca 100644
--- a/packaging/centos7/cloud.spec
+++ b/packaging/centos7/cloud.spec
@@ -24,13 +24,8 @@
 Name:      cloudstack
 Summary:   CloudStack IaaS Platform
 #http://fedoraproject.org/wiki/PackageNamingGuidelines#Pre-Release_packages
-%if "%{?_prerelease}" != ""
-%define _maventag %{_ver}-SNAPSHOT
+%define _maventag %{_fullver}
 Release:   %{_rel}%{dist}
-%else
-%define _maventag %{_ver}
-Release:   %{_rel}%{dist}
-%endif
 
 %{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 
@@ -195,7 +190,7 @@
    FLAGS="$FLAGS -Dsimulator"
 fi
 
-mvn -Psystemvm,developer -DskipTests $FLAGS clean package
+mvn -Psystemvm,developer $FLAGS clean package
 
 %install
 [ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT}
@@ -227,7 +222,7 @@
 cp packaging/centos7/cloudstack-sccs ${RPM_BUILD_ROOT}/usr/bin
 
 mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts/network/cisco
-cp -r plugins/network-elements/cisco-vnmc/scripts/network/cisco/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts/network/cisco
+cp -r plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts/network/cisco
 
 # Management
 mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/
diff --git a/packaging/package.sh b/packaging/package.sh
index 8a87661..fe96eac8 100755
--- a/packaging/package.sh
+++ b/packaging/package.sh
@@ -17,48 +17,68 @@
 # under the License.
 
 function usage() {
-    echo ""
-    echo "usage: ./package.sh [-h|--help] -d|--distribution <name> [-r|--release <version>] [-p|--pack oss|OSS|noredist|NOREDIST] [-s|--simulator default|DEFAULT|simulator|SIMULATOR]"
-    echo ""
-    echo "The supported arguments are:"
-    echo "  To package with only redistributable libraries (default)"
-    echo "    -p|--pack oss|OSS"
-    echo "  To package with non-redistributable libraries"
-    echo "    -p|--pack noredist|NOREDIST"
-    echo "  To build a package for a distribution (mandatory)"
-    echo "    -d|--distribution centos7|centos63|fedora20|fedora21"
-    echo "  To set the package release version (optional)"
-    echo "  (default is 1 for normal and prereleases, empty for SNAPSHOT)"
-    echo "    -r|--release version(integer)"
-    echo "  To build for Simulator (optional)"
-    echo "    -s|--simulator default|DEFAULT|simulator|SIMULATOR"
-    echo "  To display this information"
-    echo "    -h|--help"
-    echo ""
-    echo "Examples: ./package.sh --pack oss"
-    echo "          ./package.sh --pack noredist"
-    echo "          ./package.sh --pack oss --distribution centos7 --release 42"
-    echo "          ./package.sh --distribution centos7 --release 42"
-    echo "          ./package.sh --distribution centos7"
+    cat << USAGE
+Usage: ./package.sh -d DISTRO [OPTIONS]...
+Package CloudStack for specific distribution and provided options.
+
+If there's a "branding" string in the POM version (e.g. x.y.z.a-NAME[-SNAPSHOT]), the branding name will
+be used in the final generated package like: cloudstack-management-x.y.z.a-NAME.NUMBER.el7.centos.x86_64
+note that you can override/provide "branding" string with "-b, --brand" flag as well.
+
+Mandatory arguments:
+   -d, --distribution string               Build package for specified distribution ("centos7"|"centos63")
+
+Optional arguments:
+   -p, --pack string                       Define which type of libraries to package ("oss"|"OSS"|"noredist"|"NOREDIST") (default "oss")
+                                             - oss|OSS to package with only redistributable libraries
+                                             - noredist|NOREDIST to package with non-redistributable libraries
+   -r, --release integer                   Set the package release version (default is 1 for normal and prereleases, empty for SNAPSHOT)
+   -s, --simulator string                  Build package for Simulator ("default"|"DEFAULT"|"simulator"|"SIMULATOR") (default "default")
+   -b, --brand string                      Set branding to be used in package name (it will override any branding string in POM version)
+   -T, --use-timestamp                     Use epoch timestamp instead of SNAPSHOT in the package name (if not provided, use "SNAPSHOT")
+
+Other arguments:
+   -h, --help                              Display this help message and exit
+
+Examples:
+   package.sh --distribution centos7
+   package.sh --distribution centos7 --pack oss
+   package.sh --distribution centos7 --pack noredist
+   package.sh --distribution centos7 --release 42
+   package.sh --distribution centos7 --pack noredist --release 42
+
+USAGE
+    exit 0
 }
 
+PWD=$(cd $(dirname "$0") && pwd -P)
+NOW="$(date +%s)"
+
 # packaging
 #   $1 redist flag
 #   $2 simulator flag
 #   $3 distribution name
 #   $4 package release version
+#   $5 brand string to apply/override
+#   $6 use timestamp flag
 function packaging() {
-    CWD=$(pwd)
-    RPMDIR=$CWD/../dist/rpmbuild
+    RPMDIR=$PWD/../dist/rpmbuild
     PACK_PROJECT=cloudstack
+
     if [ -n "$1" ] ; then
         DEFOSSNOSS="-D_ossnoss $1"
     fi
     if [ -n "$2" ] ; then
         DEFSIM="-D_sim $2"
     fi
+    if [ "$6" == "true" ]; then
+        INDICATOR="$NOW"
+    else
+        INDICATOR="SNAPSHOT"
+    fi
 
     DISTRO=$3
+
     MVN=$(which mvn)
     if [ -z "$MVN" ] ; then
         MVN=$(locate bin/mvn | grep -e mvn$ | tail -1)
@@ -67,24 +87,63 @@
             exit 2
         fi
     fi
-    VERSION=$(cd ../; $MVN org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep --color=none '^[0-9]\.')
-    if echo "$VERSION" | grep -q SNAPSHOT ; then
-        REALVER=$(echo "$VERSION" | cut -d '-' -f 1)
-        if [ -n "$4" ] ; then
-            DEFPRE="-D_prerelease $4"
-            DEFREL="-D_rel SNAPSHOT$4"
-        else
-            DEFPRE="-D_prerelease 1"
-            DEFREL="-D_rel SNAPSHOT"
-        fi
+
+    VERSION=$(cd $PWD/../; $MVN org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep --color=none '^[0-9]\.')
+    REALVER=$(echo "$VERSION" | cut -d '-' -f 1)
+
+    if [ -n "$5" ]; then
+        BRAND="${5}."
     else
-        REALVER="$VERSION"
-        if [ -n "$4" ] ; then
-            DEFREL="-D_rel $4"
+        BASEVER=$(echo "$VERSION" | sed 's/-SNAPSHOT//g')
+        BRAND=$(echo "$BASEVER" | cut -d '-' -f 2)
+
+        if [ "$REALVER" != "$BRAND" ]; then
+            BRAND="${BRAND}."
         else
-            DEFREL="-D_rel 1"
+            BRAND=""
         fi
     fi
+
+    if echo "$VERSION" | grep -q SNAPSHOT ; then
+        if [ -n "$4" ] ; then
+            DEFREL="-D_rel ${BRAND}${INDICATOR}.$4"
+        else
+            DEFREL="-D_rel ${BRAND}${INDICATOR}"
+        fi
+    else
+        if [ -n "$4" ] ; then
+            DEFREL="-D_rel ${BRAND}$4"
+        else
+            DEFREL="-D_rel ${BRAND}1"
+        fi
+    fi
+
+    if [ "$USE_TIMESTAMP" == "true" ]; then
+        # use timestamp instead of SNAPSHOT
+        if echo "$VERSION" | grep -q SNAPSHOT ; then
+            # apply/override branding, if provided
+            if [ "$BRANDING" != "" ]; then
+                VERSION=$(echo "$VERSION" | cut -d '-' -f 1) # remove any existing branding from POM version to be overriden
+                VERSION="$VERSION-$BRANDING-$NOW"
+            else
+                VERSION=`echo $VERSION | sed 's/-SNAPSHOT/-'$NOW'/g'`
+            fi
+
+            branch=$(cd $PWD/../; git rev-parse --abbrev-ref HEAD)
+            (cd $PWD/../; ./tools/build/setnextversion.sh --version $VERSION --sourcedir . --branch $branch --no-commit)
+        fi
+    else
+        # apply/override branding, if provided
+        if [ "$BRANDING" != "" ]; then
+            VERSION=$(echo "$VERSION" | cut -d '-' -f 1) # remove any existing branding from POM version to be overriden
+            VERSION="$VERSION-$BRANDING"
+
+            branch=$(cd $PWD/../; git rev-parse --abbrev-ref HEAD)
+            (cd $PWD/../; ./tools/build/setnextversion.sh --version $VERSION --sourcedir . --branch $branch --no-commit)
+        fi
+    fi
+
+    DEFFULLVER="-D_fullver $VERSION"
     DEFVER="-D_ver $REALVER"
 
     echo "Preparing to package Apache CloudStack $VERSION"
@@ -96,17 +155,23 @@
     mkdir -p "$RPMDIR/SOURCES/$PACK_PROJECT-$VERSION"
 
     echo ". preparing source tarball"
-    (cd ../; tar -c --exclude .git --exclude dist . | tar -C "$RPMDIR/SOURCES/$PACK_PROJECT-$VERSION" -x )
+    (cd $PWD/../; tar -c --exclude .git --exclude dist . | tar -C "$RPMDIR/SOURCES/$PACK_PROJECT-$VERSION" -x )
     (cd "$RPMDIR/SOURCES/"; tar -czf "$PACK_PROJECT-$VERSION.tgz" "$PACK_PROJECT-$VERSION")
 
     echo ". executing rpmbuild"
-    cp "$DISTRO/cloud.spec" "$RPMDIR/SPECS"
+    cp "$PWD/$DISTRO/cloud.spec" "$RPMDIR/SPECS"
 
-    (cd "$RPMDIR"; rpmbuild --define "_topdir ${RPMDIR}" "${DEFVER}" "${DEFREL}" ${DEFPRE+"$DEFPRE"} ${DEFOSSNOSS+"$DEFOSSNOSS"} ${DEFSIM+"$DEFSIM"} -bb SPECS/cloud.spec)
+    (cd "$RPMDIR"; rpmbuild --define "_topdir ${RPMDIR}" "${DEFVER}" "${DEFFULLVER}" "${DEFREL}" ${DEFPRE+"$DEFPRE"} ${DEFOSSNOSS+"$DEFOSSNOSS"} ${DEFSIM+"$DEFSIM"} -bb SPECS/cloud.spec)
     if [ $? -ne 0 ]; then
+        if [ "$USE_TIMESTAMP" == "true" ]; then
+            (cd $PWD/../; git reset --hard)
+        fi
         echo "RPM Build Failed "
         exit 3
     else
+        if [ "$USE_TIMESTAMP" == "true" ]; then
+            (cd $PWD/../; git reset --hard)
+        fi
         echo "RPM Build Done"
     fi
     exit
@@ -116,22 +181,20 @@
 SIM=""
 PACKAGEVAL=""
 RELEASE=""
+BRANDING=""
+USE_TIMESTAMP="false"
 
-SHORTOPTS="hp:s:d:r:"
-LONGOPTS="help,pack:simulator:distribution:release:"
-ARGS=$(getopt -s bash -u -a --options "$SHORTOPTS"  --longoptions "$LONGOPTS" --name "$0" -- "$@")
-eval set -- "$ARGS"
-echo "$ARGS"
-while [ $# -gt 0 ] ; do
+unrecognized_flags=""
+
+while [ -n "$1" ]; do
     case "$1" in
         -h | --help)
             usage
             exit 0
             ;;
+
         -p | --pack)
-            echo "Packaging CloudStack..."
             PACKAGEVAL=$2
-            echo "$PACKAGEVAL"
             if [ "$PACKAGEVAL" == "oss" -o "$PACKAGEVAL" == "OSS" ] ; then
                 PACKAGEVAL=""
             elif [ "$PACKAGEVAL" == "noredist" -o "$PACKAGEVAL" == "NOREDIST" ] ; then
@@ -141,11 +204,11 @@
                 usage
                 exit 1
             fi
-            shift
+            shift 2
             ;;
+
         -s | --simulator)
             SIM=$2
-            echo "$SIM"
             if [ "$SIM" == "default" -o "$SIM" == "DEFAULT" ] ; then
                 SIM="false"
             elif [ "$SIM" == "simulator" -o "$SIM" == "SIMULATOR" ] ; then
@@ -155,8 +218,9 @@
                 usage
                 exit 1
             fi
-            shift
+            shift 2
             ;;
+
         -d | --distribution)
             TARGETDISTRO=$2
             if [ -z "$TARGETDISTRO" ] ; then
@@ -164,22 +228,52 @@
                 usage
                 exit 1
             fi
-            shift
+            shift 2
             ;;
+
         -r | --release)
             RELEASE=$2
-            shift
+            shift 2
             ;;
-        -)
-            echo "Error: Unrecognized option"
-            usage
-            exit 1
+
+        -b | --brand)
+            BRANDING=$2
+            shift 2
             ;;
+
+        -T | --use-timestamp)
+            USE_TIMESTAMP="true"
+            shift 1
+            ;;
+
+        -*)
+            unrecognized_flags="${unrecognized_flags}$1 "
+            shift 1
+            ;;
+
         *)
-            shift
+            shift 1
             ;;
     esac
 done
 
-packaging "$PACKAGEVAL" "$SIM" "$TARGETDISTRO" "$RELEASE"
+if [ -n "$unrecognized_flags" ]; then
+    echo "Warning: Unrecognized option(s) found \" ${unrecognized_flags}\""
+    echo "         You're advised to fix your build job scripts and prevent using these"
+    echo "         flags, as in the future release(s) they will break packaging script."
+    echo ""
+fi
 
+# Fail early if working directory is NOT clean and --use-timestamp was provided
+if [ "$USE_TIMESTAMP" == "true" ]; then
+    if [ -n "$(cd $PWD/../; git status -s)" ]; then
+        echo "Erro: You have uncommitted changes and asked for --use-timestamp to be used."
+        echo "      --use-timestamp flag is going to temporarily change  POM versions  and"
+        echo "      revert them at the end of build, and there's no  way we can do partial"
+        echo "      revert. Please commit your changes first or omit --use-timestamp flag."
+        exit 1
+    fi
+fi
+
+echo "Packaging CloudStack..."
+packaging "$PACKAGEVAL" "$SIM" "$TARGETDISTRO" "$RELEASE" "$BRANDING" "$USE_TIMESTAMP"
diff --git a/packaging/systemd/cloudstack-management.default b/packaging/systemd/cloudstack-management.default
index fbdb256..05f4a50 100644
--- a/packaging/systemd/cloudstack-management.default
+++ b/packaging/systemd/cloudstack-management.default
@@ -33,3 +33,7 @@
 CLASSPATH="/etc/cloudstack/management:/usr/share/cloudstack-common:/usr/share/cloudstack-management/setup:/usr/share/cloudstack-management:/usr/share/java/mysql-connector-java.jar:/usr/share/java/commons-daemon.jar"
 
 BOOTSTRAP_CLASS=org.apache.cloudstack.ServerDaemon
+
+#You can uncomment this if you want to enable Java remote debugging.
+#You can change the parameters at your will. The 'address' field defines the port to be used. 
+#JAVA_DEBUG="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
\ No newline at end of file
diff --git a/packaging/systemd/cloudstack-management.service b/packaging/systemd/cloudstack-management.service
index afcea8c..28eedef 100644
--- a/packaging/systemd/cloudstack-management.service
+++ b/packaging/systemd/cloudstack-management.service
@@ -28,7 +28,7 @@
 EnvironmentFile=/etc/default/cloudstack-management
 ExecStartPre=/bin/bash -c "/bin/systemctl set-environment JAVA_HOME=$( readlink -f $( which java ) | sed s:bin/.*$:: )"
 ExecStartPre=/bin/bash -c "/bin/systemctl set-environment JARS=$(ls /usr/share/cloudstack-management/lib/*.jar | tr '\n' ':' | sed s'/.$//')"
-ExecStart=/usr/bin/jsvc -home "${JAVA_HOME}" -user "${CLOUDSTACK_USER}" -cp "${JARS}:${CLASSPATH}" -errfile ${LOGDIR}/${NAME}.err -cwd ${LOGDIR} -pidfile "${CLOUDSTACK_PID}" ${JAVA_OPTS} "${BOOTSTRAP_CLASS}"
+ExecStart=/usr/bin/jsvc $JAVA_DEBUG -home "${JAVA_HOME}" -user "${CLOUDSTACK_USER}" -cp "${JARS}:${CLASSPATH}" -errfile ${LOGDIR}/${NAME}.err -cwd ${LOGDIR} -pidfile "${CLOUDSTACK_PID}" ${JAVA_OPTS} "${BOOTSTRAP_CLASS}"
 ExecStop=/usr/bin/jsvc -cp "$JARS:$CLASSPATH" -pidfile "$CLOUDSTACK_PID" -stop "$BOOTSTRAP_CLASS"
 SuccessExitStatus=143
 
diff --git a/plugins/acl/dynamic-role-based/pom.xml b/plugins/acl/dynamic-role-based/pom.xml
index 8abd95f..643b9b5 100644
--- a/plugins/acl/dynamic-role-based/pom.xml
+++ b/plugins/acl/dynamic-role-based/pom.xml
@@ -1,32 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
-  http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-acl-dynamic-role-based</artifactId>
-  <name>Apache CloudStack Plugin - ACL Dynamic Role Based</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-acl-dynamic-role-based</artifactId>
+    <name>Apache CloudStack Plugin - ACL Dynamic Role Based</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/acl/dynamic-role-based/src/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java b/plugins/acl/dynamic-role-based/src/main/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java
similarity index 100%
rename from plugins/acl/dynamic-role-based/src/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java
rename to plugins/acl/dynamic-role-based/src/main/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java
diff --git a/plugins/acl/dynamic-role-based/resources/META-INF/cloudstack/acl-dynamic-role-based/module.properties b/plugins/acl/dynamic-role-based/src/main/resources/META-INF/cloudstack/acl-dynamic-role-based/module.properties
similarity index 100%
rename from plugins/acl/dynamic-role-based/resources/META-INF/cloudstack/acl-dynamic-role-based/module.properties
rename to plugins/acl/dynamic-role-based/src/main/resources/META-INF/cloudstack/acl-dynamic-role-based/module.properties
diff --git a/plugins/acl/dynamic-role-based/resources/META-INF/cloudstack/acl-dynamic-role-based/spring-acl-dynamic-role-based-context.xml b/plugins/acl/dynamic-role-based/src/main/resources/META-INF/cloudstack/acl-dynamic-role-based/spring-acl-dynamic-role-based-context.xml
similarity index 100%
rename from plugins/acl/dynamic-role-based/resources/META-INF/cloudstack/acl-dynamic-role-based/spring-acl-dynamic-role-based-context.xml
rename to plugins/acl/dynamic-role-based/src/main/resources/META-INF/cloudstack/acl-dynamic-role-based/spring-acl-dynamic-role-based-context.xml
diff --git a/plugins/acl/dynamic-role-based/test/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessCheckerTest.java b/plugins/acl/dynamic-role-based/src/test/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessCheckerTest.java
similarity index 100%
rename from plugins/acl/dynamic-role-based/test/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessCheckerTest.java
rename to plugins/acl/dynamic-role-based/src/test/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessCheckerTest.java
diff --git a/plugins/acl/static-role-based/pom.xml b/plugins/acl/static-role-based/pom.xml
index d04de1b..5fd2a08 100644
--- a/plugins/acl/static-role-based/pom.xml
+++ b/plugins/acl/static-role-based/pom.xml
@@ -1,32 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
-  http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-acl-static-role-based</artifactId>
-  <name>Apache CloudStack Plugin - ACL Static Role Based</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-acl-static-role-based</artifactId>
+    <name>Apache CloudStack Plugin - ACL Static Role Based</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/main/java/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java
similarity index 100%
rename from plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java
rename to plugins/acl/static-role-based/src/main/java/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java
diff --git a/plugins/acl/static-role-based/resources/META-INF/cloudstack/acl-static-role-based/module.properties b/plugins/acl/static-role-based/src/main/resources/META-INF/cloudstack/acl-static-role-based/module.properties
similarity index 100%
rename from plugins/acl/static-role-based/resources/META-INF/cloudstack/acl-static-role-based/module.properties
rename to plugins/acl/static-role-based/src/main/resources/META-INF/cloudstack/acl-static-role-based/module.properties
diff --git a/plugins/acl/static-role-based/resources/META-INF/cloudstack/acl-static-role-based/spring-acl-static-role-based-context.xml b/plugins/acl/static-role-based/src/main/resources/META-INF/cloudstack/acl-static-role-based/spring-acl-static-role-based-context.xml
similarity index 100%
rename from plugins/acl/static-role-based/resources/META-INF/cloudstack/acl-static-role-based/spring-acl-static-role-based-context.xml
rename to plugins/acl/static-role-based/src/main/resources/META-INF/cloudstack/acl-static-role-based/spring-acl-static-role-based-context.xml
diff --git a/plugins/affinity-group-processors/explicit-dedication/pom.xml b/plugins/affinity-group-processors/explicit-dedication/pom.xml
index 15f11f4..3e81247 100644
--- a/plugins/affinity-group-processors/explicit-dedication/pom.xml
+++ b/plugins/affinity-group-processors/explicit-dedication/pom.xml
@@ -1,33 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-explicit-dedication</artifactId>
-  <name>Apache CloudStack Plugin - Explicit Dedication Processor</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-explicit-dedication</artifactId>
+    <name>Apache CloudStack Plugin - Explicit Dedication Processor</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/affinity-group-processors/explicit-dedication/src/org/apache/cloudstack/affinity/ExplicitDedicationProcessor.java b/plugins/affinity-group-processors/explicit-dedication/src/main/java/org/apache/cloudstack/affinity/ExplicitDedicationProcessor.java
similarity index 100%
rename from plugins/affinity-group-processors/explicit-dedication/src/org/apache/cloudstack/affinity/ExplicitDedicationProcessor.java
rename to plugins/affinity-group-processors/explicit-dedication/src/main/java/org/apache/cloudstack/affinity/ExplicitDedicationProcessor.java
diff --git a/plugins/affinity-group-processors/explicit-dedication/resources/META-INF/cloudstack/explicit-dedication/module.properties b/plugins/affinity-group-processors/explicit-dedication/src/main/resources/META-INF/cloudstack/explicit-dedication/module.properties
similarity index 100%
rename from plugins/affinity-group-processors/explicit-dedication/resources/META-INF/cloudstack/explicit-dedication/module.properties
rename to plugins/affinity-group-processors/explicit-dedication/src/main/resources/META-INF/cloudstack/explicit-dedication/module.properties
diff --git a/plugins/affinity-group-processors/explicit-dedication/resources/META-INF/cloudstack/explicit-dedication/spring-explicit-dedication-context.xml b/plugins/affinity-group-processors/explicit-dedication/src/main/resources/META-INF/cloudstack/explicit-dedication/spring-explicit-dedication-context.xml
similarity index 100%
rename from plugins/affinity-group-processors/explicit-dedication/resources/META-INF/cloudstack/explicit-dedication/spring-explicit-dedication-context.xml
rename to plugins/affinity-group-processors/explicit-dedication/src/main/resources/META-INF/cloudstack/explicit-dedication/spring-explicit-dedication-context.xml
diff --git a/plugins/affinity-group-processors/host-affinity/pom.xml b/plugins/affinity-group-processors/host-affinity/pom.xml
index be60642..82eb4fc 100644
--- a/plugins/affinity-group-processors/host-affinity/pom.xml
+++ b/plugins/affinity-group-processors/host-affinity/pom.xml
@@ -1,33 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <name>Apache CloudStack Plugin - Host Affinity Processor</name>
     <artifactId>cloud-plugin-host-affinity</artifactId>
+    <name>Apache CloudStack Plugin - Host Affinity Processor</name>
     <parent>
-        <artifactId>cloudstack-plugins</artifactId>
         <groupId>org.apache.cloudstack</groupId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    <build>
-        <defaultGoal>install</defaultGoal>
-        <sourceDirectory>src</sourceDirectory>
-    </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/plugins/affinity-group-processors/host-affinity/src/org/apache/cloudstack/affinity/HostAffinityProcessor.java b/plugins/affinity-group-processors/host-affinity/src/main/java/org/apache/cloudstack/affinity/HostAffinityProcessor.java
similarity index 100%
rename from plugins/affinity-group-processors/host-affinity/src/org/apache/cloudstack/affinity/HostAffinityProcessor.java
rename to plugins/affinity-group-processors/host-affinity/src/main/java/org/apache/cloudstack/affinity/HostAffinityProcessor.java
diff --git a/plugins/affinity-group-processors/host-affinity/resources/META-INF/cloudstack/host-affinity/module.properties b/plugins/affinity-group-processors/host-affinity/src/main/resources/META-INF/cloudstack/host-affinity/module.properties
similarity index 100%
rename from plugins/affinity-group-processors/host-affinity/resources/META-INF/cloudstack/host-affinity/module.properties
rename to plugins/affinity-group-processors/host-affinity/src/main/resources/META-INF/cloudstack/host-affinity/module.properties
diff --git a/plugins/affinity-group-processors/host-affinity/resources/META-INF/cloudstack/host-affinity/spring-host-affinity-context.xml b/plugins/affinity-group-processors/host-affinity/src/main/resources/META-INF/cloudstack/host-affinity/spring-host-affinity-context.xml
similarity index 100%
rename from plugins/affinity-group-processors/host-affinity/resources/META-INF/cloudstack/host-affinity/spring-host-affinity-context.xml
rename to plugins/affinity-group-processors/host-affinity/src/main/resources/META-INF/cloudstack/host-affinity/spring-host-affinity-context.xml
diff --git a/plugins/affinity-group-processors/host-affinity/test/org/apache/cloudstack/affinity/HostAffinityProcessorTest.java b/plugins/affinity-group-processors/host-affinity/src/test/java/org/apache/cloudstack/affinity/HostAffinityProcessorTest.java
similarity index 100%
rename from plugins/affinity-group-processors/host-affinity/test/org/apache/cloudstack/affinity/HostAffinityProcessorTest.java
rename to plugins/affinity-group-processors/host-affinity/src/test/java/org/apache/cloudstack/affinity/HostAffinityProcessorTest.java
diff --git a/plugins/affinity-group-processors/host-anti-affinity/pom.xml b/plugins/affinity-group-processors/host-anti-affinity/pom.xml
index 0771cf6..3dd2bc5 100644
--- a/plugins/affinity-group-processors/host-anti-affinity/pom.xml
+++ b/plugins/affinity-group-processors/host-anti-affinity/pom.xml
@@ -1,33 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-host-anti-affinity</artifactId>
-  <name>Apache CloudStack Plugin - Host Anti-Affinity Processor</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>    
-  </build>  
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-host-anti-affinity</artifactId>
+    <name>Apache CloudStack Plugin - Host Anti-Affinity Processor</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java b/plugins/affinity-group-processors/host-anti-affinity/src/main/java/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
similarity index 100%
rename from plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
rename to plugins/affinity-group-processors/host-anti-affinity/src/main/java/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
diff --git a/plugins/affinity-group-processors/host-anti-affinity/resources/META-INF/cloudstack/host-anti-affinity/module.properties b/plugins/affinity-group-processors/host-anti-affinity/src/main/resources/META-INF/cloudstack/host-anti-affinity/module.properties
similarity index 100%
rename from plugins/affinity-group-processors/host-anti-affinity/resources/META-INF/cloudstack/host-anti-affinity/module.properties
rename to plugins/affinity-group-processors/host-anti-affinity/src/main/resources/META-INF/cloudstack/host-anti-affinity/module.properties
diff --git a/plugins/affinity-group-processors/host-anti-affinity/resources/META-INF/cloudstack/host-anti-affinity/spring-host-anti-affinity-context.xml b/plugins/affinity-group-processors/host-anti-affinity/src/main/resources/META-INF/cloudstack/host-anti-affinity/spring-host-anti-affinity-context.xml
similarity index 100%
rename from plugins/affinity-group-processors/host-anti-affinity/resources/META-INF/cloudstack/host-anti-affinity/spring-host-anti-affinity-context.xml
rename to plugins/affinity-group-processors/host-anti-affinity/src/main/resources/META-INF/cloudstack/host-anti-affinity/spring-host-anti-affinity-context.xml
diff --git a/plugins/alert-handlers/snmp-alerts/pom.xml b/plugins/alert-handlers/snmp-alerts/pom.xml
index 43ad57f..0bf3ca0 100644
--- a/plugins/alert-handlers/snmp-alerts/pom.xml
+++ b/plugins/alert-handlers/snmp-alerts/pom.xml
@@ -1,43 +1,40 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>cloudstack-plugins</artifactId>
-    <groupId>org.apache.cloudstack</groupId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <name>Apache CloudStack Plugin - SNMP Alerts</name>
-  <artifactId>cloud-plugin-snmp-alerts</artifactId>
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.servicemix.bundles</groupId>
-      <artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-  </dependencies>
+    http://www.apache.org/licenses/LICENSE-2.0
 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <name>Apache CloudStack Plugin - SNMP Alerts</name>
+    <artifactId>cloud-plugin-snmp-alerts</artifactId>
+    <parent>
+        <artifactId>cloudstack-plugins</artifactId>
+        <groupId>org.apache.cloudstack</groupId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.servicemix.bundles</groupId>
+            <artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/CsSnmpConstants.java b/plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/CsSnmpConstants.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/CsSnmpConstants.java
rename to plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/CsSnmpConstants.java
diff --git a/plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayout.java b/plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayout.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayout.java
rename to plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayout.java
diff --git a/plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpHelper.java b/plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpHelper.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpHelper.java
rename to plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpHelper.java
diff --git a/plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpTrapAppender.java b/plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpTrapAppender.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpTrapAppender.java
rename to plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpTrapAppender.java
diff --git a/plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpTrapInfo.java b/plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpTrapInfo.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/src/org/apache/cloudstack/alert/snmp/SnmpTrapInfo.java
rename to plugins/alert-handlers/snmp-alerts/src/main/java/org/apache/cloudstack/alert/snmp/SnmpTrapInfo.java
diff --git a/plugins/alert-handlers/snmp-alerts/test/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayoutTest.java b/plugins/alert-handlers/snmp-alerts/src/test/java/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayoutTest.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/test/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayoutTest.java
rename to plugins/alert-handlers/snmp-alerts/src/test/java/org/apache/cloudstack/alert/snmp/SnmpEnhancedPatternLayoutTest.java
diff --git a/plugins/alert-handlers/snmp-alerts/test/org/apache/cloudstack/alert/snmp/SnmpTrapAppenderTest.java b/plugins/alert-handlers/snmp-alerts/src/test/java/org/apache/cloudstack/alert/snmp/SnmpTrapAppenderTest.java
similarity index 100%
rename from plugins/alert-handlers/snmp-alerts/test/org/apache/cloudstack/alert/snmp/SnmpTrapAppenderTest.java
rename to plugins/alert-handlers/snmp-alerts/src/test/java/org/apache/cloudstack/alert/snmp/SnmpTrapAppenderTest.java
diff --git a/plugins/alert-handlers/syslog-alerts/pom.xml b/plugins/alert-handlers/syslog-alerts/pom.xml
index 47da7b1..6cc37d7 100644
--- a/plugins/alert-handlers/syslog-alerts/pom.xml
+++ b/plugins/alert-handlers/syslog-alerts/pom.xml
@@ -1,39 +1,36 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>cloudstack-plugins</artifactId>
-    <groupId>org.apache.cloudstack</groupId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <name>Apache CloudStack Plugin - Syslog Alerts</name>
-  <artifactId>cloud-plugin-syslog-alerts</artifactId>
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-  <dependencies>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-  </dependencies>
+    http://www.apache.org/licenses/LICENSE-2.0
 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <name>Apache CloudStack Plugin - Syslog Alerts</name>
+    <artifactId>cloud-plugin-syslog-alerts</artifactId>
+    <parent>
+        <artifactId>cloudstack-plugins</artifactId>
+        <groupId>org.apache.cloudstack</groupId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/alert-handlers/syslog-alerts/src/org/apache/cloudstack/syslog/AlertsSyslogAppender.java b/plugins/alert-handlers/syslog-alerts/src/main/java/org/apache/cloudstack/syslog/AlertsSyslogAppender.java
similarity index 100%
rename from plugins/alert-handlers/syslog-alerts/src/org/apache/cloudstack/syslog/AlertsSyslogAppender.java
rename to plugins/alert-handlers/syslog-alerts/src/main/java/org/apache/cloudstack/syslog/AlertsSyslogAppender.java
diff --git a/plugins/alert-handlers/syslog-alerts/test/org/apache/cloudstack/syslog/AlertsSyslogAppenderTest.java b/plugins/alert-handlers/syslog-alerts/src/test/java/org/apache/cloudstack/syslog/AlertsSyslogAppenderTest.java
similarity index 100%
rename from plugins/alert-handlers/syslog-alerts/test/org/apache/cloudstack/syslog/AlertsSyslogAppenderTest.java
rename to plugins/alert-handlers/syslog-alerts/src/test/java/org/apache/cloudstack/syslog/AlertsSyslogAppenderTest.java
diff --git a/plugins/api/discovery/pom.xml b/plugins/api/discovery/pom.xml
index f1d0f35..2ed7fc9 100644
--- a/plugins/api/discovery/pom.xml
+++ b/plugins/api/discovery/pom.xml
@@ -1,58 +1,57 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-api-discovery</artifactId>
-  <name>Apache CloudStack Plugin - API Discovery</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <argLine>-Xmx1024m</argLine>
-          <excludes>
-            <exclude>org/apache/cloudstack/discovery/integration/*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-api-discovery</artifactId>
+    <name>Apache CloudStack Plugin - API Discovery</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <argLine>-Xmx1024m</argLine>
+                    <excludes>
+                        <exclude>org/apache/cloudstack/discovery/integration/*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/main/java/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
similarity index 100%
rename from plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
rename to plugins/api/discovery/src/main/java/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java b/plugins/api/discovery/src/main/java/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
similarity index 100%
rename from plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
rename to plugins/api/discovery/src/main/java/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java b/plugins/api/discovery/src/main/java/org/apache/cloudstack/api/response/ApiParameterResponse.java
similarity index 100%
rename from plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java
rename to plugins/api/discovery/src/main/java/org/apache/cloudstack/api/response/ApiParameterResponse.java
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java b/plugins/api/discovery/src/main/java/org/apache/cloudstack/api/response/ApiResponseResponse.java
similarity index 100%
rename from plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java
rename to plugins/api/discovery/src/main/java/org/apache/cloudstack/api/response/ApiResponseResponse.java
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/main/java/org/apache/cloudstack/discovery/ApiDiscoveryService.java
similarity index 100%
rename from plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java
rename to plugins/api/discovery/src/main/java/org/apache/cloudstack/discovery/ApiDiscoveryService.java
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/main/java/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
similarity index 100%
rename from plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
rename to plugins/api/discovery/src/main/java/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java
diff --git a/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java b/plugins/api/discovery/src/test/java/org/apache/cloudstack/discovery/ApiDiscoveryTest.java
similarity index 100%
rename from plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java
rename to plugins/api/discovery/src/test/java/org/apache/cloudstack/discovery/ApiDiscoveryTest.java
diff --git a/plugins/api/rate-limit/pom.xml b/plugins/api/rate-limit/pom.xml
index 13884f9..72c904c 100644
--- a/plugins/api/rate-limit/pom.xml
+++ b/plugins/api/rate-limit/pom.xml
@@ -1,44 +1,45 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-api-limit-account-based</artifactId>
-  <name>Apache CloudStack Plugin - API Rate Limit</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <forkMode>always</forkMode>
-          <argLine>-Xmx2048m -XX:MaxPermSize=1024m</argLine>
-          <excludes>
-            <exclude>org/apache/cloudstack/ratelimit/integration/*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>  
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-api-limit-account-based</artifactId>
+    <name>Apache CloudStack Plugin - API Rate Limit</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkMode>always</forkMode>
+                    <argLine>-Xmx2048m -XX:MaxPermSize=1024m</argLine>
+                    <excludes>
+                        <exclude>org/apache/cloudstack/ratelimit/integration/*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/response/ApiLimitResponse.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/api/response/ApiLimitResponse.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/api/response/ApiLimitResponse.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/api/response/ApiLimitResponse.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitService.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/ApiRateLimitService.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitService.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/ApiRateLimitService.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/LimitStore.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/LimitStore.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/LimitStore.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/LimitStore.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntry.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/StoreEntry.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntry.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/StoreEntry.java
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntryImpl.java b/plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/StoreEntryImpl.java
similarity index 100%
rename from plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntryImpl.java
rename to plugins/api/rate-limit/src/main/java/org/apache/cloudstack/ratelimit/StoreEntryImpl.java
diff --git a/plugins/api/rate-limit/resources/META-INF/cloudstack/rate-limit/module.properties b/plugins/api/rate-limit/src/main/resources/META-INF/cloudstack/rate-limit/module.properties
similarity index 100%
rename from plugins/api/rate-limit/resources/META-INF/cloudstack/rate-limit/module.properties
rename to plugins/api/rate-limit/src/main/resources/META-INF/cloudstack/rate-limit/module.properties
diff --git a/plugins/api/rate-limit/resources/META-INF/cloudstack/rate-limit/spring-rate-limit-context.xml b/plugins/api/rate-limit/src/main/resources/META-INF/cloudstack/rate-limit/spring-rate-limit-context.xml
similarity index 100%
rename from plugins/api/rate-limit/resources/META-INF/cloudstack/rate-limit/spring-rate-limit-context.xml
rename to plugins/api/rate-limit/src/main/resources/META-INF/cloudstack/rate-limit/spring-rate-limit-context.xml
diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java b/plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java
similarity index 100%
rename from plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java
rename to plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java
diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/APITest.java b/plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/integration/APITest.java
similarity index 100%
rename from plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/APITest.java
rename to plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/integration/APITest.java
diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/LoginResponse.java b/plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/integration/LoginResponse.java
similarity index 100%
rename from plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/LoginResponse.java
rename to plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/integration/LoginResponse.java
diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java b/plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java
similarity index 100%
rename from plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java
rename to plugins/api/rate-limit/src/test/java/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java
diff --git a/plugins/api/solidfire-intg-test/pom.xml b/plugins/api/solidfire-intg-test/pom.xml
index a72d401..eca4621 100644
--- a/plugins/api/solidfire-intg-test/pom.xml
+++ b/plugins/api/solidfire-intg-test/pom.xml
@@ -1,50 +1,51 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-api-solidfire-intg-test</artifactId>
-  <name>Apache CloudStack Plugin - API SolidFire Integration Testing</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-      <dependency>
-          <groupId>org.apache.cloudstack</groupId>
-          <artifactId>cloud-plugin-storage-volume-solidfire</artifactId>
-          <version>${project.version}</version>
-      </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <argLine>-Xmx1024m</argLine>
-          <excludes>
-            <exclude>org/apache/cloudstack/solidfire/integration/*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-api-solidfire-intg-test</artifactId>
+    <name>Apache CloudStack Plugin - API SolidFire Integration Testing</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-solidfire</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <argLine>-Xmx1024m</argLine>
+                    <excludes>
+                        <exclude>org/apache/cloudstack/solidfire/integration/*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetPathForVolumeCmd.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetPathForVolumeCmd.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetPathForVolumeCmd.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetPathForVolumeCmd.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireAccountIdCmd.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireAccountIdCmd.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireAccountIdCmd.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireAccountIdCmd.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeAccessGroupIdCmd.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeAccessGroupIdsCmd.java
similarity index 79%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeAccessGroupIdCmd.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeAccessGroupIdsCmd.java
index 5c15e01..0516b8e 100644
--- a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeAccessGroupIdCmd.java
+++ b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeAccessGroupIdsCmd.java
@@ -26,16 +26,16 @@
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.response.solidfire.ApiSolidFireVolumeAccessGroupIdResponse;
+import org.apache.cloudstack.api.response.solidfire.ApiSolidFireVolumeAccessGroupIdsResponse;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.solidfire.SolidFireIntegrationTestManager;
 import org.apache.cloudstack.util.solidfire.SolidFireIntegrationTestUtil;
 
-@APICommand(name = "getSolidFireVolumeAccessGroupId", responseObject = ApiSolidFireVolumeAccessGroupIdResponse.class, description = "Get the SF Volume Access Group ID",
+@APICommand(name = "getSolidFireVolumeAccessGroupIds", responseObject = ApiSolidFireVolumeAccessGroupIdsResponse.class, description = "Get the SF Volume Access Group IDs",
         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class GetSolidFireVolumeAccessGroupIdCmd extends BaseCmd {
-    private static final Logger LOGGER = Logger.getLogger(GetSolidFireVolumeAccessGroupIdCmd.class.getName());
-    private static final String NAME = "getsolidfirevolumeaccessgroupidresponse";
+public class GetSolidFireVolumeAccessGroupIdsCmd extends BaseCmd {
+    private static final Logger LOGGER = Logger.getLogger(GetSolidFireVolumeAccessGroupIdsCmd.class.getName());
+    private static final String NAME = "getsolidfirevolumeaccessgroupidsresponse";
 
     @Parameter(name = ApiConstants.CLUSTER_ID, type = CommandType.STRING, description = "Cluster UUID", required = true)
     private String clusterUuid;
@@ -67,14 +67,14 @@
 
     @Override
     public void execute() {
-        LOGGER.info("'GetSolidFireVolumeAccessGroupIdCmd.execute' method invoked");
+        LOGGER.info("'GetSolidFireVolumeAccessGroupIdsCmd.execute' method invoked");
 
-        long sfVagId = manager.getSolidFireVolumeAccessGroupId(clusterUuid, storagePoolUuid);
+        long[] sfVagIds = manager.getSolidFireVolumeAccessGroupIds(clusterUuid, storagePoolUuid);
 
-        ApiSolidFireVolumeAccessGroupIdResponse response = new ApiSolidFireVolumeAccessGroupIdResponse(sfVagId);
+        ApiSolidFireVolumeAccessGroupIdsResponse response = new ApiSolidFireVolumeAccessGroupIdsResponse(sfVagIds);
 
         response.setResponseName(getCommandName());
-        response.setObjectName("apisolidfirevolumeaccessgroupid");
+        response.setObjectName("apisolidfirevolumeaccessgroupids");
 
         this.setResponseObject(response);
     }
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeSizeCmd.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeSizeCmd.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeSizeCmd.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetSolidFireVolumeSizeCmd.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeSnapshotDetailsCmd.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeSnapshotDetailsCmd.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeSnapshotDetailsCmd.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeSnapshotDetailsCmd.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeiScsiNameCmd.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeiScsiNameCmd.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeiScsiNameCmd.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/command/admin/solidfire/GetVolumeiScsiNameCmd.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiPathForVolumeResponse.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiPathForVolumeResponse.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiPathForVolumeResponse.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiPathForVolumeResponse.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireAccountIdResponse.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireAccountIdResponse.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireAccountIdResponse.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireAccountIdResponse.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeAccessGroupIdResponse.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeAccessGroupIdsResponse.java
similarity index 71%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeAccessGroupIdResponse.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeAccessGroupIdsResponse.java
index 202a7e9..a37da40 100644
--- a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeAccessGroupIdResponse.java
+++ b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeAccessGroupIdsResponse.java
@@ -22,12 +22,12 @@
 
 import org.apache.cloudstack.api.BaseResponse;
 
-public class ApiSolidFireVolumeAccessGroupIdResponse extends BaseResponse {
-    @SerializedName("solidFireVolumeAccessGroupId")
-    @Param(description = "SolidFire Volume Access Group Id")
-    private long solidFireVolumeAccessGroupId;
+public class ApiSolidFireVolumeAccessGroupIdsResponse extends BaseResponse {
+    @SerializedName("solidFireVolumeAccessGroupIds")
+    @Param(description = "SolidFire Volume Access Group Ids")
+    private long[] solidFireVolumeAccessGroupIds;
 
-    public ApiSolidFireVolumeAccessGroupIdResponse(long sfVolumeAccessGroupId) {
-        solidFireVolumeAccessGroupId = sfVolumeAccessGroupId;
+    public ApiSolidFireVolumeAccessGroupIdsResponse(long[] sfVolumeAccessGroupIds) {
+        solidFireVolumeAccessGroupIds = sfVolumeAccessGroupIds;
     }
 }
\ No newline at end of file
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeSizeResponse.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeSizeResponse.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeSizeResponse.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiSolidFireVolumeSizeResponse.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiVolumeSnapshotDetailsResponse.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiVolumeSnapshotDetailsResponse.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiVolumeSnapshotDetailsResponse.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiVolumeSnapshotDetailsResponse.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiVolumeiScsiNameResponse.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiVolumeiScsiNameResponse.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/response/solidfire/ApiVolumeiScsiNameResponse.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/response/solidfire/ApiVolumeiScsiNameResponse.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestService.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestService.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestService.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestService.java
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestServiceImpl.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestServiceImpl.java
similarity index 95%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestServiceImpl.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestServiceImpl.java
index 0458903..4adcbbe 100644
--- a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestServiceImpl.java
+++ b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/api/solidfire/ApiSolidFireIntegrationTestServiceImpl.java
@@ -22,7 +22,7 @@
 import org.apache.cloudstack.api.command.admin.solidfire.GetPathForVolumeCmd;
 // import org.apache.log4j.Logger;
 import org.apache.cloudstack.api.command.admin.solidfire.GetSolidFireAccountIdCmd;
-import org.apache.cloudstack.api.command.admin.solidfire.GetSolidFireVolumeAccessGroupIdCmd;
+import org.apache.cloudstack.api.command.admin.solidfire.GetSolidFireVolumeAccessGroupIdsCmd;
 import org.apache.cloudstack.api.command.admin.solidfire.GetVolumeSnapshotDetailsCmd;
 import org.apache.cloudstack.api.command.admin.solidfire.GetVolumeiScsiNameCmd;
 import org.apache.cloudstack.api.command.admin.solidfire.GetSolidFireVolumeSizeCmd;
@@ -38,7 +38,7 @@
 
         cmdList.add(GetPathForVolumeCmd.class);
         cmdList.add(GetSolidFireAccountIdCmd.class);
-        cmdList.add(GetSolidFireVolumeAccessGroupIdCmd.class);
+        cmdList.add(GetSolidFireVolumeAccessGroupIdsCmd.class);
         cmdList.add(GetVolumeiScsiNameCmd.class);
         cmdList.add(GetSolidFireVolumeSizeCmd.class);
         cmdList.add(GetVolumeSnapshotDetailsCmd.class);
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManager.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManager.java
similarity index 91%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManager.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManager.java
index bdc1180..302a034 100644
--- a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManager.java
+++ b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManager.java
@@ -18,6 +18,6 @@
 
 public interface SolidFireIntegrationTestManager {
     long getSolidFireAccountId(String csAccountUuid, String storagePoolUuid);
-    long getSolidFireVolumeAccessGroupId(String csClusterUuid, String storagePoolUuid);
+    long[] getSolidFireVolumeAccessGroupIds(String csClusterUuid, String storagePoolUuid);
     long getSolidFireVolumeSize(String volumeUuid);
 }
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManagerImpl.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManagerImpl.java
similarity index 70%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManagerImpl.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManagerImpl.java
index 66b9228..0339379 100644
--- a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManagerImpl.java
+++ b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/solidfire/SolidFireIntegrationTestManagerImpl.java
@@ -16,8 +16,8 @@
 // under the License.
 package org.apache.cloudstack.solidfire;
 
-import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterDetailsVO;
+import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
 import com.cloud.storage.VolumeDetailVO;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VolumeDao;
@@ -26,18 +26,21 @@
 import com.cloud.user.AccountDetailsDao;
 import com.cloud.utils.exception.CloudRuntimeException;
 
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.util.SolidFireUtil;
 import org.apache.cloudstack.util.solidfire.SolidFireIntegrationTestUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
 import javax.inject.Inject;
 
 @Component
 public class SolidFireIntegrationTestManagerImpl implements SolidFireIntegrationTestManager {
-
     @Inject private AccountDetailsDao accountDetailsDao;
-    @Inject private ClusterDetailsDao clusterDetailsDao;
+    @Inject private HostDao hostDao;
     @Inject private SolidFireIntegrationTestUtil util;
+    @Inject private StoragePoolDetailsDao storagePoolDetailsDao;
     @Inject private VolumeDao volumeDao;
     @Inject private VolumeDetailsDao volumeDetailsDao;
 
@@ -48,7 +51,7 @@
 
         AccountDetailVO accountDetail = accountDetailsDao.findDetail(csAccountId, SolidFireUtil.getAccountKey(storagePoolId));
 
-        if (accountDetail == null){
+        if (accountDetail == null) {
             throw new CloudRuntimeException("Unable to find SF account for storage " + storagePoolUuid + " for CS account " + csAccountUuid);
         }
 
@@ -58,14 +61,35 @@
     }
 
     @Override
-    public long getSolidFireVolumeAccessGroupId(String csClusterUuid, String storagePoolUuid) {
-        long csClusterId = util.getClusterIdForClusterUuid(csClusterUuid);
+    public long[] getSolidFireVolumeAccessGroupIds(String csClusterUuid, String storagePoolUuid) {
         long storagePoolId = util.getStoragePoolIdForStoragePoolUuid(storagePoolUuid);
 
-        ClusterDetailsVO clusterDetails = clusterDetailsDao.findDetail(csClusterId, SolidFireUtil.getVagKey(storagePoolId));
-        String sfVagId = clusterDetails.getValue();
+        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);
 
-        return Long.parseLong(sfVagId);
+        List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
+
+        long csClusterId = util.getClusterIdForClusterUuid(csClusterUuid);
+        List<HostVO> hosts = hostDao.findByClusterId(csClusterId);
+
+        if (hosts == null) {
+            return new long[0];
+        }
+
+        List<Long> vagIds = new ArrayList<>(hosts.size());
+
+        for (HostVO host : hosts) {
+            String iqn = host.getStorageUrl();
+
+            SolidFireUtil.SolidFireVag sfVag = SolidFireUtil.getVolumeAccessGroup(iqn, sfVags);
+
+            if (sfVag != null) {
+                if (!vagIds.contains(sfVag.getId())) {
+                    vagIds.add(sfVag.getId());
+                }
+            }
+        }
+
+        return vagIds.stream().mapToLong(l -> l).toArray();
     }
 
     @Override
diff --git a/plugins/api/solidfire-intg-test/src/org/apache/cloudstack/util/solidfire/SolidFireIntegrationTestUtil.java b/plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/util/solidfire/SolidFireIntegrationTestUtil.java
similarity index 100%
rename from plugins/api/solidfire-intg-test/src/org/apache/cloudstack/util/solidfire/SolidFireIntegrationTestUtil.java
rename to plugins/api/solidfire-intg-test/src/main/java/org/apache/cloudstack/util/solidfire/SolidFireIntegrationTestUtil.java
diff --git a/plugins/api/solidfire-intg-test/resources/META-INF/cloudstack/solidfire-intg-test/module.properties b/plugins/api/solidfire-intg-test/src/main/resources/META-INF/cloudstack/solidfire-intg-test/module.properties
similarity index 100%
rename from plugins/api/solidfire-intg-test/resources/META-INF/cloudstack/solidfire-intg-test/module.properties
rename to plugins/api/solidfire-intg-test/src/main/resources/META-INF/cloudstack/solidfire-intg-test/module.properties
diff --git a/plugins/api/solidfire-intg-test/resources/META-INF/cloudstack/solidfire-intg-test/spring-solidfire-intg-test-context.xml b/plugins/api/solidfire-intg-test/src/main/resources/META-INF/cloudstack/solidfire-intg-test/spring-solidfire-intg-test-context.xml
similarity index 100%
rename from plugins/api/solidfire-intg-test/resources/META-INF/cloudstack/solidfire-intg-test/spring-solidfire-intg-test-context.xml
rename to plugins/api/solidfire-intg-test/src/main/resources/META-INF/cloudstack/solidfire-intg-test/spring-solidfire-intg-test-context.xml
diff --git a/plugins/api/vmware-sioc/pom.xml b/plugins/api/vmware-sioc/pom.xml
index 7ee0e5c..0710ad2 100644
--- a/plugins/api/vmware-sioc/pom.xml
+++ b/plugins/api/vmware-sioc/pom.xml
@@ -1,47 +1,48 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-api-vmware-sioc</artifactId>
-  <name>Apache CloudStack Plugin - API VMware SIOC</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-       <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
-       <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <argLine>-Xmx1024m</argLine>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-api-vmware-sioc</artifactId>
+    <name>Apache CloudStack Plugin - API VMware SIOC</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <argLine>-Xmx1024m</argLine>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/api/command/admin/sioc/UpdateSiocInfoCmd.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/command/admin/sioc/UpdateSiocInfoCmd.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/api/command/admin/sioc/UpdateSiocInfoCmd.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/command/admin/sioc/UpdateSiocInfoCmd.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/api/response/sioc/ApiUpdateSiocInfoResponse.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/response/sioc/ApiUpdateSiocInfoResponse.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/api/response/sioc/ApiUpdateSiocInfoResponse.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/response/sioc/ApiUpdateSiocInfoResponse.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/api/sioc/ApiSiocService.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/sioc/ApiSiocService.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/api/sioc/ApiSiocService.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/sioc/ApiSiocService.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/api/sioc/ApiSiocServiceImpl.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/sioc/ApiSiocServiceImpl.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/api/sioc/ApiSiocServiceImpl.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/api/sioc/ApiSiocServiceImpl.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/sioc/SiocManager.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/sioc/SiocManager.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/sioc/SiocManager.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/sioc/SiocManager.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/sioc/SiocManagerImpl.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/sioc/SiocManagerImpl.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/sioc/SiocManagerImpl.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/sioc/SiocManagerImpl.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/util/LoginInfo.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/util/LoginInfo.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/util/LoginInfo.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/util/LoginInfo.java
diff --git a/plugins/api/vmware-sioc/src/org/apache/cloudstack/util/vmware/VMwareUtil.java b/plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/util/vmware/VMwareUtil.java
similarity index 100%
rename from plugins/api/vmware-sioc/src/org/apache/cloudstack/util/vmware/VMwareUtil.java
rename to plugins/api/vmware-sioc/src/main/java/org/apache/cloudstack/util/vmware/VMwareUtil.java
diff --git a/plugins/api/vmware-sioc/resources/META-INF/cloudstack/vmware-sioc/module.properties b/plugins/api/vmware-sioc/src/main/resources/META-INF/cloudstack/vmware-sioc/module.properties
similarity index 100%
rename from plugins/api/vmware-sioc/resources/META-INF/cloudstack/vmware-sioc/module.properties
rename to plugins/api/vmware-sioc/src/main/resources/META-INF/cloudstack/vmware-sioc/module.properties
diff --git a/plugins/api/vmware-sioc/resources/META-INF/cloudstack/vmware-sioc/spring-sioc-context.xml b/plugins/api/vmware-sioc/src/main/resources/META-INF/cloudstack/vmware-sioc/spring-sioc-context.xml
similarity index 100%
rename from plugins/api/vmware-sioc/resources/META-INF/cloudstack/vmware-sioc/spring-sioc-context.xml
rename to plugins/api/vmware-sioc/src/main/resources/META-INF/cloudstack/vmware-sioc/spring-sioc-context.xml
diff --git a/plugins/ca/root-ca/pom.xml b/plugins/ca/root-ca/pom.xml
index 0405cec..ffe3681 100644
--- a/plugins/ca/root-ca/pom.xml
+++ b/plugins/ca/root-ca/pom.xml
@@ -1,46 +1,47 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-ca-rootca</artifactId>
-  <name>Apache CloudStack Plugin - Inbuilt Root Certificate Authority</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ca</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-ca-rootca</artifactId>
+    <name>Apache CloudStack Plugin - Inbuilt Root Certificate Authority</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ca</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/ca/root-ca/src/org/apache/cloudstack/ca/provider/RootCACustomTrustManager.java b/plugins/ca/root-ca/src/main/java/org/apache/cloudstack/ca/provider/RootCACustomTrustManager.java
similarity index 100%
rename from plugins/ca/root-ca/src/org/apache/cloudstack/ca/provider/RootCACustomTrustManager.java
rename to plugins/ca/root-ca/src/main/java/org/apache/cloudstack/ca/provider/RootCACustomTrustManager.java
diff --git a/plugins/ca/root-ca/src/org/apache/cloudstack/ca/provider/RootCAProvider.java b/plugins/ca/root-ca/src/main/java/org/apache/cloudstack/ca/provider/RootCAProvider.java
similarity index 100%
rename from plugins/ca/root-ca/src/org/apache/cloudstack/ca/provider/RootCAProvider.java
rename to plugins/ca/root-ca/src/main/java/org/apache/cloudstack/ca/provider/RootCAProvider.java
diff --git a/plugins/ca/root-ca/resources/META-INF/cloudstack/root-ca/module.properties b/plugins/ca/root-ca/src/main/resources/META-INF/cloudstack/root-ca/module.properties
similarity index 100%
rename from plugins/ca/root-ca/resources/META-INF/cloudstack/root-ca/module.properties
rename to plugins/ca/root-ca/src/main/resources/META-INF/cloudstack/root-ca/module.properties
diff --git a/plugins/ca/root-ca/resources/META-INF/cloudstack/root-ca/spring-root-ca-context.xml b/plugins/ca/root-ca/src/main/resources/META-INF/cloudstack/root-ca/spring-root-ca-context.xml
similarity index 100%
rename from plugins/ca/root-ca/resources/META-INF/cloudstack/root-ca/spring-root-ca-context.xml
rename to plugins/ca/root-ca/src/main/resources/META-INF/cloudstack/root-ca/spring-root-ca-context.xml
diff --git a/plugins/ca/root-ca/test/org/apache/cloudstack/ca/provider/RootCACustomTrustManagerTest.java b/plugins/ca/root-ca/src/test/java/org/apache/cloudstack/ca/provider/RootCACustomTrustManagerTest.java
similarity index 100%
rename from plugins/ca/root-ca/test/org/apache/cloudstack/ca/provider/RootCACustomTrustManagerTest.java
rename to plugins/ca/root-ca/src/test/java/org/apache/cloudstack/ca/provider/RootCACustomTrustManagerTest.java
diff --git a/plugins/ca/root-ca/test/org/apache/cloudstack/ca/provider/RootCAProviderTest.java b/plugins/ca/root-ca/src/test/java/org/apache/cloudstack/ca/provider/RootCAProviderTest.java
similarity index 100%
rename from plugins/ca/root-ca/test/org/apache/cloudstack/ca/provider/RootCAProviderTest.java
rename to plugins/ca/root-ca/src/test/java/org/apache/cloudstack/ca/provider/RootCAProviderTest.java
diff --git a/plugins/database/mysql-ha/pom.xml b/plugins/database/mysql-ha/pom.xml
index 5af22ec..95f85a6 100644
--- a/plugins/database/mysql-ha/pom.xml
+++ b/plugins/database/mysql-ha/pom.xml
@@ -1,28 +1,37 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-database-mysqlha</artifactId>
-  <name>Apache CloudStack Plugin - MySQL HA Strategy</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-database-mysqlha</artifactId>
+    <name>Apache CloudStack Plugin - MySQL HA Strategy</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/database/mysql-ha/src/com/cloud/utils/db/StaticStrategy.java b/plugins/database/mysql-ha/src/main/java/com/cloud/utils/db/StaticStrategy.java
similarity index 100%
rename from plugins/database/mysql-ha/src/com/cloud/utils/db/StaticStrategy.java
rename to plugins/database/mysql-ha/src/main/java/com/cloud/utils/db/StaticStrategy.java
diff --git a/plugins/database/quota/pom.xml b/plugins/database/quota/pom.xml
index cf48e8d..649d320 100644
--- a/plugins/database/quota/pom.xml
+++ b/plugins/database/quota/pom.xml
@@ -1,99 +1,66 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-    license agreements. See the NOTICE file distributed with this work for additional
-    information regarding copyright ownership. The ASF licenses this file to
-    you under the Apache License, Version 2.0 (the "License"); you may not use
-    this file except in compliance with the License. You may obtain a copy of
-    the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-    by applicable law or agreed to in writing, software distributed under the
-    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-    OF ANY KIND, either express or implied. See the License for the specific
-    language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-database-quota</artifactId>
-  <name>Apache CloudStack Plugin - Quota Service</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-quota</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>${cs.commons-lang3.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>joda-time</groupId>
-      <artifactId>joda-time</artifactId>
-      <version>${cs.joda-time.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${cs.junit.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-library</artifactId>
-      <version>${cs.hamcrest.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <version>${cs.mockito.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-module-junit4</artifactId>
-      <version>${cs.powermock.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-api-mockito</artifactId>
-      <version>${cs.powermock.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-test</artifactId>
-      <version>${org.springframework.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-      <version>1</version>
-    </dependency>
-  </dependencies>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-database-quota</artifactId>
+    <name>Apache CloudStack Plugin - Quota Service</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-quota</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>${cs.joda-time.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaBalanceCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaBalanceCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaBalanceCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaBalanceCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaCreditsCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaCreditsCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaCreditsCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaCreditsCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaEnabledCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaEnabledCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaEnabledCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaEnabledCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaStatementCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaStatementCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaStatementCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaStatementCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaSummaryCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaSummaryCmd.java
similarity index 98%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaSummaryCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaSummaryCmd.java
index 88466e0..21441ef 100644
--- a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaSummaryCmd.java
+++ b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaSummaryCmd.java
@@ -63,7 +63,7 @@
             if (getAccountName() != null && getDomainId() != null)
                 responses = _responseBuilder.createQuotaSummaryResponse(caller.getAccountName(), caller.getDomainId());
             else
-                responses = _responseBuilder.createQuotaSummaryResponse(getListAll());
+                responses = _responseBuilder.createQuotaSummaryResponse(isListAll());
         } else {
             responses = _responseBuilder.createQuotaSummaryResponse(caller.getAccountName(), caller.getDomainId());
         }
@@ -94,7 +94,7 @@
         return s_name;
     }
 
-    public Boolean getListAll() {
+    public Boolean isListAll() {
         return listAll == null ? false: listAll;
     }
 
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaTariffListCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffListCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaTariffListCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffListCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaUpdateCmd.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaUpdateCmd.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/command/QuotaUpdateCmd.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaUpdateCmd.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaBalanceResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaBalanceResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaBalanceResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaBalanceResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaCreditsResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaCreditsResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaCreditsResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaCreditsResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaEmailTemplateResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaEmailTemplateResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaEmailTemplateResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaEmailTemplateResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaEnabledResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaEnabledResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaEnabledResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaEnabledResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilder.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilder.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilder.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilder.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaStatementItemResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaStatementItemResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaStatementItemResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaStatementItemResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaStatementResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaStatementResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaStatementResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaStatementResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaSummaryResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaSummaryResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaSummaryResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaSummaryResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaTariffResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaTariffResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaTariffResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaTariffResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaTypeResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaTypeResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaTypeResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaTypeResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaUpdateResponse.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaUpdateResponse.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaUpdateResponse.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaUpdateResponse.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaService.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaService.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/quota/QuotaService.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaService.java
diff --git a/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaServiceImpl.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaServiceImpl.java
similarity index 100%
rename from plugins/database/quota/src/org/apache/cloudstack/quota/QuotaServiceImpl.java
rename to plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaServiceImpl.java
diff --git a/plugins/database/quota/resources/META-INF/cloudstack/quota/module.properties b/plugins/database/quota/src/main/resources/META-INF/cloudstack/quota/module.properties
similarity index 100%
rename from plugins/database/quota/resources/META-INF/cloudstack/quota/module.properties
rename to plugins/database/quota/src/main/resources/META-INF/cloudstack/quota/module.properties
diff --git a/plugins/database/quota/resources/META-INF/cloudstack/quota/spring-quota-context.xml b/plugins/database/quota/src/main/resources/META-INF/cloudstack/quota/spring-quota-context.xml
similarity index 100%
rename from plugins/database/quota/resources/META-INF/cloudstack/quota/spring-quota-context.xml
rename to plugins/database/quota/src/main/resources/META-INF/cloudstack/quota/spring-quota-context.xml
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaBalanceCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaBalanceCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaBalanceCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaBalanceCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaCreditsCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaCreditsCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaCreditsCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaCreditsCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaEmailTemplateListCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaEmailTemplateUpdateCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaStatementCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaStatementCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaStatementCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaStatementCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaTariffListCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaTariffListCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaTariffListCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaTariffListCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaTariffUpdateCmdTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmdTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/command/QuotaTariffUpdateCmdTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/command/QuotaTariffUpdateCmdTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
diff --git a/plugins/database/quota/test/org/apache/cloudstack/quota/QuotaServiceImplTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/quota/QuotaServiceImplTest.java
similarity index 100%
rename from plugins/database/quota/test/org/apache/cloudstack/quota/QuotaServiceImplTest.java
rename to plugins/database/quota/src/test/java/org/apache/cloudstack/quota/QuotaServiceImplTest.java
diff --git a/plugins/dedicated-resources/pom.xml b/plugins/dedicated-resources/pom.xml
index 189375d..2c6f9f6 100644
--- a/plugins/dedicated-resources/pom.xml
+++ b/plugins/dedicated-resources/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-dedicated-resources</artifactId>
-  <name>Apache CloudStack Plugin - Dedicated Resources</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-dedicated-resources</artifactId>
+    <name>Apache CloudStack Plugin - Dedicated Resources</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicateClusterCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicateClusterCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicateClusterCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicateClusterCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicateHostCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicateHostCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicateHostCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicateHostCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicatePodCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicatePodCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicatePodCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicatePodCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicateZoneCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicateZoneCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/DedicateZoneCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/DedicateZoneCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedClustersCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedClustersCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedClustersCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedClustersCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedHostsCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedHostsCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedHostsCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedHostsCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedPodsCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedPodsCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedPodsCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedPodsCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedZonesCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedZonesCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ListDedicatedZonesCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ListDedicatedZonesCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedClusterCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedClusterCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedClusterCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedClusterCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedHostCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedHostCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedHostCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedHostCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedPodCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedPodCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedPodCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedPodCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedZoneCmd.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedZoneCmd.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/commands/ReleaseDedicatedZoneCmd.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/commands/ReleaseDedicatedZoneCmd.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicateClusterResponse.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicateClusterResponse.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicateClusterResponse.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicateClusterResponse.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicateHostResponse.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicateHostResponse.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicateHostResponse.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicateHostResponse.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicatePodResponse.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicatePodResponse.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicatePodResponse.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicatePodResponse.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicateZoneResponse.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicateZoneResponse.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/api/response/DedicateZoneResponse.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/api/response/DedicateZoneResponse.java
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
similarity index 99%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
index 7cf193d..cd6d8cf 100644
--- a/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
+++ b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
@@ -497,8 +497,8 @@
                     }
                     dedicatedResource = _dedicatedDao.persist(dedicatedResource);
                 } catch (Exception e) {
-                    s_logger.error("Unable to dedicate host due to " + e.getMessage(), e);
-                    throw new CloudRuntimeException("Failed to dedicate cluster. Please contact Cloud Support.");
+                    s_logger.error("Unable to dedicate cluster due to " + e.getMessage(), e);
+                    throw new CloudRuntimeException("Failed to dedicate cluster. Please contact Cloud Support.", e);
                 }
 
                 List<DedicatedResourceVO> result = new ArrayList<DedicatedResourceVO>();
@@ -595,7 +595,7 @@
                     dedicatedResource = _dedicatedDao.persist(dedicatedResource);
                 } catch (Exception e) {
                     s_logger.error("Unable to dedicate host due to " + e.getMessage(), e);
-                    throw new CloudRuntimeException("Failed to dedicate host. Please contact Cloud Support.");
+                    throw new CloudRuntimeException("Failed to dedicate host. Please contact Cloud Support.", e);
                 }
 
                 List<DedicatedResourceVO> result = new ArrayList<DedicatedResourceVO>();
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedService.java b/plugins/dedicated-resources/src/main/java/org/apache/cloudstack/dedicated/DedicatedService.java
similarity index 100%
rename from plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedService.java
rename to plugins/dedicated-resources/src/main/java/org/apache/cloudstack/dedicated/DedicatedService.java
diff --git a/plugins/dedicated-resources/resources/META-INF/cloudstack/core/spring-dedicated-resources-core-context.xml b/plugins/dedicated-resources/src/main/resources/META-INF/cloudstack/core/spring-dedicated-resources-core-context.xml
similarity index 100%
rename from plugins/dedicated-resources/resources/META-INF/cloudstack/core/spring-dedicated-resources-core-context.xml
rename to plugins/dedicated-resources/src/main/resources/META-INF/cloudstack/core/spring-dedicated-resources-core-context.xml
diff --git a/plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java b/plugins/dedicated-resources/src/test/java/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
similarity index 100%
rename from plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
rename to plugins/dedicated-resources/src/test/java/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
diff --git a/plugins/dedicated-resources/test/resource/dedicatedContext.xml b/plugins/dedicated-resources/src/test/resources/dedicatedContext.xml
similarity index 100%
rename from plugins/dedicated-resources/test/resource/dedicatedContext.xml
rename to plugins/dedicated-resources/src/test/resources/dedicatedContext.xml
diff --git a/plugins/deployment-planners/implicit-dedication/pom.xml b/plugins/deployment-planners/implicit-dedication/pom.xml
index 9f27445..37dc712 100644
--- a/plugins/deployment-planners/implicit-dedication/pom.xml
+++ b/plugins/deployment-planners/implicit-dedication/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-planner-implicit-dedication</artifactId>
-  <name>Apache CloudStack Plugin - Implicit Dedication Planner</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-planner-implicit-dedication</artifactId>
+    <name>Apache CloudStack Plugin - Implicit Dedication Planner</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java b/plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
similarity index 97%
rename from plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java
rename to plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
index 5bad922..45f16ab 100644
--- a/plugins/deployment-planners/implicit-dedication/src/com/cloud/deploy/ImplicitDedicationPlanner.java
+++ b/plugins/deployment-planners/implicit-dedication/src/main/java/com/cloud/deploy/ImplicitDedicationPlanner.java
@@ -39,6 +39,7 @@
 import com.cloud.utils.NumbersUtil;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachineProfile;
+import org.springframework.util.CollectionUtils;
 
 public class ImplicitDedicationPlanner extends FirstFitPlanner implements DeploymentClusterPlanner {
 
@@ -256,14 +257,15 @@
 
             // Get the list of all the hosts in the given clusters
             List<Long> allHosts = new ArrayList<Long>();
-            for (Long cluster : clusterList) {
-                List<HostVO> hostsInCluster = resourceMgr.listAllHostsInCluster(cluster);
-                for (HostVO hostVO : hostsInCluster) {
+            if (!CollectionUtils.isEmpty(clusterList)) {
+                for (Long cluster : clusterList) {
+                    List<HostVO> hostsInCluster = resourceMgr.listAllHostsInCluster(cluster);
+                    for (HostVO hostVO : hostsInCluster) {
 
-                    allHosts.add(hostVO.getId());
+                        allHosts.add(hostVO.getId());
+                    }
                 }
             }
-
             // Go over all the hosts in the cluster and get a list of
             // 1. All empty hosts, not running any vms.
             // 2. Hosts running vms for this account and created by a service
diff --git a/plugins/deployment-planners/implicit-dedication/resources/META-INF/cloudstack/implicit-dedication/module.properties b/plugins/deployment-planners/implicit-dedication/src/main/resources/META-INF/cloudstack/implicit-dedication/module.properties
similarity index 100%
rename from plugins/deployment-planners/implicit-dedication/resources/META-INF/cloudstack/implicit-dedication/module.properties
rename to plugins/deployment-planners/implicit-dedication/src/main/resources/META-INF/cloudstack/implicit-dedication/module.properties
diff --git a/plugins/deployment-planners/implicit-dedication/resources/META-INF/cloudstack/implicit-dedication/spring-implicit-dedication-context.xml b/plugins/deployment-planners/implicit-dedication/src/main/resources/META-INF/cloudstack/implicit-dedication/spring-implicit-dedication-context.xml
similarity index 100%
rename from plugins/deployment-planners/implicit-dedication/resources/META-INF/cloudstack/implicit-dedication/spring-implicit-dedication-context.xml
rename to plugins/deployment-planners/implicit-dedication/src/main/resources/META-INF/cloudstack/implicit-dedication/spring-implicit-dedication-context.xml
diff --git a/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java b/plugins/deployment-planners/implicit-dedication/src/test/java/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
similarity index 100%
rename from plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
rename to plugins/deployment-planners/implicit-dedication/src/test/java/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
diff --git a/plugins/deployment-planners/user-concentrated-pod/pom.xml b/plugins/deployment-planners/user-concentrated-pod/pom.xml
index abc86b8..8c0e824 100644
--- a/plugins/deployment-planners/user-concentrated-pod/pom.xml
+++ b/plugins/deployment-planners/user-concentrated-pod/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-planner-user-concentrated-pod</artifactId>
-  <name>Apache CloudStack Plugin - User Concentrated Pod Deployment Planner</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-planner-user-concentrated-pod</artifactId>
+    <name>Apache CloudStack Plugin - User Concentrated Pod Deployment Planner</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/deployment-planners/user-concentrated-pod/src/com/cloud/deploy/UserConcentratedPodPlanner.java b/plugins/deployment-planners/user-concentrated-pod/src/main/java/com/cloud/deploy/UserConcentratedPodPlanner.java
similarity index 100%
rename from plugins/deployment-planners/user-concentrated-pod/src/com/cloud/deploy/UserConcentratedPodPlanner.java
rename to plugins/deployment-planners/user-concentrated-pod/src/main/java/com/cloud/deploy/UserConcentratedPodPlanner.java
diff --git a/plugins/deployment-planners/user-concentrated-pod/resources/META-INF/cloudstack/user-concentrated-pod/module.properties b/plugins/deployment-planners/user-concentrated-pod/src/main/resources/META-INF/cloudstack/user-concentrated-pod/module.properties
similarity index 100%
rename from plugins/deployment-planners/user-concentrated-pod/resources/META-INF/cloudstack/user-concentrated-pod/module.properties
rename to plugins/deployment-planners/user-concentrated-pod/src/main/resources/META-INF/cloudstack/user-concentrated-pod/module.properties
diff --git a/plugins/deployment-planners/user-concentrated-pod/resources/META-INF/cloudstack/user-concentrated-pod/spring-user-concentrated-pod-context.xml b/plugins/deployment-planners/user-concentrated-pod/src/main/resources/META-INF/cloudstack/user-concentrated-pod/spring-user-concentrated-pod-context.xml
similarity index 100%
rename from plugins/deployment-planners/user-concentrated-pod/resources/META-INF/cloudstack/user-concentrated-pod/spring-user-concentrated-pod-context.xml
rename to plugins/deployment-planners/user-concentrated-pod/src/main/resources/META-INF/cloudstack/user-concentrated-pod/spring-user-concentrated-pod-context.xml
diff --git a/plugins/deployment-planners/user-dispersing/pom.xml b/plugins/deployment-planners/user-dispersing/pom.xml
index 15b4bb1..443d032 100644
--- a/plugins/deployment-planners/user-dispersing/pom.xml
+++ b/plugins/deployment-planners/user-dispersing/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-planner-user-dispersing</artifactId>
-  <name>Apache CloudStack Plugin - User Dispersing Deployment Planner</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-planner-user-dispersing</artifactId>
+    <name>Apache CloudStack Plugin - User Dispersing Deployment Planner</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/deployment-planners/user-dispersing/src/com/cloud/deploy/UserDispersingPlanner.java b/plugins/deployment-planners/user-dispersing/src/main/java/com/cloud/deploy/UserDispersingPlanner.java
similarity index 100%
rename from plugins/deployment-planners/user-dispersing/src/com/cloud/deploy/UserDispersingPlanner.java
rename to plugins/deployment-planners/user-dispersing/src/main/java/com/cloud/deploy/UserDispersingPlanner.java
diff --git a/plugins/event-bus/inmemory/pom.xml b/plugins/event-bus/inmemory/pom.xml
index 3612252..cf35bc1 100644
--- a/plugins/event-bus/inmemory/pom.xml
+++ b/plugins/event-bus/inmemory/pom.xml
@@ -1,40 +1,37 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-mom-inmemory</artifactId>
-  <name>Apache CloudStack Plugin - In Memory Event Bus</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-    <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-mom-inmemory</artifactId>
+    <name>Apache CloudStack Plugin - In Memory Event Bus</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/event-bus/inmemory/src/org/apache/cloudstack/mom/inmemory/InMemoryEventBus.java b/plugins/event-bus/inmemory/src/main/java/org/apache/cloudstack/mom/inmemory/InMemoryEventBus.java
similarity index 100%
rename from plugins/event-bus/inmemory/src/org/apache/cloudstack/mom/inmemory/InMemoryEventBus.java
rename to plugins/event-bus/inmemory/src/main/java/org/apache/cloudstack/mom/inmemory/InMemoryEventBus.java
diff --git a/plugins/event-bus/inmemory/test/org/apache/cloudstack/mom/inmemory/InMemoryEventBusTest.java b/plugins/event-bus/inmemory/src/test/java/org/apache/cloudstack/mom/inmemory/InMemoryEventBusTest.java
similarity index 100%
rename from plugins/event-bus/inmemory/test/org/apache/cloudstack/mom/inmemory/InMemoryEventBusTest.java
rename to plugins/event-bus/inmemory/src/test/java/org/apache/cloudstack/mom/inmemory/InMemoryEventBusTest.java
diff --git a/plugins/event-bus/kafka/pom.xml b/plugins/event-bus/kafka/pom.xml
index 70545e6..975c534 100644
--- a/plugins/event-bus/kafka/pom.xml
+++ b/plugins/event-bus/kafka/pom.xml
@@ -1,45 +1,41 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-mom-kafka</artifactId>
-  <name>Apache CloudStack Plugin - Kafka Event Bus</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-    <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.kafka</groupId>
-      <artifactId>kafka-clients</artifactId>
-      <version>0.11.0.1</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-mom-kafka</artifactId>
+    <name>Apache CloudStack Plugin - Kafka Event Bus</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/event-bus/kafka/src/org/apache/cloudstack/mom/kafka/KafkaEventBus.java b/plugins/event-bus/kafka/src/main/java/org/apache/cloudstack/mom/kafka/KafkaEventBus.java
similarity index 100%
rename from plugins/event-bus/kafka/src/org/apache/cloudstack/mom/kafka/KafkaEventBus.java
rename to plugins/event-bus/kafka/src/main/java/org/apache/cloudstack/mom/kafka/KafkaEventBus.java
diff --git a/plugins/event-bus/rabbitmq/pom.xml b/plugins/event-bus/rabbitmq/pom.xml
index 0880dfd..51aa912 100644
--- a/plugins/event-bus/rabbitmq/pom.xml
+++ b/plugins/event-bus/rabbitmq/pom.xml
@@ -1,45 +1,41 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-mom-rabbitmq</artifactId>
-  <name>Apache CloudStack Plugin - RabbitMQ Event Bus</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-    <groupId>com.rabbitmq</groupId>
-      <artifactId>amqp-client</artifactId>
-        <version>5.1.1</version>
-    </dependency>
-    <dependency>
-    <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-mom-rabbitmq</artifactId>
+    <name>Apache CloudStack Plugin - RabbitMQ Event Bus</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.rabbitmq</groupId>
+            <artifactId>amqp-client</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java b/plugins/event-bus/rabbitmq/src/main/java/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
similarity index 99%
rename from plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
rename to plugins/event-bus/rabbitmq/src/main/java/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
index 0b0b083..b2f173e 100644
--- a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
+++ b/plugins/event-bus/rabbitmq/src/main/java/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
@@ -237,9 +237,9 @@
             s_subscribers.put(queueName, queueDetails);
 
         } catch (AlreadyClosedException closedException) {
-            s_logger.warn("Connection to AMQP service is lost. Subscription:" + queueName + " will be active after reconnection");
+            s_logger.warn("Connection to AMQP service is lost. Subscription:" + queueName + " will be active after reconnection", closedException);
         } catch (ConnectException connectException) {
-            s_logger.warn("Connection to AMQP service is lost. Subscription:" + queueName + " will be active after reconnection");
+            s_logger.warn("Connection to AMQP service is lost. Subscription:" + queueName + " will be active after reconnection", connectException);
         } catch (Exception e) {
             throw new EventBusException("Failed to subscribe to event due to " + e.getMessage());
         }
diff --git a/plugins/file-systems/netapp/pom.xml b/plugins/file-systems/netapp/pom.xml
deleted file mode 100644
index 905d5bb..0000000
--- a/plugins/file-systems/netapp/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-netapp</artifactId>
-  <name>Apache CloudStack Plugin - NetApp File System</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>com.cloud.com.netapp</groupId>
-      <artifactId>manageontap</artifactId>
-      <version>4.0</version>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java
deleted file mode 100644
index dadfe44..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.rmi.ServerException;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.AssociateLunCmdResponse;
-
-@APICommand(name = "associateLun", description = "Associate a LUN with a guest IQN", responseObject = AssociateLunCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class AssociateLunCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(AssociateLunCmd.class.getName());
-    private static final String s_name = "associatelunresponse";
-
-    /////////////////////////////////////////////////////
-    //////////////// API parameters /////////////////////
-    /////////////////////////////////////////////////////
-
-    @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "LUN name.")
-    private String lunName;
-
-    @Parameter(name = ApiConstants.IQN, type = CommandType.STRING, required = true, description = "Guest IQN to which the LUN associate.")
-    private String guestIqn;
-
-    ///////////////////////////////////////////////////
-    /////////////////// Accessors ///////////////////////
-    /////////////////////////////////////////////////////
-
-    public String getLunName() {
-        return lunName;
-    }
-
-    public String getGuestIQN() {
-        return guestIqn;
-    }
-
-    /////////////////////////////////////////////////////
-    /////////////// API Implementation///////////////////
-    /////////////////////////////////////////////////////
-
-    @Override
-    public String getCommandName() {
-        return s_name;
-    }
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() {
-
-        try {
-            AssociateLunCmdResponse response = new AssociateLunCmdResponse();
-            String returnVals[] = null;
-            returnVals = netappMgr.associateLun(getGuestIQN(), getLunName());
-            response.setLun(returnVals[0]);
-            response.setIpAddress(returnVals[2]);
-            response.setTargetIQN(returnVals[1]);
-            response.setObjectName("lun");
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (ServerException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        }
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java
deleted file mode 100644
index 6700479..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.rmi.ServerException;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.CreateLunCmdResponse;
-
-@APICommand(name = "createLunOnFiler", description = "Create a LUN from a pool", responseObject = CreateLunCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class CreateLunCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(CreateLunCmd.class.getName());
-    private static final String s_name = "createlunresponse";
-
-    /////////////////////////////////////////////////////
-    //////////////// API parameters /////////////////////
-    /////////////////////////////////////////////////////
-
-    @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-
-    @Parameter(name = ApiConstants.SIZE, type = CommandType.LONG, required = true, description = "LUN size.")
-    private long size;
-
-    public String getPoolName() {
-        return poolName;
-    }
-
-    public long getLunSize() {
-        return size;
-    }
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-
-        try {
-            CreateLunCmdResponse response = new CreateLunCmdResponse();
-            String returnVals[] = null;
-            returnVals = netappMgr.createLunOnFiler(getPoolName(), getLunSize());
-            response.setPath(returnVals[0]);
-            response.setIqn(returnVals[1]);
-            response.setIpAddress(returnVals[2]);
-            response.setObjectName("lun");
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (ServerException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        }
-
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java
deleted file mode 100644
index b1e6a29..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.net.UnknownHostException;
-import java.rmi.ServerException;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.CreateVolumeOnFilerCmdResponse;
-
-@APICommand(name = "createVolumeOnFiler", description = "Create a volume", responseObject = CreateVolumeOnFilerCmdResponse.class,
-        requestHasSensitiveInfo = true, responseHasSensitiveInfo = false)
-public class CreateVolumeOnFilerCmd extends BaseCmd {
-    private static final String s_name = "createvolumeresponse";
-
-    @Parameter(name = ApiConstants.IP_ADDRESS, type = CommandType.STRING, required = true, description = "ip address.")
-    private String ipAddress;
-
-    @Parameter(name = ApiConstants.AGGREGATE_NAME, type = CommandType.STRING, required = true, description = "aggregate name.")
-    private String aggrName;
-
-    @Parameter(name = ApiConstants.POOL_NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-
-    @Parameter(name = ApiConstants.VOLUME_NAME, type = CommandType.STRING, required = true, description = "volume name.")
-    private String volName;
-
-    @Parameter(name = ApiConstants.SIZE, type = CommandType.INTEGER, required = true, description = "volume size.")
-    private Integer volSize;
-
-    @Parameter(name = ApiConstants.SNAPSHOT_POLICY, type = CommandType.STRING, required = false, description = "snapshot policy.")
-    private String snapshotPolicy;
-
-    @Parameter(name = ApiConstants.SNAPSHOT_RESERVATION, type = CommandType.INTEGER, required = false, description = "snapshot reservation.")
-    private Integer snapshotReservation;
-
-    @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = true, description = "user name.")
-    private String userName;
-
-    @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "password.")
-    private String password;
-
-    public String getIpAddress() {
-        return ipAddress;
-    }
-
-    public String getAggrName() {
-        return aggrName;
-    }
-
-    public String getPoolName() {
-        return poolName;
-    }
-
-    public String volName() {
-        return volName;
-    }
-
-    public Integer getVolSize() {
-        return volSize;
-    }
-
-    public String getSnapshotPolicy() {
-        return snapshotPolicy;
-    }
-
-    public Integer getSnapshotReservation() {
-        return snapshotReservation;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        //param checks
-        if (snapshotReservation != null && (snapshotReservation < 0 || snapshotReservation > 100))
-            throw new InvalidParameterValueException("Invalid snapshot reservation");
-
-        StringBuilder s = new StringBuilder(getVolSize().toString());
-        s.append("g");
-
-        try {
-            netappMgr.createVolumeOnFiler(ipAddress, aggrName, poolName, volName, s.toString(), snapshotPolicy, snapshotReservation, userName, password);
-            CreateVolumeOnFilerCmdResponse response = new CreateVolumeOnFilerCmdResponse();
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (ServerException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (UnknownHostException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        }
-
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java
deleted file mode 100644
index d2eeb87..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.CreateVolumePoolCmdResponse;
-
-@APICommand(name = "createPool", description = "Create a pool", responseObject = CreateVolumePoolCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class CreateVolumePoolCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(CreateVolumePoolCmd.class.getName());
-    private static final String s_name = "createpoolresponse";
-
-    @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-    @Parameter(name = ApiConstants.ALGORITHM, type = CommandType.STRING, required = true, description = "algorithm.")
-    private String algorithm;
-
-    public String getPoolName() {
-        return poolName;
-    }
-
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-
-        try {
-            CreateVolumePoolCmdResponse response = new CreateVolumePoolCmdResponse();
-            netappMgr.createPool(getPoolName(), getAlgorithm());
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        }
-
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java
deleted file mode 100644
index 6f51cc6..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.DeleteVolumePoolCmdResponse;
-
-@APICommand(name = "deletePool", description = "Delete a pool", responseObject = DeleteVolumePoolCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DeleteVolumePoolCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(DeleteVolumePoolCmd.class.getName());
-    private static final String s_name = "deletepoolresponse";
-
-    @Parameter(name = ApiConstants.POOL_NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            netappMgr.deletePool(poolName);
-            DeleteVolumePoolCmdResponse response = new DeleteVolumePoolCmdResponse();
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (ResourceInUseException e) {
-            throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString());
-        }
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java
deleted file mode 100644
index cfdc1da..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.rmi.ServerException;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.DeleteLUNCmdResponse;
-
-@APICommand(name = "destroyLunOnFiler", description = "Destroy a LUN", responseObject = DeleteLUNCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DestroyLunCmd extends BaseCmd {
-
-    public static final Logger s_logger = Logger.getLogger(DestroyLunCmd.class.getName());
-    private static final String s_name = "destroylunresponse";
-
-    @Parameter(name = ApiConstants.PATH, type = CommandType.STRING, required = true, description = "LUN path.")
-    private String path;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            netappMgr.destroyLunOnFiler(path);
-            DeleteLUNCmdResponse response = new DeleteLUNCmdResponse();
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (ServerException e) {
-            throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString());
-        }
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java
deleted file mode 100644
index 500a84c..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.rmi.ServerException;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.DeleteVolumeOnFilerCmdResponse;
-
-@APICommand(name = "destroyVolumeOnFiler", description = "Destroy a Volume", responseObject = DeleteVolumeOnFilerCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DestroyVolumeOnFilerCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(DestroyVolumeOnFilerCmd.class.getName());
-    private static final String s_name = "destroyvolumeresponse";
-
-    @Parameter(name = ApiConstants.AGGREGATE_NAME, type = CommandType.STRING, required = true, description = "aggregate name.")
-    private String aggrName;
-
-    @Parameter(name = ApiConstants.IP_ADDRESS, type = CommandType.STRING, required = true, description = "ip address.")
-    private String ipAddr;
-
-    @Parameter(name = ApiConstants.VOLUME_NAME, type = CommandType.STRING, required = true, description = "volume name.")
-    private String volumeName;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            netappMgr.destroyVolumeOnFiler(ipAddr, aggrName, volumeName);
-            DeleteVolumeOnFilerCmdResponse response = new DeleteVolumeOnFilerCmdResponse();
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (ResourceInUseException e) {
-            throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString());
-        } catch (ServerException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        }
-
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
\ No newline at end of file
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java
deleted file mode 100644
index d5c53a1..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.rmi.ServerException;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.DissociateLunCmdResponse;
-
-@APICommand(name = "dissociateLun", description = "Dissociate a LUN", responseObject = DissociateLunCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class DissociateLunCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(DissociateLunCmd.class.getName());
-    private static final String s_name = "dissociatelunresponse";
-
-    @Parameter(name = ApiConstants.PATH, type = CommandType.STRING, required = true, description = "LUN path.")
-    private String path;
-
-    @Parameter(name = ApiConstants.IQN, type = CommandType.STRING, required = true, description = "Guest IQN.")
-    private String guestIQN;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            netappMgr.disassociateLun(guestIQN, path);
-            DissociateLunCmdResponse response = new DissociateLunCmdResponse();
-            response.setResponseName(getCommandName());
-            this.setResponseObject(response);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        } catch (ServerException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        }
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java
deleted file mode 100644
index c1e1fb8..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.LunVO;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.ListLunsCmdResponse;
-
-@APICommand(name = "listLunsOnFiler", description = "List LUN", responseObject = ListLunsCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListLunsCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(ListLunsCmd.class.getName());
-    private static final String s_name = "listlunresponse";
-
-    @Parameter(name = ApiConstants.POOL_NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            List<LunVO> lunList = netappMgr.listLunsOnFiler(poolName);
-            ListResponse<ListLunsCmdResponse> listResponse = new ListResponse<ListLunsCmdResponse>();
-            List<ListLunsCmdResponse> responses = new ArrayList<ListLunsCmdResponse>();
-            for (LunVO lun : lunList) {
-                ListLunsCmdResponse response = new ListLunsCmdResponse();
-                response.setId(lun.getId());
-                response.setIqn(lun.getTargetIqn());
-                response.setName(lun.getLunName());
-                response.setVolumeId(lun.getVolumeId());
-                response.setObjectName("lun");
-                responses.add(response);
-            }
-            listResponse.setResponses(responses);
-            listResponse.setResponseName(getCommandName());
-            this.setResponseObject(listResponse);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        }
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java
deleted file mode 100644
index f6d17c0..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.netapp.PoolVO;
-import com.cloud.server.api.response.netapp.ListVolumePoolsCmdResponse;
-
-@APICommand(name = "listPools", description = "List Pool", responseObject = ListVolumePoolsCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListVolumePoolsCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(ListVolumePoolsCmd.class.getName());
-    private static final String s_name = "listpoolresponse";
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            List<PoolVO> poolList = netappMgr.listPools();
-            ListResponse<ListVolumePoolsCmdResponse> listResponse = new ListResponse<ListVolumePoolsCmdResponse>();
-            List<ListVolumePoolsCmdResponse> responses = new ArrayList<ListVolumePoolsCmdResponse>();
-            for (PoolVO pool : poolList) {
-                ListVolumePoolsCmdResponse response = new ListVolumePoolsCmdResponse();
-                response.setId(pool.getId());
-                response.setName(pool.getName());
-                response.setAlgorithm(pool.getAlgorithm());
-                response.setObjectName("pool");
-                responses.add(response);
-            }
-            listResponse.setResponses(responses);
-            listResponse.setResponseName(getCommandName());
-            this.setResponseObject(listResponse);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString());
-        }
-
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java
deleted file mode 100644
index bf72b3a..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.netapp.NetappVolumeVO;
-import com.cloud.server.api.response.netapp.ListVolumesOnFilerCmdResponse;
-
-@APICommand(name = "listVolumesOnFiler", description = "List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ListVolumesOnFilerCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(ListVolumesOnFilerCmd.class.getName());
-    private static final String s_name = "listvolumesresponse";
-
-    @Parameter(name = ApiConstants.POOL_NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        try {
-            List<NetappVolumeVO> volumes = netappMgr.listVolumesOnFiler(poolName);
-            ListResponse<ListVolumesOnFilerCmdResponse> listResponse = new ListResponse<ListVolumesOnFilerCmdResponse>();
-            List<ListVolumesOnFilerCmdResponse> responses = new ArrayList<ListVolumesOnFilerCmdResponse>();
-            for (NetappVolumeVO volume : volumes) {
-                ListVolumesOnFilerCmdResponse response = new ListVolumesOnFilerCmdResponse();
-                response.setId(volume.getId());
-                response.setIpAddress(volume.getIpAddress());
-                response.setPoolName(volume.getPoolName());
-                response.setAggrName(volume.getAggregateName());
-                response.setVolumeName(volume.getVolumeName());
-                response.setSnapshotPolicy(volume.getSnapshotPolicy());
-                response.setSnapshotReservation(volume.getSnapshotReservation());
-                response.setVolumeSize(volume.getVolumeSize());
-                response.setObjectName("volume");
-                responses.add(response);
-            }
-            listResponse.setResponses(responses);
-            listResponse.setResponseName(getCommandName());
-            this.setResponseObject(listResponse);
-        } catch (InvalidParameterValueException e) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString());
-        }
-
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
\ No newline at end of file
diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java
deleted file mode 100644
index a5849df..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.api.commands.netapp;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.netapp.NetappManager;
-import com.cloud.server.api.response.netapp.ModifyVolumePoolCmdResponse;
-
-@APICommand(name = "modifyPool", description = "Modify pool", responseObject = ModifyVolumePoolCmdResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
-public class ModifyVolumePoolCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(ModifyVolumePoolCmd.class.getName());
-    private static final String s_name = "modifypoolresponse";
-
-    @Parameter(name = ApiConstants.POOL_NAME, type = CommandType.STRING, required = true, description = "pool name.")
-    private String poolName;
-
-    @Parameter(name = ApiConstants.ALGORITHM, type = CommandType.STRING, required = true, description = "algorithm.")
-    private String algorithm;
-
-    @Inject
-    NetappManager netappMgr;
-
-    @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException {
-        netappMgr.modifyPool(poolName, algorithm);
-
-        ModifyVolumePoolCmdResponse response = new ModifyVolumePoolCmdResponse();
-        response.setResponseName(getCommandName());
-        this.setResponseObject(response);
-    }
-
-    @Override
-    public String getCommandName() {
-        // TODO Auto-generated method stub
-        return s_name;
-    }
-
-    @Override
-    public long getEntityOwnerId() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/LunVO.java b/plugins/file-systems/netapp/src/com/cloud/netapp/LunVO.java
deleted file mode 100644
index 8c9a802..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/LunVO.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import org.apache.cloudstack.api.InternalIdentity;
-
-@Entity
-@Table(name = "netapp_lun")
-public class LunVO implements InternalIdentity {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "id")
-    private Long id;
-
-    @Column(name = "lun_name")
-    private String lunName;
-
-    @Column(name = "target_iqn")
-    private String targetIqn;
-
-    @Column(name = "path")
-    private String path;
-
-    @Column(name = "volume_id")
-    private Long volumeId;
-
-    public Long getSize() {
-        return size;
-    }
-
-    public void setSize(Long size) {
-        this.size = size;
-    }
-
-    @Column(name = "size")
-    private Long size;
-
-    public LunVO() {
-
-    }
-
-    public LunVO(String path, Long volumeId, Long size, String lunName, String targetIqn) {
-        this.path = path;
-        this.volumeId = volumeId;
-        this.size = size;
-        this.lunName = lunName;
-        this.targetIqn = targetIqn;
-    }
-
-    public String getLunName() {
-        return lunName;
-    }
-
-    public void setLunName(String lunName) {
-        this.lunName = lunName;
-    }
-
-    public LunVO(Long id, String path, Long volumeId, Long size, String lunName, String targetIqn) {
-        this.id = id;
-        this.path = path;
-        this.volumeId = volumeId;
-        this.size = size;
-        this.lunName = lunName;
-        this.targetIqn = targetIqn;
-    }
-
-    @Override
-    public long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    public Long getVolumeId() {
-        return volumeId;
-    }
-
-    public void setVolumeId(Long volumeId) {
-        this.volumeId = volumeId;
-    }
-
-    public void setTargetIqn(String iqn) {
-        this.targetIqn = iqn;
-    }
-
-    public String getTargetIqn() {
-        return targetIqn;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappAllocator.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappAllocator.java
deleted file mode 100644
index 316f008..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappAllocator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-public interface NetappAllocator {
-
-    public NetappVolumeVO chooseVolumeFromPool(String poolName, long lunSizeGb);
-
-    public NetappVolumeVO chooseLeastFullVolumeFromPool(String poolName, long lunSizeGb);
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java
deleted file mode 100644
index 0141825..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappDefaultAllocatorImpl.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-import java.rmi.ServerException;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-public class NetappDefaultAllocatorImpl implements NetappAllocator {
-    private static HashMap<String, Integer> s_poolNameToLastVolumeIdAllocated = new HashMap<String, Integer>();
-    private final NetappManager _netappMgr;
-    public static final Logger s_logger = Logger.getLogger(NetappDefaultAllocatorImpl.class.getName());
-
-    public NetappDefaultAllocatorImpl(NetappManager netappMgr) {
-        _netappMgr = netappMgr;
-    }
-
-    @Override
-    public synchronized NetappVolumeVO chooseLeastFullVolumeFromPool(String poolName, long lunSizeGb) {
-        List<NetappVolumeVO> volumesOnPoolAscending = _netappMgr.listVolumesAscending(poolName);
-
-        if (volumesOnPoolAscending == null) {
-            //no pools exist in db
-            return null;
-        }
-
-        long maxAvailable = 0;
-        NetappVolumeVO selectedVol = null;
-        for (NetappVolumeVO vol : volumesOnPoolAscending) {
-            try {
-                long availableBytes = _netappMgr.returnAvailableVolumeSize(vol.getVolumeName(), vol.getUsername(), vol.getPassword(), vol.getIpAddress());
-
-                if (lunSizeGb <= bytesToGb(availableBytes) && availableBytes > maxAvailable) {
-                    maxAvailable = availableBytes; //new max
-                    selectedVol = vol; //new least loaded vol
-                }
-            } catch (ServerException se) {
-                s_logger.debug("Ignoring failure to obtain volume size for volume " + vol.getVolumeName());
-                continue;
-            }
-        }
-
-        return selectedVol;
-    }
-
-    /**
-     * This method does the actual round robin allocation
-     * @param poolName
-     * @param lunSizeGb
-     * @return -- the selected volume to create the lun on
-     */
-    @Override
-    public synchronized NetappVolumeVO chooseVolumeFromPool(String poolName, long lunSizeGb) {
-        int pos = 0; //0 by default
-        List<NetappVolumeVO> volumesOnPoolAscending = _netappMgr.listVolumesAscending(poolName);
-
-        if (volumesOnPoolAscending == null) {
-            //no pools exist in db
-            return null;
-        }
-
-        //get the index of the record from the map
-        if (s_poolNameToLastVolumeIdAllocated.get(poolName) == null) {
-            pos = 0;
-        } else {
-            pos = s_poolNameToLastVolumeIdAllocated.get(poolName);
-        }
-
-        //update for RR effect
-        s_poolNameToLastVolumeIdAllocated.put(poolName, (pos + 1) % volumesOnPoolAscending.size());
-
-        //now iterate over the records
-        Object[] volumesOnPoolAscendingArray = volumesOnPoolAscending.toArray();
-        int counter = 0;
-        while (counter < volumesOnPoolAscendingArray.length) {
-            NetappVolumeVO vol = (NetappVolumeVO)volumesOnPoolAscendingArray[pos];
-
-            //check if the volume fits the bill
-            long availableBytes;
-            try {
-                availableBytes = _netappMgr.returnAvailableVolumeSize(vol.getVolumeName(), vol.getUsername(), vol.getPassword(), vol.getIpAddress());
-
-                if (lunSizeGb <= bytesToGb(availableBytes)) {
-                    //found one
-                    return vol;
-                }
-                pos = (pos + 1) % volumesOnPoolAscendingArray.length;
-                counter++;
-            } catch (ServerException e) {
-                s_logger.debug("Ignoring failure to obtain volume size for volume " + vol.getVolumeName());
-                continue;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * This method does the byte to gb conversion
-     * @param bytes
-     * @return -- converted gb
-     */
-    private long bytesToGb(long bytes) {
-        long returnVal = (bytes / (1024 * 1024 * 1024));
-        return returnVal;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java
deleted file mode 100644
index 97c7dd5..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-import java.net.UnknownHostException;
-import java.rmi.ServerException;
-import java.util.List;
-
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.utils.component.Manager;
-import com.cloud.utils.component.PluggableService;
-
-public interface NetappManager extends Manager, PluggableService {
-    enum AlgorithmType {
-        RoundRobin, LeastFull
-    }
-
-    void destroyVolumeOnFiler(String ipAddress, String aggrName, String volName) throws ServerException, InvalidParameterValueException, ResourceInUseException;
-
-    void createVolumeOnFiler(String ipAddress, String aggName, String poolName, String volName, String volSize, String snapshotPolicy, Integer snapshotReservation,
-        String username, String password) throws UnknownHostException, ServerException, InvalidParameterValueException;
-
-    public String[] associateLun(String guestIqn, String path) throws ServerException, InvalidParameterValueException;
-
-    void disassociateLun(String iGroup, String path) throws ServerException, InvalidParameterValueException;
-
-    List<LunVO> listLunsOnFiler(String poolName);
-
-    void destroyLunOnFiler(String path) throws ServerException, InvalidParameterValueException;
-
-    List<NetappVolumeVO> listVolumesOnFiler(String poolName);
-
-    List<NetappVolumeVO> listVolumesAscending(String poolName);
-
-    long returnAvailableVolumeSize(String volName, String userName, String password, String serverIp) throws ServerException;
-
-    void createPool(String poolName, String algorithm) throws InvalidParameterValueException;
-
-    void modifyPool(String poolName, String algorithm) throws InvalidParameterValueException;
-
-    void deletePool(String poolName) throws InvalidParameterValueException, ResourceInUseException;
-
-    List<PoolVO> listPools();
-
-    public String[] createLunOnFiler(String poolName, Long lunSize) throws InvalidParameterValueException, ServerException, ResourceAllocationException;
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java
deleted file mode 100644
index c226ffe..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java
+++ /dev/null
@@ -1,1013 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-import java.io.IOException;
-import java.net.UnknownHostException;
-import java.rmi.ServerException;
-import java.util.ArrayList;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import netapp.manage.NaAPIFailedException;
-import netapp.manage.NaElement;
-import netapp.manage.NaException;
-import netapp.manage.NaServer;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.api.commands.netapp.AssociateLunCmd;
-import com.cloud.api.commands.netapp.CreateLunCmd;
-import com.cloud.api.commands.netapp.CreateVolumeOnFilerCmd;
-import com.cloud.api.commands.netapp.CreateVolumePoolCmd;
-import com.cloud.api.commands.netapp.DeleteVolumePoolCmd;
-import com.cloud.api.commands.netapp.DestroyLunCmd;
-import com.cloud.api.commands.netapp.DestroyVolumeOnFilerCmd;
-import com.cloud.api.commands.netapp.DissociateLunCmd;
-import com.cloud.api.commands.netapp.ListLunsCmd;
-import com.cloud.api.commands.netapp.ListVolumePoolsCmd;
-import com.cloud.api.commands.netapp.ListVolumesOnFilerCmd;
-import com.cloud.api.commands.netapp.ModifyVolumePoolCmd;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.netapp.dao.LunDao;
-import com.cloud.netapp.dao.PoolDao;
-import com.cloud.netapp.dao.VolumeDao;
-import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@Component
-public class NetappManagerImpl extends ManagerBase implements NetappManager {
-    public enum Algorithm {
-        roundrobin, leastfull
-    }
-
-    public static final Logger s_logger = Logger.getLogger(NetappManagerImpl.class.getName());
-    @Inject
-    public VolumeDao _volumeDao;
-    @Inject
-    public PoolDao _poolDao;
-    @Inject
-    public LunDao _lunDao;
-    private NetappAllocator _netappAllocator = null;
-
-    /**
-     * Default constructor
-     */
-    public NetappManagerImpl() {
-    }
-
-    @Override
-    public void createPool(String poolName, String algorithm) throws InvalidParameterValueException {
-        if (s_logger.isDebugEnabled())
-            s_logger.debug("Request --> createPool ");
-
-        PoolVO pool = null;
-        validAlgorithm(algorithm);
-        try {
-            pool = new PoolVO(poolName, algorithm);
-            _poolDao.persist(pool);
-
-            if (s_logger.isDebugEnabled())
-                s_logger.debug("Response --> createPool:success");
-
-        } catch (CloudRuntimeException cre) {
-            pool = _poolDao.findPool(poolName);
-            if (pool != null) {
-                throw new InvalidParameterValueException("Duplicate Pool Name");
-            } else {
-                throw cre;
-            }
-        }
-    }
-
-    /**
-     * This method validates the algorithm used for allocation of the volume
-     * @param algorithm -- algorithm type
-     * @throws InvalidParameterValueException
-     */
-    private void validAlgorithm(String algorithm) throws InvalidParameterValueException {
-        //TODO: use enum
-        if (!algorithm.equalsIgnoreCase("roundrobin") && !algorithm.equalsIgnoreCase("leastfull")) {
-            throw new InvalidParameterValueException("Unknown algorithm " + algorithm);
-        }
-    }
-
-    /**
-     * Utility method to get the netapp server object
-     * @param serverIp -- ip address of netapp box
-     * @param userName -- username
-     * @param password -- password
-     * @return
-     * @throws UnknownHostException
-     */
-    private NaServer getServer(String serverIp, String userName, String password) throws UnknownHostException {
-        //Initialize connection to server, and
-        //request version 1.3 of the API set
-        NaServer s = new NaServer(serverIp, 1, 3);
-        s.setStyle(NaServer.STYLE_LOGIN_PASSWORD);
-        s.setAdminUser(userName, password);
-
-        return s;
-    }
-
-    @Override
-    public List<Class<?>> getCommands() {
-        List<Class<?>> cmdList = new ArrayList<Class<?>>();
-        cmdList.add(CreateLunCmd.class);
-        cmdList.add(ListLunsCmd.class);
-        cmdList.add(DissociateLunCmd.class);
-        cmdList.add(CreateVolumeOnFilerCmd.class);
-        cmdList.add(ModifyVolumePoolCmd.class);
-        cmdList.add(ListVolumesOnFilerCmd.class);
-        cmdList.add(ListVolumePoolsCmd.class);
-        cmdList.add(DestroyLunCmd.class);
-        cmdList.add(CreateVolumePoolCmd.class);
-        cmdList.add(DeleteVolumePoolCmd.class);
-        cmdList.add(AssociateLunCmd.class);
-        cmdList.add(DestroyVolumeOnFilerCmd.class);
-        return cmdList;
-    }
-
-    @Override
-    public void modifyPool(String poolName, String algorithm) throws InvalidParameterValueException {
-        validAlgorithm(algorithm);
-        PoolVO pool = _poolDao.findPool(poolName);
-
-        if (pool == null) {
-            throw new InvalidParameterValueException("Cannot find pool " + poolName);
-        }
-
-        validAlgorithm(algorithm);
-
-        pool.setAlgorithm(algorithm);
-        pool.setName(poolName);
-
-        _poolDao.update(pool.getId(), pool);
-    }
-
-    @Override
-    public void deletePool(String poolName) throws InvalidParameterValueException, ResourceInUseException {
-        if (s_logger.isDebugEnabled())
-            s_logger.debug("Request --> deletePool ");
-
-        PoolVO pool = _poolDao.findPool(poolName);
-        if (pool == null) {
-            throw new InvalidParameterValueException("Cannot find pool " + poolName);
-        }
-        //check if pool is empty
-        int volCount = _volumeDao.listVolumes(poolName).size();
-
-        if (volCount == 0) {
-            _poolDao.remove(pool.getId());
-            if (s_logger.isDebugEnabled())
-                s_logger.debug("Request --> deletePool: Success ");
-
-        } else {
-            throw new ResourceInUseException("Cannot delete non-empty pool");
-        }
-    }
-
-    @Override
-    public List<PoolVO> listPools() {
-        return _poolDao.listAll();
-    }
-
-    /**
-     * This method destroys the volume on netapp filer
-     * @param ipAddress -- ip address of filer
-     * @param aggrName -- name of containing aggregate
-     * @param volName -- name of volume to destroy
-     * @throws ResourceInUseException
-     * @throws NaException
-     * @throws NaAPIFailedException
-     */
-    @Override
-    @DB
-    public void destroyVolumeOnFiler(String ipAddress, String aggrName, String volName) throws ServerException, InvalidParameterValueException, ResourceInUseException {
-        NaElement xi0;
-        NaElement xi1;
-        NetappVolumeVO volume = null;
-
-        volume = _volumeDao.findVolume(ipAddress, aggrName, volName);
-
-        if (volume == null) {
-            s_logger.warn("The volume does not exist in our system");
-            throw new InvalidParameterValueException("The given tuple:" + ipAddress + "," + aggrName + "," + volName + " doesn't exist in our system");
-        }
-
-        List<LunVO> lunsOnVol = _lunDao.listLunsByVolId(volume.getId());
-
-        if (lunsOnVol != null && lunsOnVol.size() > 0) {
-            s_logger.warn("There are luns on the volume");
-            throw new ResourceInUseException("There are luns on the volume");
-        }
-
-        final TransactionLegacy txn = TransactionLegacy.currentTxn();
-        txn.start();
-        PoolVO pool = _poolDao.findById(volume.getPoolId());
-        if (pool == null) {
-            throw new InvalidParameterValueException("Failed to find pool for given volume");
-            //FIXME: choose a better exception. this is a db integrity exception
-        }
-        pool = _poolDao.acquireInLockTable(pool.getId());
-        if (pool == null) {
-            throw new ConcurrentModificationException("Failed to acquire lock on pool " + volume.getPoolId());
-        }
-        NaServer s = null;
-        try {
-            s = getServer(volume.getIpAddress(), volume.getUsername(), volume.getPassword());
-            //bring the volume down
-            xi0 = new NaElement("volume-offline");
-            xi0.addNewChild("name", volName);
-            s.invokeElem(xi0);
-
-            //now destroy it
-            xi1 = new NaElement("volume-destroy");
-            xi1.addNewChild("name", volName);
-            s.invokeElem(xi1);
-
-            //now delete from our records
-            _volumeDao.remove(volume.getId());
-            txn.commit();
-
-        } catch (UnknownHostException uhe) {
-            s_logger.warn("Unable to delete volume on filer ", uhe);
-            throw new ServerException("Unable to delete volume on filer", uhe);
-        } catch (NaAPIFailedException naf) {
-            s_logger.warn("Unable to delete volume on filer ", naf);
-            if (naf.getErrno() == 13040) {
-                s_logger.info("Deleting the volume: " + volName);
-                _volumeDao.remove(volume.getId());
-                txn.commit();
-            }
-
-            throw new ServerException("Unable to delete volume on filer", naf);
-        } catch (NaException nae) {
-            txn.rollback();
-            s_logger.warn("Unable to delete volume on filer ", nae);
-            throw new ServerException("Unable to delete volume on filer", nae);
-        } catch (IOException ioe) {
-            txn.rollback();
-            s_logger.warn("Unable to delete volume on filer ", ioe);
-            throw new ServerException("Unable to delete volume on filer", ioe);
-        } finally {
-            if (pool != null) {
-                _poolDao.releaseFromLockTable(pool.getId());
-            }
-            if (s != null)
-                s.close();
-        }
-
-    }
-
-    /**
-     * This method creates a volume on netapp filer
-     * @param ipAddress -- ip address of the filer
-     * @param aggName -- name of aggregate
-     * @param poolName -- name of pool
-     * @param volName -- name of volume
-     * @param volSize -- size of volume to be created
-     * @param snapshotPolicy -- associated snapshot policy for volume
-     * @param snapshotReservation -- associated reservation for snapshots
-     * @param username -- username
-     * @param password -- password
-     * @throws UnknownHostException
-     * @throws InvalidParameterValueException
-     */
-    @Override
-    @DB
-    public void createVolumeOnFiler(String ipAddress, String aggName, String poolName, String volName, String volSize, String snapshotPolicy,
-        Integer snapshotReservation, String username, String password) throws UnknownHostException, ServerException, InvalidParameterValueException {
-
-        if (s_logger.isDebugEnabled())
-            s_logger.debug("Request --> createVolume " + "serverIp:" + ipAddress);
-
-        boolean snapPolicy = false;
-        boolean snapshotRes = false;
-        boolean volumeCreated = false;
-
-        NaServer s = getServer(ipAddress, username, password);
-
-        NaElement xi = new NaElement("volume-create");
-        xi.addNewChild("volume", volName);
-        xi.addNewChild("containing-aggr-name", aggName);
-        xi.addNewChild("size", volSize);
-
-        NaElement xi1 = new NaElement("snapshot-set-reserve");
-        if (snapshotReservation != null) {
-            snapshotRes = true;
-            xi1.addNewChild("percentage", snapshotReservation.toString());
-            xi1.addNewChild("volume", volName);
-        }
-
-        NaElement xi2 = new NaElement("snapshot-set-schedule");
-
-        if (snapshotPolicy != null) {
-            snapPolicy = true;
-
-            String weeks = null;
-            String days = null;
-            String hours = null;
-            String whichHours = null;
-            String minutes = null;
-            String whichMinutes = null;
-
-            StringTokenizer s1 = new StringTokenizer(snapshotPolicy, " ");
-
-            //count=4: weeks days hours@csi mins@csi
-            //count=3: weeks days hours@csi
-            //count=2: weeks days
-            //count=1: weeks
-
-            if (s1.hasMoreTokens()) {
-                weeks = s1.nextToken();
-            }
-            if (weeks != null && s1.hasMoreTokens()) {
-                days = s1.nextToken();
-            }
-            if (days != null && s1.hasMoreTokens()) {
-                String[] hoursArr = s1.nextToken().split("@");
-                hours = hoursArr[0];
-                whichHours = hoursArr[1];
-            }
-            if (hours != null && s1.hasMoreTokens()) {
-                String[] minsArr = s1.nextToken().split("@");
-                minutes = minsArr[0];
-                whichMinutes = minsArr[1];
-            }
-
-            if (weeks != null)
-                xi2.addNewChild("weeks", weeks);
-            if (days != null)
-                xi2.addNewChild("days", days);
-            if (hours != null)
-                xi2.addNewChild("hours", hours);
-            if (minutes != null)
-                xi2.addNewChild("minutes", minutes);
-            xi2.addNewChild("volume", volName);
-
-            if (whichHours != null)
-                xi2.addNewChild("which-hours", whichHours);
-            if (whichMinutes != null)
-                xi2.addNewChild("which-minutes", whichMinutes);
-        }
-        Long volumeId = null;
-
-        final TransactionLegacy txn = TransactionLegacy.currentTxn();
-        txn.start();
-        NetappVolumeVO volume = null;
-        volume = _volumeDao.findVolume(ipAddress, aggName, volName);
-
-        if (volume != null) {
-            throw new InvalidParameterValueException("The volume for the given ipAddress/aggregateName/volumeName tuple already exists");
-        }
-        PoolVO pool = _poolDao.findPool(poolName);
-        if (pool == null) {
-            throw new InvalidParameterValueException("Cannot find pool " + poolName);
-        }
-        pool = _poolDao.acquireInLockTable(pool.getId());
-        if (pool == null) {
-            s_logger.warn("Failed to acquire lock on pool " + poolName);
-            throw new ConcurrentModificationException("Failed to acquire lock on pool " + poolName);
-        }
-        volume = new NetappVolumeVO(ipAddress, aggName, pool.getId(), volName, volSize, "", 0, username, password, 0, pool.getName());
-        volume = _volumeDao.persist(volume);
-
-        volumeId = volume.getId();
-        try {
-            s.invokeElem(xi);
-            volumeCreated = true;
-
-            if (snapshotRes) {
-                s.invokeElem(xi1);
-                volume.setSnapshotReservation(snapshotReservation);
-                _volumeDao.update(volumeId, volume);
-            }
-
-            if (snapPolicy) {
-                s.invokeElem(xi2);
-                volume.setSnapshotPolicy(snapshotPolicy);
-                _volumeDao.update(volumeId, volume);
-            }
-            txn.commit();
-        } catch (NaException nae) {
-            //zapi call failed, log and throw e
-            s_logger.warn("Failed to create volume on the netapp filer:", nae);
-            txn.rollback();
-            if (volumeCreated) {
-                try {
-                    deleteRogueVolume(volName, s);//deletes created volume on filer
-                } catch (NaException e) {
-                    s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e);
-                    throw new ServerException("Unable to create volume via cloudtools."
-                        + "Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e);
-                } catch (IOException e) {
-                    s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e);
-                    throw new ServerException("Unable to create volume via cloudtools."
-                        + "Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e);
-                }
-            }
-            throw new ServerException("Unable to create volume", nae);
-        } catch (IOException ioe) {
-            s_logger.warn("Failed to create volume on the netapp filer:", ioe);
-            txn.rollback();
-            if (volumeCreated) {
-                try {
-                    deleteRogueVolume(volName, s);//deletes created volume on filer
-                } catch (NaException e) {
-                    s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e);
-                    throw new ServerException("Unable to create volume via cloudtools."
-                        + "Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e);
-                } catch (IOException e) {
-                    s_logger.warn("Failed to cleanup created volume whilst rolling back on the netapp filer:", e);
-                    throw new ServerException("Unable to create volume via cloudtools."
-                        + "Failed to cleanup created volume on netapp filer whilst rolling back on the cloud db:", e);
-                }
-            }
-            throw new ServerException("Unable to create volume", ioe);
-        } finally {
-            if (s != null)
-                s.close();
-            if (pool != null)
-                _poolDao.releaseFromLockTable(pool.getId());
-
-        }
-    }
-
-    /**
-     * This method is primarily used to cleanup volume created on the netapp filer, when createVol api command fails at snapshot reservation.
-     * We roll back the db record, but the record on the netapp box still exists. We clean up that record using this helper method.
-     * @param volName
-     * @param s -- server reference
-     * @throws NaException
-     * @throws IOException
-     */
-    private void deleteRogueVolume(String volName, NaServer s) throws NaException, IOException {
-        //bring the volume down
-        NaElement xi0 = new NaElement("volume-offline");
-        xi0.addNewChild("name", volName);
-        s.invokeElem(xi0);
-
-        //now destroy it
-        NaElement xi1 = new NaElement("volume-destroy");
-        xi1.addNewChild("name", volName);
-        s.invokeElem(xi1);
-    }
-
-    /**
-     * This method lists all the volumes by pool name
-     * @param poolName
-     * @return -- volumes in that pool
-     */
-    @Override
-    public List<NetappVolumeVO> listVolumesOnFiler(String poolName) {
-
-        List<NetappVolumeVO> vols = _volumeDao.listVolumesAscending(poolName);
-
-        for (NetappVolumeVO vol : vols) {
-            try {
-                String snapScheduleOnFiler = returnSnapshotSchedule(vol);
-                vol.setSnapshotPolicy(snapScheduleOnFiler);
-
-            } catch (ServerException e) {
-                s_logger.warn("Error trying to get snapshot schedule for volume" + vol.getVolumeName());
-            }
-        }
-        return vols;
-    }
-
-    /**
-     * Utility method to return snapshot schedule for a volume
-     * @param vol -- volume for the snapshot schedule creation
-     * @return -- the snapshot schedule
-     * @throws ServerException
-     */
-    private String returnSnapshotSchedule(NetappVolumeVO vol) throws ServerException {
-
-        NaElement xi = new NaElement("snapshot-get-schedule");
-        xi.addNewChild("volume", vol.getVolumeName());
-        NaServer s = null;
-        try {
-            s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword());
-            NaElement xo = s.invokeElem(xi);
-            String weeks = xo.getChildContent("weeks");
-            String days = xo.getChildContent("days");
-            String hours = xo.getChildContent("hours");
-            String minutes = xo.getChildContent("minutes");
-            String whichHours = xo.getChildContent("which-hours");
-            String whichMinutes = xo.getChildContent("which-minutes");
-
-            StringBuilder sB = new StringBuilder();
-            sB.append(weeks)
-                .append(" ")
-                .append(days)
-                .append(" ")
-                .append(hours)
-                .append("@")
-                .append(whichHours)
-                .append(" ")
-                .append(minutes)
-                .append("@")
-                .append(whichMinutes);
-            return sB.toString();
-        } catch (NaException nae) {
-            s_logger.warn("Failed to get volume size ", nae);
-            throw new ServerException("Failed to get volume size", nae);
-        } catch (IOException ioe) {
-            s_logger.warn("Failed to get volume size ", ioe);
-            throw new ServerException("Failed to get volume size", ioe);
-        } finally {
-            if (s != null)
-                s.close();
-        }
-    }
-
-    /**
-     * This method returns the ascending order list of volumes based on their ids
-     * @param poolName -- name of pool
-     * @return -- ascending ordered list of volumes based on ids
-     */
-    @Override
-    public List<NetappVolumeVO> listVolumesAscending(String poolName) {
-        return _volumeDao.listVolumesAscending(poolName);
-    }
-
-    /**
-     * This method returns the available size on the volume in terms of bytes
-     * @param volName -- name of volume
-     * @param userName -- username
-     * @param password -- password
-     * @param serverIp -- ip address of filer
-     * @throws UnknownHostException
-     * @return-- available size on the volume in terms of bytes; return -1 if volume is offline
-     * @throws ServerException
-     */
-    @Override
-    public long returnAvailableVolumeSize(String volName, String userName, String password, String serverIp) throws ServerException {
-        long availableSize = 0;
-
-        NaElement xi = new NaElement("volume-list-info");
-        xi.addNewChild("volume", volName);
-        NaServer s = null;
-        String volumeState = null;
-        try {
-            s = getServer(serverIp, userName, password);
-            NaElement xo = s.invokeElem(xi);
-            List volList = xo.getChildByName("volumes").getChildren();
-            Iterator volIter = volList.iterator();
-            while (volIter.hasNext()) {
-                NaElement volInfo = (NaElement)volIter.next();
-                availableSize = volInfo.getChildLongValue("size-available", -1);
-                volumeState = volInfo.getChildContent("state");
-            }
-
-            if (volumeState != null) {
-                return volumeState.equalsIgnoreCase("online") ? availableSize : -1; //return -1 if volume is offline
-            } else {
-                //catch all
-                //volume state unreported
-                return -1; // as good as volume offline
-            }
-
-        } catch (NaException nae) {
-            s_logger.warn("Failed to get volume size ", nae);
-            throw new ServerException("Failed to get volume size", nae);
-        } catch (IOException ioe) {
-            s_logger.warn("Failed to get volume size ", ioe);
-            throw new ServerException("Failed to get volume size", ioe);
-        } finally {
-            if (s != null)
-                s.close();
-        }
-    }
-
-    /**
-     * This method creates a lun on the netapp filer
-     * @param poolName -- name of the pool
-     * @param lunSize -- size of the lun to be created
-     * @return -- lun path
-     * @throws IOException
-     * @throws ResourceAllocationException
-     * @throws NaException
-     */
-    @Override
-    @DB
-    public String[] createLunOnFiler(String poolName, Long lunSize) throws ServerException, InvalidParameterValueException, ResourceAllocationException {
-        String[] result = new String[3];
-        StringBuilder lunName = new StringBuilder("lun-");
-        LunVO lun = null;
-        final TransactionLegacy txn = TransactionLegacy.currentTxn();
-        txn.start();
-        PoolVO pool = _poolDao.findPool(poolName);
-
-        if (pool == null) {
-            throw new InvalidParameterValueException("Cannot find pool " + poolName);
-        }
-
-        if (lunSize <= 0) {
-            throw new InvalidParameterValueException("Please specify a valid lun size in Gb");
-        }
-
-        String algorithm = pool.getAlgorithm();
-        NetappVolumeVO selectedVol = null;
-
-        //sanity check
-        int numVolsInPool = _volumeDao.listVolumes(poolName).size();
-
-        if (numVolsInPool == 0) {
-            throw new InvalidParameterValueException("No volumes exist in the given pool");
-        }
-        pool = _poolDao.acquireInLockTable(pool.getId());
-        if (pool == null) {
-            s_logger.warn("Failed to acquire lock on the pool " + poolName);
-            return result;
-        }
-        NaServer s = null;
-
-        try {
-            if (algorithm == null || algorithm.equals(Algorithm.roundrobin.toString())) {
-                selectedVol = _netappAllocator.chooseVolumeFromPool(poolName, lunSize);
-            } else if (algorithm.equals(Algorithm.leastfull.toString())) {
-
-                selectedVol = _netappAllocator.chooseLeastFullVolumeFromPool(poolName, lunSize);
-            }
-
-            if (selectedVol == null) {
-                throw new ServerException("Could not find a suitable volume to create lun on");
-            }
-
-            if (s_logger.isDebugEnabled())
-                s_logger.debug("Request --> createLun " + "serverIp:" + selectedVol.getIpAddress());
-
-            StringBuilder exportPath = new StringBuilder("/vol/");
-            exportPath.append(selectedVol.getVolumeName());
-            exportPath.append("/");
-
-            lun = new LunVO(exportPath.toString(), selectedVol.getId(), lunSize, "", "");
-            lun = _lunDao.persist(lun);
-
-            //Lun id created: 6 digits right justified eg. 000045
-            String lunIdStr = String.valueOf(lun.getId());
-            String zeroStr = "000000";
-            int length = lunIdStr.length();
-            int offset = 6 - length;
-            StringBuilder lunIdOnPath = new StringBuilder();
-            lunIdOnPath.append(zeroStr.substring(0, offset));
-            lunIdOnPath.append(lunIdStr);
-            exportPath.append("lun-").append(lunIdOnPath.toString());
-
-            lunName.append(lunIdOnPath.toString());
-
-            //update lun name
-            lun.setLunName(lunName.toString());
-            _lunDao.update(lun.getId(), lun);
-
-            NaElement xi;
-            NaElement xi1;
-
-            long lSizeBytes = 1L * lunSize * 1024 * 1024 * 1024; //This prevents integer overflow
-            Long lunSizeBytes = new Long(lSizeBytes);
-
-            s = getServer(selectedVol.getIpAddress(), selectedVol.getUsername(), selectedVol.getPassword());
-
-            //create lun
-            xi = new NaElement("lun-create-by-size");
-            xi.addNewChild("ostype", "linux");
-            xi.addNewChild("path", exportPath.toString());
-            xi.addNewChild("size", (lunSizeBytes.toString()));
-
-            s.invokeElem(xi);
-
-            try {
-                //now create an igroup
-                xi1 = new NaElement("igroup-create");
-                xi1.addNewChild("initiator-group-name", lunName.toString());
-                xi1.addNewChild("initiator-group-type", "iscsi");
-                xi1.addNewChild("os-type", "linux");
-                s.invokeElem(xi1);
-            } catch (NaAPIFailedException e) {
-                if (e.getErrno() == 9004) {
-                    //igroup already exists hence no error
-                    s_logger.warn("Igroup already exists");
-                }
-            }
-
-            //get target iqn
-            NaElement xi4 = new NaElement("iscsi-node-get-name");
-            NaElement xo = s.invokeElem(xi4);
-            String iqn = xo.getChildContent("node-name");
-
-            lun.setTargetIqn(iqn);
-            _lunDao.update(lun.getId(), lun);
-
-            //create lun mapping
-            //now map the lun to the igroup
-            NaElement xi3 = new NaElement("lun-map");
-            xi3.addNewChild("force", "true");
-            xi3.addNewChild("initiator-group", lunName.toString());
-            xi3.addNewChild("path", lun.getPath() + lun.getLunName());
-
-            xi3.addNewChild("lun-id", lunIdStr);
-            s.invokeElem(xi3);
-
-            txn.commit();
-            //set the result
-            result[0] = lunName.toString();//lunname
-            result[1] = iqn;//iqn
-            result[2] = selectedVol.getIpAddress();
-
-            return result;
-
-        } catch (NaAPIFailedException naf) {
-            if (naf.getErrno() == 9023) { //lun is already mapped to this group
-                result[0] = lunName.toString();//lunname;
-                result[1] = lun.getTargetIqn();//iqn
-                result[2] = selectedVol.getIpAddress();
-                return result;
-            }
-            if (naf.getErrno() == 9024) { //another lun mapped at this group
-                result[0] = lunName.toString();//lunname;
-                result[1] = lun.getTargetIqn();//iqn
-                result[2] = selectedVol.getIpAddress();
-                return result;
-            }
-        } catch (NaException nae) {
-            txn.rollback();
-            throw new ServerException("Unable to create LUN", nae);
-        } catch (IOException ioe) {
-            txn.rollback();
-            throw new ServerException("Unable to create LUN", ioe);
-        } finally {
-            if (pool != null) {
-                _poolDao.releaseFromLockTable(pool.getId());
-            }
-            if (s != null) {
-                s.close();
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * This method destroys a lun on the netapp filer
-     * @param lunName -- name of the lun to be destroyed
-     */
-    @Override
-    @DB
-    public void destroyLunOnFiler(String lunName) throws InvalidParameterValueException, ServerException {
-
-        final TransactionLegacy txn = TransactionLegacy.currentTxn();
-        txn.start();
-
-        LunVO lun = _lunDao.findByName(lunName);
-
-        if (lun == null)
-            throw new InvalidParameterValueException("Cannot find lun");
-
-        NetappVolumeVO vol = _volumeDao.acquireInLockTable(lun.getVolumeId());
-        if (vol == null) {
-            s_logger.warn("Failed to lock volume id= " + lun.getVolumeId());
-            return;
-        }
-        NaServer s = null;
-        try {
-            s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword());
-
-            if (s_logger.isDebugEnabled())
-                s_logger.debug("Request --> destroyLun " + ":serverIp:" + vol.getIpAddress());
-
-            try {
-                //Unmap lun
-                NaElement xi2 = new NaElement("lun-unmap");
-                xi2.addNewChild("initiator-group", lunName);
-                xi2.addNewChild("path", lun.getPath() + lun.getLunName());
-                s.invokeElem(xi2);
-            } catch (NaAPIFailedException naf) {
-                if (naf.getErrno() == 9016)
-                    s_logger.warn("no map exists excpn 9016 caught in deletelun, continuing with delete");
-            }
-
-            //destroy lun
-            NaElement xi = new NaElement("lun-destroy");
-            xi.addNewChild("force", "true");
-            xi.addNewChild("path", lun.getPath() + lun.getLunName());
-            s.invokeElem(xi);
-
-            //destroy igroup
-            NaElement xi1 = new NaElement("igroup-destroy");
-            //xi1.addNewChild("force","true");
-            xi1.addNewChild("initiator-group-name", lunName);
-            s.invokeElem(xi1);
-
-            _lunDao.remove(lun.getId());
-            txn.commit();
-        } catch (UnknownHostException uhe) {
-            txn.rollback();
-            s_logger.warn("Failed to delete lun", uhe);
-            throw new ServerException("Failed to delete lun", uhe);
-        } catch (IOException ioe) {
-            txn.rollback();
-            s_logger.warn("Failed to delete lun", ioe);
-            throw new ServerException("Failed to delete lun", ioe);
-        } catch (NaAPIFailedException naf) {
-            if (naf.getErrno() == 9017) {//no such group exists excpn
-                s_logger.warn("no such group exists excpn 9017 caught in deletelun, continuing with delete");
-                _lunDao.remove(lun.getId());
-                txn.commit();
-            } else if (naf.getErrno() == 9029) {//LUN maps for this initiator group exist
-                s_logger.warn("LUN maps for this initiator group exist errno 9029 caught in deletelun, continuing with delete");
-                _lunDao.remove(lun.getId());
-                txn.commit();
-            } else {
-                txn.rollback();
-                s_logger.warn("Failed to delete lun", naf);
-                throw new ServerException("Failed to delete lun", naf);
-            }
-
-        } catch (NaException nae) {
-            txn.rollback();
-            s_logger.warn("Failed to delete lun", nae);
-            throw new ServerException("Failed to delete lun", nae);
-        } finally {
-            if (vol != null) {
-                _volumeDao.releaseFromLockTable(vol.getId());
-            }
-            if (s != null)
-                s.close();
-        }
-
-    }
-
-    /**
-     * This method lists the luns on the netapp filer
-     * @param volId -- id of the containing volume
-     * @return -- list of netapp luns
-     * @throws NaException
-     * @throws IOException
-     */
-    @Override
-    public List<LunVO> listLunsOnFiler(String poolName) {
-        if (s_logger.isDebugEnabled())
-            s_logger.debug("Request --> listLunsOnFiler ");
-
-        List<LunVO> luns = new ArrayList<LunVO>();
-
-        List<NetappVolumeVO> vols = _volumeDao.listVolumes(poolName);
-
-        for (NetappVolumeVO vol : vols) {
-            luns.addAll(_lunDao.listLunsByVolId(vol.getId()));
-        }
-
-        if (s_logger.isDebugEnabled())
-            s_logger.debug("Response --> listLunsOnFiler:success");
-
-        return luns;
-    }
-
-    /**
-     * This method disassociates a lun from the igroup on the filer
-     * @param iGroup -- igroup name
-     * @param lunName -- lun name
-     */
-    @Override
-    public void disassociateLun(String iGroup, String lunName) throws ServerException, InvalidParameterValueException {
-        NaElement xi;
-        LunVO lun = _lunDao.findByName(lunName);
-
-        if (lun == null)
-            throw new InvalidParameterValueException("Cannot find LUN " + lunName);
-
-        NetappVolumeVO vol = _volumeDao.findById(lun.getVolumeId());
-        NaServer s = null;
-        try {
-            s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword());
-
-            if (s_logger.isDebugEnabled())
-                s_logger.debug("Request --> disassociateLun " + ":serverIp:" + vol.getIpAddress());
-
-            xi = new NaElement("igroup-remove");
-            xi.addNewChild("force", "true");
-            xi.addNewChild("initiator", iGroup);
-            xi.addNewChild("initiator-group-name", lunName);
-            s.invokeElem(xi);
-
-        } catch (UnknownHostException uhe) {
-            throw new ServerException("Failed to disassociate lun", uhe);
-        } catch (IOException ioe) {
-            throw new ServerException("Failed to disassociate lun", ioe);
-        } catch (NaException nae) {
-            throw new ServerException("Failed to disassociate lun", nae);
-        } finally {
-            if (s != null)
-                s.close();
-        }
-
-    }
-
-    /**
-     * This method associates a lun to a particular igroup
-     * @param iqn
-     * @param iGroup
-     * @param lunName
-     */
-    @Override
-    public String[] associateLun(String guestIqn, String lunName) throws ServerException, InvalidParameterValueException
-
-    {
-        NaElement xi2;
-
-        //get lun id from path
-        String[] splitLunName = lunName.split("-");
-        String[] returnVal = new String[3];
-        if (splitLunName.length != 2)
-            throw new InvalidParameterValueException("The lun id is malformed");
-
-        String lunIdStr = splitLunName[1];
-
-        Long lId = new Long(lunIdStr);
-
-        LunVO lun = _lunDao.findById(lId);
-
-        if (lun == null)
-            throw new InvalidParameterValueException("Cannot find LUN " + lunName);
-
-        NetappVolumeVO vol = _volumeDao.findById(lun.getVolumeId());
-
-        //assert(vol != null);
-
-        returnVal[0] = lunIdStr;
-        returnVal[1] = lun.getTargetIqn();
-        returnVal[2] = vol.getIpAddress();
-
-        NaServer s = null;
-
-        try {
-            s = getServer(vol.getIpAddress(), vol.getUsername(), vol.getPassword());
-
-            if (s_logger.isDebugEnabled())
-                s_logger.debug("Request --> associateLun " + ":serverIp:" + vol.getIpAddress());
-
-            //add iqn to the group
-            xi2 = new NaElement("igroup-add");
-            xi2.addNewChild("force", "true");
-            xi2.addNewChild("initiator", guestIqn);
-            xi2.addNewChild("initiator-group-name", lunName);
-            s.invokeElem(xi2);
-
-            return returnVal;
-        } catch (UnknownHostException uhe) {
-            s_logger.warn("Unable to associate LUN ", uhe);
-            throw new ServerException("Unable to associate LUN", uhe);
-        } catch (NaAPIFailedException naf) {
-            if (naf.getErrno() == 9008) { //initiator group already contains node
-                return returnVal;
-            }
-            s_logger.warn("Unable to associate LUN ", naf);
-            throw new ServerException("Unable to associate LUN", naf);
-        } catch (NaException nae) {
-            s_logger.warn("Unable to associate LUN ", nae);
-            throw new ServerException("Unable to associate LUN", nae);
-        } catch (IOException ioe) {
-            s_logger.warn("Unable to associate LUN ", ioe);
-            throw new ServerException("Unable to associate LUN", ioe);
-        } finally {
-            if (s != null)
-                s.close();
-        }
-
-    }
-
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-
-        _netappAllocator = new NetappDefaultAllocatorImpl(this);
-
-        return true;
-    }
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappVolumeVO.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappVolumeVO.java
deleted file mode 100644
index cfaced9..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappVolumeVO.java
+++ /dev/null
@@ -1,186 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import org.apache.cloudstack.api.InternalIdentity;
-
-@Entity
-@Table(name = "netapp_volume")
-public class NetappVolumeVO implements InternalIdentity {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "id")
-    private Long id;
-
-    @Column(name = "ip_address")
-    private String ipAddress;
-
-    @Column(name = "aggregate_name")
-    private String aggregateName;
-
-    @Column(name = "pool_id")
-    private Long poolId;
-
-    @Column(name = "pool_name")
-    private String poolName;
-
-    @Column(name = "volume_name")
-    private String volumeName;
-
-    @Column(name = "username")
-    private String username;
-
-    @Column(name = "password")
-    private String password;
-
-    @Column(name = "snapshot_policy")
-    private String snapshotPolicy;
-
-    @Column(name = "snapshot_reservation")
-    private Integer snapshotReservation;
-
-    @Column(name = "volume_size")
-    private String volumeSize;
-
-    @Column(name = "round_robin_marker")
-    private int roundRobinMarker;
-
-    public NetappVolumeVO() {
-
-    }
-
-    public NetappVolumeVO(String ipAddress, String aggName, Long poolId, String volName, String volSize, String snapshotPolicy, int snapshotReservation, String username,
-            String password, int roundRobinMarker, String poolName) {
-        this.ipAddress = ipAddress;
-        this.aggregateName = aggName;
-        this.poolId = poolId;
-        this.username = username;
-        this.password = password;
-        this.volumeName = volName;
-        this.volumeSize = volSize;
-        this.snapshotPolicy = snapshotPolicy;
-        this.snapshotReservation = snapshotReservation;
-        this.roundRobinMarker = roundRobinMarker;
-        this.poolName = poolName;
-    }
-
-    public String getPoolName() {
-        return poolName;
-    }
-
-    public void setPoolName(String poolName) {
-        this.poolName = poolName;
-    }
-
-    public int getRoundRobinMarker() {
-        return roundRobinMarker;
-    }
-
-    public void setRoundRobinMarker(int roundRobinMarker) {
-        this.roundRobinMarker = roundRobinMarker;
-    }
-
-    public String getVolumeName() {
-        return volumeName;
-    }
-
-    public void setVolumeName(String volumeName) {
-        this.volumeName = volumeName;
-    }
-
-    public String getSnapshotPolicy() {
-        return snapshotPolicy;
-    }
-
-    public void setSnapshotPolicy(String snapshotPolicy) {
-        this.snapshotPolicy = snapshotPolicy;
-    }
-
-    public Integer getSnapshotReservation() {
-        return snapshotReservation;
-    }
-
-    public void setSnapshotReservation(Integer snapshotReservation) {
-        this.snapshotReservation = snapshotReservation;
-    }
-
-    public String getVolumeSize() {
-        return volumeSize;
-    }
-
-    public void setVolumeSize(String volumeSize) {
-        this.volumeSize = volumeSize;
-    }
-
-    @Override
-    public long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getIpAddress() {
-        return ipAddress;
-    }
-
-    public void setIpAddress(String ipAddress) {
-        this.ipAddress = ipAddress;
-    }
-
-    public String getAggregateName() {
-        return aggregateName;
-    }
-
-    public void setAggregateName(String aggregateName) {
-        this.aggregateName = aggregateName;
-    }
-
-    public Long getPoolId() {
-        return poolId;
-    }
-
-    public void setPoolId(Long poolId) {
-        this.poolId = poolId;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/PoolVO.java b/plugins/file-systems/netapp/src/com/cloud/netapp/PoolVO.java
deleted file mode 100644
index a045fec..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/PoolVO.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import org.apache.cloudstack.api.InternalIdentity;
-
-@Entity
-@Table(name = "netapp_pool")
-public class PoolVO implements InternalIdentity {
-
-    @Override
-    public long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-    public void setAlgorithm(String algorithm) {
-        this.algorithm = algorithm;
-    }
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "id")
-    private Long id;
-
-    @Column(name = "name")
-    private String name;
-
-    @Column(name = "algorithm")
-    private String algorithm;
-
-    public PoolVO() {
-
-    }
-
-    public PoolVO(String name, String algorithm) {
-        this.name = name;
-        this.algorithm = algorithm;
-    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/LunDao.java b/plugins/file-systems/netapp/src/com/cloud/netapp/dao/LunDao.java
deleted file mode 100644
index 2bc95cf..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/LunDao.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp.dao;
-
-import java.util.List;
-
-import com.cloud.netapp.LunVO;
-import com.cloud.utils.db.GenericDao;
-
-public interface LunDao extends GenericDao<LunVO, Long> {
-
-    List<LunVO> listLunsByVolId(Long volId);
-
-    LunVO findByName(String name);
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/LunDaoImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/dao/LunDaoImpl.java
deleted file mode 100644
index 58f2ea1..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/LunDaoImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp.dao;
-
-import java.util.List;
-
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.netapp.LunVO;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-
-@Component
-public class LunDaoImpl extends GenericDaoBase<LunVO, Long> implements LunDao {
-    private static final Logger s_logger = Logger.getLogger(PoolDaoImpl.class);
-
-    protected final SearchBuilder<LunVO> LunSearch;
-    protected final SearchBuilder<LunVO> LunNameSearch;
-
-    protected LunDaoImpl() {
-
-        LunSearch = createSearchBuilder();
-        LunSearch.and("volumeId", LunSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
-        LunSearch.done();
-
-        LunNameSearch = createSearchBuilder();
-        LunNameSearch.and("name", LunNameSearch.entity().getLunName(), SearchCriteria.Op.EQ);
-        LunNameSearch.done();
-
-    }
-
-    @Override
-    public List<LunVO> listLunsByVolId(Long volId) {
-        Filter searchFilter = new Filter(LunVO.class, "id", Boolean.TRUE, Long.valueOf(0), Long.valueOf(10000));
-
-        SearchCriteria sc = LunSearch.create();
-        sc.setParameters("volumeId", volId);
-        List<LunVO> lunList = listBy(sc, searchFilter);
-
-        return lunList;
-    }
-
-    @Override
-    public LunVO findByName(String name) {
-        SearchCriteria sc = LunNameSearch.create();
-        sc.setParameters("name", name);
-        return findOneBy(sc);
-    }
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/PoolDaoImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/dao/PoolDaoImpl.java
deleted file mode 100644
index 03352d2..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/PoolDaoImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp.dao;
-
-import java.util.List;
-
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.netapp.PoolVO;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-
-@Component
-public class PoolDaoImpl extends GenericDaoBase<PoolVO, Long> implements PoolDao {
-    private static final Logger s_logger = Logger.getLogger(PoolDaoImpl.class);
-
-    protected final SearchBuilder<PoolVO> PoolSearch;
-
-    protected PoolDaoImpl() {
-
-        PoolSearch = createSearchBuilder();
-        PoolSearch.and("name", PoolSearch.entity().getName(), SearchCriteria.Op.EQ);
-        PoolSearch.done();
-
-    }
-
-    @Override
-    public PoolVO findPool(String poolName) {
-        SearchCriteria sc = PoolSearch.create();
-        sc.setParameters("name", poolName);
-        List<PoolVO> poolList = listBy(sc);
-
-        return (poolList.size() > 0 ? poolList.get(0) : null);
-    }
-
-    @Override
-    public List<PoolVO> listPools() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-//    @Override
-//    public List<NetappStoragePoolVO> listVolumes(String poolName) {
-//        SearchCriteria sc = NetappListVolumeSearch.create();
-//        sc.setParameters("poolName", poolName);
-//        return listBy(sc);
-//    }
-
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/VolumeDao.java b/plugins/file-systems/netapp/src/com/cloud/netapp/dao/VolumeDao.java
deleted file mode 100644
index 59b9190..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/VolumeDao.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp.dao;
-
-import java.util.List;
-
-import com.cloud.netapp.NetappVolumeVO;
-import com.cloud.utils.db.GenericDao;
-
-public interface VolumeDao extends GenericDao<NetappVolumeVO, Long> {
-
-    NetappVolumeVO findVolume(String ipAddress, String aggregateName, String volumeName);
-
-    List<NetappVolumeVO> listVolumes(String poolName);
-
-    NetappVolumeVO returnRoundRobinMarkerInPool(String poolName, int roundRobinMarker);
-
-    List<NetappVolumeVO> listVolumesAscending(String poolName);
-}
diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/VolumeDaoImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/dao/VolumeDaoImpl.java
deleted file mode 100644
index 70db5bc..0000000
--- a/plugins/file-systems/netapp/src/com/cloud/netapp/dao/VolumeDaoImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.netapp.dao;
-
-import java.util.List;
-
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.netapp.NetappVolumeVO;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-
-@Component(value = "netappVolumeDaoImpl")
-public class VolumeDaoImpl extends GenericDaoBase<NetappVolumeVO, Long> implements VolumeDao {
-    private static final Logger s_logger = Logger.getLogger(VolumeDaoImpl.class);
-
-    protected final SearchBuilder<NetappVolumeVO> NetappVolumeSearch;
-    protected final SearchBuilder<NetappVolumeVO> NetappListVolumeSearch;
-    protected final SearchBuilder<NetappVolumeVO> NetappRoundRobinMarkerSearch;
-
-    @Override
-    public NetappVolumeVO findVolume(String ipAddress, String aggregateName, String volumeName) {
-        SearchCriteria<NetappVolumeVO> sc = NetappVolumeSearch.create();
-        sc.setParameters("ipAddress", ipAddress);
-        sc.setParameters("aggregateName", aggregateName);
-        sc.setParameters("volumeName", volumeName);
-
-        List<NetappVolumeVO> volList = listBy(sc);
-
-        return (volList.size() == 0 ? null : volList.get(0));
-    }
-
-    protected VolumeDaoImpl() {
-        NetappVolumeSearch = createSearchBuilder();
-        NetappVolumeSearch.and("ipAddress", NetappVolumeSearch.entity().getIpAddress(), SearchCriteria.Op.EQ);
-        NetappVolumeSearch.and("aggregateName", NetappVolumeSearch.entity().getAggregateName(), SearchCriteria.Op.EQ);
-        NetappVolumeSearch.and("volumeName", NetappVolumeSearch.entity().getVolumeName(), SearchCriteria.Op.EQ);
-        NetappVolumeSearch.done();
-
-        NetappListVolumeSearch = createSearchBuilder();
-        NetappListVolumeSearch.and("poolName", NetappListVolumeSearch.entity().getPoolName(), SearchCriteria.Op.EQ);
-        NetappListVolumeSearch.done();
-
-        NetappRoundRobinMarkerSearch = createSearchBuilder();
-        NetappRoundRobinMarkerSearch.and("roundRobinMarker", NetappRoundRobinMarkerSearch.entity().getRoundRobinMarker(), SearchCriteria.Op.EQ);
-        NetappRoundRobinMarkerSearch.and("poolName", NetappRoundRobinMarkerSearch.entity().getPoolName(), SearchCriteria.Op.EQ);
-        NetappRoundRobinMarkerSearch.done();
-    }
-
-    @Override
-    public List<NetappVolumeVO> listVolumes(String poolName) {
-        SearchCriteria<NetappVolumeVO> sc = NetappListVolumeSearch.create();
-        sc.setParameters("poolName", poolName);
-        return listBy(sc);
-    }
-
-    @Override
-    public NetappVolumeVO returnRoundRobinMarkerInPool(String poolName, int roundRobinMarker) {
-        SearchCriteria<NetappVolumeVO> sc = NetappRoundRobinMarkerSearch.create();
-        sc.setParameters("roundRobinMarker", roundRobinMarker);
-        sc.setParameters("poolName", poolName);
-
-        List<NetappVolumeVO> marker = listBy(sc);
-
-        if (marker.size() > 0)
-            return marker.get(0);
-        else
-            return null;
-    }
-
-    @Override
-    public List<NetappVolumeVO> listVolumesAscending(String poolName) {
-        Filter searchFilter = new Filter(NetappVolumeVO.class, "id", Boolean.TRUE, Long.valueOf(0), Long.valueOf(10000));
-
-        SearchCriteria<NetappVolumeVO> sc = NetappListVolumeSearch.create();
-        sc.setParameters("poolName", poolName);
-
-        return listBy(sc, searchFilter);
-    }
-
-}
diff --git a/plugins/ha-planners/skip-heurestics/pom.xml b/plugins/ha-planners/skip-heurestics/pom.xml
index bbef5a4..5c1842a 100644
--- a/plugins/ha-planners/skip-heurestics/pom.xml
+++ b/plugins/ha-planners/skip-heurestics/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-planner-skip-heurestics</artifactId>
-  <name>Apache CloudStack Plugin - Skip Heurestics Planner</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-planner-skip-heurestics</artifactId>
+    <name>Apache CloudStack Plugin - Skip Heurestics Planner</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/ha-planners/skip-heurestics/src/com/cloud/deploy/SkipHeuresticsPlanner.java b/plugins/ha-planners/skip-heurestics/src/main/java/com/cloud/deploy/SkipHeuresticsPlanner.java
similarity index 100%
rename from plugins/ha-planners/skip-heurestics/src/com/cloud/deploy/SkipHeuresticsPlanner.java
rename to plugins/ha-planners/skip-heurestics/src/main/java/com/cloud/deploy/SkipHeuresticsPlanner.java
diff --git a/plugins/ha-planners/skip-heurestics/resources/META-INF/cloudstack/skip-heurestics/module.properties b/plugins/ha-planners/skip-heurestics/src/main/resources/META-INF/cloudstack/skip-heurestics/module.properties
similarity index 100%
rename from plugins/ha-planners/skip-heurestics/resources/META-INF/cloudstack/skip-heurestics/module.properties
rename to plugins/ha-planners/skip-heurestics/src/main/resources/META-INF/cloudstack/skip-heurestics/module.properties
diff --git a/plugins/ha-planners/skip-heurestics/resources/META-INF/cloudstack/skip-heurestics/spring-skip-heurestics-context.xml b/plugins/ha-planners/skip-heurestics/src/main/resources/META-INF/cloudstack/skip-heurestics/spring-skip-heurestics-context.xml
similarity index 100%
rename from plugins/ha-planners/skip-heurestics/resources/META-INF/cloudstack/skip-heurestics/spring-skip-heurestics-context.xml
rename to plugins/ha-planners/skip-heurestics/src/main/resources/META-INF/cloudstack/skip-heurestics/spring-skip-heurestics-context.xml
diff --git a/plugins/host-allocators/random/pom.xml b/plugins/host-allocators/random/pom.xml
index 55f31de..5b36ee9 100644
--- a/plugins/host-allocators/random/pom.xml
+++ b/plugins/host-allocators/random/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-host-allocator-random</artifactId>
-  <name>Apache CloudStack Plugin - Host Allocator Random</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-host-allocator-random</artifactId>
+    <name>Apache CloudStack Plugin - Host Allocator Random</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/host-allocators/random/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java b/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java
similarity index 100%
rename from plugins/host-allocators/random/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java
rename to plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java
diff --git a/plugins/host-allocators/random/resources/META-INF/cloudstack/host-allocator-random/module.properties b/plugins/host-allocators/random/src/main/resources/META-INF/cloudstack/host-allocator-random/module.properties
similarity index 100%
rename from plugins/host-allocators/random/resources/META-INF/cloudstack/host-allocator-random/module.properties
rename to plugins/host-allocators/random/src/main/resources/META-INF/cloudstack/host-allocator-random/module.properties
diff --git a/plugins/host-allocators/random/resources/META-INF/cloudstack/host-allocator-random/spring-host-allocator-random-context.xml b/plugins/host-allocators/random/src/main/resources/META-INF/cloudstack/host-allocator-random/spring-host-allocator-random-context.xml
similarity index 100%
rename from plugins/host-allocators/random/resources/META-INF/cloudstack/host-allocator-random/spring-host-allocator-random-context.xml
rename to plugins/host-allocators/random/src/main/resources/META-INF/cloudstack/host-allocator-random/spring-host-allocator-random-context.xml
diff --git a/plugins/hypervisors/baremetal/pom.xml b/plugins/hypervisors/baremetal/pom.xml
index 7a9b6c4..34c3b4e 100755
--- a/plugins/hypervisors/baremetal/pom.xml
+++ b/plugins/hypervisors/baremetal/pom.xml
@@ -1,37 +1,36 @@
 <!--

   Licensed to the Apache Software Foundation (ASF) under one

-  or more contributor license agreements. See the NOTICE file

+  or more contributor license agreements.  See the NOTICE file

   distributed with this work for additional information

-  regarding copyright ownership. The ASF licenses this file

+  regarding copyright ownership.  The ASF licenses this file

   to you under the Apache License, Version 2.0 (the

   "License"); you may not use this file except in compliance

-  with the License. You may obtain a copy of the License at

+  with the License.  You may obtain a copy of the License at

 

-  http://www.apache.org/licenses/LICENSE-2.0

+    http://www.apache.org/licenses/LICENSE-2.0

 

   Unless required by applicable law or agreed to in writing,

   software distributed under the License is distributed on an

   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-  KIND, either express or implied. See the License for the

+  KIND, either express or implied.  See the License for the

   specific language governing permissions and limitations

   under the License.

 -->

-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

-  <modelVersion>4.0.0</modelVersion>

-  <parent>

-    <groupId>org.apache.cloudstack</groupId>

-    <artifactId>cloudstack-plugins</artifactId>

-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>

-  </parent>

-  <artifactId>cloud-plugin-hypervisor-baremetal</artifactId>

-  <name>Apache CloudStack Plugin - Hypervisor Baremetal</name>

-  <dependencies>

-      <dependency>

-        <groupId>commons-lang</groupId>

-        <artifactId>commons-lang</artifactId>

-        <version>2.6</version>

-    </dependency>

-   </dependencies>

-            

+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

+    <modelVersion>4.0.0</modelVersion>

+    <parent>

+        <groupId>org.apache.cloudstack</groupId>

+        <artifactId>cloudstack-plugins</artifactId>

+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>

+    </parent>

+    <artifactId>cloud-plugin-hypervisor-baremetal</artifactId>

+    <name>Apache CloudStack Plugin - Hypervisor Baremetal</name>

+    <dependencies>

+        <dependency>

+            <groupId>commons-lang</groupId>

+            <artifactId>commons-lang</artifactId>

+        </dependency>

+    </dependencies>

 </project>

diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalDhcpDao.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalDhcpDao.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalDhcpDao.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalDhcpDao.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalDhcpDaoImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalDhcpDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalDhcpDaoImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalDhcpDaoImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalDhcpVO.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalDhcpVO.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalDhcpVO.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalDhcpVO.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalPxeDao.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalPxeDao.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalPxeDao.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalPxeDao.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalPxeDaoImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalPxeDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalPxeDaoImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalPxeDaoImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalPxeVO.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalPxeVO.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalPxeVO.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalPxeVO.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalRctDao.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalRctDao.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalRctDao.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalRctDao.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalRctDaoImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalRctDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalRctDaoImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalRctDaoImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalRctVO.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalRctVO.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalRctVO.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/database/BaremetalRctVO.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalDiscoverer.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalDiscoverer.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalDiscoverer.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalDiscoverer.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalGuru.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalGuru.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalGuru.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalGuru.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalPlanner.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalPlanner.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalPlanner.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalPlanner.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalManager.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalManager.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalManagerImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalRct.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalRct.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalRct.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalRct.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalVlanManager.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalVlanManager.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalVlanManager.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalVlanManager.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalVlanManagerImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalVlanManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalVlanManagerImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/manager/BaremetalVlanManagerImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPxeServiceBase.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BareMetalPxeServiceBase.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPxeServiceBase.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BareMetalPxeServiceBase.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetaNetworkGuru.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetaNetworkGuru.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetaNetworkGuru.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetaNetworkGuru.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpElement.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpElement.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpElement.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpElement.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManager.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpManager.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManager.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpManager.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeElement.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeElement.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManager.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeManager.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManager.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeManager.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeResourceBase.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeResourceBase.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeResourceBase.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeResourceBase.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeResponse.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeResponse.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeResponse.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeResponse.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeService.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalPxeService.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalRctResponse.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalRctResponse.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalRctResponse.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalRctResponse.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalSwitchBackend.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalSwitchBackend.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalSwitchBackend.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalSwitchBackend.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalVirtualRouterCommands.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalVirtualRouterCommands.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalVirtualRouterCommands.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalVirtualRouterCommands.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalVlanStruct.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalVlanStruct.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalVlanStruct.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/BaremetalVlanStruct.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/Force10BaremetalSwitchBackend.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/SecurityGroupHttpClient.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/SecurityGroupHttpClient.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/SecurityGroupHttpClient.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/SecurityGroupHttpClient.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/schema/ObjectFactory.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/schema/ObjectFactory.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/schema/ObjectFactory.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/schema/ObjectFactory.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/schema/SecurityGroupRule.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/schema/SecurityGroupRule.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/schema/SecurityGroupRule.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/schema/SecurityGroupRule.java
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/schema/SecurityGroupVmRuleSet.java b/plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/schema/SecurityGroupVmRuleSet.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/schema/SecurityGroupVmRuleSet.java
rename to plugins/hypervisors/baremetal/src/main/java/com/cloud/baremetal/networkservice/schema/SecurityGroupVmRuleSet.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalHostCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalHostCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalHostCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalHostCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalKickStartPxeCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalKickStartPxeCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalKickStartPxeCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalKickStartPxeCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxePingServerCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalPxePingServerCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxePingServerCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalPxePingServerCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalRctCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalRctCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalRctCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/AddBaremetalRctCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/BaremetalProvisionDoneNotificationCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/BaremetalProvisionDoneNotificationCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/BaremetalProvisionDoneNotificationCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/BaremetalProvisionDoneNotificationCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/DeleteBaremetalRctCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/DeleteBaremetalRctCmd.java
similarity index 96%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/DeleteBaremetalRctCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/DeleteBaremetalRctCmd.java
index f1c8423..8157c75 100644
--- a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/DeleteBaremetalRctCmd.java
+++ b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/DeleteBaremetalRctCmd.java
@@ -64,8 +64,8 @@
             SuccessResponse response = new SuccessResponse(getCommandName());

             setResponseObject(response);

         } catch (Exception e) {

-            s_logger.warn(String.format("unable to add baremetal RCT[%s]", getId()), e);

-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());

+            s_logger.warn(String.format("unable to delete baremetal RCT[%s]", getId()), e);

+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage(), e);

         }

     }

 

diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/ListBaremetalDhcpCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/ListBaremetalDhcpCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/ListBaremetalDhcpCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/ListBaremetalDhcpCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/ListBaremetalPxeServersCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/ListBaremetalPxeServersCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/ListBaremetalPxeServersCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/ListBaremetalPxeServersCmd.java
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/ListBaremetalRctCmd.java b/plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/ListBaremetalRctCmd.java
similarity index 100%
rename from plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/ListBaremetalRctCmd.java
rename to plugins/hypervisors/baremetal/src/main/java/org/apache/cloudstack/api/ListBaremetalRctCmd.java
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-compute/module.properties b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-compute/module.properties
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-compute/module.properties
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-compute/spring-baremetal-compute-context.xml b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-compute/spring-baremetal-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-compute/spring-baremetal-compute-context.xml
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-compute/spring-baremetal-compute-context.xml
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-discoverer/module.properties b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-discoverer/module.properties
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-discoverer/module.properties
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-discoverer/module.properties
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-discoverer/spring-baremetal-discoverer-context.xml b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-discoverer/spring-baremetal-discoverer-context.xml
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-discoverer/spring-baremetal-discoverer-context.xml
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-discoverer/spring-baremetal-discoverer-context.xml
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-network/module.properties b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-network/module.properties
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-network/module.properties
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-network/module.properties
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-network/spring-baremetal-network-context.xml b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-network/spring-baremetal-network-context.xml
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-network/spring-baremetal-network-context.xml
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-network/spring-baremetal-network-context.xml
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-planner/module.properties b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-planner/module.properties
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-planner/module.properties
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-planner/module.properties
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-planner/spring-baremetal-planner-context.xml b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-planner/spring-baremetal-planner-context.xml
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-planner/spring-baremetal-planner-context.xml
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-planner/spring-baremetal-planner-context.xml
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-storage/module.properties b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-storage/module.properties
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-storage/module.properties
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-storage/module.properties
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-storage/spring-baremetal-storage-context.xml b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-storage/spring-baremetal-storage-context.xml
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/baremetal-storage/spring-baremetal-storage-context.xml
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/baremetal-storage/spring-baremetal-storage-context.xml
diff --git a/plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml b/plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml
rename to plugins/hypervisors/baremetal/src/main/resources/META-INF/cloudstack/core/spring-baremetal-core-context.xml
diff --git a/plugins/hypervisors/baremetal/resources/security_group_agent/cs-sgagent b/plugins/hypervisors/baremetal/src/main/resources/security_group_agent/cs-sgagent
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/security_group_agent/cs-sgagent
rename to plugins/hypervisors/baremetal/src/main/resources/security_group_agent/cs-sgagent
diff --git a/plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/__init__.py b/plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/__init__.py
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/__init__.py
rename to plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/__init__.py
diff --git a/plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/cs_sg_agent.py b/plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/cs_sg_agent.py
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/cs_sg_agent.py
rename to plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/cs_sg_agent.py
diff --git a/plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/sglib.py b/plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/sglib.py
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/sglib.py
rename to plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/sglib.py
diff --git a/plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/xmlobject.py b/plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/xmlobject.py
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/security_group_agent/security_group_agent/xmlobject.py
rename to plugins/hypervisors/baremetal/src/main/resources/security_group_agent/security_group_agent/xmlobject.py
diff --git a/plugins/hypervisors/baremetal/resources/security_group_agent/setup.py b/plugins/hypervisors/baremetal/src/main/resources/security_group_agent/setup.py
similarity index 100%
rename from plugins/hypervisors/baremetal/resources/security_group_agent/setup.py
rename to plugins/hypervisors/baremetal/src/main/resources/security_group_agent/setup.py
diff --git a/plugins/hypervisors/hyperv/pom.xml b/plugins/hypervisors/hyperv/pom.xml
index 7558cac..6f32f92 100644
--- a/plugins/hypervisors/hyperv/pom.xml
+++ b/plugins/hypervisors/hyperv/pom.xml
@@ -1,184 +1,173 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-hypervisor-hyperv</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor Hyper-V</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <properties>
-    <skipTests>false</skipTests>
-    <skipFunctionalTests>true</skipFunctionalTests>
-  </properties>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-agent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-      <classifier>tests</classifier>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-    <resources>
-      <resource>
-        <directory>resources</directory>
-      </resource>
-      <resource>
-        <directory>conf</directory>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <configuration>
-          <executable>java</executable>
-          <mainClass>com.cloud.agent.AgentShell</mainClass>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <!-- Exclude tests that require an agent, they appear under a different profile -->
-            <excludes>
-              <exclude>**/HypervDirectConnectResourceTest.*</exclude>
-            </excludes>
-            <includes>
-              <include>none</include>
-            </includes>
-            <skipTests>${skipTests}</skipTests>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy overwrite="true"
-                  todir="${basedir}/target/classes">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in"/>
-                  </fileset>
-                  <filterchain>
-                    <filterreader
-                      classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile"
-                        value="${project.basedir}/../../../${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <!-- Hyper-V plugin is built using mono -->
-    <profile>
-      <id>hyperv-agent</id>
-      <activation>
-        <property>
-          <name>hyperv-agent</name>
-        </property>
-      </activation>
-<!--      <dependencies>
-          <dependency>
-              <groupId>org.apache.cloudstack</groupId>
-              <artifactId>cloud-plugin-hypervisor-hyperv</artifactId>
-              <version>${project.version}</version>
-          </dependency>
-      </dependencies> --> 
-      <build>
-      <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>compile</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <executable>bash</executable>
-          <arguments>
-            <argument>./buildagent.sh</argument>
-            <argument>${skipTests}</argument>
-          </arguments>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-            <excludes>
-              <exclude>none</exclude>
-            </excludes>            
-            <includes>
-              <include>**/HypervDirectConnectResourceTest.java</include>
-            </includes>
-            <skipTests>${skipFunctionalTests}</skipTests>            
-        </configuration>
-      </plugin>
-      </plugins>
-      </build>
-    </profile>
-  </profiles>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-hypervisor-hyperv</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor Hyper-V</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <properties>
+        <skipTests>false</skipTests>
+        <skipFunctionalTests>true</skipFunctionalTests>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-agent</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <configuration>
+                    <executable>java</executable>
+                    <mainClass>com.cloud.agent.AgentShell</mainClass>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <!-- Exclude tests that require an agent, they appear under a different profile -->
+                    <excludes>
+                        <exclude>**/HypervDirectConnectResourceTest.*</exclude>
+                    </excludes>
+                    <includes>
+                        <include>none</include>
+                    </includes>
+                    <skipTests>${skipTests}</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-resource</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <copy overwrite="true" todir="${basedir}/target/classes">
+                                    <fileset dir="${basedir}/conf">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${project.basedir}/../../../${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <profiles>
+        <!-- Hyper-V plugin is built using mono -->
+        <profile>
+            <id>hyperv-agent</id>
+            <activation>
+                <property>
+                    <name>hyperv-agent</name>
+                </property>
+            </activation>
+<!--
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-hypervisor-hyperv</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+-->
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <phase>compile</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <executable>bash</executable>
+                            <arguments>
+                                <argument>./buildagent.sh</argument>
+                                <argument>${skipTests}</argument>
+                            </arguments>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <excludes>
+                                <exclude>none</exclude>
+                            </excludes>
+                            <includes>
+                                <include>**/HypervDirectConnectResourceTest.java</include>
+                            </includes>
+                            <skipTests>${skipFunctionalTests}</skipTests>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/ha/HypervInvestigator.java b/plugins/hypervisors/hyperv/src/main/java/com/cloud/ha/HypervInvestigator.java
similarity index 98%
rename from plugins/hypervisors/hyperv/src/com/cloud/ha/HypervInvestigator.java
rename to plugins/hypervisors/hyperv/src/main/java/com/cloud/ha/HypervInvestigator.java
index 222286f..774efc8 100644
--- a/plugins/hypervisors/hyperv/src/com/cloud/ha/HypervInvestigator.java
+++ b/plugins/hypervisors/hyperv/src/main/java/com/cloud/ha/HypervInvestigator.java
@@ -68,7 +68,7 @@
                     return answer.getResult() ? Status.Down : Status.Up;
                 }
             } catch (Exception e) {
-                s_logger.debug("Failed to send command to host: " + neighbor.getId());
+                s_logger.debug("Failed to send command to host: " + neighbor.getId(), e);
             }
         }
 
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/discoverer/HypervServerDiscoverer.java b/plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/discoverer/HypervServerDiscoverer.java
similarity index 100%
rename from plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/discoverer/HypervServerDiscoverer.java
rename to plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/discoverer/HypervServerDiscoverer.java
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/guru/HypervGuru.java b/plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/guru/HypervGuru.java
similarity index 100%
rename from plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/guru/HypervGuru.java
rename to plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/guru/HypervGuru.java
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/manager/HypervManager.java b/plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/manager/HypervManager.java
similarity index 100%
rename from plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/manager/HypervManager.java
rename to plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/manager/HypervManager.java
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/manager/HypervManagerImpl.java b/plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/manager/HypervManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/manager/HypervManagerImpl.java
rename to plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/manager/HypervManagerImpl.java
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java b/plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
similarity index 100%
rename from plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
rename to plugins/hypervisors/hyperv/src/main/java/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
diff --git a/plugins/hypervisors/hyperv/src/org/apache/cloudstack/storage/motion/HypervStorageMotionStrategy.java b/plugins/hypervisors/hyperv/src/main/java/org/apache/cloudstack/storage/motion/HypervStorageMotionStrategy.java
similarity index 100%
rename from plugins/hypervisors/hyperv/src/org/apache/cloudstack/storage/motion/HypervStorageMotionStrategy.java
rename to plugins/hypervisors/hyperv/src/main/java/org/apache/cloudstack/storage/motion/HypervStorageMotionStrategy.java
diff --git a/plugins/hypervisors/hyperv/resources/META-INF/cloudstack/core/spring-hyperv-core-context.xml b/plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/core/spring-hyperv-core-context.xml
similarity index 100%
rename from plugins/hypervisors/hyperv/resources/META-INF/cloudstack/core/spring-hyperv-core-context.xml
rename to plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/core/spring-hyperv-core-context.xml
diff --git a/plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-compute/module.properties b/plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-compute/module.properties
rename to plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-compute/module.properties
diff --git a/plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-compute/spring-hyperv-compute-context.xml b/plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-compute/spring-hyperv-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-compute/spring-hyperv-compute-context.xml
rename to plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-compute/spring-hyperv-compute-context.xml
diff --git a/plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-discoverer/module.properties b/plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-discoverer/module.properties
similarity index 100%
rename from plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-discoverer/module.properties
rename to plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-discoverer/module.properties
diff --git a/plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-discoverer/spring-hyperv-discoverer-context.xml b/plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-discoverer/spring-hyperv-discoverer-context.xml
similarity index 100%
rename from plugins/hypervisors/hyperv/resources/META-INF/cloudstack/hyperv-discoverer/spring-hyperv-discoverer-context.xml
rename to plugins/hypervisors/hyperv/src/main/resources/META-INF/cloudstack/hyperv-discoverer/spring-hyperv-discoverer-context.xml
diff --git a/plugins/hypervisors/hyperv/conf/agent.properties b/plugins/hypervisors/hyperv/src/main/resources/agent.properties
similarity index 100%
rename from plugins/hypervisors/hyperv/conf/agent.properties
rename to plugins/hypervisors/hyperv/src/main/resources/agent.properties
diff --git a/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java b/plugins/hypervisors/hyperv/src/test/java/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
similarity index 100%
rename from plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
rename to plugins/hypervisors/hyperv/src/test/java/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml
index cf72f4f..2ae17ea 100644
--- a/plugins/hypervisors/kvm/pom.xml
+++ b/plugins/hypervisors/kvm/pom.xml
@@ -1,91 +1,96 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor KVM</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${cs.commons-io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-agent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.libvirt</groupId>
-      <artifactId>libvirt</artifactId>
-      <version>${cs.libvirt-java.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-ovs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-configdrive</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.ceph</groupId>
-      <artifactId>rados</artifactId>
-      <version>${cs.rados-java.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>net.java.dev.jna</groupId>
-       <artifactId>jna</artifactId>
-       <version>${cs.jna.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-              <includeScope>runtime</includeScope>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>**/Qemu*.java</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor KVM</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-agent</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.libvirt</groupId>
+            <artifactId>libvirt</artifactId>
+            <version>${cs.libvirt-java.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-ovs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.cloudstack</groupId>
+          <artifactId>cloud-engine-storage-configdrive</artifactId>
+          <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ceph</groupId>
+            <artifactId>rados</artifactId>
+            <version>${cs.rados-java.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>net.java.dev.jna</groupId>
+            <artifactId>jna</artifactId>
+            <version>${cs.jna.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+                            <includeScope>runtime</includeScope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>**/Qemu*.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/ha/KVMInvestigator.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/ha/KVMInvestigator.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
similarity index 98%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
index 11b22c4..88e473d 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
@@ -298,11 +298,11 @@
         Script.runSimpleBashScript("test -d /sys/class/net/" + iface.getBrName() + "/brif/" + iface.getDevName() + " && brctl delif " + iface.getBrName() + " " + iface.getDevName());
     }
 
-    private String setVnetBrName(String pifName, String vnetId) {
+    private String generateVnetBrName(String pifName, String vnetId) {
         return "br" + pifName + "-" + vnetId;
     }
 
-    private String setVxnetBrName(String pifName, String vnetId) {
+    private String generateVxnetBrName(String pifName, String vnetId) {
         return "brvx-" + vnetId;
     }
 
@@ -317,9 +317,9 @@
         }
         String brName = "";
         if (protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) {
-            brName = setVxnetBrName(nic, vNetId);
+            brName = generateVxnetBrName(nic, vNetId);
         } else {
-            brName = setVnetBrName(nic, vNetId);
+            brName = generateVnetBrName(nic, vNetId);
         }
         createVnet(vNetId, nic, brName, protocol);
         return brName;
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java
similarity index 98%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java
index 8e73d85..5f21b96 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java
@@ -168,12 +168,12 @@
             }
         }
         String brName = "";
-        brName = setVnetBrName(nic, vNetId);
+        brName = generateVnetBrName(nic, vNetId);
         createVnet(vNetId, nic, brName, protocol);
         return brName;
     }
 
-    private String setVnetBrName(String pifName, String vnetId) {
+    private String generateVnetBrName(String pifName, String vnetId) {
         return "br" + pifName + "-" + vnetId;
     }
 
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAChecker.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAChecker.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAChecker.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAChecker.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAVMActivityChecker.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAVMActivityChecker.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAVMActivityChecker.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAVMActivityChecker.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtCapXMLParser.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtCapXMLParser.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtCapXMLParser.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtCapXMLParser.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
similarity index 99%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 8a94b05..ed87974 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -277,7 +277,6 @@
     protected int _rngRateBytes = 2048;
     private File _qemuSocketsPath;
     private final String _qemuGuestAgentSocketName = "org.qemu.guest_agent.0";
-    private long _totalMemory;
     protected WatchDogAction _watchDogAction = WatchDogAction.NONE;
     protected WatchDogModel _watchDogModel = WatchDogModel.I6300ESB;
 
@@ -295,8 +294,6 @@
         s_powerStatesTable.put(DomainState.VIR_DOMAIN_SHUTDOWN, PowerState.PowerOff);
     }
 
-    protected List<String> _vmsKilled = new ArrayList<String>();
-
     private VirtualRoutingResource _virtRouterResource;
 
     private String _pingTestPath;
@@ -307,7 +304,6 @@
 
     private long _dom0OvercommitMem;
 
-    protected boolean _disconnected = true;
     protected int _cmdsTimeout;
     protected int _stopTimeout;
     protected CPUStat _cpuStat = new CPUStat();
@@ -2347,7 +2343,10 @@
                     disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase()));
                 }
             }
-
+            if (vm.getDevices() == null) {
+                s_logger.error("There is no devices for" + vm);
+                throw new RuntimeException("There is no devices for" + vm);
+            }
             vm.getDevices().addDevice(disk);
         }
 
@@ -2401,7 +2400,10 @@
                         + ") is " + nic.getType() + " traffic type. So, vsp-vr-ip " + vrIp + " is set in the metadata");
             }
         }
-
+        if (vm.getDevices() == null) {
+            s_logger.error("LibvirtVMDef object get devices with null result");
+            throw new InternalErrorException("LibvirtVMDef object get devices with null result");
+        }
         vm.getDevices().addDevice(getVifDriver(nic.getType(), nic.getName()).plug(nic, vm.getPlatformEmulator(), nicAdapter));
     }
 
@@ -2600,7 +2602,6 @@
     public StartupCommand[] initialize() {
 
         final List<Object> info = getHostInfo();
-        _totalMemory = (Long)info.get(2);
 
         final StartupRoutingCommand cmd =
                 new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), _hypervisorType,
@@ -3789,10 +3790,6 @@
         }
     }
 
-    public long getTotalMemory() {
-        return _totalMemory;
-    }
-
     public String getHostDistro() {
         return _hostDistro;
     }
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtNetworkDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtNetworkDef.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtNetworkDef.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtNetworkDef.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtSecretDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtSecretDef.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtSecretDef.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtSecretDef.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDef.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDef.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDef.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolXMLParser.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolXMLParser.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolXMLParser.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolXMLParser.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeDef.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeXMLParser.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeXMLParser.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeXMLParser.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtStorageVolumeXMLParser.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/MigrateKVMAsync.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/MigrateKVMAsync.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/MigrateKVMAsync.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/MigrateKVMAsync.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriver.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriver.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriver.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtAttachIsoCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtAttachIsoCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtAttachIsoCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtAttachIsoCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckConsoleProxyLoadCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckConsoleProxyLoadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckConsoleProxyLoadCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckConsoleProxyLoadCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckHealthCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckHealthCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckHealthCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckHealthCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckNetworkCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckNetworkCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckNetworkCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckNetworkCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckOnHostCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckOnHostCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckOnHostCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckOnHostCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckSshCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckSshCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckSshCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckSshCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckUrlCommand.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckUrlCommand.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckUrlCommand.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckUrlCommand.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVMActivityOnStoragePoolCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVMActivityOnStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVMActivityOnStoragePoolCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVMActivityOnStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVirtualMachineCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVirtualMachineCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVirtualMachineCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVirtualMachineCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCleanupNetworkRulesCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCleanupNetworkRulesCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCleanupNetworkRulesCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCleanupNetworkRulesCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConsoleProxyLoadCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConsoleProxyLoadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConsoleProxyLoadCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConsoleProxyLoadCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCopyVolumeCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCopyVolumeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCopyVolumeCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCopyVolumeCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromVolumeCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromVolumeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromVolumeCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreatePrivateTemplateFromVolumeCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateStoragePoolCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateStoragePoolCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVMSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVolumeFromSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVolumeFromSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVolumeFromSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCreateVolumeFromSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteStoragePoolCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteStoragePoolCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteVMSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDeleteVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDestroyCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDestroyCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDestroyCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtDestroyCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetHostStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetHostStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetHostStatsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetHostStatsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetStorageStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetStorageStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetStorageStatsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetStorageStatsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmDiskStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmDiskStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmDiskStatsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmDiskStatsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmNetworkStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmNetworkStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmNetworkStatsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmNetworkStatsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVncPortCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVncPortCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVncPortCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVncPortCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVolumeStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVolumeStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVolumeStatsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVolumeStatsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtHandleConfigDriveCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMaintainCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMaintainCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMaintainCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMaintainCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtManageSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtManageSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtManageSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtManageSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateVolumeCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateVolumeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateVolumeCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateVolumeCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifySshKeysCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifySshKeysCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifySshKeysCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifySshKeysCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyStoragePoolCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyStoragePoolCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyTargetsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyTargetsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyTargetsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtModifyTargetsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesSystemVmCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesSystemVmCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesSystemVmCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesSystemVmCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesVmSecondaryIpCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesVmSecondaryIpCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesVmSecondaryIpCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkRulesVmSecondaryIpCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkUsageCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkUsageCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkUsageCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkUsageCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsCreateTunnelCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsCreateTunnelCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsCreateTunnelCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsCreateTunnelCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyBridgeCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyBridgeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyBridgeCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyBridgeCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyTunnelCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyTunnelCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyTunnelCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsDestroyTunnelCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsFetchInterfaceCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsFetchInterfaceCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsFetchInterfaceCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsFetchInterfaceCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsSetupBridgeCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsSetupBridgeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsSetupBridgeCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsSetupBridgeCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcPhysicalTopologyConfigCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcPhysicalTopologyConfigCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcPhysicalTopologyConfigCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcPhysicalTopologyConfigCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcRoutingPolicyConfigCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcRoutingPolicyConfigCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcRoutingPolicyConfigCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtOvsVpcRoutingPolicyConfigCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPingTestCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPingTestCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPingTestCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPingTestCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPlugNicCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPlugNicCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPlugNicCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPlugNicCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPostCertificateRenewalCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPostCertificateRenewalCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPostCertificateRenewalCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPostCertificateRenewalCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrepareForMigrationCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrepareForMigrationCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrepareForMigrationCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrepareForMigrationCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrimaryStorageDownloadCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrimaryStorageDownloadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrimaryStorageDownloadCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPrimaryStorageDownloadCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPvlanSetupCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPvlanSetupCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPvlanSetupCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPvlanSetupCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootRouterCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootRouterCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootRouterCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRebootRouterCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRequestWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRequestWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRequestWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRequestWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtResizeVolumeCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtResizeVolumeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtResizeVolumeCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtResizeVolumeCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreVMSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertToVMSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertToVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertToVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRevertToVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSecurityGroupRulesCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSecurityGroupRulesCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSecurityGroupRulesCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSecurityGroupRulesCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSetHostParamsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSetHostParamsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSetHostParamsCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtSetHostParamsCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStartCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStartCommandWrapper.java
similarity index 84%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStartCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStartCommandWrapper.java
index 5a75f07..fd5f2fa 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStartCommandWrapper.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStartCommandWrapper.java
@@ -24,7 +24,6 @@
 
 import org.apache.log4j.Logger;
 import org.libvirt.Connect;
-import org.libvirt.Domain;
 import org.libvirt.DomainInfo.DomainState;
 import org.libvirt.LibvirtException;
 
@@ -65,13 +64,6 @@
             vm = libvirtComputingResource.createVMFromSpec(vmSpec);
             conn = libvirtUtilitiesHelper.getConnectionByType(vm.getHvsType());
 
-            Long remainingMem = getFreeMemory(conn, libvirtComputingResource);
-            if (remainingMem == null){
-                return new StartAnswer(command, "failed to get free memory");
-            } else if (remainingMem < vmSpec.getMinRam()) {
-                return new StartAnswer(command, "Not enough memory on the host, remaining: " + remainingMem + ", asking: " + vmSpec.getMinRam());
-            }
-
             final NicTO[] nics = vmSpec.getNics();
 
             for (final NicTO nic : nics) {
@@ -160,22 +152,4 @@
             }
         }
     }
-
-    private Long getFreeMemory(final Connect conn, final LibvirtComputingResource libvirtComputingResource){
-        try {
-            long allocatedMem = 0;
-            int[] ids = conn.listDomains();
-            for(int id :ids) {
-                Domain dm = conn.domainLookupByID(id);
-                allocatedMem += dm.getMaxMemory() * 1024L;
-                s_logger.debug("vm: " + dm.getName() + " mem: " + dm.getMaxMemory() * 1024L);
-            }
-            Long remainingMem = libvirtComputingResource.getTotalMemory() - allocatedMem;
-            s_logger.debug("remaining mem" + remainingMem);
-            return remainingMem;
-        } catch (Exception e) {
-            s_logger.debug("failed to get free memory", e);
-            return null;
-        }
-    }
 }
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStopCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStopCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStopCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStopCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStorageSubSystemCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStorageSubSystemCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStorageSubSystemCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStorageSubSystemCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUnPlugNicCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUnPlugNicCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUnPlugNicCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUnPlugNicCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpdateHostPasswordCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpdateHostPasswordCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpdateHostPasswordCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpdateHostPasswordCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpgradeSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpgradeSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpgradeSnapshotCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUpgradeSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtWatchConsoleProxyLoadCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtWatchConsoleProxyLoadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtWatchConsoleProxyLoadCommandWrapper.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtWatchConsoleProxyLoadCommandWrapper.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStorageAdaptor.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/IscsiAdmStoragePool.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMPhysicalDisk.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
similarity index 99%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 36be2d3..e7e0ea2 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -1309,10 +1309,10 @@
 
             return new DettachAnswer(disk);
         } catch (final LibvirtException e) {
-            s_logger.debug("Failed to attach volume: " + vol.getPath() + ", due to ", e);
+            s_logger.debug("Failed to detach volume: " + vol.getPath() + ", due to ", e);
             return new DettachAnswer(e.toString());
         } catch (final InternalErrorException e) {
-            s_logger.debug("Failed to attach volume: " + vol.getPath() + ", due to ", e);
+            s_logger.debug("Failed to detach volume: " + vol.getPath() + ", due to ", e);
             return new DettachAnswer(e.toString());
         }
     }
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageResource.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageResource.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageResource.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMVirtualDisk.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMVirtualDisk.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMVirtualDisk.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMVirtualDisk.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
similarity index 99%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index 24cf031..7500540 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -502,6 +502,9 @@
                     s_logger.debug("Checking path of existing pool " + poolname + " against pool we want to create");
                     StoragePool p = conn.storagePoolLookupByName(poolname);
                     LibvirtStoragePoolDef pdef = getStoragePoolDef(conn, p);
+                    if (pdef == null) {
+                        throw new CloudRuntimeException("Unable to parse the storage pool definition for storage pool " + poolname);
+                    }
 
                     String targetPath = pdef.getTargetPath();
                     if (targetPath != null && targetPath.equals(path)) {
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/ManagedNfsStorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ManagedNfsStorageAdaptor.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/ManagedNfsStorageAdaptor.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ManagedNfsStorageAdaptor.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptorInfo.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/StorageAdaptorInfo.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptorInfo.java
rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/StorageAdaptorInfo.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/kvm/ha/KVMHAConfig.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAConfig.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/kvm/ha/KVMHAConfig.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAConfig.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/kvm/ha/KVMHAProvider.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/kvm/ha/KVMHAProvider.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHAProvider.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/kvm/ha/KVMHostActivityChecker.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHostActivityChecker.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/kvm/ha/KVMHostActivityChecker.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/kvm/ha/KVMHostActivityChecker.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/CPUStat.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/CPUStat.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/CPUStat.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/CPUStat.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/MemStat.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/MemStat.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/MemStat.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/MemStat.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImg.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImg.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgException.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImgException.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgException.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImgException.java
diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgFile.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImgFile.java
similarity index 100%
rename from plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/qemu/QemuImgFile.java
rename to plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImgFile.java
diff --git a/plugins/hypervisors/kvm/resources/META-INF/cloudstack/kvm-compute/module.properties b/plugins/hypervisors/kvm/src/main/resources/META-INF/cloudstack/kvm-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/kvm/resources/META-INF/cloudstack/kvm-compute/module.properties
rename to plugins/hypervisors/kvm/src/main/resources/META-INF/cloudstack/kvm-compute/module.properties
diff --git a/plugins/hypervisors/kvm/resources/META-INF/cloudstack/kvm-compute/spring-kvm-compute-context.xml b/plugins/hypervisors/kvm/src/main/resources/META-INF/cloudstack/kvm-compute/spring-kvm-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/kvm/resources/META-INF/cloudstack/kvm-compute/spring-kvm-compute-context.xml
rename to plugins/hypervisors/kvm/src/main/resources/META-INF/cloudstack/kvm-compute/spring-kvm-compute-context.xml
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
similarity index 99%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index be191f5e..adadc1f 100644
--- a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -5038,7 +5038,6 @@
             when(conn.domainLookupByID(vmId)).thenReturn(dm);
             when(dm.getMaxMemory()).thenReturn(1024L);
             when(dm.getName()).thenReturn(vmName);
-            when(libvirtComputingResource.getTotalMemory()).thenReturn(2048*1024L);
             doNothing().when(libvirtComputingResource).createVbd(conn, vmSpec, vmName, vmDef);
         } catch (final LibvirtException e) {
             fail(e.getMessage());
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtSecretDefTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtSecretDefTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtSecretDefTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtSecretDefTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDefTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDefTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDefTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtStoragePoolDefTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapperTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapperTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapperTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapperTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapperTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapperTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapperTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtNetworkElementCommandWrapperTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapperTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapperTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapperTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapperTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelperTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelperTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelperTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtUtilitiesHelperTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/storage/KVMPhysicalDiskTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/KVMPhysicalDiskTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/storage/KVMPhysicalDiskTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/KVMPhysicalDiskTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/storage/KVMStorageProcessorTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessorTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/storage/KVMStorageProcessorTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessorTest.java
diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/storage/LibvirtStoragePoolTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/LibvirtStoragePoolTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/storage/LibvirtStoragePoolTest.java
rename to plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/LibvirtStoragePoolTest.java
diff --git a/plugins/hypervisors/kvm/test/org/apache/cloudstack/kvm/ha/KVMHostHATest.java b/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/kvm/ha/KVMHostHATest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/org/apache/cloudstack/kvm/ha/KVMHostHATest.java
rename to plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/kvm/ha/KVMHostHATest.java
diff --git a/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/linux/MemStatTest.java b/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/linux/MemStatTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/linux/MemStatTest.java
rename to plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/linux/MemStatTest.java
diff --git a/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java b/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java
rename to plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/qemu/QemuImgFileTest.java
diff --git a/plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgTest.java b/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/qemu/QemuImgTest.java
similarity index 100%
rename from plugins/hypervisors/kvm/test/org/apache/cloudstack/utils/qemu/QemuImgTest.java
rename to plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/qemu/QemuImgTest.java
diff --git a/plugins/hypervisors/ovm/pom.xml b/plugins/hypervisors/ovm/pom.xml
index 7850273..e0ca74b 100644
--- a/plugins/hypervisors/ovm/pom.xml
+++ b/plugins/hypervisors/ovm/pom.xml
@@ -1,36 +1,37 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-hypervisor-ovm</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor OracleVM</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>net.java.dev.vcc.thirdparty</groupId>
-      <artifactId>xen-api</artifactId>
-      <version>${cs.xapi.version}</version>
-    </dependency>    
-  </dependencies>  
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-hypervisor-ovm</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor OracleVM</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>net.java.dev.vcc.thirdparty</groupId>
+            <artifactId>xen-api</artifactId>
+            <version>${cs.xapi.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmDiscoverer.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmDiscoverer.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmFencer.java
similarity index 97%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmFencer.java
index e671a36..6a247d9 100644
--- a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
+++ b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmFencer.java
@@ -94,12 +94,12 @@
                 answer = (FenceAnswer)_agentMgr.send(h.getId(), fence);
             } catch (AgentUnavailableException e) {
                 if (s_logger.isDebugEnabled()) {
-                    s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+                    s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable", e);
                 }
                 continue;
             } catch (OperationTimedoutException e) {
                 if (s_logger.isDebugEnabled()) {
-                    s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+                    s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable", e);
                 }
                 continue;
             }
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmGuru.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmGuru.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmGuru.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmGuru.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmHelper.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmHelper.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmHelper.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmHelper.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmResourceBase.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/hypervisor/OvmResourceBase.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Coder.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/Coder.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/Coder.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/Coder.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Connection.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/Connection.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/Connection.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/Connection.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmBridge.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmBridge.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmBridge.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmBridge.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmDisk.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmDisk.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmDisk.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmDisk.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmHost.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmHost.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmHost.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmHost.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmObject.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmObject.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmObject.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmObject.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmSecurityGroup.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmSecurityGroup.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmSecurityGroup.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmSecurityGroup.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmStoragePool.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmStoragePool.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmStoragePool.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmStoragePool.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVif.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVif.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVif.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVif.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVlan.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVlan.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVlan.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVlan.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVm.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVm.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVm.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVm.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVolume.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVolume.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/OvmVolume.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/OvmVolume.java
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java b/plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/Test.java
similarity index 100%
rename from plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java
rename to plugins/hypervisors/ovm/src/main/java/com/cloud/ovm/object/Test.java
diff --git a/plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-compute/module.properties b/plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-compute/module.properties
rename to plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-compute/module.properties
diff --git a/plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-compute/spring-ovm-compute-context.xml b/plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-compute/spring-ovm-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-compute/spring-ovm-compute-context.xml
rename to plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-compute/spring-ovm-compute-context.xml
diff --git a/plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-discoverer/module.properties b/plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-discoverer/module.properties
similarity index 100%
rename from plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-discoverer/module.properties
rename to plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-discoverer/module.properties
diff --git a/plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-discoverer/spring-ovm-discoverer-context.xml b/plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-discoverer/spring-ovm-discoverer-context.xml
similarity index 100%
rename from plugins/hypervisors/ovm/resources/META-INF/cloudstack/ovm-discoverer/spring-ovm-discoverer-context.xml
rename to plugins/hypervisors/ovm/src/main/resources/META-INF/cloudstack/ovm-discoverer/spring-ovm-discoverer-context.xml
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/ConfigFileOps.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/ConfigFileOps.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/ConfigFileOps.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/ConfigFileOps.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmCommonModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmCommonModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmCommonModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDiskModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmDiskModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDiskModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmDiskModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDispatcher.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmDispatcher.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmDispatcher.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmDispatcher.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmFaultConstants.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmFaultConstants.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmHaHeartBeatModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmHostModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmHostModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmHostModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmLoggerModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmLoggerModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmLoggerModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmLoggerModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmNetworkModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmNetworkModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmNetworkModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmNetworkModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmOCFS2Module.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmObjectModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmObjectModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmObjectModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmObjectModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmSecurityGroupModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVifModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmVifModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVifModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmVifModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVmModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmVmModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVmModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmVmModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVolumeModule.py b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmVolumeModule.py
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/OvmVolumeModule.py
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/OvmVolumeModule.py
diff --git a/plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/configureOvm.sh b/plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/configureOvm.sh
similarity index 100%
rename from plugins/hypervisors/ovm/scripts/vm/hypervisor/ovm/configureOvm.sh
rename to plugins/hypervisors/ovm/src/main/scripts/vm/hypervisor/ovm/configureOvm.sh
diff --git a/plugins/hypervisors/ovm3/pom.xml b/plugins/hypervisors/ovm3/pom.xml
index a0f3373..4e17741 100644
--- a/plugins/hypervisors/ovm3/pom.xml
+++ b/plugins/hypervisors/ovm3/pom.xml
@@ -1,89 +1,84 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-hypervisor-ovm3</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor OracleVM3</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.xmlrpc</groupId>
-      <artifactId>xmlrpc-client</artifactId>
-      <version>${cs.xmlrpc.version}</version>
-    </dependency>
-    <dependency>
-	<groupId>org.apache.xmlrpc</groupId>
-	<artifactId>xmlrpc-common</artifactId>
-	<version>${cs.xmlrpc.version}</version>
-    </dependency>
-    <dependency>
-	<groupId>org.apache.commons</groupId>
-	<artifactId>commons-lang3</artifactId>
-	<version>${cs.commons-lang3.version}</version>
-    </dependency>
-    <dependency>
-	<groupId>log4j</groupId>
-	<artifactId>log4j</artifactId>
-	<version>${cs.log4j.version}</version>
-    </dependency>
-  </dependencies>
-   <build>
-    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
-    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
-    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
-    <outputDirectory>${basedir}/target/classes</outputDirectory>
-    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
-    <resources>
-      <resource>
-        <directory>${basedir}/src/main/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>${basedir}/src/test/resources</directory>
-      </testResource>
-    </testResources>
-  </build>
-  <profiles>
-    <profile>
-      <id>integration</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-failsafe-plugin</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>integration-test</goal>
-                  <goal>verify</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-hypervisor-ovm3</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor OracleVM3</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.xmlrpc</groupId>
+            <artifactId>xmlrpc-client</artifactId>
+            <version>${cs.xmlrpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.xmlrpc</groupId>
+            <artifactId>xmlrpc-common</artifactId>
+            <version>${cs.xmlrpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>${cs.commons-lang3.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <configuration>
+                        <skipTests>true</skipTests>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+    <profiles>
+        <profile>
+            <id>integration</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java b/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java
index cfe249e..102478c 100644
--- a/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java
+++ b/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java
@@ -172,7 +172,7 @@
                     if (nodeListFor2.getLength() > 1) {
                         /* Do we need to figure out all the sub elements here and put them in a map? */
                     } else {
-                        String element = nodeListFor.item(index).getTextContent();
+                        String element = nodeListFor.item(index).getNodeValue();
                         myMap.put(rnode, (E) element);
                     }
                 }
@@ -193,8 +193,8 @@
             NodeList nodeList = (NodeList) xPathExpression.evaluate(xmlDocument,
                     XPathConstants.NODESET);
             for (int ind = 0; ind < nodeList.getLength(); ind++) {
-                if (!nodeList.item(ind).getTextContent().isEmpty()) {
-                    list.add("" + nodeList.item(ind).getTextContent());
+                if (!nodeList.item(ind).getNodeValue().isEmpty()) {
+                    list.add("" + nodeList.item(ind).getNodeValue());
                 } else {
                     list.add("" + nodeList.item(ind).getNodeValue());
                 }
@@ -213,7 +213,7 @@
             XPathExpression xPathExpression = xPath.compile(path);
             NodeList nodeList = (NodeList) xPathExpression.evaluate(xmlDocument,
                     XPathConstants.NODESET);
-            return nodeList.item(0).getTextContent();
+            return nodeList.item(0).getNodeValue();
         } catch (NullPointerException e) {
             LOGGER.info("Got no items back from parsing, returning null: " + e);
             return null;
diff --git a/plugins/hypervisors/ovm3/src/test/java/com/cloud/hypervisor/ovm3/resources/Ovm3HypervisorResourceTest.java b/plugins/hypervisors/ovm3/src/test/java/com/cloud/hypervisor/ovm3/resources/Ovm3HypervisorResourceTest.java
index cb02a23..f668cc6 100644
--- a/plugins/hypervisors/ovm3/src/test/java/com/cloud/hypervisor/ovm3/resources/Ovm3HypervisorResourceTest.java
+++ b/plugins/hypervisors/ovm3/src/test/java/com/cloud/hypervisor/ovm3/resources/Ovm3HypervisorResourceTest.java
@@ -313,9 +313,6 @@
         boolean enableHA = true;
         boolean limitCpuUse = false;
         String vncPassword = "gobbeldygoo";
-        // public StartCommand(VirtualMachineTO vm, Host host, boolean
-        // executeInSequence) {
-        // ./api/src/com/cloud/agent/api/to/VirtualMachineTO.java
         VirtualMachineTO vmspec = new VirtualMachineTO(id, instanceName, type,
                 cpus, speed, minRam, maxRam, bootloader, os, enableHA,
                 limitCpuUse, vncPassword);
diff --git a/plugins/hypervisors/simulator/pom.xml b/plugins/hypervisors/simulator/pom.xml
index 2cd622a..ac99561 100644
--- a/plugins/hypervisors/simulator/pom.xml
+++ b/plugins/hypervisors/simulator/pom.xml
@@ -1,37 +1,33 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.cloudstack</groupId>
         <artifactId>cloudstack-plugins</artifactId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <version>4.12.0.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <artifactId>cloud-plugin-hypervisor-simulator</artifactId>
     <name>Apache CloudStack Plugin - Hypervisor Simulator</name>
     <description>Simulator Hypervisor for Cloudstack</description>
-    <build>
-        <defaultGoal>install</defaultGoal>
-        <sourceDirectory>src</sourceDirectory>
-    </build>
     <dependencies>
         <dependency>
             <groupId>org.apache.cloudstack</groupId>
@@ -66,7 +62,6 @@
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <version>${cs.guava.version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManager.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockAgentManager.java
similarity index 95%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManager.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockAgentManager.java
index 3a31550..6a9e707 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManager.java
+++ b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockAgentManager.java
@@ -33,6 +33,7 @@
 import com.cloud.resource.AgentResourceBase;
 import com.cloud.simulator.MockHost;
 import com.cloud.utils.component.Manager;
+import org.apache.cloudstack.diagnostics.DiagnosticsCommand;
 
 public interface MockAgentManager extends Manager {
     public static final long DEFAULT_HOST_MEM_SIZE = 8 * 1024 * 1024 * 1024L; // 8G, unit of Mbytes
@@ -64,4 +65,6 @@
     Answer maintain(MaintainCommand cmd);
 
     Answer checkNetworkCommand(CheckNetworkCommand cmd);
+
+    Answer runDiagnostics(DiagnosticsCommand cmd);
 }
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockAgentManagerImpl.java
similarity index 96%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockAgentManagerImpl.java
index 9d1e407..7af2827 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java
+++ b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockAgentManagerImpl.java
@@ -16,29 +16,6 @@
 // under the License.
 package com.cloud.agent.manager;
 
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.PatternSyntaxException;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.ca.SetupCertificateAnswer;
-import org.apache.cloudstack.ca.SetupCertificateCommand;
-import org.apache.cloudstack.ca.SetupKeyStoreCommand;
-import org.apache.cloudstack.ca.SetupKeystoreAnswer;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.CheckHealthCommand;
@@ -49,6 +26,7 @@
 import com.cloud.agent.api.HostStatsEntry;
 import com.cloud.agent.api.MaintainAnswer;
 import com.cloud.agent.api.PingTestCommand;
+import com.cloud.agent.api.routing.NetworkElementCommand;
 import com.cloud.api.commands.SimulatorAddSecondaryAgent;
 import com.cloud.dc.dao.HostPodDao;
 import com.cloud.exception.DiscoveryException;
@@ -73,6 +51,29 @@
 import com.cloud.utils.db.TransactionLegacy;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils;
+import org.apache.cloudstack.ca.SetupCertificateAnswer;
+import org.apache.cloudstack.ca.SetupCertificateCommand;
+import org.apache.cloudstack.ca.SetupKeyStoreCommand;
+import org.apache.cloudstack.ca.SetupKeystoreAnswer;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.diagnostics.DiagnosticsAnswer;
+import org.apache.cloudstack.diagnostics.DiagnosticsCommand;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.PatternSyntaxException;
 
 @Component
 public class MockAgentManagerImpl extends ManagerBase implements MockAgentManager {
@@ -481,6 +482,7 @@
         return new SetupCertificateAnswer(true);
     }
 
+
     @Override
     public boolean start() {
         for (Discoverer discoverer : discoverers) {
@@ -520,6 +522,14 @@
         return new CheckNetworkAnswer(cmd, true, "Network Setup check by names is done");
     }
 
+    @Override
+    public Answer runDiagnostics(final DiagnosticsCommand cmd) {
+        final String vmInstance = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
+        final String[] args = cmd.getSrciptArguments().split(" ");
+        final String mockAnswer = String.format("%s %s executed in %s &&  && 0", args[0].toUpperCase(), args[1], vmInstance);
+        return new DiagnosticsAnswer(cmd, true, mockAnswer);
+    }
+
     public List<Discoverer> getDiscoverers() {
         return discoverers;
     }
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockNetworkManager.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockNetworkManager.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockNetworkManager.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockNetworkManager.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockNetworkManagerImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockNetworkManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockNetworkManagerImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockNetworkManagerImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManager.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockStorageManager.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManager.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockStorageManager.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockStorageManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockStorageManagerImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManager.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManager.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManager.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManager.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManagerImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorInfo.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorInfo.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorInfo.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorInfo.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManager.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorManager.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManager.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorManager.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorManagerImpl.java
similarity index 98%
rename from plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorManagerImpl.java
index 7297773..29ad3cc 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java
+++ b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/SimulatorManagerImpl.java
@@ -26,6 +26,7 @@
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import org.apache.cloudstack.diagnostics.DiagnosticsCommand;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -293,7 +294,9 @@
                 } else if (cmd instanceof PingTestCommand) {
                     answer = _mockAgentMgr.pingTest((PingTestCommand)cmd);
                 } else if (cmd instanceof SetupKeyStoreCommand) {
-                    answer = _mockAgentMgr.setupKeyStore((SetupKeyStoreCommand)cmd);
+                    answer = _mockAgentMgr.setupKeyStore((SetupKeyStoreCommand) cmd);
+                }else if (cmd instanceof DiagnosticsCommand) {
+                    answer = _mockAgentMgr.runDiagnostics((DiagnosticsCommand)cmd);
                 } else if (cmd instanceof SetupCertificateCommand) {
                     answer = _mockAgentMgr.setupCertificate((SetupCertificateCommand)cmd);
                 } else if (cmd instanceof PrepareForMigrationCommand) {
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/CleanupSimulatorMockCmd.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/CleanupSimulatorMockCmd.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/commands/CleanupSimulatorMockCmd.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/CleanupSimulatorMockCmd.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulatorCmd.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/ConfigureSimulatorCmd.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulatorCmd.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/ConfigureSimulatorCmd.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulatorHAProviderState.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/ConfigureSimulatorHAProviderState.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulatorHAProviderState.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/ConfigureSimulatorHAProviderState.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ListSimulatorHAStateTransitions.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/ListSimulatorHAStateTransitions.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/commands/ListSimulatorHAStateTransitions.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/ListSimulatorHAStateTransitions.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/QuerySimulatorMockCmd.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/QuerySimulatorMockCmd.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/commands/QuerySimulatorMockCmd.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/QuerySimulatorMockCmd.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/SimulatorAddSecondaryAgent.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/SimulatorAddSecondaryAgent.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/commands/SimulatorAddSecondaryAgent.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/commands/SimulatorAddSecondaryAgent.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/response/MockResponse.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/response/MockResponse.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/response/MockResponse.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/response/MockResponse.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/response/SimulatorHAStateResponse.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/api/response/SimulatorHAStateResponse.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/api/response/SimulatorHAStateResponse.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/api/response/SimulatorHAStateResponse.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/ha/SimulatorFencer.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/ha/SimulatorFencer.java
similarity index 97%
rename from plugins/hypervisors/simulator/src/com/cloud/ha/SimulatorFencer.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/ha/SimulatorFencer.java
index 86c2871..c776edf 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/ha/SimulatorFencer.java
+++ b/plugins/hypervisors/simulator/src/main/java/com/cloud/ha/SimulatorFencer.java
@@ -90,12 +90,12 @@
                     answer = (FenceAnswer)_agentMgr.send(h.getId(), fence);
                 } catch (AgentUnavailableException e) {
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable", e);
                     }
                     continue;
                 } catch (OperationTimedoutException e) {
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable", e);
                     }
                     continue;
                 }
diff --git a/plugins/hypervisors/simulator/src/com/cloud/ha/SimulatorInvestigator.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/ha/SimulatorInvestigator.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/ha/SimulatorInvestigator.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/ha/SimulatorInvestigator.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentResourceBase.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentResourceBase.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/resource/AgentResourceBase.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentResourceBase.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentRoutingResource.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentRoutingResource.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentStorageResource.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentStorageResource.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/resource/AgentStorageResource.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentStorageResource.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorDiscoverer.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorDiscoverer.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorSecondaryDiscoverer.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorSecondaryDiscoverer.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorStorageProcessor.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorStorageProcessor.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorStorageProcessor.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorStorageProcessor.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockConfigurationVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockConfigurationVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockConfigurationVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockConfigurationVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHost.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockHost.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockHost.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockHost.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHostVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockHostVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockHostVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockHostVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecStorageVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockSecStorageVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecStorageVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockSecStorageVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecurityRulesVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockSecurityRulesVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecurityRulesVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockSecurityRulesVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockStoragePoolVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockStoragePoolVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockStoragePoolVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockStoragePoolVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVMVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockVMVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockVMVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockVMVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVm.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockVm.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockVm.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockVm.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVolumeVO.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockVolumeVO.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/MockVolumeVO.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/MockVolumeVO.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/SimulatorGuru.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/SimulatorGuru.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/SimulatorRuntimeException.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/SimulatorRuntimeException.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockConfigurationDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockConfigurationDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockConfigurationDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockConfigurationDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockHostDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockHostDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockHostDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockHostDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecStorageDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecStorageDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecStorageDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecStorageDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecurityRulesDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecurityRulesDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockStoragePoolDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockStoragePoolDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVMDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVMDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVMDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVMDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDao.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVolumeDao.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDao.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVolumeDao.java
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDaoImpl.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVolumeDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDaoImpl.java
rename to plugins/hypervisors/simulator/src/main/java/com/cloud/simulator/dao/MockVolumeDaoImpl.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/ha/SimulatorHAProvider.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/ha/SimulatorHAProvider.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/ha/SimulatorHAProvider.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/ha/SimulatorHAProvider.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/ha/SimulatorHAState.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/ha/SimulatorHAState.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/ha/SimulatorHAState.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/ha/SimulatorHAState.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/datastore/driver/SimulatorImageStoreDriverImpl.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/datastore/driver/SimulatorImageStoreDriverImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/datastore/driver/SimulatorImageStoreDriverImpl.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/datastore/driver/SimulatorImageStoreDriverImpl.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/datastore/lifecycle/SimulatorImageStoreLifeCycleImpl.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SimulatorImageStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/datastore/lifecycle/SimulatorImageStoreLifeCycleImpl.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SimulatorImageStoreLifeCycleImpl.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/datastore/provider/SimulatorImageStoreProviderImpl.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/datastore/provider/SimulatorImageStoreProviderImpl.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/datastore/provider/SimulatorImageStoreProviderImpl.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/datastore/provider/SimulatorImageStoreProviderImpl.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/motion/SimulatorDataMotionStrategy.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/motion/SimulatorDataMotionStrategy.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/motion/SimulatorDataMotionStrategy.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/motion/SimulatorDataMotionStrategy.java
diff --git a/plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/resource/SimulatorSecondaryStorageResource.java b/plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/resource/SimulatorSecondaryStorageResource.java
similarity index 100%
rename from plugins/hypervisors/simulator/src/org/apache/cloudstack/storage/resource/SimulatorSecondaryStorageResource.java
rename to plugins/hypervisors/simulator/src/main/java/org/apache/cloudstack/storage/resource/SimulatorSecondaryStorageResource.java
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/core/spring-simulator-core-context.xml b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/core/spring-simulator-core-context.xml
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/core/spring-simulator-core-context.xml
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/core/spring-simulator-core-context.xml
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-compute/module.properties b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-compute/module.properties
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-compute/module.properties
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-compute/spring-simulator-compute-context.xml b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-compute/spring-simulator-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-compute/spring-simulator-compute-context.xml
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-compute/spring-simulator-compute-context.xml
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-discoverer/module.properties b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-discoverer/module.properties
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-discoverer/module.properties
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-discoverer/module.properties
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-discoverer/spring-simulator-discover-context.xml b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-discoverer/spring-simulator-discover-context.xml
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-discoverer/spring-simulator-discover-context.xml
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-discoverer/spring-simulator-discover-context.xml
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-storage/module.properties b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-storage/module.properties
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-storage/module.properties
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-storage/module.properties
diff --git a/plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-storage/spring-simulator-storage-context.xml b/plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-storage/spring-simulator-storage-context.xml
similarity index 100%
rename from plugins/hypervisors/simulator/resources/META-INF/cloudstack/simulator-storage/spring-simulator-storage-context.xml
rename to plugins/hypervisors/simulator/src/main/resources/META-INF/cloudstack/simulator-storage/spring-simulator-storage-context.xml
diff --git a/plugins/hypervisors/ucs/pom.xml b/plugins/hypervisors/ucs/pom.xml
old mode 100755
new mode 100644
index af7deb4..fb7d1f6
--- a/plugins/hypervisors/ucs/pom.xml
+++ b/plugins/hypervisors/ucs/pom.xml
@@ -1,39 +1,44 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
-<project
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/xsd/maven-4.0.0.xsd"
-  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor UCS</name>
-  <url>http://maven.apache.org</url>
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <artifactId>cloud-plugin-hypervisor-ucs</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor UCS</name>
+    <url>http://maven.apache.org</url>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDao.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsBladeDao.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDao.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsBladeDao.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDaoImpl.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsBladeDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDaoImpl.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsBladeDaoImpl.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeVO.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsBladeVO.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeVO.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsBladeVO.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDao.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsManagerDao.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDao.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsManagerDao.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDaoImpl.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsManagerDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDaoImpl.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsManagerDaoImpl.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerVO.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsManagerVO.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerVO.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/database/UcsManagerVO.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/StringTemplate.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/StringTemplate.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/manager/StringTemplate.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/StringTemplate.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsCommands.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsCommands.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsCommands.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsCommands.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsHttpClient.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsHttpClient.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsHttpClient.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsHttpClient.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManager.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsManager.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManager.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsManager.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/manager/UcsManagerImpl.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/ComputeBlade.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/structure/ComputeBlade.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/structure/ComputeBlade.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/structure/ComputeBlade.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsCookie.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/structure/UcsCookie.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsCookie.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/structure/UcsCookie.java
diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsProfile.java b/plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/structure/UcsProfile.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsProfile.java
rename to plugins/hypervisors/ucs/src/main/java/com/cloud/ucs/structure/UcsProfile.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/AddUcsManagerCmd.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/AddUcsManagerCmd.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/AddUcsManagerCmd.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/AddUcsManagerCmd.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/AssociateUcsProfileToBladeCmd.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/AssociateUcsProfileToBladeCmd.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/AssociateUcsProfileToBladeCmd.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/AssociateUcsProfileToBladeCmd.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/DeleteUcsManagerCmd.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/DeleteUcsManagerCmd.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/DeleteUcsManagerCmd.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/DeleteUcsManagerCmd.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/ListUcsBladeCmd.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/ListUcsBladeCmd.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/ListUcsBladeCmd.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/ListUcsBladeCmd.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/ListUcsManagerCmd.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/ListUcsManagerCmd.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/ListUcsManagerCmd.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/ListUcsManagerCmd.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/ListUcsProfileCmd.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/ListUcsProfileCmd.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/ListUcsProfileCmd.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/ListUcsProfileCmd.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/response/UcsBladeResponse.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/response/UcsBladeResponse.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/response/UcsBladeResponse.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/response/UcsBladeResponse.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/response/UcsManagerResponse.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/response/UcsManagerResponse.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/response/UcsManagerResponse.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/response/UcsManagerResponse.java
diff --git a/plugins/hypervisors/ucs/src/org/apache/cloudstack/api/response/UcsProfileResponse.java b/plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/response/UcsProfileResponse.java
similarity index 100%
rename from plugins/hypervisors/ucs/src/org/apache/cloudstack/api/response/UcsProfileResponse.java
rename to plugins/hypervisors/ucs/src/main/java/org/apache/cloudstack/api/response/UcsProfileResponse.java
diff --git a/plugins/hypervisors/ucs/resources/META-INF/cloudstack/core/spring-ucs-core-context.xml b/plugins/hypervisors/ucs/src/main/resources/META-INF/cloudstack/core/spring-ucs-core-context.xml
similarity index 100%
rename from plugins/hypervisors/ucs/resources/META-INF/cloudstack/core/spring-ucs-core-context.xml
rename to plugins/hypervisors/ucs/src/main/resources/META-INF/cloudstack/core/spring-ucs-core-context.xml
diff --git a/plugins/hypervisors/vmware/pom.xml b/plugins/hypervisors/vmware/pom.xml
index fca4018..654e80d 100644
--- a/plugins/hypervisors/vmware/pom.xml
+++ b/plugins/hypervisors/vmware/pom.xml
@@ -1,70 +1,71 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor VMware</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-vmware-base</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-secondary-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-orchestration</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.cloud.com.vmware</groupId>
-      <artifactId>vmware-vim25</artifactId>
-      <version>${cs.vmware.api.version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis-jaxrpc</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>wsdl4j</groupId>
-      <artifactId>wsdl4j</artifactId>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor VMware</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-vmware-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-secondary-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-orchestration</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.cloud.com.vmware</groupId>
+            <artifactId>vmware-vim25</artifactId>
+            <version>${cs.vmware.api.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis-jaxrpc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>wsdl4j</groupId>
+            <artifactId>wsdl4j</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/api/response/CiscoNexusVSMResponse.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/api/response/CiscoNexusVSMResponse.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/ha/VmwareFencer.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/ha/VmwareFencer.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/ha/VmwareFencer.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/ha/VmwareInvestigator.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/ha/VmwareInvestigator.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/ha/VmwareInvestigator.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/LegacyZone.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/LegacyZone.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/LegacyZone.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/LegacyZone.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/LegacyZoneVO.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/LegacyZoneVO.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/LegacyZoneVO.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/LegacyZoneVO.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareCleanupMaid.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareCleanupMaid.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareCleanupMaid.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareCleanupMaid.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenter.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenter.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenter.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenter.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterService.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterService.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterService.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterService.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterVO.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterVO.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterVO.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterVO.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMap.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMap.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMap.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMap.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMapVO.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMapVO.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMapVO.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterZoneMapVO.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/LegacyZoneDao.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/LegacyZoneDao.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/LegacyZoneDao.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/LegacyZoneDao.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/LegacyZoneDaoImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/LegacyZoneDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/LegacyZoneDaoImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/LegacyZoneDaoImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDao.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDao.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDao.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDao.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDaoImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDaoImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterDaoImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDao.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDao.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDao.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDao.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDaoImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDaoImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/dao/VmwareDatacenterZoneMapDaoImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/CleanupFullyClonedTemplatesTask.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/CleanupFullyClonedTemplatesTask.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/CleanupFullyClonedTemplatesTask.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/CleanupFullyClonedTemplatesTask.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareHostService.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareHostService.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareHostService.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareHostService.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManager.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManager.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/CiscoNexusVSMDevice.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/CiscoNexusVSMDevice.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/CiscoNexusVSMDeviceVO.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/CiscoNexusVSMDeviceVO.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/VmwareTrafficLabel.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/VmwareTrafficLabel.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/element/CiscoNexusVSMElement.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/element/CiscoNexusVSMElement.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/element/CiscoNexusVSMElementService.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElementService.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/network/element/CiscoNexusVSMElementService.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/PremiumSecondaryStorageResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/PremiumSecondaryStorageResource.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/PremiumSecondaryStorageResource.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/PremiumSecondaryStorageResource.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutType.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutType.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutType.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutType.java
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
similarity index 96%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
index 0cea62f..82cd4ca 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -145,6 +145,7 @@
 
     private static final Logger s_logger = Logger.getLogger(VmwareStorageProcessor.class);
     private static final int DEFAULT_NFS_PORT = 2049;
+    private static final int SECONDS_TO_WAIT_FOR_DATASTORE = 120;
 
     private final VmwareHostService hostService;
     private boolean _fullCloneFlag;
@@ -2602,8 +2603,7 @@
     }
 
     private void waitForAllHostsToSeeDatastore(List<Pair<ManagedObjectReference, String>> lstHosts, DatastoreMO dsMO) throws Exception {
-        long secondsToWait = 120;
-        long endWaitTime = System.currentTimeMillis() + secondsToWait * 1000;
+        long endWaitTime = System.currentTimeMillis() + SECONDS_TO_WAIT_FOR_DATASTORE * 1000;
 
         boolean isConditionMet = false;
 
@@ -2621,7 +2621,7 @@
     private boolean verifyAllHostsSeeDatastore(List<Pair<ManagedObjectReference, String>> lstHosts, DatastoreMO dsMO) throws Exception {
         int numHostsChecked = 0;
 
-        for (Pair<ManagedObjectReference, String> host: lstHosts) {
+        for (Pair<ManagedObjectReference, String> host : lstHosts) {
             ManagedObjectReference morHostToMatch = host.first();
             HostMO hostToMatchMO = new HostMO(dsMO.getContext(), morHostToMatch);
 
@@ -2641,8 +2641,7 @@
     }
 
     private void waitForAllHostsToMountDatastore(List<Pair<ManagedObjectReference, String>> lstHosts, DatastoreMO dsMO) throws Exception {
-        long secondsToWait = 120;
-        long endWaitTime = System.currentTimeMillis() + secondsToWait * 1000;
+        long endWaitTime = System.currentTimeMillis() + SECONDS_TO_WAIT_FOR_DATASTORE * 1000;
 
         boolean isConditionMet = false;
 
@@ -2657,13 +2656,39 @@
         }
     }
 
-    private boolean verifyAllHostsMountedDatastore(List<Pair<ManagedObjectReference, String>> lstHosts, DatastoreMO dsMO) throws Exception {
-        int numHostsChecked = 0;
+    private void waitForAllHostsToMountDatastore2(List<HostMO> lstHosts, DatastoreMO dsMO) throws Exception {
+        long endWaitTime = System.currentTimeMillis() + SECONDS_TO_WAIT_FOR_DATASTORE * 1000;
 
-        for (Pair<ManagedObjectReference, String> host: lstHosts) {
+        boolean isConditionMet = false;
+
+        while (System.currentTimeMillis() < endWaitTime && !isConditionMet) {
+            Thread.sleep(5000);
+
+            isConditionMet = verifyAllHostsMountedDatastore2(lstHosts, dsMO);
+        }
+
+        if (!isConditionMet) {
+            throw new CloudRuntimeException("Not all hosts mounted the datastore");
+        }
+    }
+
+    private boolean verifyAllHostsMountedDatastore(List<Pair<ManagedObjectReference, String>> lstHosts, DatastoreMO dsMO) throws Exception {
+        List<HostMO> hostMOs = new ArrayList<>(lstHosts.size());
+
+        for (Pair<ManagedObjectReference, String> host : lstHosts) {
             ManagedObjectReference morHostToMatch = host.first();
             HostMO hostToMatchMO = new HostMO(dsMO.getContext(), morHostToMatch);
 
+            hostMOs.add(hostToMatchMO);
+        }
+
+        return verifyAllHostsMountedDatastore2(hostMOs, dsMO);
+    }
+
+    private boolean verifyAllHostsMountedDatastore2(List<HostMO> lstHosts, DatastoreMO dsMO) throws Exception {
+        int numHostsChecked = 0;
+
+        for (HostMO hostToMatchMO : lstHosts) {
             List<DatastoreHostMount> datastoreHostMounts = dsMO.getHostMounts();
 
             for (DatastoreHostMount datastoreHostMount : datastoreHostMounts) {
@@ -2753,6 +2778,16 @@
         for (Pair<ManagedObjectReference, String> host : hosts) {
             HostMO hostMO = new HostMO(dsMO.getContext(), host.first());
 
+            List<HostMO> hostMOs = new ArrayList<>(1);
+
+            hostMOs.add(hostMO);
+
+            mountVmfsDatastore2(dsMO, hostMOs);
+        }
+    }
+
+    private void mountVmfsDatastore2(DatastoreMO dsMO, List<HostMO> hosts) throws Exception {
+        for (HostMO hostMO : hosts) {
             if (!isDatastoreMounted(dsMO, hostMO)) {
                 HostStorageSystemMO hostStorageSystemMO = hostMO.getHostStorageSystemMO();
 
@@ -2760,11 +2795,15 @@
                     hostStorageSystemMO.mountVmfsVolume(getDatastoreUuid(dsMO, hostMO));
                 }
                 catch (InvalidStateFaultMsg ex) {
-                    List<Pair<ManagedObjectReference, String>> currentHosts = new ArrayList<>(1);
+                    s_logger.trace("'" + ex.getClass().getName() + "' exception thrown: " + ex.getMessage());
 
-                    currentHosts.add(host);
+                    List<HostMO> currentHosts = new ArrayList<>(1);
 
-                    waitForAllHostsToMountDatastore(currentHosts, dsMO);
+                    currentHosts.add(hostMO);
+
+                    s_logger.trace("Waiting for host " + hostMO.getHostName() + " to mount datastore " + dsMO.getName());
+
+                    waitForAllHostsToMountDatastore2(currentHosts, dsMO);
                 }
             }
         }
@@ -2772,12 +2811,29 @@
 
     private void unmountVmfsDatastore(VmwareContext context, VmwareHypervisorHost hyperHost, String datastoreName,
                                       List<Pair<ManagedObjectReference, String>> hosts) throws Exception {
-        ManagedObjectReference morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, datastoreName);
-        DatastoreMO dsMO = new DatastoreMO(context, morDs);
-
         for (Pair<ManagedObjectReference, String> host : hosts) {
             HostMO hostMO = new HostMO(context, host.first());
 
+            List<HostMO> hostMOs = new ArrayList<>(1);
+
+            hostMOs.add(hostMO);
+
+            unmountVmfsDatastore2(context, hyperHost, datastoreName, hostMOs);
+        }
+    }
+
+    private void unmountVmfsDatastore2(VmwareContext context, VmwareHypervisorHost hyperHost, String datastoreName,
+                                       List<HostMO> hosts) throws Exception {
+        ManagedObjectReference morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, datastoreName);
+        DatastoreMO dsMO = new DatastoreMO(context, morDs);
+
+        for (HostMO hostMO : hosts) {
+            unmountVmfsVolume(dsMO, hostMO);
+        }
+    }
+
+    private void unmountVmfsVolume(DatastoreMO dsMO, HostMO hostMO) throws Exception {
+        if (isDatastoreMounted(dsMO, hostMO)) {
             HostStorageSystemMO hostStorageSystemMO = hostMO.getHostStorageSystemMO();
 
             hostStorageSystemMO.unmountVmfsVolume(getDatastoreUuid(dsMO, hostMO));
@@ -2902,6 +2958,20 @@
 
                         if (rescan) {
                             rescanAllHosts(hosts, true, false);
+
+                            List<HostInternetScsiHbaStaticTarget> targetsToAdd = new ArrayList<>();
+
+                            targetsToAdd.addAll(getTargets(staticTargetsForHost));
+                            targetsToAdd.addAll(getTargets(dynamicTargetsForHost));
+
+                            for (HostInternetScsiHbaStaticTarget targetToAdd : targetsToAdd) {
+                                HostDatastoreSystemMO hostDatastoreSystemMO = host.getHostDatastoreSystemMO();
+                                String datastoreName = waitForDatastoreName(hostDatastoreSystemMO, targetToAdd.getIScsiName());
+                                ManagedObjectReference morDs = hostDatastoreSystemMO.findDatastoreByName(datastoreName);
+                                DatastoreMO datastoreMO = new DatastoreMO(host.getContext(), morDs);
+
+                                mountVmfsDatastore2(datastoreMO, hosts);
+                            }
                         }
                     }
                     catch (Exception ex) {
@@ -2924,26 +2994,9 @@
 
                 if (targetsToRemove.size() > 0) {
                     if (isRemoveAsync) {
-                        new Thread(() -> {
-                            try {
-                                addRemoveInternetScsiTargetsToAllHosts(false, targetsToRemove, hosts);
-
-                                rescanAllHosts(hosts, true, false);
-                            } catch (Exception ex) {
-                                s_logger.warn(ex.getMessage());
-                            }
-                        }).start();
+                        new Thread(() -> handleRemove(targetsToRemove, host, hosts)).start();
                     } else {
-                        executorService.submit(new Thread(() -> {
-                            try {
-                                addRemoveInternetScsiTargetsToAllHosts(false, targetsToRemove, hosts);
-
-                                rescanAllHosts(hosts, true, false);
-                            }
-                            catch (Exception ex) {
-                                s_logger.warn(ex.getMessage());
-                            }
-                        }));
+                        executorService.submit(new Thread(() -> handleRemove(targetsToRemove, host, hosts)));
                     }
                 }
             }
@@ -2956,6 +3009,60 @@
         }
     }
 
+    private String waitForDatastoreName(HostDatastoreSystemMO hostDatastoreSystemMO, String iqn) throws Exception {
+        long endWaitTime = System.currentTimeMillis() + SECONDS_TO_WAIT_FOR_DATASTORE * 1000;
+
+        do {
+            String datastoreName = getDatastoreName(hostDatastoreSystemMO, iqn);
+
+            if (datastoreName != null) {
+                return datastoreName;
+            }
+
+            Thread.sleep(5000);
+        }
+        while (System.currentTimeMillis() < endWaitTime);
+
+        throw new CloudRuntimeException("Could not find the datastore name");
+    }
+
+    private String getDatastoreName(HostDatastoreSystemMO hostDatastoreSystemMO, String iqn) throws Exception {
+        String datastoreName = "-" + iqn + "-0";
+
+        ManagedObjectReference morDs = hostDatastoreSystemMO.findDatastoreByName(datastoreName);
+
+        if (morDs != null) {
+            return datastoreName;
+        }
+
+        datastoreName = "_" + iqn + "_0";
+
+        morDs = hostDatastoreSystemMO.findDatastoreByName(datastoreName);
+
+        if (morDs != null) {
+            return datastoreName;
+        }
+
+        return null;
+    }
+
+    private void handleRemove(List<HostInternetScsiHbaStaticTarget> targetsToRemove, HostMO host, List<HostMO> hosts) {
+        try {
+            for (HostInternetScsiHbaStaticTarget target : targetsToRemove) {
+                String datastoreName = waitForDatastoreName(host.getHostDatastoreSystemMO(), target.getIScsiName());
+
+                unmountVmfsDatastore2(host.getContext(), host, datastoreName, hosts);
+            }
+
+            addRemoveInternetScsiTargetsToAllHosts(false, targetsToRemove, hosts);
+
+            rescanAllHosts(hosts, true, false);
+        }
+        catch (Exception ex) {
+            s_logger.warn(ex.getMessage());
+        }
+    }
+
     private void addRemoveInternetScsiTargetsToAllHosts(VmwareContext context, final boolean add, final List<HostInternetScsiHbaStaticTarget> targets,
                                                         List<Pair<ManagedObjectReference, String>> hostPairs) throws Exception {
         List<HostMO> hosts = new ArrayList<>();
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
rename to plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
diff --git a/plugins/hypervisors/vmware/src/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java
rename to plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java
diff --git a/plugins/hypervisors/vmware/src/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java
rename to plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java
diff --git a/plugins/hypervisors/vmware/src/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java
rename to plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java
diff --git a/plugins/hypervisors/vmware/src/org/apache/cloudstack/api/response/VmwareDatacenterResponse.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/response/VmwareDatacenterResponse.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/org/apache/cloudstack/api/response/VmwareDatacenterResponse.java
rename to plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/response/VmwareDatacenterResponse.java
diff --git a/plugins/hypervisors/vmware/src/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java
similarity index 100%
rename from plugins/hypervisors/vmware/src/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java
rename to plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/core/spring-vmware-core-context.xml b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/core/spring-vmware-core-context.xml
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/core/spring-vmware-core-context.xml
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/core/spring-vmware-core-context.xml
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-compute/module.properties b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-compute/module.properties
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-compute/module.properties
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-compute/spring-vmware-compute-context.xml b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-compute/spring-vmware-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-compute/spring-vmware-compute-context.xml
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-compute/spring-vmware-compute-context.xml
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-compute/vmware-defaults.properties b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-compute/vmware-defaults.properties
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-compute/vmware-defaults.properties
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-compute/vmware-defaults.properties
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-discoverer/module.properties b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-discoverer/module.properties
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-discoverer/module.properties
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-discoverer/module.properties
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-discoverer/spring-vmware-discoverer-context.xml b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-discoverer/spring-vmware-discoverer-context.xml
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-discoverer/spring-vmware-discoverer-context.xml
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-discoverer/spring-vmware-discoverer-context.xml
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-network/module.properties b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-network/module.properties
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-network/module.properties
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-network/module.properties
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-network/spring-vmware-network-context.xml b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-network/spring-vmware-network-context.xml
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-network/spring-vmware-network-context.xml
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-network/spring-vmware-network-context.xml
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-storage/module.properties b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-storage/module.properties
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-storage/module.properties
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-storage/module.properties
diff --git a/plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-storage/spring-vmware-storage-context.xml b/plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-storage/spring-vmware-storage-context.xml
similarity index 100%
rename from plugins/hypervisors/vmware/resources/META-INF/cloudstack/vmware-storage/spring-vmware-storage-context.xml
rename to plugins/hypervisors/vmware/src/main/resources/META-INF/cloudstack/vmware-storage/spring-vmware-storage-context.xml
diff --git a/plugins/hypervisors/vmware/test/com/cloud/hypervisor/guru/VMwareGuruTest.java b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/guru/VMwareGuruTest.java
similarity index 100%
rename from plugins/hypervisors/vmware/test/com/cloud/hypervisor/guru/VMwareGuruTest.java
rename to plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/guru/VMwareGuruTest.java
diff --git a/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
similarity index 100%
rename from plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
rename to plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
diff --git a/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java
similarity index 100%
rename from plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java
rename to plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java
diff --git a/plugins/hypervisors/vmware/test/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategyTest.java b/plugins/hypervisors/vmware/src/test/java/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategyTest.java
similarity index 100%
rename from plugins/hypervisors/vmware/test/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategyTest.java
rename to plugins/hypervisors/vmware/src/test/java/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategyTest.java
diff --git a/plugins/hypervisors/xenserver/pom.xml b/plugins/hypervisors/xenserver/pom.xml
index 83a2ebe..c588a5c 100644
--- a/plugins/hypervisors/xenserver/pom.xml
+++ b/plugins/hypervisors/xenserver/pom.xml
@@ -1,44 +1,52 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-  license agreements. See the NOTICE file distributed with this work for additional
-  information regarding copyright ownership. The ASF licenses this file to
-  you under the Apache License, Version 2.0 (the "License"); you may not use
-  this file except in compliance with the License. You may obtain a copy of
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-  by applicable law or agreed to in writing, software distributed under the
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-  OF ANY KIND, either express or implied. See the License for the specific
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
-  <name>Apache CloudStack Plugin - Hypervisor XenServer</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-ovs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>net.java.dev.vcc.thirdparty</groupId>
-      <artifactId>xen-api</artifactId>
-      <version>${cs.xapi.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
+    <name>Apache CloudStack Plugin - Hypervisor XenServer</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-ovs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.java.dev.vcc.thirdparty</groupId>
+            <artifactId>xen-api</artifactId>
+            <version>${cs.xapi.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateVolumeCommandWrapper.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateVolumeCommandWrapper.java
deleted file mode 100644
index 72208ea..0000000
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateVolumeCommandWrapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
-package com.cloud.hypervisor.xenserver.resource.wrapper.xen610;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.storage.MigrateVolumeAnswer;
-import com.cloud.agent.api.storage.MigrateVolumeCommand;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.hypervisor.xenserver.resource.XenServer610Resource;
-import com.cloud.resource.CommandWrapper;
-import com.cloud.resource.ResourceWrapper;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.VDI;
-
-@ResourceWrapper(handles =  MigrateVolumeCommand.class)
-public final class XenServer610MigrateVolumeCommandWrapper extends CommandWrapper<MigrateVolumeCommand, Answer, XenServer610Resource> {
-
-    private static final Logger s_logger = Logger.getLogger(XenServer610MigrateVolumeCommandWrapper.class);
-
-    @Override
-    public Answer execute(final MigrateVolumeCommand command, final XenServer610Resource xenServer610Resource) {
-        final Connection connection = xenServer610Resource.getConnection();
-        final String volumeUUID = command.getVolumePath();
-        final StorageFilerTO poolTO = command.getPool();
-
-        try {
-            final String uuid = poolTO.getUuid();
-            final SR destinationPool = xenServer610Resource.getStorageRepository(connection, uuid);
-            final VDI srcVolume = xenServer610Resource.getVDIbyUuid(connection, volumeUUID);
-            final Map<String, String> other = new HashMap<String, String>();
-            other.put("live", "true");
-
-            // Live migrate the vdi across pool.
-            final Task task = srcVolume.poolMigrateAsync(connection, destinationPool, other);
-            final long timeout = xenServer610Resource.getMigrateWait() * 1000L;
-            xenServer610Resource.waitForTask(connection, task, 1000, timeout);
-            xenServer610Resource.checkForSuccess(connection, task);
-
-            final VDI dvdi = Types.toVDI(task, connection);
-
-            return new MigrateVolumeAnswer(command, true, null, dvdi.getUuid(connection));
-        } catch (final Exception e) {
-            final String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString();
-            s_logger.error(msg, e);
-            return new MigrateVolumeAnswer(command, false, msg, null);
-        }
-    }
-}
\ No newline at end of file
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/ha/XenServerFencer.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/ha/XenServerFencer.java
similarity index 97%
rename from plugins/hypervisors/xenserver/src/com/cloud/ha/XenServerFencer.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/ha/XenServerFencer.java
index af89a0a..72ec375 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/ha/XenServerFencer.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/ha/XenServerFencer.java
@@ -77,12 +77,12 @@
                     answer = (FenceAnswer)ans;
                 } catch (AgentUnavailableException e) {
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable", e);
                     }
                     continue;
                 } catch (OperationTimedoutException e) {
                     if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+                        s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable", e);
                     }
                     continue;
                 }
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/XenServerGuru.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/XenServerGuru.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/XenServerGuru.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
similarity index 92%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
index 9664686..fd95da2 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscoverer.java
@@ -16,6 +16,24 @@
 // under the License.
 package com.cloud.hypervisor.xenserver.discoverer;
 
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import javax.persistence.EntityExistsException;
+
+import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
+import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
+
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
 import com.cloud.agent.api.AgentControlAnswer;
@@ -81,46 +99,28 @@
 import com.xensource.xenapi.Types.SessionAuthenticationFailed;
 import com.xensource.xenapi.Types.UuidInvalid;
 import com.xensource.xenapi.Types.XenAPIException;
-import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-import javax.persistence.EntityExistsException;
-import java.net.InetAddress;
-import java.net.URI;
-import java.net.UnknownHostException;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
 
 
 public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter {
     private static final Logger s_logger = Logger.getLogger(XcpServerDiscoverer.class);
-    protected String _publicNic;
-    protected String _privateNic;
-    protected String _storageNic1;
-    protected String _storageNic2;
-    protected int _wait;
-    protected XenServerConnectionPool _connPool;
-    protected boolean _checkHvm;
-    protected String _guestNic;
-    protected boolean _setupMultipath;
-    protected String _instance;
+    private int _wait;
+    private XenServerConnectionPool _connPool;
+    private boolean _checkHvm;
+    private boolean _setupMultipath;
+    private String _instance;
 
     @Inject
-    protected AlertManager _alertMgr;
+    private AlertManager _alertMgr;
     @Inject
-    protected AgentManager _agentMgr;
+    private AgentManager _agentMgr;
     @Inject
     private VMTemplateDao _tmpltDao;
     @Inject
     private HostPodDao _podDao;
 
+    private String xenServerIsoName = "xs-tools.iso";
+    private String xenServerIsoDisplayText = "XenServer Tools Installer ISO (xen-pv-drv-iso)";
+
     protected XcpServerDiscoverer() {
     }
 
@@ -198,8 +198,9 @@
 
         ClusterVO cluster = _clusterDao.findById(clusterId);
         if (cluster == null || cluster.getHypervisorType() != HypervisorType.XenServer) {
-            if (s_logger.isInfoEnabled())
+            if (s_logger.isInfoEnabled()) {
                 s_logger.info("invalid cluster id or cluster is not for XenServer hypervisors");
+            }
             return null;
         }
 
@@ -237,7 +238,7 @@
                 if (clusterHosts != null && clusterHosts.size() > 0) {
                     if (!clu.getGuid().equals(poolUuid)) {
                         String msg = "Please join the host " +  hostIp + " to XS pool  "
-                                       + clu.getGuid() + " through XC/XS before adding it through CS UI";
+                                + clu.getGuid() + " through XC/XS before adding it through CS UI";
                         s_logger.warn(msg);
                         throw new DiscoveryException(msg);
                     }
@@ -395,18 +396,18 @@
     protected CitrixResourceBase createServerResource(String prodBrand, String prodVersion, String prodVersionTextShort, String hotfix) {
         // Xen Cloud Platform group of hypervisors
         if (prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0")
-              || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4") || prodVersion.startsWith("1.6"))) {
+                || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4") || prodVersion.startsWith("1.6"))) {
             return new XcpServerResource();
         } // Citrix Xenserver group of hypervisors
-        else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.0"))
+        else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) {
             return new XenServer56Resource();
-        else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.0"))
+        } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.0")) {
             return new XenServer600Resource();
-        else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.2"))
+        } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.2")) {
             return new XenServer600Resource();
-        else if (prodBrand.equals("XenServer") && prodVersion.equals("6.1.0"))
+        } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.1.0")) {
             return new XenServer610Resource();
-        else if (prodBrand.equals("XenServer") && prodVersion.equals("6.2.0")) {
+        } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.2.0")) {
             if (hotfix != null && hotfix.equals(XenserverConfigs.XSHotFix62ESP1004)) {
                 return new Xenserver625Resource();
             } else if (hotfix != null && hotfix.equals(XenserverConfigs.XSHotFix62ESP1)) {
@@ -464,37 +465,27 @@
         super.configure(name, params);
         serverConfig();
 
-        _publicNic = _params.get(Config.XenServerPublicNetwork.key());
-        _privateNic = _params.get(Config.XenServerPrivateNetwork.key());
-
-        _storageNic1 = _params.get(Config.XenServerStorageNetwork1.key());
-        _storageNic2 = _params.get(Config.XenServerStorageNetwork2.key());
-
-        _guestNic = _params.get(Config.XenServerGuestNetwork.key());
-
         String value = _params.get(Config.XapiWait.toString());
         _wait = NumbersUtil.parseInt(value, Integer.parseInt(Config.XapiWait.getDefaultValue()));
 
         _instance = _params.get(Config.InstanceName.key());
 
-        value = _params.get(Config.XenServerSetupMultipath.key());
-        Boolean.parseBoolean(value);
-
         value = _params.get("xenserver.check.hvm");
         _checkHvm = Boolean.parseBoolean(value);
         _connPool = XenServerConnectionPool.getInstance();
 
         _agentMgr.registerForHostEvents(this, true, false, true);
 
-        createXsToolsISO();
+        createXenServerToolsIsoEntryInDatabase();
         _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
         return true;
     }
 
     @Override
     public boolean matchHypervisor(String hypervisor) {
-        if (hypervisor == null)
+        if (hypervisor == null) {
             return true;
+        }
         return Hypervisor.HypervisorType.XenServer.toString().equalsIgnoreCase(hypervisor);
     }
 
@@ -528,20 +519,23 @@
         return false;
     }
 
-    private void createXsToolsISO() {
-        String isoName = "xs-tools.iso";
-        VMTemplateVO tmplt = _tmpltDao.findByTemplateName(isoName);
-        Long id;
+    /**
+     * Create the XenServer tools ISO entry in the database.
+     * If there is already an entry with 'isoName' equals to {@value #xenServerIsoName} , we update its 'displayText' to {@value #xenServerIsoDisplayText}.
+     * Otherwise, we create a new entry.
+     */
+    protected void createXenServerToolsIsoEntryInDatabase() {
+        VMTemplateVO tmplt = _tmpltDao.findByTemplateName(xenServerIsoName);
         if (tmplt == null) {
-            id = _tmpltDao.getNextInSequence(Long.class, "id");
-            VMTemplateVO template =
-                    VMTemplateVO.createPreHostIso(id, isoName, isoName, ImageFormat.ISO, true, true, TemplateType.PERHOST, null, null, true, 64, Account.ACCOUNT_ID_SYSTEM,
-                            null, "XenServer Tools Installer ISO (xen-pv-drv-iso)", false, 1, false, HypervisorType.XenServer);
+            long id = _tmpltDao.getNextInSequence(Long.class, "id");
+            VMTemplateVO template = VMTemplateVO.createPreHostIso(id, xenServerIsoName, xenServerIsoName, ImageFormat.ISO, true, true, TemplateType.PERHOST, null, null, true, 64,
+                    Account.ACCOUNT_ID_SYSTEM, null, xenServerIsoDisplayText, false, 1, false, HypervisorType.XenServer);
             _tmpltDao.persist(template);
         } else {
-            id = tmplt.getId();
+            long id = tmplt.getId();
             tmplt.setTemplateType(TemplateType.PERHOST);
             tmplt.setUrl(null);
+            tmplt.setDisplayText(xenServerIsoDisplayText);
             _tmpltDao.update(id, tmplt);
         }
     }
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixHelper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixHelper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixHelper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixHelper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
similarity index 91%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
index 77b0bcb..e1066b7 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
@@ -16,8 +16,54 @@
 // under the License.
 package com.cloud.hypervisor.xenserver.resource;
 
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.Queue;
+import java.util.Random;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.TimeoutException;
 
+import javax.naming.ConfigurationException;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
+import org.joda.time.Duration;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
 import com.cloud.agent.IAgentControl;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
@@ -112,49 +158,6 @@
 import com.xensource.xenapi.VLAN;
 import com.xensource.xenapi.VM;
 import com.xensource.xenapi.XenAPIObject;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.commons.io.FileUtils;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-import org.joda.time.Duration;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import javax.naming.ConfigurationException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.Queue;
-import java.util.Random;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.TimeoutException;
 
 /**
  * CitrixResourceBase encapsulates the calls to the XenServer Xapi process to
@@ -172,7 +175,7 @@
      * used to describe what type of resource a storage device is of
      */
     public enum SRType {
-        EXT, FILE, ISCSI, ISO, LVM, LVMOHBA, LVMOISCSI,
+        EXT, ISO, LVM, LVMOHBA, LVMOISCSI,
         /**
          * used for resigning metadata (like SR UUID and VDI UUID when a
          * particular storage manager is installed on a XenServer host (for back-end snapshots to work))
@@ -197,7 +200,7 @@
 
     private final static int BASE_TO_CONVERT_BYTES_INTO_KILOBYTES = 1024;
 
-    protected static final XenServerConnectionPool ConnPool = XenServerConnectionPool.getInstance();
+    private static final XenServerConnectionPool ConnPool = XenServerConnectionPool.getInstance();
     // static min values for guests on xenserver
     private static final long mem_128m = 134217728L;
 
@@ -205,6 +208,9 @@
     private static final Logger s_logger = Logger.getLogger(CitrixResourceBase.class);
     protected static final HashMap<VmPowerState, PowerState> s_powerStatesTable;
 
+    private String xenServer70plusGuestToolsName = "guest-tools.iso";
+    private String xenServerBefore70GuestToolsName = "xs-tools.iso";
+
     static {
         s_powerStatesTable = new HashMap<VmPowerState, PowerState>();
         s_powerStatesTable.put(VmPowerState.HALTED, PowerState.PowerOff);
@@ -239,7 +245,7 @@
     protected String _guestNetworkName;
     protected int _heartbeatInterval = 60;
     protected int _heartbeatTimeout = 120;
-    protected final XsHost _host = new XsHost();
+    protected XsHost _host = new XsHost();
     protected String _instance; // instance name (default is usually "VM")
     protected boolean _isOvs = false;
     protected String _linkLocalPrivateNetworkName;
@@ -268,8 +274,8 @@
 
     protected VirtualRoutingResource _vrResource;
 
-    protected  String _configDriveIsopath = "/opt/xensource/packages/configdrive_iso/";
-    protected  String _configDriveSRName = "ConfigDriveISOs";
+    protected String _configDriveIsopath = "/opt/xensource/packages/configdrive_iso/";
+    protected String _configDriveSRName = "ConfigDriveISOs";
     public String _attachIsoDeviceNum = "3";
 
     protected XenServerUtilitiesHelper xenServerUtilitiesHelper = new XenServerUtilitiesHelper();
@@ -567,7 +573,7 @@
     @Override
     public ExecutionResult cleanupCommand(final NetworkElementCommand cmd) {
         if (cmd instanceof IpAssocCommand && !(cmd instanceof IpAssocVpcCommand)) {
-            return cleanupNetworkElementCommand((IpAssocCommand) cmd);
+            return cleanupNetworkElementCommand((IpAssocCommand)cmd);
         }
         return new ExecutionResult(true, null);
     }
@@ -605,7 +611,6 @@
 
         try {
             final IpAddressTO[] ips = cmd.getIpAddresses();
-            final int ipsCount = ips.length;
             for (final IpAddressTO ip : ips) {
 
                 final VM router = getVM(conn, routerName);
@@ -739,7 +744,7 @@
         try {
             task = vdi.copyAsync(conn, sr);
             // poll every 1 seconds , timeout after 2 hours
-            waitForTask(conn, task, 1000, (long) wait * 1000);
+            waitForTask(conn, task, 1000, (long)wait * 1000);
             checkForSuccess(conn, task);
             final VDI dvdi = Types.toVDI(task, conn);
             return dvdi;
@@ -758,11 +763,6 @@
         final HashMap<String, String> vmMetaDatum = new HashMap<String, String>();
         try {
             final Map<VM, VM.Record> vm_map = VM.getAllRecords(conn); // USE
-            // THIS TO
-            // GET ALL
-            // VMS
-            // FROM A
-            // CLUSTER
             if (vm_map != null) {
                 for (final VM.Record record : vm_map.values()) {
                     if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
@@ -788,44 +788,44 @@
         _name = name;
 
         try {
-            _dcId = Long.parseLong((String) params.get("zone"));
+            _dcId = Long.parseLong((String)params.get("zone"));
         } catch (final NumberFormatException e) {
             throw new ConfigurationException("Unable to get the zone " + params.get("zone"));
         }
 
-        _host.setUuid((String) params.get("guid"));
+        _host.setUuid((String)params.get("guid"));
 
         _name = _host.getUuid();
-        _host.setIp((String) params.get("ipaddress"));
+        _host.setIp((String)params.get("ipaddress"));
 
-        _username = (String) params.get("username");
-        _password.add((String) params.get("password"));
-        _pod = (String) params.get("pod");
-        _cluster = (String) params.get("cluster");
-        _privateNetworkName = (String) params.get("private.network.device");
-        _publicNetworkName = (String) params.get("public.network.device");
-        _guestNetworkName = (String) params.get("guest.network.device");
-        _instance = (String) params.get("instance.name");
-        _securityGroupEnabled = Boolean.parseBoolean((String) params.get("securitygroupenabled"));
+        _username = (String)params.get("username");
+        _password.add((String)params.get("password"));
+        _pod = (String)params.get("pod");
+        _cluster = (String)params.get("cluster");
+        _privateNetworkName = (String)params.get("private.network.device");
+        _publicNetworkName = (String)params.get("public.network.device");
+        _guestNetworkName = (String)params.get("guest.network.device");
+        _instance = (String)params.get("instance.name");
+        _securityGroupEnabled = Boolean.parseBoolean((String)params.get("securitygroupenabled"));
 
-        _linkLocalPrivateNetworkName = (String) params.get("private.linkLocal.device");
+        _linkLocalPrivateNetworkName = (String)params.get("private.linkLocal.device");
         if (_linkLocalPrivateNetworkName == null) {
             _linkLocalPrivateNetworkName = "cloud_link_local_network";
         }
 
-        _storageNetworkName1 = (String) params.get("storage.network.device1");
-        _storageNetworkName2 = (String) params.get("storage.network.device2");
+        _storageNetworkName1 = (String)params.get("storage.network.device1");
+        _storageNetworkName2 = (String)params.get("storage.network.device2");
 
-        _heartbeatTimeout = NumbersUtil.parseInt((String) params.get("xenserver.heartbeat.timeout"), 120);
-        _heartbeatInterval = NumbersUtil.parseInt((String) params.get("xenserver.heartbeat.interval"), 60);
+        _heartbeatTimeout = NumbersUtil.parseInt((String)params.get("xenserver.heartbeat.timeout"), 120);
+        _heartbeatInterval = NumbersUtil.parseInt((String)params.get("xenserver.heartbeat.interval"), 60);
 
-        String value = (String) params.get("wait");
+        String value = (String)params.get("wait");
         _wait = NumbersUtil.parseInt(value, 600);
 
-        value = (String) params.get("migratewait");
+        value = (String)params.get("migratewait");
         _migratewait = NumbersUtil.parseInt(value, 3600);
 
-        _maxNics = NumbersUtil.parseInt((String) params.get("xenserver.nics.max"), 7);
+        _maxNics = NumbersUtil.parseInt((String)params.get("xenserver.nics.max"), 7);
 
         if (_pod == null) {
             throw new ConfigurationException("Unable to get the pod");
@@ -874,7 +874,7 @@
             if (configuredHosts != null) {
                 final String hostIdsStr[] = configuredHosts.split(",");
                 for (final String hostIdStr : hostIdsStr) {
-                    if (hostIdStr.equals(((Long) hostId).toString())) {
+                    if (hostIdStr.equals(((Long)hostId).toString())) {
                         configured = true;
                         break;
                     }
@@ -884,17 +884,15 @@
             if (!configured) {
                 String result;
                 if (bridgeName.startsWith("OVS-DR-VPC-Bridge")) {
-                    result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge_for_distributed_routing", "bridge", bridge, "key", bridgeName, "xs_nw_uuid", nw.getUuid(conn),
-                            "cs_host_id", ((Long) hostId).toString());
+                    result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge_for_distributed_routing", "bridge", bridge, "key", bridgeName, "xs_nw_uuid", nw.getUuid(conn), "cs_host_id",
+                            ((Long)hostId).toString());
                 } else {
-                    result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge", "bridge", bridge, "key", bridgeName, "xs_nw_uuid", nw.getUuid(conn), "cs_host_id",
-                            ((Long) hostId).toString());
+                    result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge", "bridge", bridge, "key", bridgeName, "xs_nw_uuid", nw.getUuid(conn), "cs_host_id", ((Long)hostId).toString());
                 }
 
                 // Note down the fact that the ovs bridge has been setup
                 final String[] res = result.split(":");
                 if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) {
-                    // TODO: Should make this error not fatal?
                     throw new CloudRuntimeException("Unable to pre-configure OVS bridge " + bridge);
                 }
             }
@@ -942,8 +940,7 @@
 
     public String copyVhdFromSecondaryStorage(final Connection conn, final String mountpoint, final String sruuid, final int wait) {
         final String nameLabel = "cloud-" + UUID.randomUUID().toString();
-        final String results = callHostPluginAsync(conn, "vmopspremium", "copy_vhd_from_secondarystorage", wait, "mountpoint", mountpoint, "sruuid", sruuid, "namelabel",
-                nameLabel);
+        final String results = callHostPluginAsync(conn, "vmopspremium", "copy_vhd_from_secondarystorage", wait, "mountpoint", mountpoint, "sruuid", sruuid, "namelabel", nameLabel);
         String errMsg = null;
         if (results == null || results.isEmpty()) {
             errMsg = "copy_vhd_from_secondarystorage return null";
@@ -1102,8 +1099,8 @@
 
     String createTemplateFromSnapshot(final Connection conn, final String templatePath, final String snapshotPath, final int wait) {
         final String tmpltLocalDir = UUID.randomUUID().toString();
-        final String results = callHostPluginAsync(conn, "vmopspremium", "create_privatetemplate_from_snapshot", wait, "templatePath", templatePath, "snapshotPath", snapshotPath,
-                "tmpltLocalDir", tmpltLocalDir);
+        final String results = callHostPluginAsync(conn, "vmopspremium", "create_privatetemplate_from_snapshot", wait, "templatePath", templatePath, "snapshotPath", snapshotPath, "tmpltLocalDir",
+                tmpltLocalDir);
         String errMsg = null;
         if (results == null || results.isEmpty()) {
             errMsg = "create_privatetemplate_from_snapshot return null";
@@ -1122,8 +1119,7 @@
         throw new CloudRuntimeException(errMsg);
     }
 
-    public VBD createVbd(final Connection conn, final DiskTO volume, final String vmName, final VM vm, final BootloaderType bootLoaderType, VDI vdi) throws XmlRpcException,
-    XenAPIException {
+    public VBD createVbd(final Connection conn, final DiskTO volume, final String vmName, final VM vm, final BootloaderType bootLoaderType, VDI vdi) throws XmlRpcException, XenAPIException {
         final Volume.Type type = volume.getType();
 
         if (vdi == null) {
@@ -1167,7 +1163,7 @@
             vbdr.userdevice = "autodetect";
             final Long deviceId = volume.getDiskSeq();
             if (deviceId != null && (!isDeviceUsed(conn, vm, deviceId) || deviceId > 3)) {
-                    vbdr.userdevice = deviceId.toString();
+                vbdr.userdevice = deviceId.toString();
             }
         }
         final VBD vbd = VBD.create(conn, vbdr);
@@ -1277,7 +1273,7 @@
         vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
         vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
         vmr.otherConfig.put("vm_uuid", vmSpec.getUuid());
-        vmr.VCPUsMax = (long) vmSpec.getCpus(); // FIX ME: In case of dynamic
+        vmr.VCPUsMax = (long)vmSpec.getCpus(); // FIX ME: In case of dynamic
         // scaling this VCPU max should
         // be the minumum of
         // recommended value for that template and capacity remaining on host
@@ -1285,29 +1281,29 @@
         long recommendedMemoryMin = 0l;
         long recommendedMemoryMax = 0l;
 
-        Map<String,String> guestOsDetails = vmSpec.getGuestOsDetails();
+        Map<String, String> guestOsDetails = vmSpec.getGuestOsDetails();
 
-        if(guestOsDetails != null){
-            if(guestOsDetails.containsKey("xenserver.dynamicMin")){
+        if (guestOsDetails != null) {
+            if (guestOsDetails.containsKey("xenserver.dynamicMin")) {
                 recommendedMemoryMin = Long.valueOf(guestOsDetails.get("xenserver.dynamicMin")).longValue();
             }
 
-            if(guestOsDetails.containsKey("xenserver.dynamicMax")){
+            if (guestOsDetails.containsKey("xenserver.dynamicMax")) {
                 recommendedMemoryMax = Long.valueOf(guestOsDetails.get("xenserver.dynamicMax")).longValue();
             }
         }
 
         if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
             // scaling is allowed
-            vmr.memoryStaticMin = getStaticMin(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam(),recommendedMemoryMin);
-            vmr.memoryStaticMax = getStaticMax(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam(),recommendedMemoryMax);
+            vmr.memoryStaticMin = getStaticMin(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam(), recommendedMemoryMin);
+            vmr.memoryStaticMax = getStaticMax(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD, vmSpec.getMinRam(), vmSpec.getMaxRam(), recommendedMemoryMax);
             vmr.memoryDynamicMin = vmSpec.getMinRam();
             vmr.memoryDynamicMax = vmSpec.getMaxRam();
             if (guestOsTypeName.toLowerCase().contains("windows")) {
-                vmr.VCPUsMax = (long) vmSpec.getCpus();
+                vmr.VCPUsMax = (long)vmSpec.getCpus();
             } else {
                 if (vmSpec.getVcpuMaxLimit() != null) {
-                    vmr.VCPUsMax = (long) vmSpec.getVcpuMaxLimit();
+                    vmr.VCPUsMax = (long)vmSpec.getVcpuMaxLimit();
                 }
             }
         } else {
@@ -1320,16 +1316,16 @@
             vmr.memoryDynamicMin = vmSpec.getMinRam();
             vmr.memoryDynamicMax = vmSpec.getMaxRam();
 
-            vmr.VCPUsMax = (long) vmSpec.getCpus();
+            vmr.VCPUsMax = (long)vmSpec.getCpus();
         }
 
-        vmr.VCPUsAtStartup = (long) vmSpec.getCpus();
+        vmr.VCPUsAtStartup = (long)vmSpec.getCpus();
         vmr.consoles.clear();
         vmr.xenstoreData.clear();
         //Add xenstore data for the NetscalerVM
-        if(vmSpec.getType()== VirtualMachine.Type.NetScalerVm) {
+        if (vmSpec.getType() == VirtualMachine.Type.NetScalerVm) {
             NicTO mgmtNic = vmSpec.getNics()[0];
-            if(mgmtNic != null ) {
+            if (mgmtNic != null) {
                 Map<String, String> xenstoreData = new HashMap<String, String>(3);
                 xenstoreData.put(XENSTORE_DATA_IP, mgmtNic.getIp().toString().trim());
                 xenstoreData.put(XENSTORE_DATA_GATEWAY, mgmtNic.getGateway().toString().trim());
@@ -1345,11 +1341,11 @@
 
         final Integer speed = vmSpec.getMinSpeed();
         if (speed != null) {
-        int cpuWeight = _maxWeight; // cpu_weight
+            int cpuWeight = _maxWeight; // cpu_weight
             int utilization = 0; // max CPU cap, default is unlimited
 
             // weight based allocation, CPU weight is calculated per VCPU
-            cpuWeight = (int) (speed * 0.99 / _host.getSpeed() * _maxWeight);
+            cpuWeight = (int)(speed * 0.99 / _host.getSpeed() * _maxWeight);
             if (cpuWeight > _maxWeight) {
                 cpuWeight = _maxWeight;
             }
@@ -1357,7 +1353,7 @@
             if (vmSpec.getLimitCpuUse()) {
                 // CPU cap is per VM, so need to assign cap based on the number
                 // of vcpus
-                utilization = (int) (vmSpec.getMaxSpeed() * 0.99 * vmSpec.getCpus() / _host.getSpeed() * 100);
+                utilization = (int)(vmSpec.getMaxSpeed() * 0.99 * vmSpec.getCpus() / _host.getSpeed() * 100);
             }
 
             vcpuParams.put("weight", Integer.toString(cpuWeight));
@@ -1390,7 +1386,7 @@
                 final DiskTO[] disks = vmSpec.getDisks();
                 for (final DiskTO disk : disks) {
                     if (disk.getType() == Volume.Type.ISO) {
-                        final TemplateObjectTO iso = (TemplateObjectTO) disk.getData();
+                        final TemplateObjectTO iso = (TemplateObjectTO)disk.getData();
                         final String osType = iso.getGuestOsType();
                         if (osType != null) {
                             final String isoGuestOsName = getGuestOsType(vmSpec.getPlatformEmulator());
@@ -1408,7 +1404,7 @@
                 }
             } else if (vmSpec.getBootloader() == BootloaderType.PyGrub) {
                 vm.setPVBootloader(conn, "pygrub");
-                vm.setPVBootloaderArgs(conn,CitrixHelper.getPVbootloaderArgs(guestOsTypeName));
+                vm.setPVBootloaderArgs(conn, CitrixHelper.getPVbootloaderArgs(guestOsTypeName));
             } else {
                 vm.destroy(conn);
                 throw new CloudRuntimeException("Unable to handle boot loader type: " + vmSpec.getBootloader());
@@ -1427,8 +1423,7 @@
         // below is redundant but keeping for consistency and code readabilty
         final String guestOsTypeName = platformEmulator;
         if (guestOsTypeName == null) {
-            final String msg = " Hypervisor " + this.getClass().getName() + " doesn't support guest OS type " + guestOSType
-                    + ". you can choose 'Other install media' to run it as HVM";
+            final String msg = " Hypervisor " + this.getClass().getName() + " doesn't support guest OS type " + guestOSType + ". you can choose 'Other install media' to run it as HVM";
             s_logger.warn(msg);
             throw new CloudRuntimeException(msg);
         }
@@ -1475,12 +1470,11 @@
         return details != null && details.equals("1");
     }
 
-    protected String deleteSnapshotBackup(final Connection conn, final Long dcId, final Long accountId, final Long volumeId, final String secondaryStorageMountPath,
-            final String backupUUID) {
+    protected String deleteSnapshotBackup(final Connection conn, final Long dcId, final Long accountId, final Long volumeId, final String secondaryStorageMountPath, final String backupUUID) {
 
         // If anybody modifies the formatting below again, I'll skin them
-        final String result = callHostPlugin(conn, "vmopsSnapshot", "deleteSnapshotBackup", "backupUUID", backupUUID, "dcId", dcId.toString(), "accountId", accountId.toString(),
-                "volumeId", volumeId.toString(), "secondaryStorageMountPath", secondaryStorageMountPath);
+        final String result = callHostPlugin(conn, "vmopsSnapshot", "deleteSnapshotBackup", "backupUUID", backupUUID, "dcId", dcId.toString(), "accountId", accountId.toString(), "volumeId",
+                volumeId.toString(), "secondaryStorageMountPath", secondaryStorageMountPath);
 
         return result;
     }
@@ -1509,13 +1503,9 @@
     public synchronized void destroyTunnelNetwork(final Connection conn, final Network nw, final long hostId) {
         try {
             final String bridge = nw.getBridge(conn);
-            final String result = callHostPlugin(conn, "ovstunnel", "destroy_ovs_bridge", "bridge", bridge, "cs_host_id", ((Long) hostId).toString());
+            final String result = callHostPlugin(conn, "ovstunnel", "destroy_ovs_bridge", "bridge", bridge, "cs_host_id", ((Long)hostId).toString());
             final String[] res = result.split(":");
             if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) {
-                // TODO: Should make this error not fatal?
-                // Can Concurrent VM shutdown/migration/reboot events can cause
-                // this method
-                // to be executed on a bridge which has already been removed?
                 throw new CloudRuntimeException("Unable to remove OVS bridge " + bridge + ":" + result);
             }
             return;
@@ -1800,7 +1790,7 @@
                 }
             }
 
-            ram = (long) ((ram - dom0Ram - _xsMemoryUsed) * _xsVirtualizationFactor);
+            ram = (long)((ram - dom0Ram - _xsMemoryUsed) * _xsVirtualizationFactor);
             cmd.setMemory(ram);
             cmd.setDom0MinMemory(dom0Ram);
 
@@ -1861,8 +1851,7 @@
 
                 Pair<Boolean, String> result = xenServerUtilitiesHelper.executeSshWrapper(_host.getIp(), 22, _username, null, getPwdFromQueue(), cmdLine);
 
-                boolean supportsClonedVolumes = result != null && result.first() != null && result.first() &&
-                        result.second() != null && result.second().length() > 0;
+                boolean supportsClonedVolumes = result != null && result.first() != null && result.first() && result.second() != null && result.second().length() > 0;
 
                 cmd.setSupportsClonedVolumes(supportsClonedVolumes);
             } catch (NumberFormatException ex) {
@@ -2224,10 +2213,10 @@
             return null;
         }
 
-        final Integer numRows = (Integer) rrdData[0];
-        final Integer numColumns = (Integer) rrdData[1];
-        final Node legend = (Node) rrdData[2];
-        final Node dataNode = (Node) rrdData[3];
+        final Integer numRows = (Integer)rrdData[0];
+        final Integer numColumns = (Integer)rrdData[1];
+        final Node legend = (Node)rrdData[2];
+        final Node dataNode = (Node)rrdData[3];
 
         final NodeList legendChildren = legend.getChildNodes();
         for (int col = 0; col < numColumns; col++) {
@@ -2286,16 +2275,11 @@
     }
 
     protected HashMap<String, HostVmStateReportEntry> getHostVmStateReport(final Connection conn) {
-
-        // TODO : new VM sync model does not require a cluster-scope report, we
-        // need to optimize
-        // the report accordingly
         final HashMap<String, HostVmStateReportEntry> vmStates = new HashMap<String, HostVmStateReportEntry>();
         Map<VM, VM.Record> vm_map = null;
         for (int i = 0; i < 2; i++) {
             try {
-                vm_map = VM.getAllRecords(conn); // USE THIS TO GET ALL VMS FROM
-                // A CLUSTER
+                vm_map = VM.getAllRecords(conn);
                 break;
             } catch (final Throwable e) {
                 s_logger.warn("Unable to get vms", e);
@@ -2338,24 +2322,20 @@
         return vmStates;
     }
 
-    public SR getIscsiSR(final Connection conn, final String srNameLabel, final String target, String path, final String chapInitiatorUsername,
-            final String chapInitiatorPassword, final boolean ignoreIntroduceException) {
+    public SR getIscsiSR(final Connection conn, final String srNameLabel, final String target, String path, final String chapInitiatorUsername, final String chapInitiatorPassword,
+            final boolean ignoreIntroduceException) {
 
-        return getIscsiSR(conn, srNameLabel, target, path, chapInitiatorUsername,
-                chapInitiatorPassword, false, SRType.LVMOISCSI.toString(),
-                ignoreIntroduceException);
+        return getIscsiSR(conn, srNameLabel, target, path, chapInitiatorUsername, chapInitiatorPassword, false, SRType.LVMOISCSI.toString(), ignoreIntroduceException);
     }
 
-    public SR getIscsiSR(final Connection conn, final String srNameLabel, final String target, String path, final String chapInitiatorUsername,
-            final String chapInitiatorPassword, final boolean resignature, final boolean ignoreIntroduceException) {
+    public SR getIscsiSR(final Connection conn, final String srNameLabel, final String target, String path, final String chapInitiatorUsername, final String chapInitiatorPassword,
+            final boolean resignature, final boolean ignoreIntroduceException) {
 
-        return getIscsiSR(conn, srNameLabel, target, path, chapInitiatorUsername,
-                chapInitiatorPassword, resignature, SRType.LVMOISCSI.toString(),
-                ignoreIntroduceException);
+        return getIscsiSR(conn, srNameLabel, target, path, chapInitiatorUsername, chapInitiatorPassword, resignature, SRType.LVMOISCSI.toString(), ignoreIntroduceException);
     }
 
-    public SR getIscsiSR(final Connection conn, final String srNameLabel, final String target, String path, final String chapInitiatorUsername,
-            final String chapInitiatorPassword, final boolean resignature, final  String srType, final boolean ignoreIntroduceException) {
+    public SR getIscsiSR(final Connection conn, final String srNameLabel, final String target, String path, final String chapInitiatorUsername, final String chapInitiatorPassword,
+            final boolean resignature, final String srType, final boolean ignoreIntroduceException) {
         synchronized (srNameLabel.intern()) {
             final Map<String, String> deviceConfig = new HashMap<String, String>();
             try {
@@ -2405,8 +2385,7 @@
 
                 if (pooluuid == null || pooluuid.length() != 36) {
                     sr = SR.create(conn, host, deviceConfig, new Long(0), srNameLabel, srNameLabel, srType, "user", true, smConfig);
-                }
-                else {
+                } else {
                     if (resignature) {
                         // We resignature the SR for managed storage if needed. At the end of this
                         // we have an SR which is ready to be attached. For VHDoISCSI SR,
@@ -2431,7 +2410,8 @@
         }
     }
 
-    private SR introduceAndPlugIscsiSr(Connection conn, String pooluuid, String srNameLabel, String type, Map<String, String> smConfig, Map<String, String> deviceConfig, boolean ignoreIntroduceException) throws XmlRpcException, XenAPIException {
+    private SR introduceAndPlugIscsiSr(Connection conn, String pooluuid, String srNameLabel, String type, Map<String, String> smConfig, Map<String, String> deviceConfig,
+            boolean ignoreIntroduceException) throws XmlRpcException, XenAPIException {
         SR sr = null;
         try {
             sr = SR.introduce(conn, pooluuid, srNameLabel, srNameLabel, type, "user", true, smConfig);
@@ -2468,8 +2448,7 @@
         return sr;
     }
 
-    private String resignatureIscsiSr(Connection conn, Host host, Map<String, String> deviceConfig, String srNameLabel, Map<String, String> smConfig)
-            throws XmlRpcException, XenAPIException {
+    private String resignatureIscsiSr(Connection conn, Host host, Map<String, String> deviceConfig, String srNameLabel, Map<String, String> smConfig) throws XmlRpcException, XenAPIException {
         String pooluuid;
 
         try {
@@ -2480,8 +2459,7 @@
             // That being the case, if this CloudRuntimeException statement is executed, there appears to have been some kind
             // of failure in the execution of the above SR.create (resign) method.
             throw new CloudRuntimeException("Problem resigning the metadata");
-        }
-        catch (XenAPIException ex) {
+        } catch (XenAPIException ex) {
             String msg = ex.toString();
 
             if (!msg.contains("successfully resigned")) {
@@ -2506,43 +2484,43 @@
     }
 
     private void checkIfIscsiSrExisits(Connection conn, String srNameLabel, String target, String targetiqn, String lunid) throws XenAPIException, XmlRpcException {
-                final Set<SR> srs = SR.getByNameLabel(conn, srNameLabel);
-                for (final SR sr : srs) {
-                    if (!(SRType.LVMOISCSI.equals(sr.getType(conn)))) {
-                        continue;
-                    }
-                    final Set<PBD> pbds = sr.getPBDs(conn);
-                    if (pbds.isEmpty()) {
-                        continue;
-                    }
-                    final PBD pbd = pbds.iterator().next();
-                    final Map<String, String> dc = pbd.getDeviceConfig(conn);
-                    if (dc == null) {
-                        continue;
-                    }
-                    if (dc.get("target") == null) {
-                        continue;
-                    }
-                    if (dc.get("targetIQN") == null) {
-                        continue;
-                    }
-                    if (dc.get("lunid") == null) {
-                        continue;
-                    }
-                    if (target.equals(dc.get("target")) && targetiqn.equals(dc.get("targetIQN")) && lunid.equals(dc.get("lunid"))) {
-                        throw new CloudRuntimeException("There is a SR using the same configuration target:" + dc.get("target") + ",  targetIQN:" + dc.get("targetIQN")
-                                + ", lunid:" + dc.get("lunid") + " for pool " + srNameLabel + "on host:" + _host.getUuid());
-                    }
-                }
+        final Set<SR> srs = SR.getByNameLabel(conn, srNameLabel);
+        for (final SR sr : srs) {
+            if (!(SRType.LVMOISCSI.equals(sr.getType(conn)))) {
+                continue;
+            }
+            final Set<PBD> pbds = sr.getPBDs(conn);
+            if (pbds.isEmpty()) {
+                continue;
+            }
+            final PBD pbd = pbds.iterator().next();
+            final Map<String, String> dc = pbd.getDeviceConfig(conn);
+            if (dc == null) {
+                continue;
+            }
+            if (dc.get("target") == null) {
+                continue;
+            }
+            if (dc.get("targetIQN") == null) {
+                continue;
+            }
+            if (dc.get("lunid") == null) {
+                continue;
+            }
+            if (target.equals(dc.get("target")) && targetiqn.equals(dc.get("targetIQN")) && lunid.equals(dc.get("lunid"))) {
+                throw new CloudRuntimeException("There is a SR using the same configuration target:" + dc.get("target") + ",  targetIQN:" + dc.get("targetIQN") + ", lunid:" + dc.get("lunid")
+                + " for pool " + srNameLabel + "on host:" + _host.getUuid());
+            }
+        }
 
     }
 
-    private String probeScisiId(Connection conn, Host host, Map<String, String> deviceConfig, String type, String srNameLabel, String lunid, Map<String, String> smConfig) throws XenAPIException, XmlRpcException {
-        SR sr = null;
+    private String probeScisiId(Connection conn, Host host, Map<String, String> deviceConfig, String type, String srNameLabel, String lunid, Map<String, String> smConfig)
+            throws XenAPIException, XmlRpcException {
         String scsiid = null;
 
         try {
-            sr = SR.create(conn, host, deviceConfig, new Long(0), srNameLabel, srNameLabel, type, "user", true, smConfig);
+            SR.create(conn, host, deviceConfig, new Long(0), srNameLabel, srNameLabel, type, "user", true, smConfig);
         } catch (final XenAPIException e) {
             final String errmsg = e.toString();
             if (errmsg.contains("SR_BACKEND_FAILURE_107")) {
@@ -2602,7 +2580,7 @@
         String mountpoint = null;
         if (isoURL.startsWith("xs-tools")) {
             try {
-                final String actualIsoURL = actualIsoTemplate(conn);
+                final String actualIsoURL = getActualIsoTemplate(conn);
                 final Set<VDI> vdis = VDI.getByNameLabel(conn, actualIsoURL);
                 if (vdis.isEmpty()) {
                     throw new CloudRuntimeException("Could not find ISO with URL: " + actualIsoURL);
@@ -2641,20 +2619,27 @@
         }
     }
 
-    private String actualIsoTemplate(final Connection conn) throws BadServerResponse, XenAPIException, XmlRpcException {
-        final Host host = Host.getByUuid(conn, _host.getUuid());
-        final Host.Record record = host.getRecord(conn);
-        final String xenBrand = record.softwareVersion.get("product_brand");
-        final String xenVersion = record.softwareVersion.get("product_version");
-        final String[] items = xenVersion.split("\\.");
+    /**
+     * Retrieve the actual ISO 'name-label' to be used.
+     * We based our decision on XenServer version.
+     * <ul>
+     *  <li> for XenServer 7.0+, we use {@value #xenServer70plusGuestToolsName};
+     *  <li> for versions before 7.0, we use {@value #xenServerBefore70GuestToolsName}.
+     * </ul>
+     *
+     * For XCP we always use {@value #xenServerBefore70GuestToolsName}.
+     */
+    protected String getActualIsoTemplate(Connection conn) throws XenAPIException, XmlRpcException {
+        Host host = Host.getByUuid(conn, _host.getUuid());
+        Host.Record record = host.getRecord(conn);
+        String xenBrand = record.softwareVersion.get("product_brand");
+        String xenVersion = record.softwareVersion.get("product_version");
+        String[] items = xenVersion.split("\\.");
 
-        // guest-tools.iso for XenServer version 7.0+
         if ((xenBrand.equals("XenServer") || xenBrand.equals("XCP-ng")) && Integer.parseInt(items[0]) >= 7) {
-            return "guest-tools.iso";
+            return xenServer70plusGuestToolsName;
         }
-
-        // xs-tools.iso for older XenServer versions
-        return "xs-tools.iso";
+        return xenServerBefore70GuestToolsName;
     }
 
     public String getLabel() {
@@ -2663,76 +2648,6 @@
         return result;
     }
 
-    protected SR getLocalEXTSR(final Connection conn) {
-        try {
-            final Map<SR, SR.Record> map = SR.getAllRecords(conn);
-            if (map != null && !map.isEmpty()) {
-                for (final Map.Entry<SR, SR.Record> entry : map.entrySet()) {
-                    final SR.Record srRec = entry.getValue();
-                    if (SRType.FILE.equals(srRec.type) || SRType.EXT.equals(srRec.type)) {
-                        final Set<PBD> pbds = srRec.PBDs;
-                        if (pbds == null) {
-                            continue;
-                        }
-                        for (final PBD pbd : pbds) {
-                            final Host host = pbd.getHost(conn);
-                            if (!isRefNull(host) && host.getUuid(conn).equals(_host.getUuid())) {
-                                if (!pbd.getCurrentlyAttached(conn)) {
-                                    pbd.plug(conn);
-                                }
-                                final SR sr = entry.getKey();
-                                sr.scan(conn);
-                                return sr;
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (final XenAPIException e) {
-            final String msg = "Unable to get local EXTSR in host:" + _host.getUuid() + e.toString();
-            s_logger.warn(msg);
-        } catch (final XmlRpcException e) {
-            final String msg = "Unable to get local EXTSR in host:" + _host.getUuid() + e.getCause();
-            s_logger.warn(msg);
-        }
-        return null;
-    }
-
-    protected SR getLocalLVMSR(final Connection conn) {
-        try {
-            final Map<SR, SR.Record> map = SR.getAllRecords(conn);
-            if (map != null && !map.isEmpty()) {
-                for (final Map.Entry<SR, SR.Record> entry : map.entrySet()) {
-                    final SR.Record srRec = entry.getValue();
-                    if (SRType.LVM.equals(srRec.type)) {
-                        final Set<PBD> pbds = srRec.PBDs;
-                        if (pbds == null) {
-                            continue;
-                        }
-                        for (final PBD pbd : pbds) {
-                            final Host host = pbd.getHost(conn);
-                            if (!isRefNull(host) && host.getUuid(conn).equals(_host.getUuid())) {
-                                if (!pbd.getCurrentlyAttached(conn)) {
-                                    pbd.plug(conn);
-                                }
-                                final SR sr = entry.getKey();
-                                sr.scan(conn);
-                                return sr;
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (final XenAPIException e) {
-            final String msg = "Unable to get local LVMSR in host:" + _host.getUuid() + e.toString();
-            s_logger.warn(msg);
-        } catch (final XmlRpcException e) {
-            final String msg = "Unable to get local LVMSR in host:" + _host.getUuid() + e.getCause();
-            s_logger.warn(msg);
-        }
-        return null;
-    }
-
     public String getLowestAvailableVIFDeviceNum(final Connection conn, final VM vm) {
         String vmName = "";
         try {
@@ -2783,8 +2698,8 @@
             final PIF.Record rec = pif.getRecord(conn);
             if (rec.management) {
                 if (rec.VLAN != null && rec.VLAN != -1) {
-                    final String msg = new StringBuilder("Unsupported configuration.  Management network is on a VLAN.  host=").append(_host.getUuid()).append("; pif=")
-                            .append(rec.uuid).append("; vlan=").append(rec.VLAN).toString();
+                    final String msg = new StringBuilder("Unsupported configuration.  Management network is on a VLAN.  host=").append(_host.getUuid()).append("; pif=").append(rec.uuid)
+                            .append("; vlan=").append(rec.VLAN).toString();
                     s_logger.warn(msg);
                     throw new CloudRuntimeException(msg);
                 }
@@ -2804,7 +2719,7 @@
         final Bond bond = mgmtPifRec.bondSlaveOf;
         if (!isRefNull(bond)) {
             final String msg = "Management interface is on slave(" + mgmtPifRec.uuid + ") of bond(" + bond.getUuid(conn) + ") on host(" + _host.getUuid()
-                    + "), please move management interface to bond!";
+            + "), please move management interface to bond!";
             s_logger.warn(msg);
             throw new CloudRuntimeException(msg);
         }
@@ -3023,8 +2938,8 @@
                     }
 
                     if (server.equals(dc.get("server")) && serverpath.equals(dc.get("serverpath"))) {
-                        throw new CloudRuntimeException("There is a SR using the same configuration server:" + dc.get("server") + ", serverpath:" + dc.get("serverpath")
-                                + " for pool " + uuid + " on host:" + _host.getUuid());
+                        throw new CloudRuntimeException(
+                                "There is a SR using the same configuration server:" + dc.get("server") + ", serverpath:" + dc.get("serverpath") + " for pool " + uuid + " on host:" + _host.getUuid());
                     }
 
                 }
@@ -3061,7 +2976,7 @@
         String patch = getPatchFilePath();
         String patchfilePath = Script.findScript("", patch);
         if (patchfilePath == null) {
-            throw new CloudRuntimeException("Unable to find patch file "+patch);
+            throw new CloudRuntimeException("Unable to find patch file " + patch);
         }
         List<File> files = new ArrayList<File>();
         files.add(new File(patchfilePath));
@@ -3123,7 +3038,7 @@
             }
         }
 
-        return new Object[] { numRows, numColumns, legend, dataNode };
+        return new Object[] {numRows, numColumns, legend, dataNode};
     }
 
     @Override
@@ -3162,8 +3077,7 @@
         // stability
         if (dynamicMaxRam > staticMax) { // XS contraint that dynamic max <=
             // static max
-            s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax
-                    + ", can lead to stability issues. Setting static max as much as dynamic max ");
+            s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax + ", can lead to stability issues. Setting static max as much as dynamic max ");
             return dynamicMaxRam;
         }
         return staticMax;
@@ -3304,8 +3218,7 @@
     }
 
     public String getVhdParent(final Connection conn, final String primaryStorageSRUuid, final String snapshotUuid, final Boolean isISCSI) {
-        final String parentUuid = callHostPlugin(conn, "vmopsSnapshot", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI",
-                isISCSI.toString());
+        final String parentUuid = callHostPlugin(conn, "vmopsSnapshot", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI", isISCSI.toString());
 
         if (parentUuid == null || parentUuid.isEmpty() || parentUuid.equalsIgnoreCase("None")) {
             s_logger.debug("Unable to get parent of VHD " + snapshotUuid + " in SR " + primaryStorageSRUuid);
@@ -3360,7 +3273,8 @@
         return _instance;
     }
 
-    public long getVMSnapshotChainSize(final Connection conn, final VolumeObjectTO volumeTo, final String vmName, final String vmSnapshotName) throws BadServerResponse, XenAPIException, XmlRpcException {
+    public long getVMSnapshotChainSize(final Connection conn, final VolumeObjectTO volumeTo, final String vmName, final String vmSnapshotName)
+            throws BadServerResponse, XenAPIException, XmlRpcException {
         if (volumeTo.getVolumeType() == Volume.Type.DATADISK) {
             final VDI dataDisk = VDI.getByUuid(conn, volumeTo.getPath());
             if (dataDisk != null) {
@@ -3392,10 +3306,10 @@
         }
         if (volumeTo.getVolumeType() == Volume.Type.ROOT) {
             VM vm = getVM(conn, vmName);
-            if(vm != null){
-                Set<VM> vmSnapshots=vm.getSnapshots(conn);
-                if(vmSnapshots != null){
-                    for(VM vmsnap: vmSnapshots){
+            if (vm != null) {
+                Set<VM> vmSnapshots = vm.getSnapshots(conn);
+                if (vmSnapshots != null) {
+                    for (VM vmsnap : vmSnapshots) {
                         try {
                             final String vmSnapName = vmsnap.getNameLabel(conn);
                             s_logger.debug("snapname " + vmSnapName);
@@ -3404,16 +3318,16 @@
                                 VDI memoryVDI = vmsnap.getSuspendVDI(conn);
                                 if (!isRefNull(memoryVDI)) {
                                     size = size + memoryVDI.getPhysicalUtilisation(conn);
-                                    s_logger.debug("memoryVDI size :"+size);
+                                    s_logger.debug("memoryVDI size :" + size);
                                     String parentUuid = memoryVDI.getSmConfig(conn).get("vhd-parent");
                                     VDI pMemoryVDI = VDI.getByUuid(conn, parentUuid);
                                     if (!isRefNull(pMemoryVDI)) {
                                         size = size + pMemoryVDI.getPhysicalUtilisation(conn);
                                     }
-                                    s_logger.debug("memoryVDI size+parent :"+size);
+                                    s_logger.debug("memoryVDI size+parent :" + size);
                                 }
                             }
-                           } catch (Exception e) {
+                        } catch (Exception e) {
                             s_logger.debug("Exception occurs when calculate snapshot capacity for memory: due to " + e.toString());
                             continue;
                         }
@@ -3471,7 +3385,7 @@
         final HashMap<String, VmStatsEntry> vmResponseMap = new HashMap<String, VmStatsEntry>();
 
         for (final String vmUUID : vmUUIDs) {
-            vmResponseMap.put(vmUUID, new VmStatsEntry(0,0,0,0, 0, 0, 0, "vm"));
+            vmResponseMap.put(vmUUID, new VmStatsEntry(0, 0, 0, 0, 0, 0, 0, "vm"));
         }
 
         final Object[] rrdData = getRRDData(conn, 2); // call rrddata with 2 for
@@ -3481,10 +3395,10 @@
             return null;
         }
 
-        final Integer numRows = (Integer) rrdData[0];
-        final Integer numColumns = (Integer) rrdData[1];
-        final Node legend = (Node) rrdData[2];
-        final Node dataNode = (Node) rrdData[3];
+        final Integer numRows = (Integer)rrdData[0];
+        final Integer numColumns = (Integer)rrdData[1];
+        final Node legend = (Node)rrdData[2];
+        final Node dataNode = (Node)rrdData[3];
 
         final NodeList legendChildren = legend.getChildNodes();
         for (int col = 0; col < numColumns; col++) {
@@ -3689,75 +3603,144 @@
         } catch (final Throwable e) {
             s_logger.warn("Check for master failed, failing the FULL Cluster sync command");
         }
-        final StartupStorageCommand sscmd = initializeLocalSR(conn);
-        if (sscmd != null) {
-            return new StartupCommand[] { cmd, sscmd };
+        List<StartupStorageCommand> startUpLocalStorageCommands = null;
+        try {
+            startUpLocalStorageCommands = initializeLocalSrs(conn);
+        } catch (XenAPIException | XmlRpcException e) {
+            s_logger.warn("Could not initialize local SRs on host: " + _host.getUuid(), e);
         }
-        return new StartupCommand[] { cmd };
+        if (CollectionUtils.isEmpty(startUpLocalStorageCommands)) {
+            return new StartupCommand[] {cmd};
+        }
+        return createStartupCommandsArray(cmd, startUpLocalStorageCommands);
     }
 
-    protected StartupStorageCommand initializeLocalSR(final Connection conn) {
-        final SR lvmsr = getLocalLVMSR(conn);
-        if (lvmsr != null) {
-            try {
-                _host.setLocalSRuuid(lvmsr.getUuid(conn));
+    /**
+     * We simply create an array and add the {@link StartupRoutingCommand} as the first element of the array. Then, we add all elements from startUpLocalStorageCommands
+     */
+    private StartupCommand[] createStartupCommandsArray(StartupRoutingCommand startupRoutingCommand, List<StartupStorageCommand> startUpLocalStorageCommands) {
+        StartupCommand[] startupCommands = new StartupCommand[startUpLocalStorageCommands.size() + 1];
+        startupCommands[0] = startupRoutingCommand;
+        for (int i = 1; i < startupCommands.length; i++) {
+            startupCommands[i] = startUpLocalStorageCommands.get(i - 1);
+        }
+        return startupCommands;
+    }
 
-                final String lvmuuid = lvmsr.getUuid(conn);
-                final long cap = lvmsr.getPhysicalSize(conn);
-                if (cap > 0) {
-                    final long avail = cap - lvmsr.getPhysicalUtilisation(conn);
-                    lvmsr.setNameLabel(conn, lvmuuid);
-                    final String name = "Cloud Stack Local LVM Storage Pool for " + _host.getUuid();
-                    lvmsr.setNameDescription(conn, name);
-                    final Host host = Host.getByUuid(conn, _host.getUuid());
-                    final String address = host.getAddress(conn);
-                    final StoragePoolInfo pInfo = new StoragePoolInfo(lvmuuid, address, SRType.LVM.toString(), SRType.LVM.toString(), StoragePoolType.LVM, cap, avail);
-                    final StartupStorageCommand cmd = new StartupStorageCommand();
-                    cmd.setPoolInfo(pInfo);
-                    cmd.setGuid(_host.getUuid());
-                    cmd.setDataCenter(Long.toString(_dcId));
-                    cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
-                    return cmd;
+    /**
+     * This  method will return a list of all local SRs.
+     * An SR is considered local if it meets all of the following criteria:
+     * <ul>
+     *  <li> {@link Record#shared} is equal to false
+     *  <li> The PBDs of the SR ({@link Record#PBDs}) are connected to host {@link #_host}
+     *  <li> SR type is equal to the {@link SRType} sent as parameter
+     * </ul>
+     */
+    protected List<SR> getAllLocalSrForType(Connection conn, SRType srType) throws XenAPIException, XmlRpcException {
+        List<SR> localSrs = new ArrayList<>();
+        Map<SR, SR.Record> allSrRecords = SR.getAllRecords(conn);
+        if (MapUtils.isEmpty(allSrRecords)) {
+            return localSrs;
+        }
+        for (Map.Entry<SR, SR.Record> entry : allSrRecords.entrySet()) {
+            SR.Record srRec = entry.getValue();
+            if (!srType.equals(srRec.type)) {
+                continue;
+            }
+            if (BooleanUtils.toBoolean(srRec.shared)) {
+                continue;
+            }
+            Set<PBD> pbds = srRec.PBDs;
+            if (CollectionUtils.isEmpty(pbds)) {
+                continue;
+            }
+            for (PBD pbd : pbds) {
+                Host host = pbd.getHost(conn);
+                if (!isRefNull(host) && org.apache.commons.lang3.StringUtils.equals(host.getUuid(conn), _host.getUuid())) {
+                    if (!pbd.getCurrentlyAttached(conn)) {
+                        s_logger.debug(String.format("PBD [%s] of local SR [%s] was unplugged, pluggin it now", pbd.getUuid(conn), srRec.uuid));
+                        pbd.plug(conn);
+                    }
+                    s_logger.debug("Scanning local SR: " + srRec.uuid);
+                    SR sr = entry.getKey();
+                    sr.scan(conn);
+                    localSrs.add(sr);
                 }
-            } catch (final XenAPIException e) {
-                final String msg = "build local LVM info err in host:" + _host.getUuid() + e.toString();
-                s_logger.warn(msg);
-            } catch (final XmlRpcException e) {
-                final String msg = "build local LVM info err in host:" + _host.getUuid() + e.getMessage();
-                s_logger.warn(msg);
             }
         }
+        s_logger.debug(String.format("Found %d local storage of type [%s] for host [%s]", localSrs.size(), srType.toString(), _host.getUuid()));
+        return localSrs;
+    }
 
-        final SR extsr = getLocalEXTSR(conn);
-        if (extsr != null) {
-            try {
-                final String extuuid = extsr.getUuid(conn);
-                _host.setLocalSRuuid(extuuid);
-                final long cap = extsr.getPhysicalSize(conn);
-                if (cap > 0) {
-                    final long avail = cap - extsr.getPhysicalUtilisation(conn);
-                    extsr.setNameLabel(conn, extuuid);
-                    final String name = "Cloud Stack Local EXT Storage Pool for " + _host.getUuid();
-                    extsr.setNameDescription(conn, name);
-                    final Host host = Host.getByUuid(conn, _host.getUuid());
-                    final String address = host.getAddress(conn);
-                    final StoragePoolInfo pInfo = new StoragePoolInfo(extuuid, address, SRType.EXT.toString(), SRType.EXT.toString(), StoragePoolType.EXT, cap, avail);
-                    final StartupStorageCommand cmd = new StartupStorageCommand();
-                    cmd.setPoolInfo(pInfo);
-                    cmd.setGuid(_host.getUuid());
-                    cmd.setDataCenter(Long.toString(_dcId));
-                    cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
-                    return cmd;
-                }
-            } catch (final XenAPIException e) {
-                final String msg = "build local EXT info err in host:" + _host.getUuid() + e.toString();
-                s_logger.warn(msg);
-            } catch (final XmlRpcException e) {
-                final String msg = "build local EXT info err in host:" + _host.getUuid() + e.getMessage();
-                s_logger.warn(msg);
+    /**
+     *  This method will prepare Local SRs to be used by Apache CloudStack.
+     */
+    protected List<StartupStorageCommand> initializeLocalSrs(Connection conn) throws XenAPIException, XmlRpcException {
+        List<StartupStorageCommand> localStorageStartupCommands = new ArrayList<>();
+        List<SR> allLocalSrs = getAllLocalSrs(conn);
+
+        for (SR sr : allLocalSrs) {
+            long totalCapacity = sr.getPhysicalSize(conn);
+            if (totalCapacity > 0) {
+                StartupStorageCommand cmd = createStartUpStorageCommand(conn, sr);
+                localStorageStartupCommands.add(cmd);
             }
         }
-        return null;
+        return localStorageStartupCommands;
+    }
+
+    /**
+     * This method will retrieve all Local SRs according to {@link #getAllLocalSrForType(Connection, SRType)}.
+     * The types used are {@link SRType#LVM} and {@link SRType#EXT}.
+     *
+     */
+    protected List<SR> getAllLocalSrs(Connection conn) throws XenAPIException, XmlRpcException {
+        List<SR> allLocalSrLvmType = getAllLocalSrForType(conn, SRType.LVM);
+        List<SR> allLocalSrExtType = getAllLocalSrForType(conn, SRType.EXT);
+        List<SR> allLocalSrs = new ArrayList<>(allLocalSrLvmType);
+        allLocalSrs.addAll(allLocalSrExtType);
+        return allLocalSrs;
+    }
+
+    /**
+     * This method creates the StartUp storage command for the local SR.
+     * We will configure 'name-label' and 'description' using {@link #configureStorageNameAndDescription(Connection, SR)}.
+     * Then, we will create the POJO {@link StoragePoolInfo} with SR's information using method {@link #createStoragePoolInfo(Connection, SR)}.
+     */
+    protected StartupStorageCommand createStartUpStorageCommand(Connection conn, SR sr) throws XenAPIException, XmlRpcException {
+        configureStorageNameAndDescription(conn, sr);
+
+        StoragePoolInfo storagePoolInfo = createStoragePoolInfo(conn, sr);
+
+        StartupStorageCommand cmd = new StartupStorageCommand();
+        cmd.setPoolInfo(storagePoolInfo);
+        cmd.setGuid(_host.getUuid());
+        cmd.setDataCenter(Long.toString(_dcId));
+        cmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL);
+
+        String.format("StartUp command created for local storage [%s] of type [%s] on host [%s]", storagePoolInfo.getUuid(), storagePoolInfo.getPoolType(), _host.getUuid());
+        return cmd;
+    }
+
+    /**
+     *  Instantiate {@link StoragePoolInfo} with SR's information.
+     */
+    protected StoragePoolInfo createStoragePoolInfo(Connection conn, SR sr) throws XenAPIException, XmlRpcException {
+        long totalCapacity = sr.getPhysicalSize(conn);
+        String srUuid = sr.getUuid(conn);
+        Host host = Host.getByUuid(conn, _host.getUuid());
+        String address = host.getAddress(conn);
+        long availableCapacity = totalCapacity - sr.getPhysicalUtilisation(conn);
+        String srType = sr.getType(conn).toUpperCase();
+        return new StoragePoolInfo(srUuid, address, srType, srType, StoragePoolType.valueOf(srType), totalCapacity, availableCapacity);
+    }
+
+    protected void configureStorageNameAndDescription(Connection conn, SR sr) throws XenAPIException, XmlRpcException {
+        String srUuid = sr.getUuid(conn);
+        sr.setNameLabel(conn, srUuid);
+
+        String nameFormat = "Cloud Stack Local (%s) Storage Pool for %s";
+        sr.setNameDescription(conn, String.format(nameFormat, sr.getType(conn), _host.getUuid()));
     }
 
     public boolean isDeviceUsed(final Connection conn, final VM vm, final Long deviceId) {
@@ -3843,8 +3826,7 @@
     }
 
     public boolean launchHeartBeat(final Connection conn) {
-        final String result = callHostPluginPremium(conn, "heartbeat", "host", _host.getUuid(), "timeout", Integer.toString(_heartbeatTimeout), "interval",
-                Integer.toString(_heartbeatInterval));
+        final String result = callHostPluginPremium(conn, "heartbeat", "host", _host.getUuid(), "timeout", Integer.toString(_heartbeatTimeout), "interval", Integer.toString(_heartbeatInterval));
         if (result == null || !result.contains("> DONE <")) {
             s_logger.warn("Unable to launch the heartbeat process on " + _host.getIp());
             return false;
@@ -3897,7 +3879,7 @@
         final DataTO data = volume.getData();
         final Volume.Type type = volume.getType();
         if (type == Volume.Type.ISO) {
-            final TemplateObjectTO iso = (TemplateObjectTO) data;
+            final TemplateObjectTO iso = (TemplateObjectTO)data;
             final DataStoreTO store = iso.getDataStore();
 
             if (store == null) {
@@ -3909,7 +3891,7 @@
             final String templateName = iso.getName();
             if (templateName.startsWith("xs-tools")) {
                 try {
-                    final String actualTemplateName = actualIsoTemplate(conn);
+                    final String actualTemplateName = getActualIsoTemplate(conn);
                     final Set<VDI> vdis = VDI.getByNameLabel(conn, actualTemplateName);
                     if (vdis.isEmpty()) {
                         throw new CloudRuntimeException("Could not find ISO with URL: " + actualTemplateName);
@@ -3925,7 +3907,7 @@
             if (!(store instanceof NfsTO)) {
                 throw new CloudRuntimeException("only support mount iso on nfs");
             }
-            final NfsTO nfsStore = (NfsTO) store;
+            final NfsTO nfsStore = (NfsTO)store;
             final String isoPath = nfsStore.getUrl() + File.separator + iso.getPath();
             final int index = isoPath.lastIndexOf("/");
 
@@ -3947,7 +3929,7 @@
             }
             return isoVdi;
         } else {
-            final VolumeObjectTO vol = (VolumeObjectTO) data;
+            final VolumeObjectTO vol = (VolumeObjectTO)data;
             return VDI.getByUuid(conn, vol.getPath());
         }
     }
@@ -4066,8 +4048,8 @@
         }
     }
 
-    protected boolean postCreatePrivateTemplate(final Connection conn, final String templatePath, final String tmpltFilename, final String templateName,
-            String templateDescription, String checksum, final long size, final long virtualSize, final long templateId) {
+    protected boolean postCreatePrivateTemplate(final Connection conn, final String templatePath, final String tmpltFilename, final String templateName, String templateDescription, String checksum,
+            final long size, final long virtualSize, final long templateId) {
 
         if (templateDescription == null) {
             templateDescription = "";
@@ -4077,9 +4059,8 @@
             checksum = "";
         }
 
-        final String result = callHostPlugin(conn, "vmopsSnapshot", "post_create_private_template", "templatePath", templatePath, "templateFilename", tmpltFilename,
-                "templateName", templateName, "templateDescription", templateDescription, "checksum", checksum, "size", String.valueOf(size), "virtualSize",
-                String.valueOf(virtualSize), "templateId", String.valueOf(templateId));
+        final String result = callHostPlugin(conn, "vmopsSnapshot", "post_create_private_template", "templatePath", templatePath, "templateFilename", tmpltFilename, "templateName", templateName,
+                "templateDescription", templateDescription, "checksum", checksum, "size", String.valueOf(size), "virtualSize", String.valueOf(virtualSize), "templateId", String.valueOf(templateId));
 
         boolean success = false;
         if (result != null && !result.isEmpty()) {
@@ -4103,20 +4084,20 @@
         assert cmd.getRouterAccessIp() != null;
 
         if (cmd instanceof IpAssocVpcCommand) {
-            return prepareNetworkElementCommand((IpAssocVpcCommand) cmd);
+            return prepareNetworkElementCommand((IpAssocVpcCommand)cmd);
         } else if (cmd instanceof IpAssocCommand) {
-            return prepareNetworkElementCommand((IpAssocCommand) cmd);
+            return prepareNetworkElementCommand((IpAssocCommand)cmd);
         } else if (cmd instanceof SetupGuestNetworkCommand) {
-            return prepareNetworkElementCommand((SetupGuestNetworkCommand) cmd);
+            return prepareNetworkElementCommand((SetupGuestNetworkCommand)cmd);
         } else if (cmd instanceof SetSourceNatCommand) {
-            return prepareNetworkElementCommand((SetSourceNatCommand) cmd);
+            return prepareNetworkElementCommand((SetSourceNatCommand)cmd);
         } else if (cmd instanceof SetNetworkACLCommand) {
-            return prepareNetworkElementCommand((SetNetworkACLCommand) cmd);
+            return prepareNetworkElementCommand((SetNetworkACLCommand)cmd);
         }
         return new ExecutionResult(true, null);
     }
 
-    public void prepareISO(final Connection conn, final String vmName,  List<String[]> vmDataList, String configDriveLabel) throws XmlRpcException, XenAPIException {
+    public void prepareISO(final Connection conn, final String vmName, List<String[]> vmDataList, String configDriveLabel) throws XmlRpcException, XenAPIException {
 
         final Set<VM> vms = VM.getByNameLabel(conn, vmName);
         if (vms == null || vms.size() != 1) {
@@ -4126,7 +4107,7 @@
 
         if (vmDataList != null) {
             // create SR
-            SR sr =  createLocalIsoSR(conn, _configDriveSRName+getHost().getIp());
+            SR sr = createLocalIsoSR(conn, _configDriveSRName + getHost().getIp());
 
             // 1. create vm data files
             createVmdataFiles(vmName, vmDataList, configDriveLabel);
@@ -4206,8 +4187,7 @@
 
             return getNfsSR(conn, poolid, namelable, storageHost, mountpoint, volumedesc);
         } else {
-            return getIscsiSR(conn, iScsiName, storageHost, iScsiName,
-                    chapInitiatorUsername, chapInitiatorSecret, false, SRType.LVMOISCSI.toString(), true);
+            return getIscsiSR(conn, iScsiName, storageHost, iScsiName, chapInitiatorUsername, chapInitiatorSecret, false, SRType.LVMOISCSI.toString(), true);
         }
     }
 
@@ -4599,8 +4579,8 @@
     public String revertToSnapshot(final Connection conn, final VM vmSnapshot, final String vmName, final String oldVmUuid, final Boolean snapshotMemory, final String hostUUID)
             throws XenAPIException, XmlRpcException {
 
-        final String results = callHostPluginAsync(conn, "vmopsSnapshot", "revert_memory_snapshot", 10 * 60 * 1000, "snapshotUUID", vmSnapshot.getUuid(conn), "vmName", vmName,
-                "oldVmUuid", oldVmUuid, "snapshotMemory", snapshotMemory.toString(), "hostUUID", hostUUID);
+        final String results = callHostPluginAsync(conn, "vmopsSnapshot", "revert_memory_snapshot", 10 * 60 * 1000, "snapshotUUID", vmSnapshot.getUuid(conn), "vmName", vmName, "oldVmUuid", oldVmUuid,
+                "snapshotMemory", snapshotMemory.toString(), "hostUUID", hostUUID);
         String errMsg = null;
         if (results == null || results.isEmpty()) {
             errMsg = "revert_memory_snapshot return null";
@@ -4622,12 +4602,12 @@
         final Long newDynamicMemoryMin = vmSpec.getMinRam();
         final Long newDynamicMemoryMax = vmSpec.getMaxRam();
         if (staticMemoryMin > newDynamicMemoryMin || newDynamicMemoryMax > staticMemoryMax) {
-            throw new CloudRuntimeException("Cannot scale up the vm because of memory constraint violation: " + "0 <= memory-static-min(" + staticMemoryMin
-                    + ") <= memory-dynamic-min(" + newDynamicMemoryMin + ") <= memory-dynamic-max(" + newDynamicMemoryMax + ") <= memory-static-max(" + staticMemoryMax + ")");
+            throw new CloudRuntimeException("Cannot scale up the vm because of memory constraint violation: " + "0 <= memory-static-min(" + staticMemoryMin + ") <= memory-dynamic-min("
+                    + newDynamicMemoryMin + ") <= memory-dynamic-max(" + newDynamicMemoryMax + ") <= memory-static-max(" + staticMemoryMax + ")");
         }
 
         vm.setMemoryDynamicRange(conn, newDynamicMemoryMin, newDynamicMemoryMax);
-        vm.setVCPUsNumberLive(conn, (long) vmSpec.getCpus());
+        vm.setVCPUsNumberLive(conn, (long)vmSpec.getCpus());
 
         final Integer speed = vmSpec.getMinSpeed();
         if (speed != null) {
@@ -4636,14 +4616,14 @@
 
             // weight based allocation
 
-            cpuWeight = (int) (speed * 0.99 / _host.getSpeed() * _maxWeight);
+            cpuWeight = (int)(speed * 0.99 / _host.getSpeed() * _maxWeight);
             if (cpuWeight > _maxWeight) {
                 cpuWeight = _maxWeight;
             }
 
             if (vmSpec.getLimitCpuUse()) {
                 long utilization = 0; // max CPU cap, default is unlimited
-                utilization = (int) (vmSpec.getMaxSpeed() * 0.99 * vmSpec.getCpus() / _host.getSpeed() * 100);
+                utilization = (int)(vmSpec.getMaxSpeed() * 0.99 * vmSpec.getCpus() / _host.getSpeed() * 100);
                 // vm.addToVCPUsParamsLive(conn, "cap",
                 // Long.toString(utilization)); currently xenserver doesnot
                 // support Xapi to add VCPUs params live.
@@ -4700,8 +4680,8 @@
     public void setName(final String name) {
     }
 
-    protected void setNicDevIdIfCorrectVifIsNotNull(final Connection conn, final IpAddressTO ip, final VIF correctVif) throws InternalErrorException, BadServerResponse,
-    XenAPIException, XmlRpcException {
+    protected void setNicDevIdIfCorrectVifIsNotNull(final Connection conn, final IpAddressTO ip, final VIF correctVif)
+            throws InternalErrorException, BadServerResponse, XenAPIException, XmlRpcException {
         if (correctVif == null) {
             if (ip.isAdd()) {
                 throw new InternalErrorException("Failed to find DomR VIF to associate IP with.");
@@ -4879,8 +4859,8 @@
                     final Properties props = PropertiesUtil.loadFromFile(file);
 
                     for (final Map.Entry<Object, Object> entry : props.entrySet()) {
-                        final String k = (String) entry.getKey();
-                        final String v = (String) entry.getValue();
+                        final String k = (String)entry.getKey();
+                        final String v = (String)entry.getValue();
 
                         assert k != null && k.length() > 0 && v != null && v.length() > 0 : "Problems with " + k + "=" + v;
 
@@ -5052,14 +5032,14 @@
                 checkForSuccess(conn, task);
             } catch (final Types.HandleInvalid e) {
                 if (vm.getPowerState(conn) == VmPowerState.RUNNING) {
-                    s_logger.debug("VM " + vmName + " is in Running status");
+                    s_logger.debug("VM " + vmName + " is in Running status", e);
                     task = null;
                     return;
                 }
                 throw new CloudRuntimeException("Start VM " + vmName + " catch HandleInvalid and VM is not in RUNNING state");
             } catch (final TimeoutException e) {
                 if (vm.getPowerState(conn) == VmPowerState.RUNNING) {
-                    s_logger.debug("VM " + vmName + " is in Running status");
+                    s_logger.debug("VM " + vmName + " is in Running status", e);
                     task = null;
                     return;
                 }
@@ -5220,8 +5200,7 @@
     public void waitForTask(final Connection c, final Task task, final long pollInterval, final long timeout) throws XenAPIException, XmlRpcException, TimeoutException {
         final long beginTime = System.currentTimeMillis();
         if (s_logger.isTraceEnabled()) {
-            s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") sent to " + c.getSessionReference() + " is pending completion with a " + timeout
-                    + "ms timeout");
+            s_logger.trace("Task " + task.getNameLabel(c) + " (" + task.getUuid(c) + ") sent to " + c.getSessionReference() + " is pending completion with a " + timeout + "ms timeout");
         }
         while (task.getStatus(c) == Types.TaskStatusType.PENDING) {
             try {
@@ -5246,16 +5225,16 @@
         final String vmName = vm.getNameLabel(conn);
 
         // create SR
-        final SR sr =  createLocalIsoSR(conn, _configDriveSRName+_host.getIp());
+        final SR sr = createLocalIsoSR(conn, _configDriveSRName + _host.getIp());
         if (sr == null) {
             s_logger.debug("Failed to create local SR for the config drive");
             return false;
         }
 
-        s_logger.debug("Creating vm data files in config drive for vm "+vmName);
+        s_logger.debug("Creating vm data files in config drive for vm " + vmName);
         // 1. create vm data files
         if (!createVmdataFiles(vmName, vmDataList, configDriveLabel)) {
-            s_logger.debug("Failed to create vm data files in config drive for vm "+vmName);
+            s_logger.debug("Failed to create vm data files in config drive for vm " + vmName);
             return false;
         }
 
@@ -5275,7 +5254,7 @@
     public boolean createVmdataFiles(final String vmName, final List<String[]> vmDataList, final String configDriveLabel) {
 
         // add vm iso to the isolibrary
-        final String isoPath = "/tmp/"+vmName+"/configDrive/";
+        final String isoPath = "/tmp/" + vmName + "/configDrive/";
         final String configDriveName = "cloudstack/";
 
         //create folder for the VM
@@ -5284,12 +5263,11 @@
         try {
             deleteLocalFolder("/tmp/" + isoPath);
         } catch (final IOException e) {
-            s_logger.debug("Failed to delete the exiting config drive for vm "+vmName+ " "+ e.getMessage());
+            s_logger.debug("Failed to delete the exiting config drive for vm " + vmName + " " + e.getMessage());
         } catch (final Exception e) {
-            s_logger.debug("Failed to delete the exiting config drive for vm "+vmName+ " "+ e.getMessage());
+            s_logger.debug("Failed to delete the exiting config drive for vm " + vmName + " " + e.getMessage());
         }
 
-
         if (vmDataList != null) {
             for (final String[] item : vmDataList) {
                 final String dataType = item[0];
@@ -5300,7 +5278,7 @@
 
                 if (dataType != null && !dataType.isEmpty()) {
                     //create folder
-                    final String  folder = isoPath+configDriveName+dataType;
+                    final String folder = isoPath + configDriveName + dataType;
                     if (folder != null && !folder.isEmpty()) {
                         final File dir = new File(folder);
                         final boolean result = true;
@@ -5309,40 +5287,37 @@
                             if (!dir.exists()) {
                                 dir.mkdirs();
                             }
-                        }catch (final SecurityException ex) {
-                            s_logger.debug("Failed to create dir "+ ex.getMessage());
+                        } catch (final SecurityException ex) {
+                            s_logger.debug("Failed to create dir " + ex.getMessage());
                             return false;
                         }
 
                         if (result && content != null && !content.isEmpty()) {
-                            File file = new File(folder+"/"+fileName+".txt");
-                            try (OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(file.getAbsoluteFile()),"UTF-8");
-                                 BufferedWriter bw = new BufferedWriter(fw);
-                                ) {
+                            File file = new File(folder + "/" + fileName + ".txt");
+                            try (OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(file.getAbsoluteFile()), "UTF-8");
+                                    BufferedWriter bw = new BufferedWriter(fw);) {
                                 bw.write(content);
-                                s_logger.debug("created file: "+ file + " in folder:"+folder);
+                                s_logger.debug("created file: " + file + " in folder:" + folder);
                             } catch (final IOException ex) {
-                                s_logger.debug("Failed to create file "+ ex.getMessage());
+                                s_logger.debug("Failed to create file " + ex.getMessage());
                                 return false;
                             }
                         }
                     }
                 }
             }
-            s_logger.debug("Created the vm data in "+ isoPath);
+            s_logger.debug("Created the vm data in " + isoPath);
         }
 
         String s = null;
         try {
 
-            final String cmd =  "mkisofs -iso-level 3 -V "+ configDriveLabel +" -o "+ isoPath+vmName +".iso " + isoPath;
+            final String cmd = "mkisofs -iso-level 3 -V " + configDriveLabel + " -o " + isoPath + vmName + ".iso " + isoPath;
             final Process p = Runtime.getRuntime().exec(cmd);
 
-            final BufferedReader stdInput = new BufferedReader(new
-                    InputStreamReader(p.getInputStream(),Charset.defaultCharset()));
+            final BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream(), Charset.defaultCharset()));
 
-            final BufferedReader stdError = new BufferedReader(new
-                    InputStreamReader(p.getErrorStream(),Charset.defaultCharset()));
+            final BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream(), Charset.defaultCharset()));
 
             // read the output from the command
             while ((s = stdInput.readLine()) != null) {
@@ -5353,7 +5328,7 @@
             while ((s = stdError.readLine()) != null) {
                 s_logger.debug(s);
             }
-            s_logger.debug(" Created config drive ISO using the command " + cmd +" in the host "+ _host.getIp());
+            s_logger.debug(" Created config drive ISO using the command " + cmd + " in the host " + _host.getIp());
         } catch (final IOException e) {
             s_logger.debug(e.getMessage());
             return false;
@@ -5364,7 +5339,7 @@
 
     public boolean copyConfigDriveIsoToHost(final Connection conn, final SR sr, final String vmName) {
 
-        final String vmIso = "/tmp/"+vmName+"/configDrive/"+vmName+".iso";
+        final String vmIso = "/tmp/" + vmName + "/configDrive/" + vmName + ".iso";
         //scp file into the host
         final com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(_host.getIp(), 22);
 
@@ -5374,7 +5349,7 @@
                 throw new CloudRuntimeException("Unable to authenticate");
             }
 
-            s_logger.debug("scp config drive iso file "+vmIso +" to host " + _host.getIp() +" path "+_configDriveIsopath);
+            s_logger.debug("scp config drive iso file " + vmIso + " to host " + _host.getIp() + " path " + _configDriveIsopath);
             final SCPClient scp = new SCPClient(sshConnection);
             final String p = "0755";
 
@@ -5385,20 +5360,18 @@
             s_logger.debug("failed to copy configdrive iso " + vmIso + " to host " + _host, e);
             return false;
         } catch (final XmlRpcException e) {
-            s_logger.debug("Failed to scan config drive iso SR "+ _configDriveSRName+_host.getIp() + " in host "+ _host, e);
+            s_logger.debug("Failed to scan config drive iso SR " + _configDriveSRName + _host.getIp() + " in host " + _host, e);
             return false;
         } finally {
             sshConnection.close();
             //clean up the config drive files
 
-            final String configDir = "/tmp/"+vmName;
+            final String configDir = "/tmp/" + vmName;
             try {
                 deleteLocalFolder(configDir);
-                s_logger.debug("Successfully cleaned up config drive directory " + configDir
-                        + " after copying it to host ");
+                s_logger.debug("Successfully cleaned up config drive directory " + configDir + " after copying it to host ");
             } catch (final Exception e) {
-                s_logger.debug("Failed to delete config drive folder :" + configDir + " for VM " + vmName + " "
-                        + e.getMessage());
+                s_logger.debug("Failed to delete config drive folder :" + configDir + " for VM " + vmName + " " + e.getMessage());
             }
         }
 
@@ -5408,7 +5381,7 @@
     public boolean attachConfigDriveIsoToVm(final Connection conn, final VM vm) throws XenAPIException, XmlRpcException {
 
         final String vmName = vm.getNameLabel(conn);
-        final String isoURL = _configDriveIsopath + vmName+".iso";
+        final String isoURL = _configDriveIsopath + vmName + ".iso";
         VDI srVdi;
 
         //1. find the vdi of the iso
@@ -5416,11 +5389,11 @@
         //3. attach iso to vm
 
         try {
-            final Set<VDI> vdis = VDI.getByNameLabel(conn, vmName+".iso");
+            final Set<VDI> vdis = VDI.getByNameLabel(conn, vmName + ".iso");
             if (vdis.isEmpty()) {
                 throw new CloudRuntimeException("Could not find ISO with URL: " + isoURL);
             }
-            srVdi =  vdis.iterator().next();
+            srVdi = vdis.iterator().next();
 
         } catch (final XenAPIException e) {
             s_logger.debug("Unable to get config drive iso: " + isoURL + " due to " + e.toString());
@@ -5471,7 +5444,7 @@
                 // Insert the new ISO
                 isoVBD.insert(conn, srVdi);
                 s_logger.debug("Attached config drive iso to vm " + vmName);
-            }catch (final XmlRpcException ex) {
+            } catch (final XmlRpcException ex) {
                 s_logger.debug("Failed to attach config drive iso to vm " + vmName);
                 return false;
             }
@@ -5483,14 +5456,14 @@
     public SR createLocalIsoSR(final Connection conn, final String srName) throws XenAPIException, XmlRpcException {
 
         // if config drive sr already exists then return
-        SR sr = getSRByNameLabelandHost(conn, _configDriveSRName+_host.getIp());
+        SR sr = getSRByNameLabelandHost(conn, _configDriveSRName + _host.getIp());
 
         if (sr != null) {
             s_logger.debug("Config drive SR already exist, returing it");
             return sr;
         }
 
-        try{
+        try {
             final Map<String, String> deviceConfig = new HashMap<String, String>();
 
             final com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(_host.getIp(), 22);
@@ -5509,19 +5482,19 @@
             } finally {
                 sshConnection.close();
             }
-            s_logger.debug("Created the config drive SR " + srName +" folder path "+ _configDriveIsopath);
+            s_logger.debug("Created the config drive SR " + srName + " folder path " + _configDriveIsopath);
 
-            deviceConfig.put("location",  _configDriveIsopath);
+            deviceConfig.put("location", _configDriveIsopath);
             deviceConfig.put("legacy_mode", "true");
             final Host host = Host.getByUuid(conn, _host.getUuid());
             final String type = SRType.ISO.toString();
-            sr = SR.create(conn, host, deviceConfig, new Long(0),  _configDriveIsopath, "iso", type, "iso", false, new HashMap<String, String>());
+            sr = SR.create(conn, host, deviceConfig, new Long(0), _configDriveIsopath, "iso", type, "iso", false, new HashMap<String, String>());
 
             sr.setNameLabel(conn, srName);
             sr.setNameDescription(conn, deviceConfig.get("location"));
 
             sr.scan(conn);
-            s_logger.debug("Config drive ISO SR at the path " + _configDriveIsopath  +" got created in host " + _host);
+            s_logger.debug("Config drive ISO SR at the path " + _configDriveIsopath + " got created in host " + _host);
             return sr;
         } catch (final XenAPIException e) {
             final String msg = "createLocalIsoSR failed! mountpoint " + e.toString();
@@ -5568,13 +5541,12 @@
         return ressr;
     }
 
-
     public boolean attachConfigDriveToMigratedVm(Connection conn, String vmName, String ipAddr) {
 
         // attach the config drive in destination host
 
         try {
-            s_logger.debug("Attaching config drive iso device for the VM "+ vmName + " In host "+ ipAddr);
+            s_logger.debug("Attaching config drive iso device for the VM " + vmName + " In host " + ipAddr);
             Set<VM> vms = VM.getByNameLabel(conn, vmName);
 
             SR sr = getSRByNameLabel(conn, _configDriveSRName + ipAddr);
@@ -5627,13 +5599,13 @@
             return true;
 
         } catch (BadServerResponse e) {
-            s_logger.warn("Failed to attach config drive ISO to the VM  "+ vmName + " In host " + ipAddr + " due to a bad server response.", e);
+            s_logger.warn("Failed to attach config drive ISO to the VM  " + vmName + " In host " + ipAddr + " due to a bad server response.", e);
             return false;
         } catch (XenAPIException e) {
-            s_logger.warn("Failed to attach config drive ISO to the VM  "+ vmName + " In host " + ipAddr + " due to a xapi problem.", e);
+            s_logger.warn("Failed to attach config drive ISO to the VM  " + vmName + " In host " + ipAddr + " due to a xapi problem.", e);
             return false;
         } catch (XmlRpcException e) {
-            s_logger.warn("Failed to attach config drive ISO to the VM  "+ vmName + " In host " + ipAddr + " due to a problem in a remote call.", e);
+            s_logger.warn("Failed to attach config drive ISO to the VM  " + vmName + " In host " + ipAddr + " due to a problem in a remote call.", e);
             return false;
         }
 
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpOssResource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XcpOssResource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpOssResource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XcpOssResource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
similarity index 98%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
index e8e21d4..b7d0273 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
@@ -125,7 +125,6 @@
     @Override
     public StartupCommand[] initialize() {
         pingXAPI();
-        final StartupCommand[] cmds = super.initialize();
-        return cmds;
+        return super.initialize();
     }
 }
\ No newline at end of file
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56SP2Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56SP2Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56SP2Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer56SP2Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer600Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer620Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer620Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer620SP1Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer650Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer650Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer650Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServer650Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerConnectionPool.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServerConnectionPool.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerConnectionPool.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServerConnectionPool.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
similarity index 93%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
index 76c09dc..fc72e79 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XenServerStorageProcessor.java
@@ -375,8 +375,8 @@
             isoURL = iso.getName();
         } else {
             if (!(store instanceof NfsTO)) {
-                s_logger.debug("Can't attach a iso which is not created on nfs: ");
-                return new AttachAnswer("Can't attach a iso which is not created on nfs: ");
+                s_logger.debug("Can't detach a iso which is not created on nfs: ");
+                return new AttachAnswer("Can't detach a iso which is not created on nfs: ");
             }
             final NfsTO nfsStore = (NfsTO) store;
             isoURL = nfsStore.getUrl() + nfsStore.getPathSeparator() + data.getPath();
@@ -417,11 +417,11 @@
 
             return new DettachAnswer(disk);
         } catch (final XenAPIException e) {
-            final String msg = "Failed to dettach volume" + " for uuid: " + data.getPath() + "  due to " + e.toString();
+            final String msg = "Failed to detach volume" + " for uuid: " + data.getPath() + "  due to " + e.toString();
             s_logger.warn(msg, e);
             return new DettachAnswer(msg);
         } catch (final Exception e) {
-            final String msg = "Failed to dettach volume" + " for uuid: " + data.getPath() + "  due to " + e.getMessage();
+            final String msg = "Failed to detach volume" + " for uuid: " + data.getPath() + "  due to " + e.getMessage();
             s_logger.warn(msg, e);
             return new DettachAnswer(msg);
         }
@@ -1517,67 +1517,114 @@
         }
     }
 
+    private boolean isManaged(Map<String, String> options) {
+        if (options == null) {
+            return false;
+        }
+
+        String iqn = options.get(DiskTO.IQN);
+
+        if (iqn == null || iqn.trim().length() == 0) {
+            return false;
+        }
+
+        String storageHost = options.get(DiskTO.STORAGE_HOST);
+
+        if (storageHost == null || storageHost.trim().length() == 0) {
+            return false;
+        }
+
+        return true;
+    }
+
+    boolean isCreateManagedVolumeFromManagedSnapshot(Map<String, String> volumeOptions, Map<String, String> snapshotOptions) {
+        return isManaged(volumeOptions) && isManaged(snapshotOptions);
+    }
+
+    boolean isCreateNonManagedVolumeFromManagedSnapshot(Map<String, String> volumeOptions, Map<String, String> snapshotOptions) {
+        return !isManaged(volumeOptions) && isManaged(snapshotOptions);
+    }
+
     @Override
     public Answer createVolumeFromSnapshot(final CopyCommand cmd) {
-        final Connection conn = hypervisorResource.getConnection();
-        final DataTO srcData = cmd.getSrcTO();
-        final SnapshotObjectTO snapshot = (SnapshotObjectTO) srcData;
-        final DataTO destData = cmd.getDestTO();
-        final DataStoreTO imageStore = srcData.getDataStore();
+        Connection conn = hypervisorResource.getConnection();
 
-        if (srcData.getDataStore() instanceof PrimaryDataStoreTO && destData.getDataStore() instanceof PrimaryDataStoreTO) {
-            return createVolumeFromSnapshot2(cmd);
+        DataTO srcData = cmd.getSrcTO();
+        SnapshotObjectTO snapshot = (SnapshotObjectTO)srcData;
+        DataStoreTO imageStore = srcData.getDataStore();
+        DataTO destData = cmd.getDestTO();
+
+        if (isCreateManagedVolumeFromManagedSnapshot(cmd.getOptions2(), cmd.getOptions())) {
+            return createManagedVolumeFromManagedSnapshot(cmd);
+        }
+
+        if (isCreateNonManagedVolumeFromManagedSnapshot(cmd.getOptions2(), cmd.getOptions())) {
+            return createNonManagedVolumeFromManagedSnapshot(cmd);
         }
 
         if (!(imageStore instanceof NfsTO)) {
             return new CopyCmdAnswer("unsupported protocol");
         }
 
-        final NfsTO nfsImageStore = (NfsTO) imageStore;
-        final String primaryStorageNameLabel = destData.getDataStore().getUuid();
-        final String secondaryStorageUrl = nfsImageStore.getUrl();
-        final int wait = cmd.getWait();
+        NfsTO nfsImageStore = (NfsTO)imageStore;
+        String primaryStorageNameLabel = destData.getDataStore().getUuid();
+        String secondaryStorageUrl = nfsImageStore.getUrl();
+
+        int wait = cmd.getWait();
         boolean result = false;
+
         // Generic error message.
-        String details = null;
-        String volumeUUID = null;
+        String details;
+        String volumeUUID;
 
         if (secondaryStorageUrl == null) {
-            details += " because the URL passed: " + secondaryStorageUrl + " is invalid.";
+            details = "The URL passed in 'null'.";
+
             return new CopyCmdAnswer(details);
         }
+
         try {
-            final SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
+            SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
+
             if (primaryStorageSR == null) {
-                throw new InternalErrorException("Could not create volume from snapshot because the primary Storage SR could not be created from the name label: " +
-                        primaryStorageNameLabel);
+                throw new InternalErrorException("Could not create volume from snapshot because the primary storage SR could not be " +
+                        "created from the name label: " + primaryStorageNameLabel);
             }
+
             // Get the absolute path of the snapshot on the secondary storage.
             String snapshotInstallPath = snapshot.getPath();
-            final int index = snapshotInstallPath.lastIndexOf(nfsImageStore.getPathSeparator());
-            final String snapshotName = snapshotInstallPath.substring(index + 1);
+            int index = snapshotInstallPath.lastIndexOf(nfsImageStore.getPathSeparator());
+            String snapshotName = snapshotInstallPath.substring(index + 1);
 
             if (!snapshotName.startsWith("VHD-") && !snapshotName.endsWith(".vhd")) {
                 snapshotInstallPath = snapshotInstallPath + ".vhd";
             }
-            final URI snapshotURI = new URI(secondaryStorageUrl + nfsImageStore.getPathSeparator() + snapshotInstallPath);
-            final String snapshotPath = snapshotURI.getHost() + ":" + snapshotURI.getPath();
-            final String srUuid = primaryStorageSR.getUuid(conn);
+
+            URI snapshotURI = new URI(secondaryStorageUrl + nfsImageStore.getPathSeparator() + snapshotInstallPath);
+            String snapshotPath = snapshotURI.getHost() + ":" + snapshotURI.getPath();
+            String srUuid = primaryStorageSR.getUuid(conn);
+
             volumeUUID = copy_vhd_from_secondarystorage(conn, snapshotPath, srUuid, wait);
             result = true;
-            final VDI volume = VDI.getByUuid(conn, volumeUUID);
-            final VDI.Record vdir = volume.getRecord(conn);
-            final VolumeObjectTO newVol = new VolumeObjectTO();
+
+            VDI volume = VDI.getByUuid(conn, volumeUUID);
+            VDI.Record vdir = volume.getRecord(conn);
+            VolumeObjectTO newVol = new VolumeObjectTO();
+
             newVol.setPath(volumeUUID);
             newVol.setSize(vdir.virtualSize);
+
             return new CopyCmdAnswer(newVol);
         } catch (final XenAPIException e) {
-            details += " due to " + e.toString();
+            details = "Exception due to " + e.toString();
+
             s_logger.warn(details, e);
         } catch (final Exception e) {
-            details += " due to " + e.getMessage();
+            details = "Exception due to " + e.getMessage();
+
             s_logger.warn(details, e);
         }
+
         if (!result) {
             // Is this logged at a higher level?
             s_logger.error(details);
@@ -1587,7 +1634,7 @@
         return new CopyCmdAnswer(details);
     }
 
-    protected Answer createVolumeFromSnapshot2(final CopyCommand cmd) {
+    Answer createManagedVolumeFromManagedSnapshot(final CopyCommand cmd) {
         try {
             final Connection conn = hypervisorResource.getConnection();
 
@@ -1632,6 +1679,51 @@
         }
     }
 
+    Answer createNonManagedVolumeFromManagedSnapshot(final CopyCommand cmd) {
+        Connection conn = hypervisorResource.getConnection();
+        SR srcSr = null;
+
+        try {
+            Map<String, String> srcOptions = cmd.getOptions();
+
+            String src_iScsiName = srcOptions.get(DiskTO.IQN);
+            String srcStorageHost = srcOptions.get(DiskTO.STORAGE_HOST);
+            String srcChapInitiatorUsername = srcOptions.get(DiskTO.CHAP_INITIATOR_USERNAME);
+            String srcChapInitiatorSecret = srcOptions.get(DiskTO.CHAP_INITIATOR_SECRET);
+
+            srcSr = hypervisorResource.getIscsiSR(conn, src_iScsiName, srcStorageHost, src_iScsiName,
+                    srcChapInitiatorUsername, srcChapInitiatorSecret, false);
+
+            // there should only be one VDI in this SR
+            VDI srcVdi = srcSr.getVDIs(conn).iterator().next();
+
+            DataTO destData = cmd.getDestTO();
+            String primaryStorageNameLabel = destData.getDataStore().getUuid();
+
+            SR destSr = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
+
+            VDI vdiCopy = srcVdi.copy(conn, destSr);
+
+            VolumeObjectTO newVol = new VolumeObjectTO();
+
+            newVol.setSize(vdiCopy.getVirtualSize(conn));
+            newVol.setPath(vdiCopy.getUuid(conn));
+            newVol.setFormat(ImageFormat.VHD);
+
+            return new CopyCmdAnswer(newVol);
+        }
+        catch (Exception ex) {
+            s_logger.warn("Failed to copy snapshot to volume: " + ex.toString(), ex);
+
+            return new CopyCmdAnswer(ex.getMessage());
+        }
+        finally {
+            if (srcSr != null) {
+                hypervisorResource.removeSR(conn, srcSr);
+            }
+        }
+    }
+
     @Override
     public Answer deleteSnapshot(final DeleteCommand cmd) {
         final SnapshotObjectTO snapshot = (SnapshotObjectTO) cmd.getData();
@@ -1683,7 +1775,7 @@
             vdi.forget(conn);
             return new IntroduceObjectAnswer(cmd.getDataTO());
         } catch (final Exception e) {
-            s_logger.debug("Failed to introduce object", e);
+            s_logger.debug("Failed to forget object", e);
             return new Answer(cmd, false, e.toString());
         }
     }
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/Xenserver625Resource.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/Xenserver625Resource.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/Xenserver625Resource.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/Xenserver625Resource.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessor.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessor.java
similarity index 78%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessor.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessor.java
index dea1752..ddafc15 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessor.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessor.java
@@ -18,6 +18,27 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import java.io.File;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.cloudstack.storage.command.CopyCmdAnswer;
+import org.apache.cloudstack.storage.command.CopyCommand;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.SnapshotObjectTO;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
+
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.to.DataObjectType;
 import com.cloud.agent.api.to.DataStoreTO;
@@ -37,26 +58,9 @@
 import com.xensource.xenapi.Task;
 import com.xensource.xenapi.Types;
 import com.xensource.xenapi.Types.BadServerResponse;
+import com.xensource.xenapi.Types.StorageOperations;
 import com.xensource.xenapi.Types.XenAPIException;
 import com.xensource.xenapi.VDI;
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-import org.apache.cloudstack.storage.to.SnapshotObjectTO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import java.io.File;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
 
 public class Xenserver625StorageProcessor extends XenServerStorageProcessor {
     private static final Logger s_logger = Logger.getLogger(XenServerStorageProcessor.class);
@@ -65,92 +69,183 @@
         super(resource);
     }
 
-    protected boolean mountNfs(final Connection conn, final String remoteDir, String localDir) {
+    private void mountNfs(Connection conn, String remoteDir, String localDir) {
         if (localDir == null) {
             localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remoteDir.getBytes());
         }
-
-        final String results = hypervisorResource.callHostPluginAsync(conn, "cloud-plugin-storage", "mountNfsSecondaryStorage", 100 * 1000, "localDir", localDir, "remoteDir",
-                remoteDir);
-
-        if (results == null || results.isEmpty()) {
-            final String errMsg = "Could not mount secondary storage " + remoteDir + " on host " + localDir;
-
+        String result = hypervisorResource.callHostPluginAsync(conn, "cloud-plugin-storage", "mountNfsSecondaryStorage", 100 * 1000, "localDir", localDir, "remoteDir", remoteDir);
+        if (StringUtils.isBlank(result)) {
+            String errMsg = "Could not mount secondary storage " + remoteDir + " on host " + localDir;
             s_logger.warn(errMsg);
-
             throw new CloudRuntimeException(errMsg);
         }
-
-        return true;
     }
 
-    protected boolean makeDirectory(final Connection conn, final String path) {
-        final String result = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "makeDirectory", "path", path);
-
-        if (result == null || result.isEmpty()) {
-            return false;
-        }
-
-        return true;
+    protected boolean makeDirectory(Connection conn, String path) {
+        String result = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "makeDirectory", "path", path);
+        return StringUtils.isNotBlank(result);
     }
 
-    protected SR createFileSR(final Connection conn, final String path) {
-        SR sr = null;
-        PBD pbd = null;
-
-        try {
-            final String srname = path.trim();
-            synchronized (srname.intern()) {
-                final Set<SR> srs = SR.getByNameLabel(conn, srname);
-                if (srs != null && !srs.isEmpty()) {
-                    return srs.iterator().next();
-                }
-                final Map<String, String> smConfig = new HashMap<String, String>();
-                final Host host = Host.getByUuid(conn, hypervisorResource.getHost().getUuid());
-                final String uuid = UUID.randomUUID().toString();
-                sr = SR.introduce(conn, uuid, srname, srname, "file", "file", false, smConfig);
-                final PBD.Record record = new PBD.Record();
-                record.host = host;
-                record.SR = sr;
-                smConfig.put("location", path);
-                record.deviceConfig = smConfig;
-                pbd = PBD.create(conn, record);
-                pbd.plug(conn);
-                sr.scan(conn);
+    /**
+     *  Creates the file SR for the given path. If there already exist a file SR for the path, we return the existing one.
+     *  This method uses a synchronized block to guarantee that only a single file SR is created per path.
+     *  If it is not possible to retrieve one file SR or to create one, a runtime exception will be thrown.
+     */
+    protected SR createFileSR(Connection conn, String path) {
+        String srPath = StringUtils.trim(path);
+        synchronized (srPath) {
+            SR sr = retrieveAlreadyConfiguredSrWithoutException(conn, srPath);
+            if (sr == null) {
+                sr = createNewFileSr(conn, srPath);
+            }
+            if (sr == null) {
+                String hostUuid = this.hypervisorResource._host.getUuid();
+                throw new CloudRuntimeException(String.format("Could not retrieve an already used file SR for path [%s] or create a new file SR on host [%s]", srPath, hostUuid));
             }
             return sr;
-        } catch (final Exception ex) {
-            try {
-                if (pbd != null) {
-                    pbd.destroy(conn);
-                }
-            } catch (final Exception e1) {
-                s_logger.debug("Failed to destroy PBD", ex);
-            }
-
-            try {
-                if (sr != null) {
-                    sr.forget(conn);
-                }
-            } catch (final Exception e2) {
-                s_logger.error("Failed to forget SR", ex);
-            }
-
-            final String msg = "createFileSR failed! due to the following: " + ex.toString();
-
-            s_logger.warn(msg, ex);
-
-            throw new CloudRuntimeException(msg, ex);
         }
     }
 
-    protected SR createFileSr(final Connection conn, final String remotePath, final String dir) {
-        final String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remotePath.getBytes());
-        mountNfs(conn, remotePath, localDir);
-        final SR sr = createFileSR(conn, localDir + "/" + dir);
+    /**
+     * Creates a new file SR for the given path. If any of XenServer's checked exception occurs, we use method {@link #removeSrAndPbdIfPossible(Connection, SR, PBD)} to clean the created PBD and SR entries.
+     * To avoid race conditions between management servers, we are using a deterministic srUuid for the file SR to be created (we are leaving XenServer with the burden of managing race conditions). The UUID is based on the SR file path, and is generated using {@link UUID#nameUUIDFromBytes(byte[])}.
+     * If there is an SR with the generated UUID, this means that some other management server has just created it. An exception will occur and this exception will be an {@link InternalError}. The exception will contain {@link InternalError#message} a message saying 'Db_exn.Uniqueness_constraint_violation'.
+     * For cases where the previous described error happens, we catch the exception and use the method {@link #retrieveAlreadyConfiguredSrWithoutException(Connection, String)}.
+     */
+    protected SR createNewFileSr(Connection conn, String srPath) {
+        String hostUuid = hypervisorResource.getHost().getUuid();
+        s_logger.debug(String.format("Creating file SR for path [%s] on host [%s]", srPath, this.hypervisorResource._host.getUuid()));
+        SR sr = null;
+        PBD pbd = null;
+        try {
+            Host host = Host.getByUuid(conn, hostUuid);
+            String srUuid = UUID.nameUUIDFromBytes(srPath.getBytes()).toString();
+
+            Map<String, String> smConfig = new HashMap<String, String>();
+            sr = SR.introduce(conn, srUuid, srPath, srPath, "file", "file", false, smConfig);
+
+            PBD.Record record = new PBD.Record();
+            record.host = host;
+            record.SR = sr;
+            smConfig.put("location", srPath);
+            record.deviceConfig = smConfig;
+            pbd = PBD.create(conn, record);
+            pbd.plug(conn);
+            sr.scan(conn);
+            return sr;
+        } catch (XenAPIException | XmlRpcException e) {
+            if (e instanceof Types.InternalError) {
+                String expectedDuplicatedFileSrErrorMessage = "Db_exn.Uniqueness_constraint_violation";
+
+                Types.InternalError internalErrorException = (Types.InternalError)e;
+                if (StringUtils.contains(internalErrorException.message, expectedDuplicatedFileSrErrorMessage)) {
+                    s_logger.debug(String.format(
+                            "It seems that we have hit a race condition case here while creating file SR for [%s]. Instead of creating one, we will reuse the one that already exist in the XenServer pool.",
+                            srPath));
+                    return retrieveAlreadyConfiguredSrWithoutException(conn, srPath);
+                }
+            }
+            removeSrAndPbdIfPossible(conn, sr, pbd);
+            s_logger.debug(String.format("Could not create file SR [%s] on host [%s].", srPath, hostUuid), e);
+            return null;
+        }
+    }
+
+    /**
+     * Calls {@link #unplugPbd(Connection, PBD)} and {@link #forgetSr(Connection, SR)}, if respective objects are not null.
+     */
+    protected void removeSrAndPbdIfPossible(Connection conn, SR sr, PBD pbd) {
+        if (pbd != null) {
+            unplugPbd(conn, pbd);
+        }
+        if (sr != null) {
+            forgetSr(conn, sr);
+        }
+    }
+
+    /**
+     * This is a simple facade for {@link #retrieveAlreadyConfiguredSr(Connection, String)} method.
+     * If we catch any of the checked exception of {@link #retrieveAlreadyConfiguredSr(Connection, String)}, we re-throw as a {@link CloudRuntimeException}.
+     */
+    protected SR retrieveAlreadyConfiguredSrWithoutException(Connection conn, String srPath) {
+        try {
+            return retrieveAlreadyConfiguredSr(conn, srPath);
+        } catch (XenAPIException | XmlRpcException e) {
+            throw new CloudRuntimeException("Unexpected exception while trying to retrieve an already configured file SR for path: " + srPath);
+        }
+    }
+
+    /**
+     *  This method will check if there is an already configured file SR for the given path. If by any chance we find more than one SR with the same name (mount point path) we throw a runtime exception because this situation should never happen.
+     *  If we find an SR, we check if the SR is working properly (performing an {@link SR#scan(Connection)}). If everything is ok with the SR, we return it.
+     *  Otherwise, we remove the SR using {@link #forgetSr(Connection, SR)} method;
+     */
+    protected SR retrieveAlreadyConfiguredSr(Connection conn, String path) throws XenAPIException, XmlRpcException {
+        Set<SR> srs = SR.getByNameLabel(conn, path);
+        if (CollectionUtils.isEmpty(srs)) {
+            s_logger.debug("No file SR found for path: " + path);
+            return null;
+        }
+        if (srs.size() > 1) {
+            throw new CloudRuntimeException("There should be only one SR with name-label: " + path);
+        }
+        SR sr = srs.iterator().next();
+        String srUuid = sr.getUuid(conn);
+        s_logger.debug(String.format("SR [%s] was already introduced in XenServer. Checking if we can reuse it.", srUuid));
+        Map<String, StorageOperations> currentOperations = sr.getCurrentOperations(conn);
+        if (MapUtils.isEmpty(currentOperations)) {
+            s_logger.debug(String.format("There are no current operation in SR [%s]. It looks like an unusual condition. We will check if it is usable before returning it.", srUuid));
+        }
+        try {
+            sr.scan(conn);
+        } catch (XenAPIException | XmlRpcException e) {
+            s_logger.debug(String.format("Problems while checking if cached temporary SR [%s] is working properly (we executed sr-scan). We will not reuse it.", srUuid));
+            forgetSr(conn, sr);
+            return null;
+        }
+        s_logger.debug(String.format("Cached temporary SR [%s] is working properly. We will reuse it.", srUuid));
         return sr;
     }
 
+    /**
+     *  Forgets the given SR. Before executing the command {@link SR#forget(Connection)}, we will unplug all of its PBDs using {@link PBD#unplug(Connection)}.
+     *  Checked exceptions are captured and re-thrown as {@link CloudRuntimeException}.
+     */
+    protected void forgetSr(Connection conn, SR sr) {
+        String srUuid = StringUtils.EMPTY;
+        try {
+            srUuid = sr.getUuid(conn);
+            Set<PBD> pbDs = sr.getPBDs(conn);
+            for (PBD pbd : pbDs) {
+                s_logger.debug(String.format("Unpluging PBD [%s] of SR [%s] as it is not working properly.", pbd.getUuid(conn), srUuid));
+                unplugPbd(conn, pbd);
+            }
+            s_logger.debug(String.format("Forgetting SR [%s] as it is not working properly.", srUuid));
+            sr.forget(conn);
+        } catch (XenAPIException | XmlRpcException e) {
+            throw new CloudRuntimeException("Exception while forgeting SR: " + srUuid, e);
+        }
+    }
+
+    /**
+     * Unplugs the given {@link PBD}. If checked exception happens, we re-throw as {@link CloudRuntimeException}
+     */
+    protected void unplugPbd(Connection conn, PBD pbd) {
+        String pbdUuid = StringUtils.EMPTY;
+        try {
+            pbdUuid = pbd.getUuid(conn);
+            pbd.unplug(conn);
+        } catch (XenAPIException | XmlRpcException e) {
+            throw new CloudRuntimeException(String.format("Exception while unpluging PBD [%s].", pbdUuid));
+        }
+    }
+
+    protected SR createFileSr(Connection conn, String remotePath, String dir) {
+        String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remotePath.getBytes());
+        mountNfs(conn, remotePath, localDir);
+        return createFileSR(conn, localDir + "/" + dir);
+    }
+
     @Override
     public Answer copyTemplateToPrimaryStorage(final CopyCommand cmd) {
         final DataTO srcData = cmd.getSrcTO();
@@ -165,8 +260,8 @@
 
         try {
             if (srcStore instanceof NfsTO && srcData.getObjectType() == DataObjectType.TEMPLATE) {
-                final NfsTO srcImageStore = (NfsTO) srcStore;
-                final TemplateObjectTO srcTemplate = (TemplateObjectTO) srcData;
+                final NfsTO srcImageStore = (NfsTO)srcStore;
+                final TemplateObjectTO srcTemplate = (TemplateObjectTO)srcData;
                 final String storeUrl = srcImageStore.getUrl();
                 final URI uri = new URI(storeUrl);
                 String volumePath = srcData.getPath();
@@ -188,8 +283,7 @@
                 final Set<VDI> setVdis = srcSr.getVDIs(conn);
 
                 if (setVdis.size() != 1) {
-                    return new CopyCmdAnswer("Expected 1 VDI template, but found " + setVdis.size() + " VDI templates on: " +
-                            uri.getHost() + ":" + uri.getPath() + "/" + volumeDirectory);
+                    return new CopyCmdAnswer("Expected 1 VDI template, but found " + setVdis.size() + " VDI templates on: " + uri.getHost() + ":" + uri.getPath() + "/" + volumeDirectory);
                 }
 
                 final VDI srcVdi = setVdis.iterator().next();
@@ -202,7 +296,7 @@
                 String chapInitiatorUsername = null;
                 String chapInitiatorSecret = null;
 
-                final PrimaryDataStoreTO destStore = (PrimaryDataStoreTO) destData.getDataStore();
+                final PrimaryDataStoreTO destStore = (PrimaryDataStoreTO)destData.getDataStore();
 
                 Map<String, String> details = destStore.getDetails();
 
@@ -317,8 +411,8 @@
         return new CopyCmdAnswer("not implemented yet");
     }
 
-    protected String backupSnapshot(final Connection conn, final String primaryStorageSRUuid, final String localMountPoint, final String path,
-            final String secondaryStorageMountPath, final String snapshotUuid, String prevBackupUuid, final String prevSnapshotUuid, final Boolean isISCSI, int wait) {
+    protected String backupSnapshot(final Connection conn, final String primaryStorageSRUuid, final String localMountPoint, final String path, final String secondaryStorageMountPath,
+            final String snapshotUuid, String prevBackupUuid, final String prevSnapshotUuid, final Boolean isISCSI, int wait) {
         boolean filesrcreated = false;
         // boolean copied = false;
 
@@ -378,8 +472,8 @@
 
     @Override
     protected String getVhdParent(final Connection conn, final String primaryStorageSRUuid, final String snapshotUuid, final Boolean isISCSI) {
-        final String parentUuid = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid",
-                snapshotUuid, "isISCSI", isISCSI.toString());
+        final String parentUuid = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI",
+                isISCSI.toString());
 
         if (parentUuid == null || parentUuid.isEmpty() || parentUuid.equalsIgnoreCase("None")) {
             s_logger.debug("Unable to get parent of VHD " + snapshotUuid + " in SR " + primaryStorageSRUuid);
@@ -396,23 +490,23 @@
         final DataTO cacheData = cmd.getCacheTO();
         final DataTO destData = cmd.getDestTO();
         final int wait = cmd.getWait();
-        final PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) srcData.getDataStore();
+        final PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)srcData.getDataStore();
         final String primaryStorageNameLabel = primaryStore.getUuid();
         String secondaryStorageUrl = null;
         NfsTO cacheStore = null;
         String destPath = null;
         if (cacheData != null) {
-            cacheStore = (NfsTO) cacheData.getDataStore();
+            cacheStore = (NfsTO)cacheData.getDataStore();
             secondaryStorageUrl = cacheStore.getUrl();
             destPath = cacheData.getPath();
         } else {
-            cacheStore = (NfsTO) destData.getDataStore();
+            cacheStore = (NfsTO)destData.getDataStore();
             secondaryStorageUrl = cacheStore.getUrl();
             destPath = destData.getPath();
         }
 
-        final SnapshotObjectTO snapshotTO = (SnapshotObjectTO) srcData;
-        final SnapshotObjectTO snapshotOnImage = (SnapshotObjectTO) destData;
+        final SnapshotObjectTO snapshotTO = (SnapshotObjectTO)srcData;
+        final SnapshotObjectTO snapshotOnImage = (SnapshotObjectTO)destData;
         String snapshotUuid = snapshotTO.getPath();
 
         final String prevBackupUuid = snapshotOnImage.getParentSnapshotPath();
@@ -437,8 +531,7 @@
                 final String chapInitiatorSecret = srcDetails.get(DiskTO.CHAP_INITIATOR_SECRET);
                 final String srType = CitrixResourceBase.SRType.LVMOISCSI.toString();
 
-                primaryStorageSR = hypervisorResource.getIscsiSR(conn, iScsiName, storageHost, iScsiName,
-                        chapInitiatorUsername, chapInitiatorSecret, false, srType, true);
+                primaryStorageSR = hypervisorResource.getIscsiSR(conn, iScsiName, storageHost, iScsiName, chapInitiatorUsername, chapInitiatorSecret, false, srType, true);
 
                 final VDI srcVdi = primaryStorageSR.getVDIs(conn).iterator().next();
                 if (srcVdi == null) {
@@ -474,7 +567,7 @@
                     mountNfs(conn, secondaryStorageMountPath, localDir);
                     final boolean result = makeDirectory(conn, localDir + "/" + folder);
                     if (!result) {
-                        details = " Filed to create folder " + folder + " in secondary storage";
+                        details = " Failed to create folder " + folder + " in secondary storage";
                         s_logger.warn(details);
                         return new CopyCmdAnswer(details);
                     }
@@ -493,7 +586,7 @@
                     if (destStore instanceof SwiftTO) {
                         try {
                             final String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
-                            final String destSnapshotName = swiftBackupSnapshot(conn, (SwiftTO) destStore, snapshotSr.getUuid(conn), snapshotBackupUuid, container, false, wait);
+                            final String destSnapshotName = swiftBackupSnapshot(conn, (SwiftTO)destStore, snapshotSr.getUuid(conn), snapshotBackupUuid, container, false, wait);
                             final String swiftPath = container + File.separator + destSnapshotName;
                             finalPath = swiftPath;
                         } finally {
@@ -506,7 +599,7 @@
 
                     } else if (destStore instanceof S3TO) {
                         try {
-                            finalPath = backupSnapshotToS3(conn, (S3TO) destStore, snapshotSr.getUuid(conn), folder, snapshotBackupUuid, isISCSI, wait);
+                            finalPath = backupSnapshotToS3(conn, (S3TO)destStore, snapshotSr.getUuid(conn), folder, snapshotBackupUuid, isISCSI, wait);
                             if (finalPath == null) {
                                 throw new CloudRuntimeException("S3 upload of snapshots " + snapshotBackupUuid + " failed");
                             }
@@ -543,17 +636,15 @@
                 final String primaryStorageSRUuid = primaryStorageSR.getUuid(conn);
                 if (destStore instanceof SwiftTO) {
                     final String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
-                    snapshotBackupUuid = swiftBackupSnapshot(conn, (SwiftTO) destStore, primaryStorageSRUuid, snapshotPaUuid, "S-"
-                            + snapshotTO.getVolume().getVolumeId().toString(), isISCSI, wait);
+                    snapshotBackupUuid = swiftBackupSnapshot(conn, (SwiftTO)destStore, primaryStorageSRUuid, snapshotPaUuid, "S-" + snapshotTO.getVolume().getVolumeId().toString(), isISCSI, wait);
                     finalPath = container + File.separator + snapshotBackupUuid;
                 } else if (destStore instanceof S3TO) {
-                    finalPath = backupSnapshotToS3(conn, (S3TO) destStore, primaryStorageSRUuid, folder, snapshotPaUuid, isISCSI, wait);
+                    finalPath = backupSnapshotToS3(conn, (S3TO)destStore, primaryStorageSRUuid, folder, snapshotPaUuid, isISCSI, wait);
                     if (finalPath == null) {
                         throw new CloudRuntimeException("S3 upload of snapshots " + snapshotPaUuid + " failed");
                     }
                 } else {
-                    final String result = backupSnapshot(conn, primaryStorageSRUuid, localMountPoint, folder, secondaryStorageMountPath, snapshotUuid, prevBackupUuid,
-                            prevSnapshotUuid, isISCSI, wait);
+                    final String result = backupSnapshot(conn, primaryStorageSRUuid, localMountPoint, folder, secondaryStorageMountPath, snapshotUuid, prevBackupUuid, prevSnapshotUuid, isISCSI, wait);
                     final String[] tmp = result.split("#");
                     snapshotBackupUuid = tmp[0];
                     physicalSize = Long.parseLong(tmp[1]);
@@ -574,7 +665,7 @@
                 newSnapshot.setParentSnapshotPath(prevBackupUuid);
             }
             s_logger.info("New snapshot details: " + newSnapshot.toString());
-            s_logger.info("New snapshot physical utilization: "+physicalSize);
+            s_logger.info("New snapshot physical utilization: " + physicalSize);
 
             return new CopyCmdAnswer(newSnapshot);
         } catch (final Exception e) {
@@ -592,9 +683,9 @@
     @Override
     public Answer createTemplateFromVolume(final CopyCommand cmd) {
         final Connection conn = hypervisorResource.getConnection();
-        final VolumeObjectTO volume = (VolumeObjectTO) cmd.getSrcTO();
-        final TemplateObjectTO template = (TemplateObjectTO) cmd.getDestTO();
-        final NfsTO destStore = (NfsTO) cmd.getDestTO().getDataStore();
+        final VolumeObjectTO volume = (VolumeObjectTO)cmd.getSrcTO();
+        final TemplateObjectTO template = (TemplateObjectTO)cmd.getDestTO();
+        final NfsTO destStore = (NfsTO)cmd.getDestTO().getDataStore();
         final int wait = cmd.getWait();
 
         final String secondaryStoragePoolURL = destStore.getUrl();
@@ -640,8 +731,7 @@
             final long physicalSize = tmpltVDI.getPhysicalUtilisation(conn);
             // create the template.properties file
             final String templatePath = secondaryStorageMountPath + "/" + installPath;
-            result = hypervisorResource.postCreatePrivateTemplate(conn, templatePath, tmpltFilename, tmpltUUID, userSpecifiedName, null, physicalSize, virtualSize,
-                    template.getId());
+            result = hypervisorResource.postCreatePrivateTemplate(conn, templatePath, tmpltFilename, tmpltUUID, userSpecifiedName, null, physicalSize, virtualSize, template.getId());
             if (!result) {
                 throw new CloudRuntimeException("Could not create the template.properties file on secondary storage dir");
             }
@@ -691,21 +781,25 @@
     public Answer createVolumeFromSnapshot(final CopyCommand cmd) {
         final Connection conn = hypervisorResource.getConnection();
         final DataTO srcData = cmd.getSrcTO();
-        final SnapshotObjectTO snapshot = (SnapshotObjectTO) srcData;
+        final SnapshotObjectTO snapshot = (SnapshotObjectTO)srcData;
         final DataTO destData = cmd.getDestTO();
-        final PrimaryDataStoreTO pool = (PrimaryDataStoreTO) destData.getDataStore();
-        final VolumeObjectTO volume = (VolumeObjectTO) destData;
+        final PrimaryDataStoreTO pool = (PrimaryDataStoreTO)destData.getDataStore();
+        final VolumeObjectTO volume = (VolumeObjectTO)destData;
         final DataStoreTO imageStore = srcData.getDataStore();
 
-        if (srcData.getDataStore() instanceof PrimaryDataStoreTO && destData.getDataStore() instanceof PrimaryDataStoreTO) {
-            return createVolumeFromSnapshot2(cmd);
+        if (isCreateManagedVolumeFromManagedSnapshot(cmd.getOptions2(), cmd.getOptions())) {
+            return createManagedVolumeFromManagedSnapshot(cmd);
+        }
+
+        if (isCreateNonManagedVolumeFromManagedSnapshot(cmd.getOptions2(), cmd.getOptions())) {
+            return createNonManagedVolumeFromManagedSnapshot(cmd);
         }
 
         if (!(imageStore instanceof NfsTO)) {
             return new CopyCmdAnswer("unsupported protocol");
         }
 
-        final NfsTO nfsImageStore = (NfsTO) imageStore;
+        final NfsTO nfsImageStore = (NfsTO)imageStore;
         final String primaryStorageNameLabel = pool.getUuid();
         final String secondaryStorageUrl = nfsImageStore.getUrl();
         final int wait = cmd.getWait();
@@ -725,7 +819,7 @@
 
         try {
             if (pool.isManaged()) {
-                Map<String,String> destDetails = cmd.getOptions2();
+                Map<String, String> destDetails = cmd.getOptions2();
 
                 final String iScsiName = destDetails.get(DiskTO.IQN);
                 final String storageHost = destDetails.get(DiskTO.STORAGE_HOST);
@@ -733,16 +827,14 @@
                 final String chapInitiatorSecret = destDetails.get(DiskTO.CHAP_INITIATOR_SECRET);
                 final String srType = CitrixResourceBase.SRType.LVMOISCSI.toString();
 
-                primaryStorageSR = hypervisorResource.getIscsiSR(conn, iScsiName, storageHost, iScsiName,
-                        chapInitiatorUsername, chapInitiatorSecret, false, srType, true);
+                primaryStorageSR = hypervisorResource.getIscsiSR(conn, iScsiName, storageHost, iScsiName, chapInitiatorUsername, chapInitiatorSecret, false, srType, true);
 
             } else {
                 primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
             }
 
             if (primaryStorageSR == null) {
-                throw new InternalErrorException("Could not create volume from snapshot because the primary Storage SR could not be created from the name label: "
-                        + primaryStorageNameLabel);
+                throw new InternalErrorException("Could not create volume from snapshot because the primary Storage SR could not be created from the name label: " + primaryStorageNameLabel);
             }
 
             final String nameLabel = "cloud-" + UUID.randomUUID().toString();
@@ -821,8 +913,8 @@
     @Override
     public Answer copyVolumeFromPrimaryToSecondary(final CopyCommand cmd) {
         final Connection conn = hypervisorResource.getConnection();
-        final VolumeObjectTO srcVolume = (VolumeObjectTO) cmd.getSrcTO();
-        final VolumeObjectTO destVolume = (VolumeObjectTO) cmd.getDestTO();
+        final VolumeObjectTO srcVolume = (VolumeObjectTO)cmd.getSrcTO();
+        final VolumeObjectTO destVolume = (VolumeObjectTO)cmd.getDestTO();
         final int wait = cmd.getWait();
         final DataStoreTO destStore = destVolume.getDataStore();
 
@@ -830,7 +922,7 @@
             SR secondaryStorage = null;
             Task task = null;
             try {
-                final NfsTO nfsStore = (NfsTO) destStore;
+                final NfsTO nfsStore = (NfsTO)destStore;
                 final URI uri = new URI(nfsStore.getUrl());
                 // Create the volume folder
                 if (!hypervisorResource.createSecondaryStorageFolder(conn, uri.getHost() + ":" + uri.getPath(), destVolume.getPath())) {
@@ -876,13 +968,13 @@
         final DataTO srcData = cmd.getSrcTO();
         final DataTO destData = cmd.getDestTO();
         final int wait = cmd.getWait();
-        final VolumeObjectTO srcVolume = (VolumeObjectTO) srcData;
-        final VolumeObjectTO destVolume = (VolumeObjectTO) destData;
-        final PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) destVolume.getDataStore();
+        final VolumeObjectTO srcVolume = (VolumeObjectTO)srcData;
+        final VolumeObjectTO destVolume = (VolumeObjectTO)destData;
+        final PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)destVolume.getDataStore();
         final DataStoreTO srcStore = srcVolume.getDataStore();
 
         if (srcStore instanceof NfsTO) {
-            final NfsTO nfsStore = (NfsTO) srcStore;
+            final NfsTO nfsStore = (NfsTO)srcStore;
             final String volumePath = srcVolume.getPath();
             int index = volumePath.lastIndexOf("/");
             final String volumeDirectory = volumePath.substring(0, index);
@@ -948,11 +1040,11 @@
 
         final int wait = cmd.getWait();
 
-        final SnapshotObjectTO srcObj = (SnapshotObjectTO) srcData;
-        final TemplateObjectTO destObj = (TemplateObjectTO) destData;
+        final SnapshotObjectTO srcObj = (SnapshotObjectTO)srcData;
+        final TemplateObjectTO destObj = (TemplateObjectTO)destData;
 
-        final NfsTO srcStore = (NfsTO) srcObj.getDataStore();
-        final NfsTO destStore = (NfsTO) destObj.getDataStore();
+        final NfsTO srcStore = (NfsTO)srcObj.getDataStore();
+        final NfsTO destStore = (NfsTO)destObj.getDataStore();
 
         URI srcUri = null;
         URI destUri = null;
@@ -1083,8 +1175,8 @@
     private Answer createTemplateFromSnapshot2(final CopyCommand cmd) {
         final Connection conn = hypervisorResource.getConnection();
 
-        final SnapshotObjectTO snapshotObjTO = (SnapshotObjectTO) cmd.getSrcTO();
-        final TemplateObjectTO templateObjTO = (TemplateObjectTO) cmd.getDestTO();
+        final SnapshotObjectTO snapshotObjTO = (SnapshotObjectTO)cmd.getSrcTO();
+        final TemplateObjectTO templateObjTO = (TemplateObjectTO)cmd.getDestTO();
 
         if (!(snapshotObjTO.getDataStore() instanceof PrimaryDataStoreTO) || !(templateObjTO.getDataStore() instanceof NfsTO)) {
             return null;
@@ -1153,8 +1245,7 @@
 
             templatePath = templatePath.replaceAll("//", "/");
 
-            result = hypervisorResource.postCreatePrivateTemplate(conn, templatePath, templateFilename, templateUuid, nameLabel, null, physicalSize, virtualSize,
-                    templateObjTO.getId());
+            result = hypervisorResource.postCreatePrivateTemplate(conn, templatePath, templateFilename, templateUuid, nameLabel, null, physicalSize, virtualSize, templateObjTO.getId());
 
             if (!result) {
                 throw new CloudRuntimeException("Could not create the template.properties file on secondary storage dir");
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XsHost.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XsHost.java
similarity index 95%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XsHost.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XsHost.java
index e17a017..dcc5ff2 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XsHost.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XsHost.java
@@ -43,7 +43,6 @@
     private Integer cpuSockets;
     private int cpus;
     private String productVersion;
-    private String localSRuuid;
 
     public String getSystemvmisouuid() {
         return systemvmisouuid;
@@ -197,14 +196,6 @@
         this.productVersion = productVersion;
     }
 
-    public String getLocalSRuuid() {
-        return localSRuuid;
-    }
-
-    public void setLocalSRuuid(final String localSRuuid) {
-        this.localSRuuid = localSRuuid;
-    }
-
     @Override
     public String toString() {
         return new StringBuilder("XS[").append(uuid).append("-").append(ip).append("]").toString();
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XsLocalNetwork.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XsLocalNetwork.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XsLocalNetwork.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/XsLocalNetwork.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xcp/XcpServerNetworkUsageCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xcp/XcpServerNetworkUsageCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xcp/XcpServerNetworkUsageCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xcp/XcpServerNetworkUsageCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56CheckOnHostCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56CheckOnHostCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56CheckOnHostCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56CheckOnHostCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56FenceCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56FenceCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56FenceCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56FenceCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56NetworkUsageCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56NetworkUsageCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56NetworkUsageCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56/XenServer56NetworkUsageCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56p1/XenServer56FP1FenceCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56p1/XenServer56FP1FenceCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen56p1/XenServer56FP1FenceCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen56p1/XenServer56FP1FenceCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateVolumeCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateVolumeCommandWrapper.java
new file mode 100644
index 0000000..896df6a
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateVolumeCommandWrapper.java
@@ -0,0 +1,98 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.hypervisor.xenserver.resource.wrapper.xen610;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.storage.MigrateVolumeAnswer;
+import com.cloud.agent.api.storage.MigrateVolumeCommand;
+import com.cloud.agent.api.to.DiskTO;
+import com.cloud.agent.api.to.StorageFilerTO;
+import com.cloud.hypervisor.xenserver.resource.XenServer610Resource;
+import com.cloud.resource.CommandWrapper;
+import com.cloud.resource.ResourceWrapper;
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.Task;
+import com.xensource.xenapi.Types;
+import com.xensource.xenapi.VDI;
+
+@ResourceWrapper(handles =  MigrateVolumeCommand.class)
+public final class XenServer610MigrateVolumeCommandWrapper extends CommandWrapper<MigrateVolumeCommand, Answer, XenServer610Resource> {
+    private static final Logger LOGGER = Logger.getLogger(XenServer610MigrateVolumeCommandWrapper.class);
+
+    @Override
+    public Answer execute(final MigrateVolumeCommand command, final XenServer610Resource xenServer610Resource) {
+        Connection connection = xenServer610Resource.getConnection();
+        String srcVolumeUuid = command.getVolumePath();
+        SR destPool = null;
+        Map<String, String> destDetails = command.getDestDetails();
+
+        try {
+            VDI srcVolume = xenServer610Resource.getVDIbyUuid(connection, srcVolumeUuid);
+
+            if (destDetails != null && Boolean.parseBoolean(destDetails.get(DiskTO.MANAGED))) {
+                String iScsiName = destDetails.get(DiskTO.IQN);
+                String storageHost = destDetails.get(DiskTO.STORAGE_HOST);
+                String chapInitiatorUsername = destDetails.get(DiskTO.CHAP_INITIATOR_USERNAME);
+                String chapInitiatorSecret = destDetails.get(DiskTO.CHAP_INITIATOR_SECRET);
+
+                destPool = xenServer610Resource.getIscsiSR(connection, iScsiName, storageHost, iScsiName,
+                        chapInitiatorUsername, chapInitiatorSecret, false);
+            }
+            else {
+                StorageFilerTO destPoolTO = command.getPool();
+                String destPoolUuid = destPoolTO.getUuid();
+
+                destPool = xenServer610Resource.getStorageRepository(connection, destPoolUuid);
+            }
+
+            Map<String, String> other = new HashMap<>();
+
+            other.put("live", "true");
+
+            // Live migrate the VDI.
+            Task task = srcVolume.poolMigrateAsync(connection, destPool, other);
+
+            long timeout = xenServer610Resource.getMigrateWait() * 1000L;
+
+            xenServer610Resource.waitForTask(connection, task, 1000, timeout);
+            xenServer610Resource.checkForSuccess(connection, task);
+
+            VDI destVdi = Types.toVDI(task, connection);
+
+            return new MigrateVolumeAnswer(command, true, null, destVdi.getUuid(connection));
+        } catch (Exception ex) {
+            if (destDetails != null && Boolean.parseBoolean(destDetails.get(DiskTO.MANAGED)) && destPool != null) {
+                xenServer610Resource.removeSR(connection, destPool);
+            }
+
+            String msg = "Caught exception " + ex.getClass().getName() + " due to the following: " + ex.toString();
+
+            LOGGER.error(msg, ex);
+
+            return new MigrateVolumeAnswer(command, false, msg, null);
+        }
+    }
+}
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCompleteCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCompleteCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCompleteCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageCompleteCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageReceiveCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageReceiveCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageReceiveCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageReceiveCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageSendCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageSendCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageSendCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen610/XenServer610MigrateWithStorageSendCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen620sp1/XenServer620SP1GetGPUStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen620sp1/XenServer620SP1GetGPUStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xen620sp1/XenServer620SP1GetGPUStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xen620sp1/XenServer620SP1GetGPUStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachIsoCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachOrDettachConfigDriveCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachOrDettachConfigDriveCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachOrDettachConfigDriveCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixAttachOrDettachConfigDriveCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckConsoleProxyLoadCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckConsoleProxyLoadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckConsoleProxyLoadCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckConsoleProxyLoadCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckHealthCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckHealthCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckHealthCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckHealthCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckNetworkCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckNetworkCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckNetworkCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckNetworkCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckOnHostCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckOnHostCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckOnHostCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckOnHostCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckSshCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckSshCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckSshCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckSshCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckVirtualMachineCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckVirtualMachineCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckVirtualMachineCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckVirtualMachineCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCleanupNetworkRulesCmdWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCleanupNetworkRulesCmdWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCleanupNetworkRulesCmdWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCleanupNetworkRulesCmdWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixClusterVMMetaDataSyncCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixClusterVMMetaDataSyncCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixClusterVMMetaDataSyncCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixClusterVMMetaDataSyncCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixConsoleProxyLoadCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixConsoleProxyLoadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixConsoleProxyLoadCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixConsoleProxyLoadCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateStoragePoolCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateStoragePoolCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCreateVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteStoragePoolCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteStoragePoolCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDeleteVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDestroyCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDestroyCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDestroyCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixDestroyCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetHostStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetHostStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetHostStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetHostStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetStorageStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetStorageStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetStorageStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetStorageStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmDiskStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmDiskStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmDiskStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmDiskStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmIpAddressCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmIpAddressCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmIpAddressCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmIpAddressCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmNetworkStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmNetworkStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmNetworkStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmNetworkStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVmStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVncPortCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVncPortCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVncPortCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVncPortCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVolumeStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVolumeStatsCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVolumeStatsCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixGetVolumeStatsCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMaintainCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMaintainCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMaintainCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMaintainCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMigrateCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMigrateCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMigrateCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixMigrateCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifySshKeysCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifySshKeysCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifySshKeysCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifySshKeysCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifyStoragePoolCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifyStoragePoolCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifyStoragePoolCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixModifyStoragePoolCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkElementCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkElementCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkElementCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkElementCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesSystemVmCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesSystemVmCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesSystemVmCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesSystemVmCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesVmSecondaryIpCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesVmSecondaryIpCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesVmSecondaryIpCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixNetworkRulesVmSecondaryIpCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateGreTunnelCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateGreTunnelCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateGreTunnelCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateGreTunnelCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateTunnelCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateTunnelCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateTunnelCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsCreateTunnelCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDeleteFlowCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDeleteFlowCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDeleteFlowCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDeleteFlowCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyBridgeCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyBridgeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyBridgeCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyBridgeCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyTunnelCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyTunnelCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyTunnelCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsDestroyTunnelCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsFetchInterfaceCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsFetchInterfaceCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsFetchInterfaceCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsFetchInterfaceCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetTagAndFlowCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetTagAndFlowCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetTagAndFlowCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetTagAndFlowCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetupBridgeCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetupBridgeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetupBridgeCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsSetupBridgeCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcPhysicalTopologyConfigCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcPhysicalTopologyConfigCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcPhysicalTopologyConfigCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcPhysicalTopologyConfigCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcRoutingPolicyConfigCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcRoutingPolicyConfigCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcRoutingPolicyConfigCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixOvsVpcRoutingPolicyConfigCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPerformanceMonitorCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPerformanceMonitorCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPerformanceMonitorCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPerformanceMonitorCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPingTestCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPingTestCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPingTestCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPingTestCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPlugNicCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPlugNicCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPlugNicCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPlugNicCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrepareForMigrationCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrepareForMigrationCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrepareForMigrationCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrepareForMigrationCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrimaryStorageDownloadCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrimaryStorageDownloadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrimaryStorageDownloadCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPrimaryStorageDownloadCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPvlanSetupCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPvlanSetupCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPvlanSetupCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixPvlanSetupCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixReadyCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixReadyCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixReadyCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixReadyCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootRouterCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootRouterCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootRouterCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRebootRouterCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRevertToVMSnapshotCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRevertToVMSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRevertToVMSnapshotCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRevertToVMSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixScaleVmCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixScaleVmCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixScaleVmCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixScaleVmCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSecurityGroupRulesCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSecurityGroupRulesCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSecurityGroupRulesCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSecurityGroupRulesCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSetupCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSetupCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSetupCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixSetupCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStartCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStartCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStartCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStartCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStopCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStopCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStopCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStopCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStorageSubSystemCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStorageSubSystemCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStorageSubSystemCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixStorageSubSystemCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUnPlugNicCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUnPlugNicCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUnPlugNicCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUnPlugNicCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpdateHostPasswordCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpdateHostPasswordCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpdateHostPasswordCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpdateHostPasswordCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpgradeSnapshotCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpgradeSnapshotCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpgradeSnapshotCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixUpgradeSnapshotCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixWatchConsoleProxyLoadCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixWatchConsoleProxyLoadCommandWrapper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixWatchConsoleProxyLoadCommandWrapper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixWatchConsoleProxyLoadCommandWrapper.java
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
rename to plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServerUtilitiesHelper.java
diff --git a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java b/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
rename to plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
diff --git a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java b/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java
rename to plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/XenserverConfigs.java
diff --git a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java b/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java
similarity index 100%
rename from plugins/hypervisors/xenserver/src/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java
rename to plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/storage/motion/XenServerStorageMotionStrategy.java
diff --git a/plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-compute/module.properties b/plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-compute/module.properties
similarity index 100%
rename from plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-compute/module.properties
rename to plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-compute/module.properties
diff --git a/plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml b/plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml
similarity index 100%
rename from plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml
rename to plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-compute/spring-xenserver-compute-context.xml
diff --git a/plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-discoverer/module.properties b/plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-discoverer/module.properties
similarity index 100%
rename from plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-discoverer/module.properties
rename to plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-discoverer/module.properties
diff --git a/plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml b/plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml
similarity index 100%
rename from plugins/hypervisors/xenserver/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml
rename to plugins/hypervisors/xenserver/src/main/resources/META-INF/cloudstack/xenserver-discoverer/spring-xenserver-discoverer-context.xml
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/XenServerGuruTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/XenServerGuruTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/XenServerGuruTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/XenServerGuruTest.java
diff --git a/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscovererTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscovererTest.java
new file mode 100644
index 0000000..a3082c6
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/discoverer/XcpServerDiscovererTest.java
@@ -0,0 +1,72 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package com.cloud.hypervisor.xenserver.discoverer;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.dao.VMTemplateDao;
+
+@RunWith(MockitoJUnitRunner.class)
+public class XcpServerDiscovererTest {
+
+    @Spy
+    @InjectMocks
+    private XcpServerDiscoverer xcpServerDiscoverer;
+
+    @Mock
+    private VMTemplateDao vmTemplateDao;
+
+    @Test
+    public void createXenServerToolsIsoEntryInDatabaseTestNoEntryFound() {
+        Mockito.when(vmTemplateDao.findByTemplateName("xs-tools.iso")).thenReturn(null);
+        Mockito.when(vmTemplateDao.getNextInSequence(Long.class, "id")).thenReturn(1L);
+
+        xcpServerDiscoverer.createXenServerToolsIsoEntryInDatabase();
+
+        InOrder inOrder = Mockito.inOrder(vmTemplateDao);
+        inOrder.verify(vmTemplateDao).findByTemplateName("xs-tools.iso");
+        inOrder.verify(vmTemplateDao).getNextInSequence(Long.class, "id");
+        inOrder.verify(vmTemplateDao).persist(Mockito.any(VMTemplateVO.class));
+    }
+
+    @Test
+    public void createXenServerToolsIsoEntryInDatabaseTestEntryAlreadyExist() {
+        VMTemplateVO vmTemplateVOMock = Mockito.mock(VMTemplateVO.class);
+        Mockito.when(vmTemplateDao.findByTemplateName("xs-tools.iso")).thenReturn(vmTemplateVOMock);
+        Mockito.when(vmTemplateVOMock.getId()).thenReturn(1L);
+
+        xcpServerDiscoverer.createXenServerToolsIsoEntryInDatabase();
+
+        InOrder inOrder = Mockito.inOrder(vmTemplateDao, vmTemplateVOMock);
+        inOrder.verify(vmTemplateDao).findByTemplateName("xs-tools.iso");
+        inOrder.verify(vmTemplateDao, Mockito.times(0)).getNextInSequence(Long.class, "id");
+        inOrder.verify(vmTemplateVOMock).setTemplateType(TemplateType.PERHOST);
+        inOrder.verify(vmTemplateVOMock).setUrl(null);
+        inOrder.verify(vmTemplateVOMock).setDisplayText("XenServer Tools Installer ISO (xen-pv-drv-iso)");
+        inOrder.verify(vmTemplateDao).update(1L, vmTemplateVOMock);
+    }
+}
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/CitrixHelperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/CitrixHelperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/CitrixHelperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/CitrixHelperTest.java
diff --git a/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBaseTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBaseTest.java
new file mode 100644
index 0000000..b34bba0
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBaseTest.java
@@ -0,0 +1,371 @@
+/*
+ * Copyright 2015 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.cloud.hypervisor.xenserver.resource;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.BDDMockito;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.cloud.agent.api.StartupStorageCommand;
+import com.cloud.agent.api.StoragePoolInfo;
+import com.cloud.hypervisor.xenserver.resource.CitrixResourceBase.SRType;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.storage.Storage.StorageResourceType;
+import com.cloud.utils.script.Script;
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.Host;
+import com.xensource.xenapi.Host.Record;
+import com.xensource.xenapi.PBD;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.Types.XenAPIException;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({Host.class, Script.class, SR.class})
+public class CitrixResourceBaseTest {
+
+    @Spy
+    protected CitrixResourceBase citrixResourceBase = new CitrixResourceBase() {
+        @Override
+        protected String getPatchFilePath() {
+            return null;
+        }
+    };
+
+    @Mock
+    private Connection connectionMock;
+    @Mock
+    private Host hostMock;
+    @Mock
+    private Record hostRecordMock;
+
+    private String hostUuidMock = "hostUuidMock";
+
+    @Before
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        citrixResourceBase._host.setUuid(hostUuidMock);
+
+        PowerMockito.mockStatic(Host.class);
+        PowerMockito.when(Host.getByUuid(connectionMock, hostUuidMock)).thenReturn(hostMock);
+
+        hostRecordMock.softwareVersion = new HashMap<>();
+        Mockito.when(hostMock.getRecord(connectionMock)).thenReturn(hostRecordMock);
+
+    }
+
+    public void testGetPathFilesExeption() {
+        String patch = citrixResourceBase.getPatchFilePath();
+
+        PowerMockito.mockStatic(Script.class);
+        Mockito.when(Script.findScript("", patch)).thenReturn(null);
+
+        citrixResourceBase.getPatchFiles();
+
+    }
+
+    public void testGetPathFilesListReturned() {
+        String patch = citrixResourceBase.getPatchFilePath();
+
+        PowerMockito.mockStatic(Script.class);
+        Mockito.when(Script.findScript("", patch)).thenReturn(patch);
+
+        File expected = new File(patch);
+        String pathExpected = expected.getAbsolutePath();
+
+        List<File> files = citrixResourceBase.getPatchFiles();
+        String receivedPath = files.get(0).getAbsolutePath();
+        Assert.assertEquals(receivedPath, pathExpected);
+    }
+
+    @Test
+    public void testGetGuestOsTypeNull() {
+        String platformEmulator = null;
+
+        String expected = "Other install media";
+        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
+        Assert.assertEquals(expected, guestOsType);
+    }
+
+    @Test
+    public void testGetGuestOsTypeEmpty() {
+        String platformEmulator = "";
+
+        String expected = "Other install media";
+        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
+        Assert.assertEquals(expected, guestOsType);
+    }
+
+    @Test
+    public void testGetGuestOsTypeBlank() {
+        String platformEmulator = "    ";
+
+        String expected = "Other install media";
+        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
+        Assert.assertEquals(expected, guestOsType);
+    }
+
+    @Test
+    public void testGetGuestOsTypeOther() {
+        String platformEmulator = "My Own Linux Distribution Y.M (64-bit)";
+
+        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
+        Assert.assertEquals(platformEmulator, guestOsType);
+    }
+
+    @Test
+    public void actualIsoTemplateTestXcpHots() throws XenAPIException, XmlRpcException {
+        hostRecordMock.softwareVersion.put("product_brand", "XCP");
+        hostRecordMock.softwareVersion.put("product_version", "1.0");
+
+        String returnedIsoTemplateName = citrixResourceBase.getActualIsoTemplate(connectionMock);
+
+        Assert.assertEquals("xs-tools.iso", returnedIsoTemplateName);
+    }
+
+    @Test
+    public void actualIsoTemplateTestXenServerBefore70() throws XenAPIException, XmlRpcException {
+        hostRecordMock.softwareVersion.put("product_brand", "XenServer");
+        hostRecordMock.softwareVersion.put("product_version", "6.0");
+
+        String returnedIsoTemplateName = citrixResourceBase.getActualIsoTemplate(connectionMock);
+
+        Assert.assertEquals("xs-tools.iso", returnedIsoTemplateName);
+    }
+
+    @Test
+    public void actualIsoTemplateTestXenServer70() throws XenAPIException, XmlRpcException {
+        hostRecordMock.softwareVersion.put("product_brand", "XenServer");
+        hostRecordMock.softwareVersion.put("product_version", "7.0");
+
+        String returnedIsoTemplateName = citrixResourceBase.getActualIsoTemplate(connectionMock);
+
+        Assert.assertEquals("guest-tools.iso", returnedIsoTemplateName);
+    }
+
+    @Test
+    public void actualIsoTemplateTestXenServer71() throws XenAPIException, XmlRpcException {
+        hostRecordMock.softwareVersion.put("product_brand", "XenServer");
+        hostRecordMock.softwareVersion.put("product_version", "7.1");
+
+        String returnedIsoTemplateName = citrixResourceBase.getActualIsoTemplate(connectionMock);
+
+        Assert.assertEquals("guest-tools.iso", returnedIsoTemplateName);
+    }
+
+    @Test
+    public void getAllLocalSrForTypeTest() throws Exception {
+        String mockHostUuid = "hostUuid";
+        citrixResourceBase._host.setUuid(mockHostUuid);
+
+        Connection connectionMock = Mockito.mock(Connection.class);
+
+        SR srExtShared = Mockito.mock(SR.class);
+        SR srExtNonShared = Mockito.mock(SR.class);
+
+        List<SR> expectedListOfSrs = new ArrayList<>();
+        expectedListOfSrs.add(srExtNonShared);
+
+        Set<PBD> pbds = new HashSet<>();
+        PBD pbdMock = Mockito.mock(PBD.class);
+        Host hostMock = Mockito.mock(Host.class);
+        Mockito.when(hostMock.getUuid(connectionMock)).thenReturn(mockHostUuid);
+        Mockito.when(hostMock.toWireString()).thenReturn(mockHostUuid);
+
+        Mockito.when(pbdMock.getHost(connectionMock)).thenReturn(hostMock);
+        pbds.add(pbdMock);
+
+        SR.Record srExtSharedRecord = Mockito.mock(SR.Record.class);
+        srExtSharedRecord.type = "EXT";
+        srExtSharedRecord.shared = true;
+        srExtSharedRecord.PBDs = pbds;
+
+        SR.Record srExtNonSharedRecord = Mockito.mock(SR.Record.class);
+        srExtNonSharedRecord.type = "EXT";
+        srExtNonSharedRecord.shared = false;
+        srExtNonSharedRecord.PBDs = pbds;
+
+        Map<SR, SR.Record> mapOfSrsRecords = new HashMap<>();
+        mapOfSrsRecords.put(srExtShared, srExtSharedRecord);
+        mapOfSrsRecords.put(srExtNonShared, srExtNonSharedRecord);
+
+        PowerMockito.mockStatic(SR.class);
+        BDDMockito.given(SR.getAllRecords(connectionMock)).willReturn(mapOfSrsRecords);
+
+        List<SR> allLocalSrForType = citrixResourceBase.getAllLocalSrForType(connectionMock, SRType.EXT);
+
+        Assert.assertEquals(expectedListOfSrs.size(), allLocalSrForType.size());
+        Assert.assertEquals(expectedListOfSrs.get(0), allLocalSrForType.get(0));
+    }
+
+    @Test
+    public void getAllLocalSrForTypeNoSrsFoundTest() throws XenAPIException, XmlRpcException {
+        Connection connectionMock = Mockito.mock(Connection.class);
+        List<SR> allLocalSrForType = citrixResourceBase.getAllLocalSrForType(connectionMock, SRType.EXT);
+        Assert.assertTrue(allLocalSrForType.isEmpty());
+    }
+
+    @Test
+    public void getAllLocalSrsTest() throws XenAPIException, XmlRpcException {
+        Connection connectionMock = Mockito.mock(Connection.class);
+        SR sr1 = Mockito.mock(SR.class);
+        List<SR> srsExt = new ArrayList<>();
+        srsExt.add(sr1);
+
+        SR sr2 = Mockito.mock(SR.class);
+        List<SR> srsLvm = new ArrayList<>();
+        srsLvm.add(sr2);
+
+        Mockito.doReturn(srsExt).when(citrixResourceBase).getAllLocalSrForType(connectionMock, SRType.EXT);
+        Mockito.doReturn(srsLvm).when(citrixResourceBase).getAllLocalSrForType(connectionMock, SRType.LVM);
+
+        List<SR> allLocalSrs = citrixResourceBase.getAllLocalSrs(connectionMock);
+
+        Assert.assertEquals(srsExt.size() + srsLvm.size(), allLocalSrs.size());
+        Assert.assertEquals(srsExt.get(0), allLocalSrs.get(1));
+        Assert.assertEquals(srsLvm.get(0), allLocalSrs.get(0));
+
+        InOrder inOrder = Mockito.inOrder(citrixResourceBase);
+        inOrder.verify(citrixResourceBase).getAllLocalSrForType(connectionMock, SRType.LVM);
+        inOrder.verify(citrixResourceBase).getAllLocalSrForType(connectionMock, SRType.EXT);
+    }
+
+    @Test
+    public void createStoragePoolInfoTest() throws XenAPIException, XmlRpcException {
+        Connection connectionMock = Mockito.mock(Connection.class);
+        Host hostMock = Mockito.mock(Host.class);
+        SR srMock = Mockito.mock(SR.class);
+
+        String hostAddress = "hostAddress";
+        Mockito.when(hostMock.getAddress(connectionMock)).thenReturn(hostAddress);
+
+        String hostUuid = "hostUuid";
+        citrixResourceBase._host.setUuid(hostUuid);
+
+        PowerMockito.mockStatic(Host.class);
+        PowerMockito.when(Host.getByUuid(connectionMock, hostUuid)).thenReturn(hostMock);
+
+        String srType = "ext";
+        String srUuid = "srUuid";
+        long srPhysicalSize = 100l;
+        long physicalUtilization = 10l;
+
+        Mockito.when(srMock.getPhysicalSize(connectionMock)).thenReturn(srPhysicalSize);
+        Mockito.when(srMock.getUuid(connectionMock)).thenReturn(srUuid);
+        Mockito.when(srMock.getPhysicalUtilisation(connectionMock)).thenReturn(physicalUtilization);
+        Mockito.when(srMock.getType(connectionMock)).thenReturn(srType);
+
+        StoragePoolInfo storagePoolInfo = citrixResourceBase.createStoragePoolInfo(connectionMock, srMock);
+
+        Assert.assertEquals(srUuid, storagePoolInfo.getUuid());
+        Assert.assertEquals(hostAddress, storagePoolInfo.getHost());
+        Assert.assertEquals(srType.toUpperCase(), storagePoolInfo.getHostPath());
+        Assert.assertEquals(srType.toUpperCase(), storagePoolInfo.getLocalPath());
+        Assert.assertEquals(StoragePoolType.EXT, storagePoolInfo.getPoolType());
+        Assert.assertEquals(srPhysicalSize, storagePoolInfo.getCapacityBytes());
+        Assert.assertEquals(srPhysicalSize - physicalUtilization, storagePoolInfo.getAvailableBytes());
+    }
+
+    @Test
+    public void configureStorageNameAndDescriptionTest() throws XenAPIException, XmlRpcException {
+        String nameFormat = "Cloud Stack Local (%s) Storage Pool for %s";
+
+        String hostUuid = "hostUuid";
+        citrixResourceBase._host.setUuid(hostUuid);
+
+        Connection connectionMock = Mockito.mock(Connection.class);
+        SR srMock = Mockito.mock(SR.class);
+
+        String srUuid = "srUuid";
+        String srType = "ext";
+        String expectedNameDescription = String.format(nameFormat, srType, hostUuid);
+
+        Mockito.when(srMock.getUuid(connectionMock)).thenReturn(srUuid);
+        Mockito.when(srMock.getType(connectionMock)).thenReturn(srType);
+
+        Mockito.doNothing().when(srMock).setNameLabel(connectionMock, srUuid);
+        Mockito.doNothing().when(srMock).setNameDescription(connectionMock, expectedNameDescription);
+
+        citrixResourceBase.configureStorageNameAndDescription(connectionMock, srMock);
+
+        Mockito.verify(srMock).setNameLabel(connectionMock, srUuid);
+        Mockito.verify(srMock).setNameDescription(connectionMock, expectedNameDescription);
+    }
+
+    @Test
+    public void createStartUpStorageCommandTest() throws XenAPIException, XmlRpcException {
+        String hostUuid = "hostUUid";
+        citrixResourceBase._host.setUuid(hostUuid);
+        citrixResourceBase._dcId = 1;
+
+        Connection connectionMock = Mockito.mock(Connection.class);
+        SR srMock = Mockito.mock(SR.class);
+
+        StoragePoolInfo storagePoolInfoMock = Mockito.mock(StoragePoolInfo.class);
+
+        Mockito.doNothing().when(citrixResourceBase).configureStorageNameAndDescription(connectionMock, srMock);
+        Mockito.doReturn(storagePoolInfoMock).when(citrixResourceBase).createStoragePoolInfo(connectionMock, srMock);
+
+        StartupStorageCommand startUpStorageCommand = citrixResourceBase.createStartUpStorageCommand(connectionMock, srMock);
+
+        Assert.assertEquals(hostUuid, startUpStorageCommand.getGuid());
+        Assert.assertEquals(storagePoolInfoMock, startUpStorageCommand.getPoolInfo());
+        Assert.assertEquals(citrixResourceBase._dcId + "", startUpStorageCommand.getDataCenter());
+        Assert.assertEquals(StorageResourceType.STORAGE_POOL, startUpStorageCommand.getResourceType());
+    }
+
+    @Test
+    public void initializeLocalSrTest() throws XenAPIException, XmlRpcException {
+        Connection connectionMock = Mockito.mock(Connection.class);
+
+        List<SR> srsMocks = new ArrayList<>();
+        SR srMock1 = Mockito.mock(SR.class);
+        SR srMock2 = Mockito.mock(SR.class);
+
+        Mockito.when(srMock1.getPhysicalSize(connectionMock)).thenReturn(0l);
+        Mockito.when(srMock2.getPhysicalSize(connectionMock)).thenReturn(100l);
+        srsMocks.add(srMock1);
+        srsMocks.add(srMock2);
+
+        Mockito.doReturn(srsMocks).when(citrixResourceBase).getAllLocalSrs(connectionMock);
+
+        StartupStorageCommand startupStorageCommandMock = Mockito.mock(StartupStorageCommand.class);
+        Mockito.doReturn(startupStorageCommandMock).when(citrixResourceBase).createStartUpStorageCommand(Mockito.eq(connectionMock), Mockito.any(SR.class));
+
+        List<StartupStorageCommand> startUpCommandsForLocalStorage = citrixResourceBase.initializeLocalSrs(connectionMock);
+
+        Mockito.verify(citrixResourceBase, Mockito.times(0)).createStartUpStorageCommand(connectionMock, srMock1);
+        Mockito.verify(citrixResourceBase, Mockito.times(1)).createStartUpStorageCommand(connectionMock, srMock2);
+
+        Assert.assertEquals(1, startUpCommandsForLocalStorage.size());
+    }
+}
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XcpOssResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XcpOssResourceTest.java
similarity index 70%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XcpOssResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XcpOssResourceTest.java
index 9266bf9..8f703ed 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XcpOssResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XcpOssResourceTest.java
@@ -15,21 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-@RunWith(PowerMockRunner.class)
-public class XcpOssResourceTest extends CitrixResourceBaseTest{
+import com.xensource.xenapi.Types.XenAPIException;
+
+public class XcpOssResourceTest extends CitrixResourceBaseTest {
 
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XcpOssResource();
+    @Override
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XcpOssResource());
+        super.beforeTest();
     }
 
     @Test
@@ -41,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFiles(){
+    public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XcpServerResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XcpServerResourceTest.java
similarity index 73%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XcpServerResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XcpServerResourceTest.java
index 5b80a1d..f1022cf 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XcpServerResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XcpServerResourceTest.java
@@ -15,22 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
+import com.xensource.xenapi.Types.XenAPIException;
 
-@RunWith(PowerMockRunner.class)
-public class XcpServerResourceTest extends CitrixResourceBaseTest{
+public class XcpServerResourceTest extends CitrixResourceBaseTest {
 
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XcpServerResource();
+    @Override
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XcpServerResource());
+        super.beforeTest();
     }
 
     @Test
@@ -42,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFilesExeption(){
+    public void testGetFilesExeption() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56FP1ResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56FP1ResourceTest.java
similarity index 73%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56FP1ResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56FP1ResourceTest.java
index d2edbd4..902e8fd 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56FP1ResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56FP1ResourceTest.java
@@ -15,22 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
+import com.xensource.xenapi.Types.XenAPIException;
 
-@RunWith(PowerMockRunner.class)
-public class XenServer56FP1ResourceTest extends CitrixResourceBaseTest{
+public class XenServer56FP1ResourceTest extends CitrixResourceBaseTest {
 
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XenServer56FP1Resource();
+    @Override
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XenServer56FP1Resource());
+        super.beforeTest();
     }
 
     @Test
@@ -42,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFiles(){
+    public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56ResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56ResourceTest.java
similarity index 73%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56ResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56ResourceTest.java
index dccdb28..7d8d5d9 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56ResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56ResourceTest.java
@@ -15,21 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-@RunWith(PowerMockRunner.class)
+import com.xensource.xenapi.Types.XenAPIException;
+
 public class XenServer56ResourceTest extends CitrixResourceBaseTest {
 
+    @Override
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XenServer56Resource();
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XenServer56Resource());
+        super.beforeTest();
     }
 
     @Test
@@ -41,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFiles(){
+    public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56SP2ResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56SP2ResourceTest.java
similarity index 73%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56SP2ResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56SP2ResourceTest.java
index 4cc9470..65a9b47 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer56SP2ResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer56SP2ResourceTest.java
@@ -15,21 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-@RunWith(PowerMockRunner.class)
-public class XenServer56SP2ResourceTest extends CitrixResourceBaseTest{
+import com.xensource.xenapi.Types.XenAPIException;
 
+public class XenServer56SP2ResourceTest extends CitrixResourceBaseTest {
+
+    @Override
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XenServer56SP2Resource();
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XenServer56SP2Resource());
+        super.beforeTest();
     }
 
     @Test
@@ -41,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFiles(){
+    public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer600ResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer600ResourceTest.java
similarity index 73%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer600ResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer600ResourceTest.java
index d5eba2af..2175884 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer600ResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer600ResourceTest.java
@@ -15,24 +15,24 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-@RunWith(PowerMockRunner.class)
-public class XenServer600ResourceTest extends CitrixResourceBaseTest{
+import com.xensource.xenapi.Types.XenAPIException;
+
+public class XenServer600ResourceTest extends CitrixResourceBaseTest {
 
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XenServer600Resource();
+    @Override
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XenServer600Resource());
+        super.beforeTest();
     }
 
-
     @Test
     public void testPatchFilePath() {
         String patchFilePath = citrixResourceBase.getPatchFilePath();
@@ -42,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFiles(){
+    public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer625ResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer625ResourceTest.java
similarity index 78%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer625ResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer625ResourceTest.java
index 9998c2f..fc14d9f 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer625ResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer625ResourceTest.java
@@ -15,22 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
+import com.xensource.xenapi.Types.XenAPIException;
 
-@RunWith(PowerMockRunner.class)
 public class XenServer625ResourceTest extends CitrixResourceBaseTest {
 
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new Xenserver625Resource();
+    @Override
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new Xenserver625Resource());
+        super.beforeTest();
     }
 
     @Test
@@ -42,13 +42,11 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class)
     public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class)
     public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer650ResourceTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer650ResourceTest.java
similarity index 73%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer650ResourceTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer650ResourceTest.java
index 5195025..be41840 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/XenServer650ResourceTest.java
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/XenServer650ResourceTest.java
@@ -15,21 +15,22 @@
  */
 package com.cloud.hypervisor.xenserver.resource;
 
+import org.apache.xmlrpc.XmlRpcException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.Mockito;
 
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-@RunWith(PowerMockRunner.class)
-public class XenServer650ResourceTest extends CitrixResourceBaseTest{
+import com.xensource.xenapi.Types.XenAPIException;
 
+public class XenServer650ResourceTest extends CitrixResourceBaseTest {
+
+    @Override
     @Before
-    public void beforeTest() {
-        super.citrixResourceBase = new XenServer650Resource();
+    public void beforeTest() throws XenAPIException, XmlRpcException {
+        super.citrixResourceBase = Mockito.spy(new XenServer650Resource());
+        super.beforeTest();
     }
 
     @Test
@@ -41,14 +42,12 @@
     }
 
     @Test(expected = CloudRuntimeException.class)
-    @PrepareForTest(Script.class )
-    public void testGetFiles(){
+    public void testGetFiles() {
         testGetPathFilesExeption();
     }
 
     @Test
-    @PrepareForTest(Script.class )
-    public void testGetFilesListReturned(){
+    public void testGetFilesListReturned() {
         testGetPathFilesListReturned();
     }
 }
diff --git a/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessorTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessorTest.java
new file mode 100644
index 0000000..0cf99b6
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/Xenserver625StorageProcessorTest.java
@@ -0,0 +1,459 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.cloud.hypervisor.xenserver.resource;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.times;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.xmlrpc.XmlRpcException;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.Host;
+import com.xensource.xenapi.PBD;
+import com.xensource.xenapi.PBD.Record;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.Types.InternalError;
+import com.xensource.xenapi.Types.XenAPIException;
+
+@RunWith(PowerMockRunner.class)
+public class Xenserver625StorageProcessorTest {
+
+    @InjectMocks
+    private Xenserver625StorageProcessor xenserver625StorageProcessor;
+
+    @Mock
+    private CitrixResourceBase citrixResourceBase;
+
+    @Mock
+    private Connection connectionMock;
+
+    private String pathMock = "pathMock";
+
+    @Before
+    public void before() {
+        xenserver625StorageProcessor = Mockito.spy(new Xenserver625StorageProcessor(citrixResourceBase));
+        citrixResourceBase._host = Mockito.mock(XsHost.class);
+        Mockito.when(citrixResourceBase.getHost()).thenReturn(citrixResourceBase._host);
+    }
+
+    @Test
+    public void makeDirectoryTestCallHostPlugingReturningEmpty() {
+        boolean makeDirectoryReturn = configureAndExecuteMakeDirectoryMethodForTest(pathMock, StringUtils.EMPTY);
+
+        assertFalse(makeDirectoryReturn);
+    }
+
+    @Test
+    public void makeDirectoryTestCallHostPlugingReturningNull() {
+        boolean makeDirectoryReturn = configureAndExecuteMakeDirectoryMethodForTest(pathMock, null);
+
+        assertFalse(makeDirectoryReturn);
+    }
+
+    @Test
+    public void makeDirectoryTestCallHostPlugingReturningSomething() {
+        boolean makeDirectoryReturn = configureAndExecuteMakeDirectoryMethodForTest(pathMock, "/fictitious/path/to/use/in/unit/test");
+
+        assertTrue(makeDirectoryReturn);
+    }
+
+    private boolean configureAndExecuteMakeDirectoryMethodForTest(String path, String returnMakeDirectory) {
+        Mockito.when(citrixResourceBase.callHostPlugin(connectionMock, "cloud-plugin-storage", "makeDirectory", "path", path)).thenReturn(returnMakeDirectory);
+        return xenserver625StorageProcessor.makeDirectory(connectionMock, path);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void createFileSRTestNoSrRetrieveNoSrCreated() {
+        Mockito.doReturn(null).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        Mockito.doReturn(null).when(xenserver625StorageProcessor).createNewFileSr(connectionMock, pathMock);
+
+        xenserver625StorageProcessor.createFileSR(connectionMock, pathMock);
+    }
+
+    @Test
+    public void createFileSRTestSrAlreadyConfigured() {
+        SR srMockRetrievedMethod = Mockito.mock(SR.class);
+        SR srMockCreateMethod = Mockito.mock(SR.class);
+
+        Mockito.doReturn(srMockRetrievedMethod).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        Mockito.doReturn(srMockCreateMethod).when(xenserver625StorageProcessor).createNewFileSr(connectionMock, pathMock);
+
+        SR methodCreateFileSrResult = xenserver625StorageProcessor.createFileSR(connectionMock, pathMock);
+
+        InOrder inOrder = Mockito.inOrder(xenserver625StorageProcessor);
+        inOrder.verify(xenserver625StorageProcessor, times(1)).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        inOrder.verify(xenserver625StorageProcessor, times(0)).createNewFileSr(connectionMock, pathMock);
+
+        Assert.assertEquals(srMockRetrievedMethod, methodCreateFileSrResult);
+    }
+
+    @Test
+    public void createFileSRTestSrNotConfiguredAlreadyCreatingSr() {
+        SR srMockCreateMethod = Mockito.mock(SR.class);
+
+        Mockito.doReturn(null).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        Mockito.doReturn(srMockCreateMethod).when(xenserver625StorageProcessor).createNewFileSr(connectionMock, pathMock);
+
+        SR methodCreateFileSrResult = xenserver625StorageProcessor.createFileSR(connectionMock, pathMock);
+
+        InOrder inOrder = Mockito.inOrder(xenserver625StorageProcessor);
+        inOrder.verify(xenserver625StorageProcessor, times(1)).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        inOrder.verify(xenserver625StorageProcessor, times(1)).createNewFileSr(connectionMock, pathMock);
+
+        Assert.assertEquals(srMockCreateMethod, methodCreateFileSrResult);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void retrieveAlreadyConfiguredSrWithoutExceptionThrowingXenAPIException() throws XenAPIException, XmlRpcException {
+        Mockito.doThrow(XenAPIException.class).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        xenserver625StorageProcessor.retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void retrieveAlreadyConfiguredSrWithoutExceptionThrowingXmlRpcException() throws XenAPIException, XmlRpcException {
+        Mockito.doThrow(XmlRpcException.class).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        xenserver625StorageProcessor.retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+    }
+
+    @Test(expected = RuntimeException.class)
+    public void retrieveAlreadyConfiguredSrWithoutExceptionThrowingOtherException() throws XenAPIException, XmlRpcException {
+        Mockito.doThrow(RuntimeException.class).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        xenserver625StorageProcessor.retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+    }
+
+    @Test
+    public void retrieveAlreadyConfiguredSrWithoutExceptionMethodWorking() throws XenAPIException, XmlRpcException {
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doReturn(srMock).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        SR sr = xenserver625StorageProcessor.retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+
+        Mockito.verify(xenserver625StorageProcessor).retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+        Assert.assertEquals(srMock, sr);
+    }
+
+    @Test
+    @PrepareForTest(SR.class)
+    public void retrieveAlreadyConfiguredSrTestNoSrFound() throws XenAPIException, XmlRpcException {
+        prepareToReturnSrs(null);
+
+        SR sr = xenserver625StorageProcessor.retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        PowerMockito.verifyStatic();
+        SR.getByNameLabel(connectionMock, pathMock);
+        Assert.assertNull(sr);
+    }
+
+    private void prepareToReturnSrs(Set<SR> srs) throws XenAPIException, XmlRpcException {
+        PowerMockito.mockStatic(SR.class);
+        PowerMockito.when(SR.getByNameLabel(connectionMock, pathMock)).thenReturn(srs);
+    }
+
+    @PrepareForTest(SR.class)
+    @Test(expected = CloudRuntimeException.class)
+    public void retrieveAlreadyConfiguredSrTestMultipleSrsFound() throws XenAPIException, XmlRpcException {
+        HashSet<SR> srs = new HashSet<>();
+        srs.add(Mockito.mock(SR.class));
+        srs.add(Mockito.mock(SR.class));
+
+        prepareToReturnSrs(srs);
+
+        xenserver625StorageProcessor.retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+    }
+
+    @Test
+    @PrepareForTest(SR.class)
+    public void retrieveAlreadyConfiguredSrTestSrFailsSanityCheckWithXenAPIException() throws XenAPIException, XmlRpcException {
+        configureAndExecuteMethodRetrieveAlreadyConfiguredSrTestSrFailsSanityCheckForException(XenAPIException.class);
+    }
+
+    @Test
+    @PrepareForTest(SR.class)
+    public void retrieveAlreadyConfiguredSrTestSrFailsSanityCheckWithXmlRpcException() throws XenAPIException, XmlRpcException {
+        configureAndExecuteMethodRetrieveAlreadyConfiguredSrTestSrFailsSanityCheckForException(XmlRpcException.class);
+    }
+
+    @PrepareForTest(SR.class)
+    @Test(expected = RuntimeException.class)
+    public void retrieveAlreadyConfiguredSrTestSrFailsSanityCheckWithRuntimeException() throws XenAPIException, XmlRpcException {
+        configureAndExecuteMethodRetrieveAlreadyConfiguredSrTestSrFailsSanityCheckForException(RuntimeException.class);
+    }
+
+    private void configureAndExecuteMethodRetrieveAlreadyConfiguredSrTestSrFailsSanityCheckForException(Class<? extends Throwable> exceptionClass) throws XenAPIException, XmlRpcException {
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doThrow(exceptionClass).when(srMock).scan(connectionMock);
+
+        HashSet<SR> srs = new HashSet<>();
+        srs.add(srMock);
+
+        prepareToReturnSrs(srs);
+        Mockito.doNothing().when(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+
+        SR sr = xenserver625StorageProcessor.retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        Assert.assertNull(sr);
+        Mockito.verify(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+    }
+
+    @Test
+    @PrepareForTest(SR.class)
+    public void methodRetrieveAlreadyConfiguredSrTestSrScanSucceeds() throws XenAPIException, XmlRpcException {
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doNothing().when(srMock).scan(connectionMock);
+
+        HashSet<SR> srs = new HashSet<>();
+        srs.add(srMock);
+
+        prepareToReturnSrs(srs);
+        Mockito.doNothing().when(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+
+        SR sr = xenserver625StorageProcessor.retrieveAlreadyConfiguredSr(connectionMock, pathMock);
+
+        Assert.assertEquals(srMock, sr);
+        Mockito.verify(xenserver625StorageProcessor, times(0)).forgetSr(connectionMock, srMock);
+    }
+
+    @Test
+    public void forgetSrTest() throws XenAPIException, XmlRpcException {
+        PBD pbdMock = Mockito.mock(PBD.class);
+        Set<PBD> pbds = new HashSet<>();
+        pbds.add(pbdMock);
+
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.when(srMock.getPBDs(connectionMock)).thenReturn(pbds);
+
+        Mockito.doNothing().when(xenserver625StorageProcessor).unplugPbd(connectionMock, pbdMock);
+
+        xenserver625StorageProcessor.forgetSr(connectionMock, srMock);
+        Mockito.verify(srMock).getPBDs(connectionMock);
+        Mockito.verify(xenserver625StorageProcessor, times(1)).unplugPbd(connectionMock, pbdMock);
+        Mockito.verify(srMock).forget(connectionMock);
+    }
+
+    @Test
+    public void unplugPbdTest() throws XenAPIException, XmlRpcException {
+        PBD pbdMock = Mockito.mock(PBD.class);
+
+        xenserver625StorageProcessor.unplugPbd(connectionMock, pbdMock);
+
+        Mockito.verify(pbdMock).getUuid(connectionMock);
+        Mockito.verify(pbdMock).unplug(connectionMock);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void unplugPbdTestThrowXenAPIException() throws XenAPIException, XmlRpcException {
+        prepareAndExecuteUnplugMethodForException(XenAPIException.class);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void unplugPbdTestThrowXmlRpcException() throws XenAPIException, XmlRpcException {
+        prepareAndExecuteUnplugMethodForException(XmlRpcException.class);
+    }
+
+    @Test(expected = RuntimeException.class)
+    public void unplugPbdTestThrowRuntimeException() throws XenAPIException, XmlRpcException {
+        prepareAndExecuteUnplugMethodForException(RuntimeException.class);
+    }
+
+    private void prepareAndExecuteUnplugMethodForException(Class<? extends Throwable> exceptionClass) throws XenAPIException, XmlRpcException {
+        PBD pbdMock = Mockito.mock(PBD.class);
+        Mockito.doThrow(exceptionClass).when(pbdMock).unplug(connectionMock);
+        xenserver625StorageProcessor.unplugPbd(connectionMock, pbdMock);
+    }
+
+    @Test
+    @PrepareForTest({Host.class, SR.class})
+    public void createNewFileSrTestThrowingXenAPIException() throws XenAPIException, XmlRpcException {
+        prepareAndExecuteTestcreateNewFileSrTestThrowingException(XenAPIException.class);
+    }
+
+    @Test
+    @PrepareForTest({Host.class, SR.class})
+    public void createNewFileSrTestThrowingXmlRpcException() throws XenAPIException, XmlRpcException {
+        prepareAndExecuteTestcreateNewFileSrTestThrowingException(XmlRpcException.class);
+    }
+
+    @Test(expected = RuntimeException.class)
+    @PrepareForTest({Host.class, SR.class})
+    public void createNewFileSrTestThrowingRuntimeException() throws XenAPIException, XmlRpcException {
+        prepareAndExecuteTestcreateNewFileSrTestThrowingException(RuntimeException.class);
+    }
+
+    private void prepareAndExecuteTestcreateNewFileSrTestThrowingException(Class<? extends Throwable> exceptionClass) throws XenAPIException, XmlRpcException {
+        String uuid = "hostUuid";
+        Mockito.when(citrixResourceBase._host.getUuid()).thenReturn(uuid);
+
+        String srUuid = UUID.nameUUIDFromBytes(pathMock.getBytes()).toString();
+
+        Host hostMock = Mockito.mock(Host.class);
+
+        PowerMockito.mockStatic(Host.class);
+        PowerMockito.when(Host.getByUuid(connectionMock, uuid)).thenReturn(hostMock);
+
+        PowerMockito.mockStatic(SR.class);
+        PowerMockito.when(SR.introduce(Mockito.eq(connectionMock), Mockito.eq(srUuid), Mockito.eq(pathMock), Mockito.eq(pathMock), Mockito.eq("file"), Mockito.eq("file"), Mockito.eq(false),
+                Mockito.anyMapOf(String.class, String.class))).thenThrow(Mockito.mock(exceptionClass));
+
+        Mockito.doNothing().when(xenserver625StorageProcessor).removeSrAndPbdIfPossible(Mockito.eq(connectionMock), Mockito.any(SR.class), Mockito.any(PBD.class));
+
+        SR sr = xenserver625StorageProcessor.createNewFileSr(connectionMock, pathMock);
+
+        assertNull(sr);
+        Mockito.verify(xenserver625StorageProcessor).removeSrAndPbdIfPossible(Mockito.eq(connectionMock), Mockito.any(SR.class), Mockito.any(PBD.class));
+    }
+
+    @Test
+    @PrepareForTest({Host.class, SR.class})
+    public void createNewFileSrTestThrowingDbUniqueException() throws XenAPIException, XmlRpcException {
+        String uuid = "hostUuid";
+        Mockito.when(citrixResourceBase._host.getUuid()).thenReturn(uuid);
+
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doReturn(srMock).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        String srUuid = UUID.nameUUIDFromBytes(pathMock.getBytes()).toString();
+
+        Host hostMock = Mockito.mock(Host.class);
+
+        PowerMockito.mockStatic(Host.class);
+        PowerMockito.when(Host.getByUuid(connectionMock, uuid)).thenReturn(hostMock);
+
+        PowerMockito.mockStatic(SR.class);
+        InternalError dbUniquenessException = new InternalError("message: Db_exn.Uniqueness_constraint_violation(\"SR\", \"uuid\", \"fd3edbcf-f142-83d1-3fcb-029ca2446b68\")");
+
+        PowerMockito.when(SR.introduce(Mockito.eq(connectionMock), Mockito.eq(srUuid), Mockito.eq(pathMock), Mockito.eq(pathMock), Mockito.eq("file"), Mockito.eq("file"), Mockito.eq(false),
+                Mockito.anyMapOf(String.class, String.class))).thenThrow(dbUniquenessException);
+
+        Mockito.doNothing().when(xenserver625StorageProcessor).removeSrAndPbdIfPossible(Mockito.eq(connectionMock), Mockito.any(SR.class), Mockito.any(PBD.class));
+
+        SR sr = xenserver625StorageProcessor.createNewFileSr(connectionMock, pathMock);
+
+        Assert.assertEquals(srMock, sr);
+        Mockito.verify(xenserver625StorageProcessor, times(0)).removeSrAndPbdIfPossible(Mockito.eq(connectionMock), Mockito.any(SR.class), Mockito.any(PBD.class));
+        Mockito.verify(xenserver625StorageProcessor).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+    }
+
+    @Test
+    @PrepareForTest({Host.class, SR.class, PBD.class})
+    public void createNewFileSrTest() throws XenAPIException, XmlRpcException {
+        String uuid = "hostUuid";
+        Mockito.when(citrixResourceBase._host.getUuid()).thenReturn(uuid);
+
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doReturn(srMock).when(xenserver625StorageProcessor).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+        String srUuid = UUID.nameUUIDFromBytes(pathMock.getBytes()).toString();
+
+        Host hostMock = Mockito.mock(Host.class);
+
+        PowerMockito.mockStatic(Host.class);
+        PowerMockito.when(Host.getByUuid(connectionMock, uuid)).thenReturn(hostMock);
+
+        PowerMockito.mockStatic(SR.class);
+        PowerMockito.when(SR.introduce(Mockito.eq(connectionMock), Mockito.eq(srUuid), Mockito.eq(pathMock), Mockito.eq(pathMock), Mockito.eq("file"), Mockito.eq("file"), Mockito.eq(false),
+                Mockito.anyMapOf(String.class, String.class))).thenReturn(srMock);
+
+        PowerMockito.mockStatic(PBD.class);
+        PBD pbdMock = Mockito.mock(PBD.class);
+        PowerMockito.when(PBD.create(Mockito.eq(connectionMock), Mockito.any(Record.class))).thenReturn(pbdMock);
+
+        Mockito.doNothing().when(xenserver625StorageProcessor).removeSrAndPbdIfPossible(Mockito.eq(connectionMock), Mockito.any(SR.class), Mockito.any(PBD.class));
+        SR sr = xenserver625StorageProcessor.createNewFileSr(connectionMock, pathMock);
+
+        Assert.assertEquals(srMock, sr);
+        Mockito.verify(xenserver625StorageProcessor, times(0)).removeSrAndPbdIfPossible(Mockito.eq(connectionMock), Mockito.any(SR.class), Mockito.any(PBD.class));
+        Mockito.verify(xenserver625StorageProcessor, times(0)).retrieveAlreadyConfiguredSrWithoutException(connectionMock, pathMock);
+
+        Mockito.verify(srMock).scan(connectionMock);
+        Mockito.verify(pbdMock).plug(connectionMock);
+
+        PowerMockito.verifyStatic();
+        SR.introduce(Mockito.eq(connectionMock), Mockito.eq(srUuid), Mockito.eq(pathMock), Mockito.eq(pathMock), Mockito.eq("file"), Mockito.eq("file"), Mockito.eq(false),
+                Mockito.anyMapOf(String.class, String.class));
+        PBD.create(Mockito.eq(connectionMock), Mockito.any(Record.class));
+    }
+
+    @Test
+    public void removeSrAndPbdIfPossibleBothPbdAndSrNotNull() {
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doNothing().when(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+
+        PBD pbdMock = Mockito.mock(PBD.class);
+        Mockito.doNothing().when(xenserver625StorageProcessor).unplugPbd(connectionMock, pbdMock);
+
+        xenserver625StorageProcessor.removeSrAndPbdIfPossible(connectionMock, srMock, pbdMock);
+
+        Mockito.verify(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+        Mockito.verify(xenserver625StorageProcessor).unplugPbd(connectionMock, pbdMock);
+
+    }
+
+    @Test
+    public void removeSrAndPbdIfPossiblePbdNullAndSrNotNull() {
+        SR srMock = Mockito.mock(SR.class);
+        Mockito.doNothing().when(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+
+        xenserver625StorageProcessor.removeSrAndPbdIfPossible(connectionMock, srMock, null);
+
+        Mockito.verify(xenserver625StorageProcessor).forgetSr(connectionMock, srMock);
+        Mockito.verify(xenserver625StorageProcessor, times(0)).unplugPbd(Mockito.eq(connectionMock), Mockito.any(PBD.class));
+
+    }
+
+    @Test
+    public void removeSrAndPbdIfPossiblePbdNotNullButSrNull() {
+        PBD pbdMock = Mockito.mock(PBD.class);
+        Mockito.doNothing().when(xenserver625StorageProcessor).unplugPbd(connectionMock, pbdMock);
+
+        xenserver625StorageProcessor.removeSrAndPbdIfPossible(connectionMock, null, pbdMock);
+
+        Mockito.verify(xenserver625StorageProcessor, times(0)).forgetSr(Mockito.eq(connectionMock), Mockito.any(SR.class));
+        Mockito.verify(xenserver625StorageProcessor).unplugPbd(connectionMock, pbdMock);
+
+    }
+
+    @Test
+    public void removeSrAndPbdIfPossibleBothPbdAndSrNull() {
+        xenserver625StorageProcessor.removeSrAndPbdIfPossible(connectionMock, null, null);
+
+        Mockito.verify(xenserver625StorageProcessor, times(0)).forgetSr(Mockito.eq(connectionMock), Mockito.any(SR.class));
+        Mockito.verify(xenserver625StorageProcessor, times(0)).unplugPbd(Mockito.eq(connectionMock), Mockito.any(PBD.class));
+
+    }
+}
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixRequestWrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XcpServerWrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XcpServerWrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XcpServerWrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XcpServerWrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56FP1WrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56FP1WrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56FP1WrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56FP1WrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56WrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56WrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56WrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer56WrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer610WrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer610WrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer610WrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer610WrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620SP1WrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620SP1WrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620SP1WrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620SP1WrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620WrapperTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620WrapperTest.java
similarity index 100%
rename from plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620WrapperTest.java
rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/XenServer620WrapperTest.java
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/CitrixResourceBaseTest.java b/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/CitrixResourceBaseTest.java
deleted file mode 100644
index 67fce92..0000000
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/CitrixResourceBaseTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2015 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.cloud.hypervisor.xenserver.resource;
-
-import java.io.File;
-import java.util.List;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-
-import com.cloud.utils.script.Script;
-
-public class CitrixResourceBaseTest {
-
-    protected CitrixResourceBase citrixResourceBase = new CitrixResourceBase() {
-        @Override
-        protected String getPatchFilePath() {
-            return null;
-        }
-    };
-
-    public void testGetPathFilesExeption() {
-        String patch = citrixResourceBase.getPatchFilePath();
-
-        PowerMockito.mockStatic(Script.class);
-        Mockito.when(Script.findScript("", patch)).thenReturn(null);
-
-        citrixResourceBase.getPatchFiles();
-
-    }
-
-    public void testGetPathFilesListReturned() {
-        String patch = citrixResourceBase.getPatchFilePath();
-
-        PowerMockito.mockStatic(Script.class);
-        Mockito.when(Script.findScript("", patch)).thenReturn(patch);
-
-        File expected = new File(patch);
-        String pathExpected = expected.getAbsolutePath();
-
-        List<File> files = citrixResourceBase.getPatchFiles();
-        String receivedPath = files.get(0).getAbsolutePath();
-        Assert.assertEquals(receivedPath, pathExpected);
-    }
-
-    @Test
-    public void testGetGuestOsTypeNull() {
-        String platformEmulator = null;
-
-        String expected = "Other install media";
-        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
-        Assert.assertEquals(expected, guestOsType);
-    }
-
-    @Test
-    public void testGetGuestOsTypeEmpty() {
-        String platformEmulator = "";
-
-        String expected = "Other install media";
-        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
-        Assert.assertEquals(expected, guestOsType);
-    }
-
-    @Test
-    public void testGetGuestOsTypeBlank() {
-        String platformEmulator = "    ";
-
-        String expected = "Other install media";
-        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
-        Assert.assertEquals(expected, guestOsType);
-    }
-
-    @Test
-    public void testGetGuestOsTypeOther() {
-        String platformEmulator = "My Own Linux Distribution Y.M (64-bit)";
-
-        String guestOsType = citrixResourceBase.getGuestOsType(platformEmulator);
-        Assert.assertEquals(platformEmulator, guestOsType);
-    }
-}
diff --git a/plugins/integrations/cloudian/pom.xml b/plugins/integrations/cloudian/pom.xml
index 6060fb6..1a397ef 100644
--- a/plugins/integrations/cloudian/pom.xml
+++ b/plugins/integrations/cloudian/pom.xml
@@ -1,60 +1,58 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-integrations-cloudian-connector</artifactId>
-  <name>Apache CloudStack Plugin - Cloudian Connector</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <version>${cs.httpclient.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-databind</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.github.tomakehurst</groupId>
-      <artifactId>wiremock-standalone</artifactId>
-      <version>${cs.wiremock.version}</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-integrations-cloudian-connector</artifactId>
+    <name>Apache CloudStack Plugin - Cloudian Connector</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.tomakehurst</groupId>
+            <artifactId>wiremock-standalone</artifactId>
+            <version>${cs.wiremock.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/CloudianConnector.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/CloudianConnector.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/CloudianConnector.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/CloudianConnector.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/CloudianConnectorImpl.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/CloudianConnectorImpl.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/CloudianConnectorImpl.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/CloudianConnectorImpl.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/api/CloudianIsEnabledCmd.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/api/CloudianIsEnabledCmd.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/api/CloudianIsEnabledCmd.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/api/CloudianIsEnabledCmd.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/api/CloudianSsoLoginCmd.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/api/CloudianSsoLoginCmd.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/api/CloudianSsoLoginCmd.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/api/CloudianSsoLoginCmd.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianClient.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianClient.java
similarity index 99%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianClient.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianClient.java
index 11f2055..45d0964 100644
--- a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianClient.java
+++ b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianClient.java
@@ -324,7 +324,7 @@
             final HttpResponse response = post("/group", group);
             return response.getStatusLine().getStatusCode() == HttpStatus.SC_OK;
         } catch (final IOException e) {
-            LOG.error("Failed to remove group due to:", e);
+            LOG.error("Failed to update group due to:", e);
             checkResponseTimeOut(e);
         }
         return false;
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianGroup.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianGroup.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianGroup.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianGroup.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianUser.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianUser.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianUser.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianUser.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianUtils.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianUtils.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/client/CloudianUtils.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/client/CloudianUtils.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/response/CloudianEnabledResponse.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/response/CloudianEnabledResponse.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/response/CloudianEnabledResponse.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/response/CloudianEnabledResponse.java
diff --git a/plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/response/CloudianSsoLoginResponse.java b/plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/response/CloudianSsoLoginResponse.java
similarity index 100%
rename from plugins/integrations/cloudian/src/org/apache/cloudstack/cloudian/response/CloudianSsoLoginResponse.java
rename to plugins/integrations/cloudian/src/main/java/org/apache/cloudstack/cloudian/response/CloudianSsoLoginResponse.java
diff --git a/plugins/integrations/cloudian/resources/META-INF/cloudstack/cloudian/module.properties b/plugins/integrations/cloudian/src/main/resources/META-INF/cloudstack/cloudian/module.properties
similarity index 100%
rename from plugins/integrations/cloudian/resources/META-INF/cloudstack/cloudian/module.properties
rename to plugins/integrations/cloudian/src/main/resources/META-INF/cloudstack/cloudian/module.properties
diff --git a/plugins/integrations/cloudian/resources/META-INF/cloudstack/cloudian/spring-cloudian-context.xml b/plugins/integrations/cloudian/src/main/resources/META-INF/cloudstack/cloudian/spring-cloudian-context.xml
similarity index 100%
rename from plugins/integrations/cloudian/resources/META-INF/cloudstack/cloudian/spring-cloudian-context.xml
rename to plugins/integrations/cloudian/src/main/resources/META-INF/cloudstack/cloudian/spring-cloudian-context.xml
diff --git a/plugins/integrations/cloudian/test/org/apache/cloudstack/cloudian/CloudianClientTest.java b/plugins/integrations/cloudian/src/test/java/org/apache/cloudstack/cloudian/CloudianClientTest.java
similarity index 100%
rename from plugins/integrations/cloudian/test/org/apache/cloudstack/cloudian/CloudianClientTest.java
rename to plugins/integrations/cloudian/src/test/java/org/apache/cloudstack/cloudian/CloudianClientTest.java
diff --git a/plugins/integrations/prometheus/pom.xml b/plugins/integrations/prometheus/pom.xml
index 7f931d5..7620d2e 100644
--- a/plugins/integrations/prometheus/pom.xml
+++ b/plugins/integrations/prometheus/pom.xml
@@ -1,48 +1,47 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-integrations-prometheus-exporter</artifactId>
-  <name>Apache CloudStack Plugin - Prometheus Exporter</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-integrations-prometheus-exporter</artifactId>
+    <name>Apache CloudStack Plugin - Prometheus Exporter</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporter.java b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporter.java
similarity index 100%
rename from plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporter.java
rename to plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporter.java
diff --git a/plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporterImpl.java b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterImpl.java
similarity index 100%
rename from plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporterImpl.java
rename to plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterImpl.java
diff --git a/plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporterServer.java b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServer.java
similarity index 100%
rename from plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporterServer.java
rename to plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServer.java
diff --git a/plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java
similarity index 100%
rename from plugins/integrations/prometheus/src/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java
rename to plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java
diff --git a/plugins/integrations/prometheus/resources/META-INF/cloudstack/prometheus/module.properties b/plugins/integrations/prometheus/src/main/resources/META-INF/cloudstack/prometheus/module.properties
similarity index 100%
rename from plugins/integrations/prometheus/resources/META-INF/cloudstack/prometheus/module.properties
rename to plugins/integrations/prometheus/src/main/resources/META-INF/cloudstack/prometheus/module.properties
diff --git a/plugins/integrations/prometheus/resources/META-INF/cloudstack/prometheus/spring-prometheus-context.xml b/plugins/integrations/prometheus/src/main/resources/META-INF/cloudstack/prometheus/spring-prometheus-context.xml
similarity index 100%
rename from plugins/integrations/prometheus/resources/META-INF/cloudstack/prometheus/spring-prometheus-context.xml
rename to plugins/integrations/prometheus/src/main/resources/META-INF/cloudstack/prometheus/spring-prometheus-context.xml
diff --git a/plugins/metrics/pom.xml b/plugins/metrics/pom.xml
index f912406..1e177bc 100644
--- a/plugins/metrics/pom.xml
+++ b/plugins/metrics/pom.xml
@@ -1,55 +1,53 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
-  http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-metrics</artifactId>
-  <name>Apache CloudStack Plugin - Metrics</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <argLine>-Xmx1024m</argLine>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-metrics</artifactId>
+    <name>Apache CloudStack Plugin - Metrics</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <argLine>-Xmx1024m</argLine>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListClustersMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListClustersMetricsCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListClustersMetricsCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListClustersMetricsCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListHostsMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListHostsMetricsCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListHostsMetricsCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListHostsMetricsCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListInfrastructureCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListInfrastructureCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListInfrastructureCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListInfrastructureCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListVMsMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListVMsMetricsCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListVolumesMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/api/ListZonesMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListZonesMetricsCmd.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/api/ListZonesMetricsCmd.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/api/ListZonesMetricsCmd.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/metrics/MetricsService.java b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsService.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/metrics/MetricsService.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsService.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/metrics/MetricsServiceImpl.java b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/metrics/MetricsServiceImpl.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/ClusterMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/ClusterMetricsResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/ClusterMetricsResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/ClusterMetricsResponse.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/HostMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/HostMetricsResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/HostMetricsResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/HostMetricsResponse.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/InfrastructureResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/InfrastructureResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/StoragePoolMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/StoragePoolMetricsResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/StoragePoolMetricsResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/StoragePoolMetricsResponse.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/VmMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/VmMetricsResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/VmMetricsResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/VmMetricsResponse.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/VolumeMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/VolumeMetricsResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/VolumeMetricsResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/VolumeMetricsResponse.java
diff --git a/plugins/metrics/src/org/apache/cloudstack/response/ZoneMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/ZoneMetricsResponse.java
similarity index 100%
rename from plugins/metrics/src/org/apache/cloudstack/response/ZoneMetricsResponse.java
rename to plugins/metrics/src/main/java/org/apache/cloudstack/response/ZoneMetricsResponse.java
diff --git a/plugins/metrics/resources/META-INF/cloudstack/metrics/module.properties b/plugins/metrics/src/main/resources/META-INF/cloudstack/metrics/module.properties
similarity index 100%
rename from plugins/metrics/resources/META-INF/cloudstack/metrics/module.properties
rename to plugins/metrics/src/main/resources/META-INF/cloudstack/metrics/module.properties
diff --git a/plugins/metrics/resources/META-INF/cloudstack/metrics/spring-metrics-context.xml b/plugins/metrics/src/main/resources/META-INF/cloudstack/metrics/spring-metrics-context.xml
similarity index 100%
rename from plugins/metrics/resources/META-INF/cloudstack/metrics/spring-metrics-context.xml
rename to plugins/metrics/src/main/resources/META-INF/cloudstack/metrics/spring-metrics-context.xml
diff --git a/plugins/network-elements/bigswitch/pom.xml b/plugins/network-elements/bigswitch/pom.xml
index afd07ce..ff3c365 100644
--- a/plugins/network-elements/bigswitch/pom.xml
+++ b/plugins/network-elements/bigswitch/pom.xml
@@ -1,52 +1,30 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-bigswitch</artifactId>
-  <name>Apache CloudStack Plugin - BigSwitch Virtual Network Segment</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checklicence</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-bigswitch</artifactId>
+    <name>Apache CloudStack Plugin - BigSwitch Virtual Network Segment</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/BcfAnswer.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/BcfAnswer.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/BcfAnswer.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/BcfAnswer.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/BcfCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/BcfCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/BcfCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/BcfCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/CacheBcfTopologyCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CacheBcfTopologyCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/CacheBcfTopologyCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CacheBcfTopologyCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfAttachmentCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfAttachmentCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfAttachmentCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfAttachmentCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfRouterCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfRouterCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfRouterCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfRouterCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfRouterInterfaceCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfRouterInterfaceCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfRouterInterfaceCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfRouterInterfaceCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfSegmentCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfSegmentCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfSegmentCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfSegmentCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfStaticNatCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfStaticNatCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/CreateBcfStaticNatCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/CreateBcfStaticNatCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/DeleteBcfAttachmentCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/DeleteBcfAttachmentCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/DeleteBcfAttachmentCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/DeleteBcfAttachmentCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/DeleteBcfSegmentCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/DeleteBcfSegmentCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/DeleteBcfSegmentCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/DeleteBcfSegmentCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/DeleteBcfStaticNatCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/DeleteBcfStaticNatCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/DeleteBcfStaticNatCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/DeleteBcfStaticNatCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerDataAnswer.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerDataAnswer.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerDataAnswer.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerDataAnswer.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerDataCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerDataCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerDataCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerDataCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerHostsAnswer.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerHostsAnswer.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerHostsAnswer.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerHostsAnswer.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerHostsCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerHostsCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/GetControllerHostsCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/GetControllerHostsCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/StartupBigSwitchBcfCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/StartupBigSwitchBcfCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/StartupBigSwitchBcfCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/StartupBigSwitchBcfCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/SyncBcfTopologyCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/SyncBcfTopologyCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/SyncBcfTopologyCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/SyncBcfTopologyCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/UpdateBcfAttachmentCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/UpdateBcfAttachmentCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/UpdateBcfAttachmentCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/UpdateBcfAttachmentCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/agent/api/UpdateBcfRouterCommand.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/UpdateBcfRouterCommand.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/agent/api/UpdateBcfRouterCommand.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/agent/api/UpdateBcfRouterCommand.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/api/commands/AddBigSwitchBcfDeviceCmd.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/AddBigSwitchBcfDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/api/commands/AddBigSwitchBcfDeviceCmd.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/AddBigSwitchBcfDeviceCmd.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/api/commands/BcfConstants.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/BcfConstants.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/api/commands/BcfConstants.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/BcfConstants.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/api/commands/DeleteBigSwitchBcfDeviceCmd.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/DeleteBigSwitchBcfDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/api/commands/DeleteBigSwitchBcfDeviceCmd.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/DeleteBigSwitchBcfDeviceCmd.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/api/commands/ListBigSwitchBcfDevicesCmd.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/ListBigSwitchBcfDevicesCmd.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/api/commands/ListBigSwitchBcfDevicesCmd.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/api/commands/ListBigSwitchBcfDevicesCmd.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/api/response/BigSwitchBcfDeviceResponse.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/api/response/BigSwitchBcfDeviceResponse.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/api/response/BigSwitchBcfDeviceResponse.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/api/response/BigSwitchBcfDeviceResponse.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/BigSwitchBcfDeviceVO.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/BigSwitchBcfDeviceVO.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/BigSwitchBcfDeviceVO.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/BigSwitchBcfDeviceVO.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/AclData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/AclData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/AclData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/AclData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/AttachmentData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/AttachmentData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/AttachmentData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/AttachmentData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchBcfApi.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchBcfApi.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchBcfApi.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchBcfApi.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchBcfApiException.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchBcfApiException.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchBcfApiException.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchBcfApiException.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchBcfUtils.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchBcfUtils.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchBcfUtils.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchBcfUtils.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchStatus.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchStatus.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/BigSwitchStatus.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/BigSwitchStatus.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/Capabilities.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/Capabilities.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/Capabilities.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/Capabilities.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/ControlClusterData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/ControlClusterData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/ControlClusterData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/ControlClusterData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/ControlClusterStatus.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/ControlClusterStatus.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/ControlClusterStatus.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/ControlClusterStatus.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/ControllerData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/ControllerData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/ControllerData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/ControllerData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/FloatingIpData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/FloatingIpData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/FloatingIpData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/FloatingIpData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/NetworkData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/NetworkData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/NetworkData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/NetworkData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/RouterData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/RouterData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/RouterData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/RouterData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/RouterInterfaceData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/RouterInterfaceData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/RouterInterfaceData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/RouterInterfaceData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/TopologyData.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/TopologyData.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/TopologyData.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/TopologyData.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/TrustingProtocolSocketFactory.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/TrustingProtocolSocketFactory.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/bigswitch/TrustingProtocolSocketFactory.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/bigswitch/TrustingProtocolSocketFactory.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/dao/BigSwitchBcfDao.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/dao/BigSwitchBcfDao.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/dao/BigSwitchBcfDao.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/dao/BigSwitchBcfDao.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/dao/BigSwitchBcfDaoImpl.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/dao/BigSwitchBcfDaoImpl.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/dao/BigSwitchBcfDaoImpl.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/dao/BigSwitchBcfDaoImpl.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/element/BigSwitchBcfElement.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/element/BigSwitchBcfElement.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/element/BigSwitchBcfElement.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/element/BigSwitchBcfElement.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/element/BigSwitchBcfElementService.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/element/BigSwitchBcfElementService.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/element/BigSwitchBcfElementService.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/element/BigSwitchBcfElementService.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/guru/BigSwitchBcfGuestNetworkGuru.java
diff --git a/plugins/network-elements/bigswitch/src/com/cloud/network/resource/BigSwitchBcfResource.java b/plugins/network-elements/bigswitch/src/main/java/com/cloud/network/resource/BigSwitchBcfResource.java
similarity index 100%
rename from plugins/network-elements/bigswitch/src/com/cloud/network/resource/BigSwitchBcfResource.java
rename to plugins/network-elements/bigswitch/src/main/java/com/cloud/network/resource/BigSwitchBcfResource.java
diff --git a/plugins/network-elements/bigswitch/resources/META-INF/cloudstack/bigswitch/module.properties b/plugins/network-elements/bigswitch/src/main/resources/META-INF/cloudstack/bigswitch/module.properties
similarity index 100%
rename from plugins/network-elements/bigswitch/resources/META-INF/cloudstack/bigswitch/module.properties
rename to plugins/network-elements/bigswitch/src/main/resources/META-INF/cloudstack/bigswitch/module.properties
diff --git a/plugins/network-elements/bigswitch/resources/META-INF/cloudstack/bigswitch/spring-bigswitch-context.xml b/plugins/network-elements/bigswitch/src/main/resources/META-INF/cloudstack/bigswitch/spring-bigswitch-context.xml
similarity index 100%
rename from plugins/network-elements/bigswitch/resources/META-INF/cloudstack/bigswitch/spring-bigswitch-context.xml
rename to plugins/network-elements/bigswitch/src/main/resources/META-INF/cloudstack/bigswitch/spring-bigswitch-context.xml
diff --git a/plugins/network-elements/bigswitch/test/com/cloud/network/bigswitch/BigSwitchApiTest.java b/plugins/network-elements/bigswitch/src/test/java/com/cloud/network/bigswitch/BigSwitchApiTest.java
similarity index 100%
rename from plugins/network-elements/bigswitch/test/com/cloud/network/bigswitch/BigSwitchApiTest.java
rename to plugins/network-elements/bigswitch/src/test/java/com/cloud/network/bigswitch/BigSwitchApiTest.java
diff --git a/plugins/network-elements/bigswitch/test/com/cloud/network/bigswitch/BigSwitchBcfUtilsTest.java b/plugins/network-elements/bigswitch/src/test/java/com/cloud/network/bigswitch/BigSwitchBcfUtilsTest.java
similarity index 100%
rename from plugins/network-elements/bigswitch/test/com/cloud/network/bigswitch/BigSwitchBcfUtilsTest.java
rename to plugins/network-elements/bigswitch/src/test/java/com/cloud/network/bigswitch/BigSwitchBcfUtilsTest.java
diff --git a/plugins/network-elements/bigswitch/test/com/cloud/network/resource/BigSwitchBcfResourceTest.java b/plugins/network-elements/bigswitch/src/test/java/com/cloud/network/resource/BigSwitchBcfResourceTest.java
similarity index 100%
rename from plugins/network-elements/bigswitch/test/com/cloud/network/resource/BigSwitchBcfResourceTest.java
rename to plugins/network-elements/bigswitch/src/test/java/com/cloud/network/resource/BigSwitchBcfResourceTest.java
diff --git a/plugins/network-elements/brocade-vcs/pom.xml b/plugins/network-elements/brocade-vcs/pom.xml
index 30c9f35..17f6a05 100644
--- a/plugins/network-elements/brocade-vcs/pom.xml
+++ b/plugins/network-elements/brocade-vcs/pom.xml
@@ -1,78 +1,83 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>cloud-plugin-network-vcs</artifactId>
-	<name>Apache CloudStack Plugin - Network Brocade VCS</name>
-	<parent>
-		<groupId>org.apache.cloudstack</groupId>
-		<artifactId>cloudstack-plugins</artifactId>
-		<version>4.11.2.0-SNAPSHOT</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.jvnet.jaxb2.maven2</groupId>
-				<artifactId>maven-jaxb2-plugin</artifactId>
-				<version>0.7.1</version>
-				<executions>
-					<execution>
-						<id>interface</id>
-						<goals>
-							<goal>generate</goal>
-						</goals>
-						<configuration>
-							<generateDirectory>${project.basedir}/target/generated-sources/xjc1</generateDirectory>
-							<schemaDirectory>${project.basedir}/resources</schemaDirectory>
-							<schemaIncludes>
-								<include>BrocadeInterfaceSchema.xsd</include>
-							</schemaIncludes>
-							<generatePackage>com.cloud.network.schema.interfacevlan</generatePackage>
-						</configuration>
-					</execution>
-					<execution>
-						<id>portprofile</id>
-						<goals>
-							<goal>generate</goal>
-						</goals>
-						<configuration>
-							<generateDirectory>${project.basedir}/target/generated-sources/xjc2</generateDirectory>
-							<schemaDirectory>${project.basedir}/resources</schemaDirectory>
-							<schemaIncludes>
-								<include>BrocadePortProfileSchema.xsd</include>
-							</schemaIncludes>
-							<generatePackage>com.cloud.network.schema.portprofile</generatePackage>
-						</configuration>
-					</execution>
-					<execution>
-						<id>show-vcs</id>
-						<goals>
-							<goal>generate</goal>
-						</goals>
-						<configuration>
-							<generateDirectory>${project.basedir}/target/generated-sources/xjc3</generateDirectory>
-							<schemaDirectory>${project.basedir}/resources</schemaDirectory>
-							<schemaIncludes>
-								<include>BrocadeShowVcsSchema.xsd</include>
-							</schemaIncludes>
-							<generatePackage>com.cloud.network.schema.showvcs</generatePackage>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-vcs</artifactId>
+    <name>Apache CloudStack Plugin - Network Brocade VCS</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jvnet.jaxb2.maven2</groupId>
+                <artifactId>maven-jaxb2-plugin</artifactId>
+                <version>0.7.1</version>
+                <executions>
+                    <execution>
+                        <id>interface</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <configuration>
+                            <generateDirectory>${project.build.directory}/generated-sources/xjc1</generateDirectory>
+                            <schemaDirectory>${project.build.resources[0].directory}</schemaDirectory>
+                            <schemaIncludes>
+                                <include>BrocadeInterfaceSchema.xsd</include>
+                            </schemaIncludes>
+                            <generatePackage>com.cloud.network.schema.interfacevlan</generatePackage>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>portprofile</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <configuration>
+                            <generateDirectory>${project.build.directory}/generated-sources/xjc2</generateDirectory>
+                            <schemaDirectory>${project.build.resources[0].directory}</schemaDirectory>
+                            <schemaIncludes>
+                                <include>BrocadePortProfileSchema.xsd</include>
+                            </schemaIncludes>
+                            <generatePackage>com.cloud.network.schema.portprofile</generatePackage>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>show-vcs</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <configuration>
+                            <generateDirectory>${project.build.directory}/generated-sources/xjc3</generateDirectory>
+                            <schemaDirectory>${project.build.resources[0].directory}</schemaDirectory>
+                            <schemaIncludes>
+                                <include>BrocadeShowVcsSchema.xsd</include>
+                            </schemaIncludes>
+                            <generatePackage>com.cloud.network.schema.showvcs</generatePackage>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/AssociateMacToNetworkAnswer.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/AssociateMacToNetworkAnswer.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/AssociateMacToNetworkAnswer.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/AssociateMacToNetworkAnswer.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/AssociateMacToNetworkCommand.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/AssociateMacToNetworkCommand.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/AssociateMacToNetworkCommand.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/AssociateMacToNetworkCommand.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/CreateNetworkAnswer.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/CreateNetworkAnswer.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/CreateNetworkAnswer.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/CreateNetworkAnswer.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/CreateNetworkCommand.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/CreateNetworkCommand.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/CreateNetworkCommand.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/CreateNetworkCommand.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DeleteNetworkAnswer.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DeleteNetworkAnswer.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DeleteNetworkAnswer.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DeleteNetworkAnswer.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DeleteNetworkCommand.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DeleteNetworkCommand.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DeleteNetworkCommand.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DeleteNetworkCommand.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DisassociateMacFromNetworkAnswer.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DisassociateMacFromNetworkAnswer.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DisassociateMacFromNetworkAnswer.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DisassociateMacFromNetworkAnswer.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DisassociateMacFromNetworkCommand.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DisassociateMacFromNetworkCommand.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/DisassociateMacFromNetworkCommand.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/DisassociateMacFromNetworkCommand.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/StartupBrocadeVcsCommand.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/StartupBrocadeVcsCommand.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/agent/api/StartupBrocadeVcsCommand.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/agent/api/StartupBrocadeVcsCommand.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/AddBrocadeVcsDeviceCmd.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/AddBrocadeVcsDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/AddBrocadeVcsDeviceCmd.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/AddBrocadeVcsDeviceCmd.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/DeleteBrocadeVcsDeviceCmd.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/DeleteBrocadeVcsDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/DeleteBrocadeVcsDeviceCmd.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/DeleteBrocadeVcsDeviceCmd.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/ListBrocadeVcsDeviceNetworksCmd.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/ListBrocadeVcsDeviceNetworksCmd.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/ListBrocadeVcsDeviceNetworksCmd.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/ListBrocadeVcsDeviceNetworksCmd.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/ListBrocadeVcsDevicesCmd.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/ListBrocadeVcsDevicesCmd.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/api/commands/ListBrocadeVcsDevicesCmd.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/commands/ListBrocadeVcsDevicesCmd.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/api/response/BrocadeVcsDeviceResponse.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/response/BrocadeVcsDeviceResponse.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/api/response/BrocadeVcsDeviceResponse.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/api/response/BrocadeVcsDeviceResponse.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/BrocadeVcsDeviceVO.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/BrocadeVcsDeviceVO.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/BrocadeVcsDeviceVO.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/BrocadeVcsDeviceVO.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/BrocadeVcsNetworkVlanMappingVO.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/BrocadeVcsNetworkVlanMappingVO.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/BrocadeVcsNetworkVlanMappingVO.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/BrocadeVcsNetworkVlanMappingVO.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/brocade/BrocadeVcsApi.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/brocade/BrocadeVcsApi.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApi.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/brocade/BrocadeVcsApiException.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApiException.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/brocade/BrocadeVcsApiException.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/BrocadeVcsApiException.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/brocade/Constants.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/Constants.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/brocade/Constants.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/brocade/Constants.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsDao.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsDao.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsDao.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsDao.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsDaoImpl.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsDaoImpl.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsDaoImpl.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsDaoImpl.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDao.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDao.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDao.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDao.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDaoImpl.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDaoImpl.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDaoImpl.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/dao/BrocadeVcsNetworkVlanMappingDaoImpl.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/element/BrocadeVcsElement.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/element/BrocadeVcsElement.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/element/BrocadeVcsElement.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/element/BrocadeVcsElement.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/element/BrocadeVcsElementService.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/element/BrocadeVcsElementService.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/element/BrocadeVcsElementService.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/element/BrocadeVcsElementService.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/guru/BrocadeVcsGuestNetworkGuru.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/guru/BrocadeVcsGuestNetworkGuru.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/guru/BrocadeVcsGuestNetworkGuru.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/guru/BrocadeVcsGuestNetworkGuru.java
diff --git a/plugins/network-elements/brocade-vcs/src/com/cloud/network/resource/BrocadeVcsResource.java b/plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/resource/BrocadeVcsResource.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/src/com/cloud/network/resource/BrocadeVcsResource.java
rename to plugins/network-elements/brocade-vcs/src/main/java/com/cloud/network/resource/BrocadeVcsResource.java
diff --git a/plugins/network-elements/brocade-vcs/resources/BrocadeInterfaceSchema.xsd b/plugins/network-elements/brocade-vcs/src/main/resources/BrocadeInterfaceSchema.xsd
similarity index 100%
rename from plugins/network-elements/brocade-vcs/resources/BrocadeInterfaceSchema.xsd
rename to plugins/network-elements/brocade-vcs/src/main/resources/BrocadeInterfaceSchema.xsd
diff --git a/plugins/network-elements/brocade-vcs/resources/BrocadePortProfileSchema.xsd b/plugins/network-elements/brocade-vcs/src/main/resources/BrocadePortProfileSchema.xsd
similarity index 100%
rename from plugins/network-elements/brocade-vcs/resources/BrocadePortProfileSchema.xsd
rename to plugins/network-elements/brocade-vcs/src/main/resources/BrocadePortProfileSchema.xsd
diff --git a/plugins/network-elements/brocade-vcs/resources/BrocadeShowVcsSchema.xsd b/plugins/network-elements/brocade-vcs/src/main/resources/BrocadeShowVcsSchema.xsd
similarity index 100%
rename from plugins/network-elements/brocade-vcs/resources/BrocadeShowVcsSchema.xsd
rename to plugins/network-elements/brocade-vcs/src/main/resources/BrocadeShowVcsSchema.xsd
diff --git a/plugins/network-elements/brocade-vcs/resources/META-INF/cloudstack/vcs/module.properties b/plugins/network-elements/brocade-vcs/src/main/resources/META-INF/cloudstack/vcs/module.properties
similarity index 100%
rename from plugins/network-elements/brocade-vcs/resources/META-INF/cloudstack/vcs/module.properties
rename to plugins/network-elements/brocade-vcs/src/main/resources/META-INF/cloudstack/vcs/module.properties
diff --git a/plugins/network-elements/brocade-vcs/resources/META-INF/cloudstack/vcs/spring-vcs-context.xml b/plugins/network-elements/brocade-vcs/src/main/resources/META-INF/cloudstack/vcs/spring-vcs-context.xml
similarity index 100%
rename from plugins/network-elements/brocade-vcs/resources/META-INF/cloudstack/vcs/spring-vcs-context.xml
rename to plugins/network-elements/brocade-vcs/src/main/resources/META-INF/cloudstack/vcs/spring-vcs-context.xml
diff --git a/plugins/network-elements/brocade-vcs/test/com/cloud/network/brocade/BrocadeVcsApiTest.java b/plugins/network-elements/brocade-vcs/src/test/java/com/cloud/network/brocade/BrocadeVcsApiTest.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/test/com/cloud/network/brocade/BrocadeVcsApiTest.java
rename to plugins/network-elements/brocade-vcs/src/test/java/com/cloud/network/brocade/BrocadeVcsApiTest.java
diff --git a/plugins/network-elements/brocade-vcs/test/com/cloud/network/guru/BrocadeVcsGuestNetworkGuruTest.java b/plugins/network-elements/brocade-vcs/src/test/java/com/cloud/network/guru/BrocadeVcsGuestNetworkGuruTest.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/test/com/cloud/network/guru/BrocadeVcsGuestNetworkGuruTest.java
rename to plugins/network-elements/brocade-vcs/src/test/java/com/cloud/network/guru/BrocadeVcsGuestNetworkGuruTest.java
diff --git a/plugins/network-elements/brocade-vcs/test/com/cloud/network/resource/BrocadeVcsResourceTest.java b/plugins/network-elements/brocade-vcs/src/test/java/com/cloud/network/resource/BrocadeVcsResourceTest.java
similarity index 100%
rename from plugins/network-elements/brocade-vcs/test/com/cloud/network/resource/BrocadeVcsResourceTest.java
rename to plugins/network-elements/brocade-vcs/src/test/java/com/cloud/network/resource/BrocadeVcsResourceTest.java
diff --git a/plugins/network-elements/cisco-vnmc/pom.xml b/plugins/network-elements/cisco-vnmc/pom.xml
index 61150e6..9170e68 100644
--- a/plugins/network-elements/cisco-vnmc/pom.xml
+++ b/plugins/network-elements/cisco-vnmc/pom.xml
@@ -1,42 +1,42 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-cisco-vnmc</artifactId>
-  <name>Apache CloudStack Plugin - Cisco VNMC</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-vmware-base</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-cisco-vnmc</artifactId>
+    <name>Apache CloudStack Plugin - Cisco VNMC</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-vmware-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/AssociateAsaWithLogicalEdgeFirewallCommand.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/AssociateAsaWithLogicalEdgeFirewallCommand.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/AssociateAsaWithLogicalEdgeFirewallCommand.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/AssociateAsaWithLogicalEdgeFirewallCommand.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/CleanupLogicalEdgeFirewallCommand.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/CleanupLogicalEdgeFirewallCommand.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/CleanupLogicalEdgeFirewallCommand.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/CleanupLogicalEdgeFirewallCommand.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/ConfigureNexusVsmForAsaCommand.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/ConfigureNexusVsmForAsaCommand.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/ConfigureNexusVsmForAsaCommand.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/ConfigureNexusVsmForAsaCommand.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/CreateLogicalEdgeFirewallCommand.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/CreateLogicalEdgeFirewallCommand.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/agent/api/CreateLogicalEdgeFirewallCommand.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/agent/api/CreateLogicalEdgeFirewallCommand.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/ListCiscoAsa1000vResourcesCmd.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/ListCiscoAsa1000vResourcesCmd.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/ListCiscoAsa1000vResourcesCmd.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/ListCiscoAsa1000vResourcesCmd.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/ListCiscoVnmcResourcesCmd.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/ListCiscoVnmcResourcesCmd.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/ListCiscoVnmcResourcesCmd.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/commands/ListCiscoVnmcResourcesCmd.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/response/CiscoAsa1000vResourceResponse.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/response/CiscoAsa1000vResourceResponse.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/response/CiscoAsa1000vResourceResponse.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/response/CiscoAsa1000vResourceResponse.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/response/CiscoVnmcResourceResponse.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/response/CiscoVnmcResourceResponse.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/api/response/CiscoVnmcResourceResponse.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/api/response/CiscoVnmcResourceResponse.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoAsa1000vDevice.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoAsa1000vDevice.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnection.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcConnection.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnection.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcConnection.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcConnectionImpl.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcController.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcController.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcControllerVO.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/CiscoVnmcControllerVO.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/NetworkAsa1000vMap.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/NetworkAsa1000vMap.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMapVO.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/NetworkAsa1000vMapVO.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMapVO.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/cisco/NetworkAsa1000vMapVO.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDao.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoAsa1000vDao.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDao.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoAsa1000vDao.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoAsa1000vDaoImpl.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDao.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoVnmcDao.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDao.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoVnmcDao.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDaoImpl.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoVnmcDaoImpl.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/CiscoVnmcDaoImpl.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/CiscoVnmcDaoImpl.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDao.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/NetworkAsa1000vMapDao.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDao.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/NetworkAsa1000vMapDao.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoAsa1000vService.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/element/CiscoAsa1000vService.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoAsa1000vService.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/element/CiscoAsa1000vService.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/element/CiscoVnmcElement.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/element/CiscoVnmcElement.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElementService.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/element/CiscoVnmcElementService.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElementService.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/element/CiscoVnmcElementService.java
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java b/plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/resource/CiscoVnmcResource.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/src/com/cloud/network/resource/CiscoVnmcResource.java
rename to plugins/network-elements/cisco-vnmc/src/main/java/com/cloud/network/resource/CiscoVnmcResource.java
diff --git a/plugins/network-elements/cisco-vnmc/resources/META-INF/cloudstack/cisco-vnmc/module.properties b/plugins/network-elements/cisco-vnmc/src/main/resources/META-INF/cloudstack/cisco-vnmc/module.properties
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/resources/META-INF/cloudstack/cisco-vnmc/module.properties
rename to plugins/network-elements/cisco-vnmc/src/main/resources/META-INF/cloudstack/cisco-vnmc/module.properties
diff --git a/plugins/network-elements/cisco-vnmc/resources/META-INF/cloudstack/cisco-vnmc/spring-cisco-vnmc-context.xml b/plugins/network-elements/cisco-vnmc/src/main/resources/META-INF/cloudstack/cisco-vnmc/spring-cisco-vnmc-context.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/resources/META-INF/cloudstack/cisco-vnmc/spring-cisco-vnmc-context.xml
rename to plugins/network-elements/cisco-vnmc/src/main/resources/META-INF/cloudstack/cisco-vnmc/spring-cisco-vnmc-context.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/assoc-asa1000v.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/assoc-asa1000v.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/assoc-asa1000v.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/assoc-asa1000v.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-acl-policy-set.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-acl-policy-set.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-acl-policy-set.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-acl-policy-set.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-dhcp-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-dhcp-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-server.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-dhcp-server.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-dhcp-server.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-dhcp-server.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-nat-policy-set.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-nat-policy-set.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-nat-policy-set.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-nat-policy-set.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-route-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-route-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/associate-route-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/associate-route-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-policy-ref.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-policy-ref.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-policy-ref.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-policy-ref.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-policy-set.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-policy-set.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-policy-set.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-policy-set.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-rule-for-dnat.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-rule-for-dnat.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-rule-for-dnat.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-rule-for-dnat.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-rule-for-pf.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-rule-for-pf.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-acl-rule-for-pf.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-acl-rule-for-pf.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dhcp-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-dhcp-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dhcp-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-dhcp-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dnat-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-dnat-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-dnat-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-dnat-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-device-profile.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-device-profile.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-device-profile.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-device-profile.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-device-route-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-device-route-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-device-route-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-device-route-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-device-route.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-device-route.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-device-route.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-device-route.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-firewall.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-firewall.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-firewall.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-firewall.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-security-profile.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-security-profile.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-edge-security-profile.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-edge-security-profile.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-egress-acl-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-egress-acl-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-egress-acl-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-egress-acl-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-generic-egress-acl-no-protocol-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-generic-egress-acl-no-protocol-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-generic-egress-acl-no-protocol-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-generic-egress-acl-no-protocol-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-generic-egress-acl-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-generic-egress-acl-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-generic-egress-acl-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-generic-egress-acl-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-generic-ingress-acl-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-generic-ingress-acl-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-generic-ingress-acl-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-generic-ingress-acl-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-ingress-acl-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-ingress-acl-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-ingress-acl-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-ingress-acl-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-ip-pool.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-ip-pool.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-ip-pool.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-ip-pool.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-ref.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-nat-policy-ref.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-ref.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-nat-policy-ref.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-set.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-nat-policy-set.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy-set.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-nat-policy-set.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-nat-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-nat-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-nat-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-pf-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-pf-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-pf-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-pf-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-port-pool.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-port-pool.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-port-pool.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-port-pool.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-pool.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-source-nat-pool.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-pool.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-source-nat-pool.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-source-nat-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-source-nat-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-source-nat-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-tenant.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-tenant.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-tenant.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-tenant.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-vdc.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-vdc.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/create-vdc.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/create-vdc.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-acl-policy-set.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-acl-policy-set.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-acl-policy-set.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-acl-policy-set.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-acl-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-acl-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-acl-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-acl-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-edge-firewall.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-edge-firewall.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-edge-firewall.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-edge-firewall.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-edge-security-profile.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-edge-security-profile.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-edge-security-profile.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-edge-security-profile.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-nat-policy-set.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-nat-policy-set.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-nat-policy-set.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-nat-policy-set.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-nat-policy.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-nat-policy.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-nat-policy.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-nat-policy.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-rule.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-rule.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-rule.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-rule.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-tenant.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-tenant.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-tenant.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-tenant.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-vdc.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-vdc.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/delete-vdc.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/delete-vdc.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/disassoc-asa1000v.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/disassoc-asa1000v.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/disassoc-asa1000v.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/disassoc-asa1000v.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-acl-policies.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-acl-policies.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-acl-policies.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-acl-policies.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-children.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-children.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-children.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-children.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-nat-policies.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-nat-policies.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-nat-policies.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-nat-policies.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-policyrefs-in-policyset.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-policyrefs-in-policyset.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-policyrefs-in-policyset.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-policyrefs-in-policyset.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-tenants.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-tenants.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-tenants.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-tenants.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-unassigned-asa1000v.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-unassigned-asa1000v.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/list-unassigned-asa1000v.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/list-unassigned-asa1000v.xml
diff --git a/plugins/network-elements/cisco-vnmc/scripts/network/cisco/login.xml b/plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/login.xml
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/scripts/network/cisco/login.xml
rename to plugins/network-elements/cisco-vnmc/src/main/scripts/network/cisco/login.xml
diff --git a/plugins/network-elements/cisco-vnmc/test/com/cloud/network/cisco/CiscoVnmcConnectionTest.java b/plugins/network-elements/cisco-vnmc/src/test/java/com/cloud/network/cisco/CiscoVnmcConnectionTest.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/test/com/cloud/network/cisco/CiscoVnmcConnectionTest.java
rename to plugins/network-elements/cisco-vnmc/src/test/java/com/cloud/network/cisco/CiscoVnmcConnectionTest.java
diff --git a/plugins/network-elements/cisco-vnmc/test/com/cloud/network/element/CiscoVnmcElementTest.java b/plugins/network-elements/cisco-vnmc/src/test/java/com/cloud/network/element/CiscoVnmcElementTest.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/test/com/cloud/network/element/CiscoVnmcElementTest.java
rename to plugins/network-elements/cisco-vnmc/src/test/java/com/cloud/network/element/CiscoVnmcElementTest.java
diff --git a/plugins/network-elements/cisco-vnmc/test/com/cloud/network/resource/CiscoVnmcResourceTest.java b/plugins/network-elements/cisco-vnmc/src/test/java/com/cloud/network/resource/CiscoVnmcResourceTest.java
similarity index 100%
rename from plugins/network-elements/cisco-vnmc/test/com/cloud/network/resource/CiscoVnmcResourceTest.java
rename to plugins/network-elements/cisco-vnmc/src/test/java/com/cloud/network/resource/CiscoVnmcResourceTest.java
diff --git a/plugins/network-elements/dns-notifier/pom.xml b/plugins/network-elements/dns-notifier/pom.xml
index bac2ad5..f1fa3d3 100644
--- a/plugins/network-elements/dns-notifier/pom.xml
+++ b/plugins/network-elements/dns-notifier/pom.xml
@@ -1,48 +1,43 @@
-<!--

-  Licensed to the Apache Software Foundation (ASF) under one

-  or more contributor license agreements. See the NOTICE file

-  distributed with this work for additional information

-  regarding copyright ownership. The ASF licenses this file

-  to you under the Apache License, Version 2.0 (the

-  "License"); you may not use this file except in compliance

-  with the License. You may obtain a copy of the License at

-

-  http://www.apache.org/licenses/LICENSE-2.0

-

-  Unless required by applicable law or agreed to in writing,

-  software distributed under the License is distributed on an

-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-  KIND, either express or implied. See the License for the

-  specific language governing permissions and limitations

-  under the License.

--->

-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

-  <modelVersion>4.0.0</modelVersion>

-  <parent>

-    <groupId>org.apache.cloudstack</groupId>

-    <artifactId>cloudstack-plugins</artifactId>

-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>

-  </parent>

-  <artifactId>cloud-plugin-example-dns-notifier</artifactId>

-  <name>Apache CloudStack Plugin - Dns Notifier Example</name>

-  <description>This is sample source code on how to write a plugin for CloudStack</description>

-  <build>

-    <defaultGoal>install</defaultGoal>

-    <sourceDirectory>src</sourceDirectory>

-    <testSourceDirectory>test</testSourceDirectory>

-  </build>

-  <dependencies>

-    <dependency>

-      <groupId>org.apache.cloudstack</groupId>

-      <artifactId>cloud-api</artifactId>

-      <version>${project.version}</version>

-    </dependency>

-    <dependency>

-      <groupId>org.apache.cloudstack</groupId>

-      <artifactId>cloud-utils</artifactId>

-      <version>${project.version}</version>

-    </dependency>

-  </dependencies>

-</project>

+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <artifactId>cloud-plugin-example-dns-notifier</artifactId>
+    <name>Apache CloudStack Plugin - Dns Notifier Example</name>
+    <description>This is sample source code on how to write a plugin for CloudStack</description>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/plugins/network-elements/dns-notifier/src/org/apache/cloudstack/network/element/DnsNotifier.java b/plugins/network-elements/dns-notifier/src/main/java/org/apache/cloudstack/network/element/DnsNotifier.java
similarity index 100%
rename from plugins/network-elements/dns-notifier/src/org/apache/cloudstack/network/element/DnsNotifier.java
rename to plugins/network-elements/dns-notifier/src/main/java/org/apache/cloudstack/network/element/DnsNotifier.java
diff --git a/plugins/network-elements/dns-notifier/resources/components-example.xml b/plugins/network-elements/dns-notifier/src/main/resources/components-example.xml
similarity index 100%
rename from plugins/network-elements/dns-notifier/resources/components-example.xml
rename to plugins/network-elements/dns-notifier/src/main/resources/components-example.xml
diff --git a/plugins/network-elements/elastic-loadbalancer/pom.xml b/plugins/network-elements/elastic-loadbalancer/pom.xml
index fbddcd2..b391474 100644
--- a/plugins/network-elements/elastic-loadbalancer/pom.xml
+++ b/plugins/network-elements/elastic-loadbalancer/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-elb</artifactId>
-  <name>Apache CloudStack Plugin - Network Elastic Load Balancer</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-elb</artifactId>
+    <name>Apache CloudStack Plugin - Network Elastic Load Balancer</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/ElasticLbVmMapVO.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/ElasticLbVmMapVO.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/ElasticLbVmMapVO.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/ElasticLbVmMapVO.java
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/element/ElasticLoadBalancerElement.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/element/ElasticLoadBalancerElement.java
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/ElasticLoadBalancerManager.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/ElasticLoadBalancerManager.java
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/LoadBalanceRuleHandler.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/LoadBalanceRuleHandler.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/LoadBalanceRuleHandler.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/LoadBalanceRuleHandler.java
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/dao/ElasticLbVmMapDao.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/dao/ElasticLbVmMapDao.java
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java b/plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java
rename to plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java
diff --git a/plugins/network-elements/elastic-loadbalancer/resources/META-INF/cloudstack/elb/module.properties b/plugins/network-elements/elastic-loadbalancer/src/main/resources/META-INF/cloudstack/elb/module.properties
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/resources/META-INF/cloudstack/elb/module.properties
rename to plugins/network-elements/elastic-loadbalancer/src/main/resources/META-INF/cloudstack/elb/module.properties
diff --git a/plugins/network-elements/elastic-loadbalancer/resources/META-INF/cloudstack/elb/spring-elb-context.xml b/plugins/network-elements/elastic-loadbalancer/src/main/resources/META-INF/cloudstack/elb/spring-elb-context.xml
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/resources/META-INF/cloudstack/elb/spring-elb-context.xml
rename to plugins/network-elements/elastic-loadbalancer/src/main/resources/META-INF/cloudstack/elb/spring-elb-context.xml
diff --git a/plugins/network-elements/elastic-loadbalancer/test/com/cloud/network/lb/ElasticLoadBalancerManagerImplTest.java b/plugins/network-elements/elastic-loadbalancer/src/test/java/com/cloud/network/lb/ElasticLoadBalancerManagerImplTest.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/test/com/cloud/network/lb/ElasticLoadBalancerManagerImplTest.java
rename to plugins/network-elements/elastic-loadbalancer/src/test/java/com/cloud/network/lb/ElasticLoadBalancerManagerImplTest.java
diff --git a/plugins/network-elements/elastic-loadbalancer/test/com/cloud/network/lb/LoadBalanceRuleHandlerTest.java b/plugins/network-elements/elastic-loadbalancer/src/test/java/com/cloud/network/lb/LoadBalanceRuleHandlerTest.java
similarity index 100%
rename from plugins/network-elements/elastic-loadbalancer/test/com/cloud/network/lb/LoadBalanceRuleHandlerTest.java
rename to plugins/network-elements/elastic-loadbalancer/src/test/java/com/cloud/network/lb/LoadBalanceRuleHandlerTest.java
diff --git a/plugins/network-elements/f5/pom.xml b/plugins/network-elements/f5/pom.xml
index 2e415f2..9b611a2 100644
--- a/plugins/network-elements/f5/pom.xml
+++ b/plugins/network-elements/f5/pom.xml
@@ -1,49 +1,49 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-f5</artifactId>
-  <name>Apache CloudStack Plugin - F5</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis-jaxrpc</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.cloud.com.f5</groupId>
-      <artifactId>icontrol</artifactId>
-      <version>12.1</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis</artifactId>
-    </dependency>
-   <dependency>
-      <groupId>commons-discovery</groupId>
-       <artifactId>commons-discovery</artifactId>
-       <version>0.5</version>
-   </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-f5</artifactId>
+    <name>Apache CloudStack Plugin - F5</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis-jaxrpc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.cloud.com.f5</groupId>
+            <artifactId>icontrol</artifactId>
+            <version>12.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddF5LoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/AddF5LoadBalancerCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancersCmd.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/commands/ListF5LoadBalancersCmd.java
diff --git a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/main/java/com/cloud/api/response/F5LoadBalancerResponse.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/api/response/F5LoadBalancerResponse.java
diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElement.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElement.java
diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElementService.java b/plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElementService.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElementService.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/network/element/F5ExternalLoadBalancerElementService.java
diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/main/java/com/cloud/network/resource/F5BigIpResource.java
similarity index 100%
rename from plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java
rename to plugins/network-elements/f5/src/main/java/com/cloud/network/resource/F5BigIpResource.java
diff --git a/plugins/network-elements/f5/resources/META-INF/cloudstack/f5/module.properties b/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/module.properties
similarity index 100%
rename from plugins/network-elements/f5/resources/META-INF/cloudstack/f5/module.properties
rename to plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/module.properties
diff --git a/plugins/network-elements/f5/resources/META-INF/cloudstack/f5/spring-f5-context.xml b/plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/spring-f5-context.xml
similarity index 100%
rename from plugins/network-elements/f5/resources/META-INF/cloudstack/f5/spring-f5-context.xml
rename to plugins/network-elements/f5/src/main/resources/META-INF/cloudstack/f5/spring-f5-context.xml
diff --git a/plugins/network-elements/globodns/pom.xml b/plugins/network-elements/globodns/pom.xml
index d6821a8..6420387 100644
--- a/plugins/network-elements/globodns/pom.xml
+++ b/plugins/network-elements/globodns/pom.xml
@@ -1,37 +1,36 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-globodns</artifactId>
-  <name>Apache CloudStack Plugin - GloboDNS</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>com.globo.globodns</groupId>
-      <artifactId>globodns-client</artifactId>
-      <version>0.0.23</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-globodns</artifactId>
+    <name>Apache CloudStack Plugin - GloboDNS</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>com.globo.globodns</groupId>
+            <artifactId>globodns-client</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/api/AddGloboDnsHostCmd.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/api/AddGloboDnsHostCmd.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/api/AddGloboDnsHostCmd.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/api/AddGloboDnsHostCmd.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/CreateOrUpdateDomainCommand.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/CreateOrUpdateDomainCommand.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/CreateOrUpdateDomainCommand.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/CreateOrUpdateDomainCommand.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/CreateOrUpdateRecordAndReverseCommand.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/CreateOrUpdateRecordAndReverseCommand.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/CreateOrUpdateRecordAndReverseCommand.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/CreateOrUpdateRecordAndReverseCommand.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/RemoveDomainCommand.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/RemoveDomainCommand.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/RemoveDomainCommand.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/RemoveDomainCommand.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/RemoveRecordCommand.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/RemoveRecordCommand.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/RemoveRecordCommand.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/RemoveRecordCommand.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/SignInCommand.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/SignInCommand.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/commands/SignInCommand.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/commands/SignInCommand.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/element/GloboDnsElement.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/element/GloboDnsElement.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/element/GloboDnsElement.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/element/GloboDnsElement.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/element/GloboDnsElementService.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/element/GloboDnsElementService.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/element/GloboDnsElementService.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/element/GloboDnsElementService.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/resource/GloboDnsResource.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/resource/GloboDnsResource.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/resource/GloboDnsResource.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/resource/GloboDnsResource.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsDomainListResponse.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsDomainListResponse.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsDomainListResponse.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsDomainListResponse.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsDomainResponse.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsDomainResponse.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsDomainResponse.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsDomainResponse.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsExportResponse.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsExportResponse.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsExportResponse.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsExportResponse.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsRecordListResponse.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsRecordListResponse.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsRecordListResponse.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsRecordListResponse.java
diff --git a/plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsRecordResponse.java b/plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsRecordResponse.java
similarity index 100%
rename from plugins/network-elements/globodns/src/com/globo/globodns/cloudstack/response/GloboDnsRecordResponse.java
rename to plugins/network-elements/globodns/src/main/java/com/globo/globodns/cloudstack/response/GloboDnsRecordResponse.java
diff --git a/plugins/network-elements/globodns/resources/META-INF/cloudstack/globodns/module.properties b/plugins/network-elements/globodns/src/main/resources/META-INF/cloudstack/globodns/module.properties
similarity index 100%
rename from plugins/network-elements/globodns/resources/META-INF/cloudstack/globodns/module.properties
rename to plugins/network-elements/globodns/src/main/resources/META-INF/cloudstack/globodns/module.properties
diff --git a/plugins/network-elements/globodns/resources/META-INF/cloudstack/globodns/spring-globodns-context.xml b/plugins/network-elements/globodns/src/main/resources/META-INF/cloudstack/globodns/spring-globodns-context.xml
similarity index 100%
rename from plugins/network-elements/globodns/resources/META-INF/cloudstack/globodns/spring-globodns-context.xml
rename to plugins/network-elements/globodns/src/main/resources/META-INF/cloudstack/globodns/spring-globodns-context.xml
diff --git a/plugins/network-elements/globodns/test/com/globo/globodns/cloudstack/element/GloboDnsElementTest.java b/plugins/network-elements/globodns/src/test/java/com/globo/globodns/cloudstack/element/GloboDnsElementTest.java
similarity index 100%
rename from plugins/network-elements/globodns/test/com/globo/globodns/cloudstack/element/GloboDnsElementTest.java
rename to plugins/network-elements/globodns/src/test/java/com/globo/globodns/cloudstack/element/GloboDnsElementTest.java
diff --git a/plugins/network-elements/globodns/test/com/globo/globodns/cloudstack/resource/GloboDnsResourceTest.java b/plugins/network-elements/globodns/src/test/java/com/globo/globodns/cloudstack/resource/GloboDnsResourceTest.java
similarity index 100%
rename from plugins/network-elements/globodns/test/com/globo/globodns/cloudstack/resource/GloboDnsResourceTest.java
rename to plugins/network-elements/globodns/src/test/java/com/globo/globodns/cloudstack/resource/GloboDnsResourceTest.java
diff --git a/plugins/network-elements/globodns/test/resources/db.properties b/plugins/network-elements/globodns/src/test/resources/db.properties
similarity index 100%
rename from plugins/network-elements/globodns/test/resources/db.properties
rename to plugins/network-elements/globodns/src/test/resources/db.properties
diff --git a/plugins/network-elements/globodns/test/resources/log4j.properties b/plugins/network-elements/globodns/src/test/resources/log4j.properties
similarity index 100%
rename from plugins/network-elements/globodns/test/resources/log4j.properties
rename to plugins/network-elements/globodns/src/test/resources/log4j.properties
diff --git a/plugins/network-elements/internal-loadbalancer/pom.xml b/plugins/network-elements/internal-loadbalancer/pom.xml
index 1b9abd3..755456a 100644
--- a/plugins/network-elements/internal-loadbalancer/pom.xml
+++ b/plugins/network-elements/internal-loadbalancer/pom.xml
@@ -1,50 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-internallb</artifactId>
-  <name>Apache CloudStack Plugin - Network Internal Load Balancer</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-    <resources>
-      <resource>
-        <directory>resources</directory>
-        <includes>
-          <include>**/*.xml</include>
-        </includes>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>test/resources</directory>
-          <excludes>
-              <exclude>%regex[.*[0-9]*To[0-9]*.*Test.*]</exclude>
-          </excludes>
-      </testResource>
-    </testResources>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-internallb</artifactId>
+    <name>Apache CloudStack Plugin - Network Internal Load Balancer</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java b/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
rename to plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManager.java b/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManager.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManager.java
rename to plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManager.java
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java b/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
rename to plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
diff --git a/plugins/network-elements/internal-loadbalancer/resources/META-INF/cloudstack/core/spring-internallb-core-context.xml b/plugins/network-elements/internal-loadbalancer/src/main/resources/META-INF/cloudstack/core/spring-internallb-core-context.xml
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/resources/META-INF/cloudstack/core/spring-internallb-core-context.xml
rename to plugins/network-elements/internal-loadbalancer/src/main/resources/META-INF/cloudstack/core/spring-internallb-core-context.xml
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbelement/ElementChildTestConfiguration.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbelement/ElementChildTestConfiguration.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbelement/ElementChildTestConfiguration.java
rename to plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbelement/ElementChildTestConfiguration.java
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbelement/InternalLbElementServiceTest.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbelement/InternalLbElementServiceTest.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbelement/InternalLbElementServiceTest.java
rename to plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbelement/InternalLbElementServiceTest.java
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbelement/InternalLbElementTest.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbelement/InternalLbElementTest.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbelement/InternalLbElementTest.java
rename to plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbelement/InternalLbElementTest.java
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
rename to plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
rename to plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/LbChildTestConfiguration.java b/plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/LbChildTestConfiguration.java
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/LbChildTestConfiguration.java
rename to plugins/network-elements/internal-loadbalancer/src/test/java/org/apache/cloudstack/internallbvmmgr/LbChildTestConfiguration.java
diff --git a/plugins/network-elements/internal-loadbalancer/test/resources/lb_element.xml b/plugins/network-elements/internal-loadbalancer/src/test/resources/lb_element.xml
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/resources/lb_element.xml
rename to plugins/network-elements/internal-loadbalancer/src/test/resources/lb_element.xml
diff --git a/plugins/network-elements/internal-loadbalancer/test/resources/lb_mgr.xml b/plugins/network-elements/internal-loadbalancer/src/test/resources/lb_mgr.xml
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/resources/lb_mgr.xml
rename to plugins/network-elements/internal-loadbalancer/src/test/resources/lb_mgr.xml
diff --git a/plugins/network-elements/internal-loadbalancer/test/resources/lb_svc.xml b/plugins/network-elements/internal-loadbalancer/src/test/resources/lb_svc.xml
similarity index 100%
rename from plugins/network-elements/internal-loadbalancer/test/resources/lb_svc.xml
rename to plugins/network-elements/internal-loadbalancer/src/test/resources/lb_svc.xml
diff --git a/plugins/network-elements/juniper-contrail/pom.xml b/plugins/network-elements/juniper-contrail/pom.xml
index 7871fc4..94e3f01 100644
--- a/plugins/network-elements/juniper-contrail/pom.xml
+++ b/plugins/network-elements/juniper-contrail/pom.xml
@@ -1,156 +1,142 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-contrail</artifactId>
-  <name>Apache CloudStack Plugin - Network Juniper Contrail</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <repositories>
-    <repository>
-      <id>juniper-contrail</id>
-      <url>http://juniper.github.io/contrail-maven/snapshots</url>
-    </repository>
-  </repositories>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-network-internallb</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-orchestration</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-      <exclusions>
-        <exclusion>
-           <artifactId>xml-apis</artifactId>
-           <groupId>xml-apis</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-spring-lifecycle</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-security</artifactId>
-      <version>${cs.jetty.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>net.juniper.contrail</groupId>
-      <artifactId>juniper-contrail-api</artifactId>
-      <version>1.0-SNAPSHOT</version>
-    </dependency>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-exec</artifactId>
-        <version>1.3</version>
-    </dependency>
-    <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-all</artifactId>
-        <version>1.10.19</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-    <testResources>
-      <testResource>
-        <directory>test/resources</directory>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <forkMode>always</forkMode>
-          <argLine>-Xmx1024m</argLine>
-	  <excludes>
-	    <exclude>**/NetworkProviderTest.java</exclude>
-	    <exclude>**/PublicNetworkTest.java</exclude>
-	    </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-contrail</artifactId>
+    <name>Apache CloudStack Plugin - Network Juniper Contrail</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <repositories>
+        <repository>
+            <id>juniper-contrail</id>
+            <url>http://juniper.github.io/contrail-maven/snapshots</url>
+        </repository>
+    </repositories>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-hypervisor-xenserver</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-network-internallb</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-orchestration</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>xml-apis</artifactId>
+                    <groupId>xml-apis</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-spring-lifecycle</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-security</artifactId>
+            <version>${cs.jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.juniper.contrail</groupId>
+            <artifactId>juniper-contrail-api</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-exec</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkMode>always</forkMode>
+                    <argLine>-Xmx1024m</argLine>
+                    <excludes>
+                        <exclude>**/NetworkProviderTest.java</exclude>
+                        <exclude>**/PublicNetworkTest.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/command/CreateServiceInstanceCmd.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/api/response/ServiceInstanceResponse.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/response/ServiceInstanceResponse.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/api/response/ServiceInstanceResponse.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/api/response/ServiceInstanceResponse.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailElement.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailElement.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailElement.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailElement.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailElementImpl.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailElementImpl.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailElementImpl.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailElementImpl.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManager.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManager.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/DBSyncGeneric.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/DBSyncGeneric.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/DBSyncGeneric.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/DBSyncGeneric.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/EventUtils.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/EventUtils.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/EventUtils.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/EventUtils.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ModelDatabase.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ModelDatabase.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ModelDatabase.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ModelDatabase.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSync.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerDBSync.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSync.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerDBSync.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerEventHandler.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerEventHandler.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerEventHandler.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerEventHandler.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerEventHandlerImpl.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerEventHandlerImpl.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerEventHandlerImpl.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServerEventHandlerImpl.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServiceManager.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceManager.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServiceManager.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceManager.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServiceManagerImpl.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceManagerImpl.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServiceManagerImpl.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceManagerImpl.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ServiceVirtualMachine.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/FloatingIpModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/FloatingIpModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/FloatingIpModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/FloatingIpModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/FloatingIpPoolModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/FloatingIpPoolModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/FloatingIpPoolModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/FloatingIpPoolModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/InstanceIpModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/InstanceIpModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/InstanceIpModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/InstanceIpModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelController.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ModelController.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelController.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ModelController.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObject.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ModelObject.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObject.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ModelObject.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObjectBase.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ModelObjectBase.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObjectBase.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ModelObjectBase.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ServiceInstanceModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ServiceInstanceModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ServiceInstanceModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/ServiceInstanceModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/VMInterfaceModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VMInterfaceModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/VMInterfaceModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VMInterfaceModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/VirtualMachineModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VirtualMachineModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/VirtualMachineModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VirtualMachineModel.java
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/VirtualNetworkModel.java b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VirtualNetworkModel.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/VirtualNetworkModel.java
rename to plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VirtualNetworkModel.java
diff --git a/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/module.properties b/plugins/network-elements/juniper-contrail/src/main/resources/META-INF/cloudstack/contrail/module.properties
similarity index 100%
rename from plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/module.properties
rename to plugins/network-elements/juniper-contrail/src/main/resources/META-INF/cloudstack/contrail/module.properties
diff --git a/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml b/plugins/network-elements/juniper-contrail/src/main/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
similarity index 100%
rename from plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
rename to plugins/network-elements/juniper-contrail/src/main/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
diff --git a/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml b/plugins/network-elements/juniper-contrail/src/main/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml
similarity index 100%
rename from plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml
rename to plugins/network-elements/juniper-contrail/src/main/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/ApiConnectorMockito.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ApiConnectorMockito.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/ApiConnectorMockito.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ApiConnectorMockito.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/IntegrationTestConfiguration.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ManagementServerMock.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
similarity index 97%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
index 37ca2bc..100f380 100644
--- a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
+++ b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
@@ -168,13 +168,6 @@
     }
 
     @Override
-    public UserAccount updateUser(Long userId, String firstName, String lastName, String email, String userName, String password, String apiKey, String secretKey,
-                                  String timeZone) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     public User getActiveUser(long arg0) {
         return _systemUser;
     }
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/ProviderTestConfiguration.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ProviderTestConfiguration.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/ProviderTestConfiguration.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/ProviderTestConfiguration.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/PublicNetworkTest.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/PublicNetworkTest.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/PublicNetworkTest.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/PublicNetworkTest.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/PublicNetworkTestConfiguration.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/PublicNetworkTestConfiguration.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/PublicNetworkTestConfiguration.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/PublicNetworkTestConfiguration.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/TestDbSetup.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/TestDbSetup.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/TestDbSetup.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/management/TestDbSetup.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/InstanceIpModelTest.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/InstanceIpModelTest.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/InstanceIpModelTest.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/InstanceIpModelTest.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/VMInterfaceModelTest.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/VMInterfaceModelTest.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/VMInterfaceModelTest.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/VMInterfaceModelTest.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/VirtualMachineModelTest.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/VirtualMachineModelTest.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/VirtualMachineModelTest.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/VirtualMachineModelTest.java
diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/VirtualNetworkModelTest.java b/plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/VirtualNetworkModelTest.java
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/model/VirtualNetworkModelTest.java
rename to plugins/network-elements/juniper-contrail/src/test/java/org/apache/cloudstack/network/contrail/model/VirtualNetworkModelTest.java
diff --git a/plugins/network-elements/juniper-contrail/test/resources/commonContext.xml b/plugins/network-elements/juniper-contrail/src/test/resources/commonContext.xml
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/commonContext.xml
rename to plugins/network-elements/juniper-contrail/src/test/resources/commonContext.xml
diff --git a/plugins/network-elements/juniper-contrail/test/resources/contrail.properties b/plugins/network-elements/juniper-contrail/src/test/resources/contrail.properties
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/contrail.properties
rename to plugins/network-elements/juniper-contrail/src/test/resources/contrail.properties
diff --git a/plugins/network-elements/juniper-contrail/test/resources/db.properties b/plugins/network-elements/juniper-contrail/src/test/resources/db.properties
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/db.properties
rename to plugins/network-elements/juniper-contrail/src/test/resources/db.properties
diff --git a/plugins/network-elements/juniper-contrail/test/resources/log4j.properties b/plugins/network-elements/juniper-contrail/src/test/resources/log4j.properties
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/log4j.properties
rename to plugins/network-elements/juniper-contrail/src/test/resources/log4j.properties
diff --git a/plugins/network-elements/juniper-contrail/test/resources/mysql_db_start.sh b/plugins/network-elements/juniper-contrail/src/test/resources/mysql_db_start.sh
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/mysql_db_start.sh
rename to plugins/network-elements/juniper-contrail/src/test/resources/mysql_db_start.sh
diff --git a/plugins/network-elements/juniper-contrail/test/resources/mysql_db_stop.sh b/plugins/network-elements/juniper-contrail/src/test/resources/mysql_db_stop.sh
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/mysql_db_stop.sh
rename to plugins/network-elements/juniper-contrail/src/test/resources/mysql_db_stop.sh
diff --git a/plugins/network-elements/juniper-contrail/test/resources/providerContext.xml b/plugins/network-elements/juniper-contrail/src/test/resources/providerContext.xml
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/providerContext.xml
rename to plugins/network-elements/juniper-contrail/src/test/resources/providerContext.xml
diff --git a/plugins/network-elements/juniper-contrail/test/resources/publicNetworkContext.xml b/plugins/network-elements/juniper-contrail/src/test/resources/publicNetworkContext.xml
similarity index 100%
rename from plugins/network-elements/juniper-contrail/test/resources/publicNetworkContext.xml
rename to plugins/network-elements/juniper-contrail/src/test/resources/publicNetworkContext.xml
diff --git a/plugins/network-elements/juniper-srx/pom.xml b/plugins/network-elements/juniper-srx/pom.xml
index 3d27ff9..b1adddb 100644
--- a/plugins/network-elements/juniper-srx/pom.xml
+++ b/plugins/network-elements/juniper-srx/pom.xml
@@ -1,40 +1,41 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-srx</artifactId>
-  <name>Apache CloudStack Plugin - Juniper SRX</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>com.cloud.com.f5</groupId>
-      <artifactId>icontrol</artifactId>
-      <version>1.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis</artifactId>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-srx</artifactId>
+    <name>Apache CloudStack Plugin - Juniper SRX</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>com.cloud.com.f5</groupId>
+            <artifactId>icontrol</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddExternalFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddExternalFirewallCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddSrxFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/AddSrxFirewallCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteExternalFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteExternalFirewallCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteSrxFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/DeleteSrxFirewallCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListExternalFirewallsCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListExternalFirewallsCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallsCmd.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/commands/ListSrxFirewallsCmd.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/response/SrxFirewallResponse.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/api/response/SrxFirewallResponse.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXFirewallElementService.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXFirewallElementService.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXFirewallElementService.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/element/JuniperSRXFirewallElementService.java
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java b/plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/resource/JuniperSrxResource.java
similarity index 100%
rename from plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java
rename to plugins/network-elements/juniper-srx/src/main/java/com/cloud/network/resource/JuniperSrxResource.java
diff --git a/plugins/network-elements/juniper-srx/resources/META-INF/cloudstack/srx/module.properties b/plugins/network-elements/juniper-srx/src/main/resources/META-INF/cloudstack/srx/module.properties
similarity index 100%
rename from plugins/network-elements/juniper-srx/resources/META-INF/cloudstack/srx/module.properties
rename to plugins/network-elements/juniper-srx/src/main/resources/META-INF/cloudstack/srx/module.properties
diff --git a/plugins/network-elements/juniper-srx/resources/META-INF/cloudstack/srx/spring-srx-context.xml b/plugins/network-elements/juniper-srx/src/main/resources/META-INF/cloudstack/srx/spring-srx-context.xml
similarity index 100%
rename from plugins/network-elements/juniper-srx/resources/META-INF/cloudstack/srx/spring-srx-context.xml
rename to plugins/network-elements/juniper-srx/src/main/resources/META-INF/cloudstack/srx/spring-srx-context.xml
diff --git a/plugins/network-elements/netscaler/pom.xml b/plugins/network-elements/netscaler/pom.xml
index b2a8b90..a541a89 100644
--- a/plugins/network-elements/netscaler/pom.xml
+++ b/plugins/network-elements/netscaler/pom.xml
@@ -1,46 +1,46 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-netscaler</artifactId>
-  <name>Apache CloudStack Plugin - Network Netscaler</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-        <groupId>com.citrix.netscaler.nitro</groupId>
-        <artifactId>nitro</artifactId>
-        <version>${cs.nitro.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.citrix.netscaler.nitro</groupId>
-      <artifactId>sdx_nitro</artifactId>
-      <version>${cs.nitro.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.json</groupId>
-      <artifactId>json</artifactId>
-      <version>20090211</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-netscaler</artifactId>
+    <name>Apache CloudStack Plugin - Network Netscaler</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>com.citrix.netscaler.nitro</groupId>
+            <artifactId>nitro</artifactId>
+            <version>${cs.nitro.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.citrix.netscaler.nitro</groupId>
+            <artifactId>sdx_nitro</artifactId>
+            <version>${cs.nitro.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerControlCenterCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeleteNetscalerControlCenterCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerControlCenterCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeleteNetscalerControlCenterCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteServicePackageOfferingCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeleteServicePackageOfferingCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteServicePackageOfferingCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeleteServicePackageOfferingCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeployNetscalerVpxCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeployNetscalerVpxCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/DeployNetscalerVpxCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/DeployNetscalerVpxCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerControlCenterCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListNetscalerControlCenterCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerControlCenterCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListNetscalerControlCenterCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListRegisteredServicePackageCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListRegisteredServicePackageCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/ListRegisteredServicePackageCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/ListRegisteredServicePackageCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/RegisterNetscalerControlCenterCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/RegisterNetscalerControlCenterCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/RegisterNetscalerControlCenterCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/RegisterNetscalerControlCenterCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/RegisterServicePackageCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/RegisterServicePackageCmd.java
similarity index 98%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/RegisterServicePackageCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/RegisterServicePackageCmd.java
index fdef005..ae2d59b 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/RegisterServicePackageCmd.java
+++ b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/RegisterServicePackageCmd.java
@@ -69,7 +69,7 @@
         } catch (CloudRuntimeException runtimeExcp) {
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
         } catch (EntityExistsException runtimeExcp) {
-            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Service Pacakge Already Exists with Name " + getSpName());
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Service Package Already Exists with Name " + getSpName());
         }
 
     }
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/StopNetScalerVMCmd.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/StopNetScalerVMCmd.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/commands/StopNetScalerVMCmd.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/commands/StopNetScalerVMCmd.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetScalerServicePackageResponse.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/response/NetScalerServicePackageResponse.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/response/NetScalerServicePackageResponse.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/response/NetScalerServicePackageResponse.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerControlCenterResponse.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/response/NetscalerControlCenterResponse.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerControlCenterResponse.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/response/NetscalerControlCenterResponse.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/api/response/NetscalerLoadBalancerResponse.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/api/response/NetscalerLoadBalancerResponse.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/NetScalerControlCenterVO.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/NetScalerControlCenterVO.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/NetScalerControlCenterVO.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/NetScalerControlCenterVO.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/NetScalerPodVO.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/NetScalerPodVO.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/NetScalerPodVO.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/NetScalerPodVO.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/NetScalerServicePackageVO.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/NetScalerServicePackageVO.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/NetScalerServicePackageVO.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/NetScalerServicePackageVO.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerControlCenterDao.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerControlCenterDao.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerControlCenterDao.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerControlCenterDao.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerControlCenterDaoImpl.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerControlCenterDaoImpl.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerControlCenterDaoImpl.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerControlCenterDaoImpl.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerPodDao.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerPodDao.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerPodDao.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerPodDao.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerPodDaoImpl.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerPodDaoImpl.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerPodDaoImpl.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerPodDaoImpl.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerServicePackageDao.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerServicePackageDao.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerServicePackageDao.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerServicePackageDao.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerServicePackageDaoImpl.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerServicePackageDaoImpl.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/dao/NetScalerServicePackageDaoImpl.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/dao/NetScalerServicePackageDaoImpl.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/element/NetscalerElement.java
similarity index 95%
rename from plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/element/NetscalerElement.java
index 38a836d..1df1640 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
+++ b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/element/NetscalerElement.java
@@ -28,12 +28,6 @@
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.log4j.Logger;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import com.google.gson.Gson;
-
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.ServerApiException;
@@ -41,6 +35,9 @@
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice;
 import org.apache.cloudstack.region.gslb.GslbServiceProvider;
+import org.apache.log4j.Logger;
+import org.json.JSONException;
+import org.json.JSONObject;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
@@ -84,6 +81,7 @@
 import com.cloud.deploy.DeploymentPlan;
 import com.cloud.event.ActionEvent;
 import com.cloud.event.EventTypes;
+import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.InsufficientNetworkCapacityException;
@@ -154,10 +152,11 @@
 import com.cloud.vm.NicProfile;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VirtualMachineProfile;
+import com.google.gson.Gson;
 
 public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl
-        implements LoadBalancingServiceProvider, NetscalerLoadBalancerElementService, ExternalLoadBalancerDeviceManager,
-        IpDeployer, StaticNatServiceProvider, GslbServiceProvider {
+implements LoadBalancingServiceProvider, NetscalerLoadBalancerElementService, ExternalLoadBalancerDeviceManager,
+IpDeployer, StaticNatServiceProvider, GslbServiceProvider {
 
     private static final Logger s_logger = Logger.getLogger(NetscalerElement.class);
     public static final AutoScaleCounterType AutoScaleCounterSnmp = new AutoScaleCounterType("snmp");
@@ -218,7 +217,7 @@
 
         boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced
                 && (config.getGuestType() == Network.GuestType.Isolated
-                        || config.getGuestType() == Network.GuestType.Shared)
+                || config.getGuestType() == Network.GuestType.Shared)
                 && config.getTrafficType() == TrafficType.Guest);
         boolean handleInBasicZone = (zone.getNetworkType() == NetworkType.Basic
                 && config.getGuestType() == Network.GuestType.Shared && config.getTrafficType() == TrafficType.Guest);
@@ -242,7 +241,7 @@
     @Override
     public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest,
             ReservationContext context) throws ResourceUnavailableException, ConcurrentOperationException,
-                    InsufficientNetworkCapacityException {
+    InsufficientNetworkCapacityException {
 
         if (!canHandle(guestConfig, Service.Lb)) {
             return false;
@@ -271,7 +270,7 @@
             throw new ResourceUnavailableException(
                     "There are no NetScaler load balancer devices with the free capacity for implementing this network : "
                             + e.getMessage(),
-                    DataCenter.class, guestConfig.getDataCenterId());
+                            DataCenter.class, guestConfig.getDataCenterId());
         }
     }
 
@@ -286,7 +285,6 @@
         Map<String, String> _configs;
         List<NetScalerControlCenterVO> ncc = _netscalerControlCenterDao.listAll();
         HostVO hostVO = null;
-        Map<String, Object> params;
         if (ncc.size() > 0) {
             NetScalerControlCenterVO nccVO = ncc.get(0);
             String ipAddress = nccVO.getNccip();
@@ -414,7 +412,7 @@
     @Override
     public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest,
             ReservationContext context) throws ConcurrentOperationException, InsufficientNetworkCapacityException,
-                    ResourceUnavailableException {
+    ResourceUnavailableException {
         return true;
     }
 
@@ -593,45 +591,45 @@
         boolean dedicatedUse = (configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED) != null)
                 ? Boolean.parseBoolean(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED)) : false;
 
-        if (dedicatedUse && !deviceName.equals(NetworkDevice.NetscalerVPXLoadBalancer.getName())) {
-            String msg = "Only Netscaler VPX load balancers can be specified for dedicated use";
-            s_logger.debug(msg);
-            throw new InvalidParameterValueException(msg);
-        }
+                if (dedicatedUse && !deviceName.equals(NetworkDevice.NetscalerVPXLoadBalancer.getName())) {
+                    String msg = "Only Netscaler VPX load balancers can be specified for dedicated use";
+                    s_logger.debug(msg);
+                    throw new InvalidParameterValueException(msg);
+                }
 
-        if (cmd.isGslbProvider()) {
+                if (cmd.isGslbProvider()) {
 
-            if (!deviceName.equals(NetworkDevice.NetscalerVPXLoadBalancer.getName())
-                    && !deviceName.equals(NetworkDevice.NetscalerMPXLoadBalancer.getName())) {
-                String msg = "Only Netscaler VPX or MPX load balancers can be specified as GSLB service provider";
-                s_logger.debug(msg);
-                throw new InvalidParameterValueException(msg);
-            }
+                    if (!deviceName.equals(NetworkDevice.NetscalerVPXLoadBalancer.getName())
+                            && !deviceName.equals(NetworkDevice.NetscalerMPXLoadBalancer.getName())) {
+                        String msg = "Only Netscaler VPX or MPX load balancers can be specified as GSLB service provider";
+                        s_logger.debug(msg);
+                        throw new InvalidParameterValueException(msg);
+                    }
 
-            if (cmd.getSitePublicIp() == null || cmd.getSitePrivateIp() == null) {
-                String msg = "Public and Privae IP needs to provided for NetScaler that will be GSLB provider";
-                s_logger.debug(msg);
-                throw new InvalidParameterValueException(msg);
-            }
+                    if (cmd.getSitePublicIp() == null || cmd.getSitePrivateIp() == null) {
+                        String msg = "Public and Privae IP needs to provided for NetScaler that will be GSLB provider";
+                        s_logger.debug(msg);
+                        throw new InvalidParameterValueException(msg);
+                    }
 
-            if (dedicatedUse) {
-                throw new InvalidParameterValueException(
-                        "NetScaler provisioned to be GSLB service provider can only be configured for shared usage.");
-            }
+                    if (dedicatedUse) {
+                        throw new InvalidParameterValueException(
+                                "NetScaler provisioned to be GSLB service provider can only be configured for shared usage.");
+                    }
 
-        }
+                }
 
-        if (cmd.isExclusiveGslbProvider() && !cmd.isGslbProvider()) {
-            throw new InvalidParameterValueException(
-                    "NetScaler can be provisioned to be exclusive GSLB service provider"
-                            + " only if its being configured as GSLB service provider also.");
-        }
+                if (cmd.isExclusiveGslbProvider() && !cmd.isGslbProvider()) {
+                    throw new InvalidParameterValueException(
+                            "NetScaler can be provisioned to be exclusive GSLB service provider"
+                                    + " only if its being configured as GSLB service provider also.");
+                }
 
-        ExternalLoadBalancerDeviceVO lbDeviceVO = addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(),
-                cmd.getUsername(), cmd.getPassword(), deviceName, new NetscalerResource(), cmd.isGslbProvider(),
-                cmd.isExclusiveGslbProvider(), cmd.getSitePublicIp(), cmd.getSitePrivateIp());
+                ExternalLoadBalancerDeviceVO lbDeviceVO = addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(),
+                        cmd.getUsername(), cmd.getPassword(), deviceName, new NetscalerResource(), cmd.isGslbProvider(),
+                        cmd.isExclusiveGslbProvider(), cmd.getSitePublicIp(), cmd.getSitePrivateIp());
 
-        return lbDeviceVO;
+                return lbDeviceVO;
     }
 
     @Override
@@ -759,7 +757,11 @@
         });
         HostVO host = _hostDao.findById(lbDeviceVo.getHostId());
 
-        _agentMgr.reconnect(host.getId());
+        try {
+            _agentMgr.reconnect(host.getId());
+        } catch (AgentUnavailableException e) {
+            s_logger.warn("failed to reconnect host " + host, e);
+        }
         return lbDeviceVo;
     }
 
@@ -858,8 +860,9 @@
         boolean flag=false;
         try {
             result = _netscalerServicePackageDao.findByUuid(cmd.getId());
-            if (result == null)
+            if (result == null) {
                 throw new CloudRuntimeException("Record does not Exists in the Table");
+            }
 
             if(_networkOfferingDao.isUsingServicePackage(result.getUuid()))
             {
@@ -869,10 +872,11 @@
             flag = _netscalerServicePackageDao.remove(result.getId());
 
         } catch (Exception e) {
-            if (e instanceof InvalidParameterValueException)
+            if (e instanceof InvalidParameterValueException) {
                 throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.getMessage());
-            else
-               throw e;
+            } else {
+                throw e;
+            }
 
         }
         return flag;
@@ -884,18 +888,19 @@
     public boolean deleteNetscalerControlCenter(DeleteNetscalerControlCenterCmd cmd) throws CloudRuntimeException {
 
         NetScalerControlCenterVO result = _netscalerControlCenterDao.findByUuid(cmd.getId());
-        if (result == null)
+        if (result == null) {
             throw new CloudRuntimeException("External Netscaler Control Center Table does not contain record with this ID");
-        else {
+        } else {
             //ID list of Network Offering which are not removed and have service Package Uuid field not null.
             List<Long> servicePackageId_list = _networkOfferingDao.listNetworkOfferingID();
 
             if (servicePackageId_list.size() != 0) {
                 //VO list of Networks  which are using Network Offering.
                 List<NetworkVO> networkVO_list = _networkDao.listNetworkVO(servicePackageId_list);
-                if (networkVO_list != null && networkVO_list.size() != 0)
+                if (networkVO_list != null && networkVO_list.size() != 0) {
                     throw new CloudRuntimeException(
                             "ServicePackages published by NetScalerControlCenter are being used by NetworkOfferings. Try deleting NetworkOffering with ServicePackages and then delete NetScalerControlCenter.");
+                }
             }
         }
         try {
@@ -1466,8 +1471,9 @@
     @DB
     public NetScalerControlCenterVO registerNetscalerControlCenter(RegisterNetscalerControlCenterCmd cmd) {
 
-        if (_netscalerControlCenterDao.listAll() != null && _netscalerControlCenterDao.listAll().size() != 0)
+        if (_netscalerControlCenterDao.listAll() != null && _netscalerControlCenterDao.listAll().size() != 0) {
             throw new CloudRuntimeException("One Netscaler Control Center already exist in the DataBase. At a time only one Netscaler Control Center is allowed");
+        }
 
         final RegisterNetscalerControlCenterCmd cmdinfo = cmd;
         String ipAddress = cmd.getIpaddress();
@@ -1511,7 +1517,7 @@
         Long serviceOfferingId = cmd.getServiceOfferingId();
         DeploymentPlan plan = new DataCenterDeployment(dest.getDataCenter().getId());
         try {
-             resp =  _netScalerVMManager.deployNsVpx(cmd.getAccount(), dest, plan, serviceOfferingId, templateId);
+            resp =  _netScalerVMManager.deployNsVpx(cmd.getAccount(), dest, plan, serviceOfferingId, templateId);
         } catch (InsufficientCapacityException e) {
             e.printStackTrace();
         }
@@ -1520,7 +1526,7 @@
 
     @Override
     public VirtualRouter stopNetscalerServiceVm(Long id, boolean forced, Account callingAccount, long callingUserId) throws ConcurrentOperationException,
-            ResourceUnavailableException {
+    ResourceUnavailableException {
         return _netScalerVMManager.stopNetScalerVm(id, forced, callingAccount, callingUserId);
     }
 }
\ No newline at end of file
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerLoadBalancerElementService.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/element/NetscalerLoadBalancerElementService.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerLoadBalancerElementService.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/element/NetscalerLoadBalancerElementService.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetScalerControlCenterResource.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/resource/NetScalerControlCenterResource.java
similarity index 99%
rename from plugins/network-elements/netscaler/src/com/cloud/network/resource/NetScalerControlCenterResource.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/resource/NetScalerControlCenterResource.java
index 347186c..e23cb0b 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetScalerControlCenterResource.java
+++ b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/resource/NetScalerControlCenterResource.java
@@ -389,7 +389,7 @@
                 }
                 else {
                     if (shouldRetry(numRetries)) {
-                        s_logger.debug("Retrying the command NetScalerImplementNetworkCommand retry count: " + numRetries );
+                        s_logger.debug("Retrying the command NetScalerImplementNetworkCommand retry count: " + numRetries, e);
                         return retry(cmd, numRetries);
                     } else {
                         return new Answer(cmd, false, e.getMessage());
@@ -397,7 +397,7 @@
                 }
             } catch (Exception e) {
                 if (shouldRetry(numRetries)) {
-                    s_logger.debug("Retrying the command NetScalerImplementNetworkCommand retry count: " + numRetries );
+                    s_logger.debug("Retrying the command NetScalerImplementNetworkCommand retry count: " + numRetries, e);
                     return retry(cmd, numRetries);
                 } else {
                     return new Answer(cmd, false, e.getMessage());
@@ -785,7 +785,7 @@
         // use Apache.
         String logMessage = StringEscapeUtils.unescapeJava(jsonCmd);
         logMessage = cleanPassword(logMessage);
-        s_logger.debug("POST request to " + agentUri.toString()
+        s_logger.debug("GET request to " + agentUri.toString()
                 + " with contents " + logMessage);
 
         // Create request
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/resource/NetscalerResource.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/resource/NetscalerResource.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/vm/NetScalerVMManager.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/vm/NetScalerVMManager.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/vm/NetScalerVMManager.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/vm/NetScalerVMManager.java
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/vm/NetScalerVMManagerImpl.java b/plugins/network-elements/netscaler/src/main/java/com/cloud/network/vm/NetScalerVMManagerImpl.java
similarity index 100%
rename from plugins/network-elements/netscaler/src/com/cloud/network/vm/NetScalerVMManagerImpl.java
rename to plugins/network-elements/netscaler/src/main/java/com/cloud/network/vm/NetScalerVMManagerImpl.java
diff --git a/plugins/network-elements/netscaler/resources/META-INF/cloudstack/netscaler/module.properties b/plugins/network-elements/netscaler/src/main/resources/META-INF/cloudstack/netscaler/module.properties
similarity index 100%
rename from plugins/network-elements/netscaler/resources/META-INF/cloudstack/netscaler/module.properties
rename to plugins/network-elements/netscaler/src/main/resources/META-INF/cloudstack/netscaler/module.properties
diff --git a/plugins/network-elements/netscaler/resources/META-INF/cloudstack/netscaler/spring-netscaler-context.xml b/plugins/network-elements/netscaler/src/main/resources/META-INF/cloudstack/netscaler/spring-netscaler-context.xml
similarity index 100%
rename from plugins/network-elements/netscaler/resources/META-INF/cloudstack/netscaler/spring-netscaler-context.xml
rename to plugins/network-elements/netscaler/src/main/resources/META-INF/cloudstack/netscaler/spring-netscaler-context.xml
diff --git a/plugins/network-elements/nicira-nvp/pom.xml b/plugins/network-elements/nicira-nvp/pom.xml
index d88c7cd..7fb351a 100644
--- a/plugins/network-elements/nicira-nvp/pom.xml
+++ b/plugins/network-elements/nicira-nvp/pom.xml
@@ -1,102 +1,60 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-nvp</artifactId>
-  <name>Apache CloudStack Plugin - Network Nicira NVP</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>4.11.2.0-SNAPSHOT</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <testSourceDirectory>src/test/java</testSourceDirectory>
-    <outputDirectory>target/classes</outputDirectory>
-    <testOutputDirectory>target/test-classes</testOutputDirectory>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>src/test/resources</directory>
-        <filtering>true</filtering>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checklicence</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>integration</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-failsafe-plugin</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>integration-test</goal>
-                  <goal>verify</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-nvp</artifactId>
+    <name>Apache CloudStack Plugin - Network Nicira NVP</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <profiles>
+        <profile>
+            <id>integration</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/plugins/network-elements/nuage-vsp/pom.xml b/plugins/network-elements/nuage-vsp/pom.xml
index 901453e..3f9987d 100644
--- a/plugins/network-elements/nuage-vsp/pom.xml
+++ b/plugins/network-elements/nuage-vsp/pom.xml
@@ -1,64 +1,46 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-vsp</artifactId>
-  <name>Apache CloudStack Plugin - Nuage VSP</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <repositories>
-    <repository>
-      <id>nuage-vsp</id>
-      <url>http://cs.mv.nuagenetworks.net/releases/</url>
-    </repository>
-  </repositories>
-  <properties>
-      <nuage.vsp.client.version>1.0.8</nuage.vsp.client.version>
-  </properties>
-  <dependencies>
-    <dependency>
-      <groupId>net.nuagenetworks.vsp</groupId>
-      <artifactId>nuage-vsp-acs-client</artifactId>
-      <version>${nuage.vsp.client.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checklicence</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-vsp</artifactId>
+    <name>Apache CloudStack Plugin - Nuage VSP</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <repositories>
+        <repository>
+            <id>nuage-vsp</id>
+            <url>http://cs.mv.nuagenetworks.net/releases/</url>
+        </repository>
+    </repositories>
+    <properties>
+        <nuage.vsp.client.version>1.0.8</nuage.vsp.client.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>net.nuagenetworks.vsp</groupId>
+            <artifactId>nuage-vsp-acs-client</artifactId>
+            <version>${nuage.vsp.client.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/CmdBuilder.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/CmdBuilder.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/CmdBuilder.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/CmdBuilder.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/PingNuageVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/PingNuageVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/PingNuageVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/PingNuageVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/StartupVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/StartupVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/StartupVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/StartupVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ExtraDhcpOptionsVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ExtraDhcpOptionsVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ExtraDhcpOptionsVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ExtraDhcpOptionsVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ImplementVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ImplementVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ImplementVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ImplementVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ShutDownVpcVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ShutDownVpcVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ShutDownVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/element/ShutDownVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/DeallocateVmVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/DeallocateVmVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/DeallocateVmVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/DeallocateVmVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/TrashNetworkVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/TrashNetworkVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/UpdateDhcpOptionVspCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/UpdateDhcpOptionVspCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/UpdateDhcpOptionVspCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/guru/UpdateDhcpOptionVspCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/CleanUpDomainCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/CleanUpDomainCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/CleanUpDomainCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/CleanUpDomainCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/EntityExistsCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/EntityExistsCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/EntityExistsCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/EntityExistsCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/GetApiDefaultsCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/GetApiDefaultsCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/ImplementNetworkVspAnswer.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/ImplementNetworkVspAnswer.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/ImplementNetworkVspAnswer.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/ImplementNetworkVspAnswer.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/ListVspDomainTemplatesAnswer.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/ListVspDomainTemplatesAnswer.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/ListVspDomainTemplatesAnswer.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/ListVspDomainTemplatesAnswer.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/ListVspDomainTemplatesCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/ListVspDomainTemplatesCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/ListVspDomainTemplatesCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/ListVspDomainTemplatesCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/SupportedApiVersionCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/SupportedApiVersionCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/SupportedApiVersionCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/SupportedApiVersionCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/UpdateNuageVspDeviceCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/UpdateNuageVspDeviceCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/UpdateNuageVspDeviceCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/manager/UpdateNuageVspDeviceCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainAnswer.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncDomainAnswer.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainAnswer.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncDomainAnswer.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncDomainCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncDomainCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/AddNuageVspDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/AddNuageVspDeviceCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AssociateNuageVspDomainTemplateCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/AssociateNuageVspDomainTemplateCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AssociateNuageVspDomainTemplateCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/AssociateNuageVspDomainTemplateCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DisableNuageUnderlayVlanIpRangeCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/DisableNuageUnderlayVlanIpRangeCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DisableNuageUnderlayVlanIpRangeCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/DisableNuageUnderlayVlanIpRangeCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/EnableNuageUnderlayVlanIpRangeCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/EnableNuageUnderlayVlanIpRangeCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/EnableNuageUnderlayVlanIpRangeCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/EnableNuageUnderlayVlanIpRangeCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageUnderlayVlanIpRangesCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageUnderlayVlanIpRangesCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageUnderlayVlanIpRangesCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageUnderlayVlanIpRangesCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageVspDevicesCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageVspDevicesCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDomainTemplatesCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageVspDomainTemplatesCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDomainTemplatesCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageVspDomainTemplatesCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspGlobalDomainTemplateCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageVspGlobalDomainTemplateCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspGlobalDomainTemplateCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/ListNuageVspGlobalDomainTemplateCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/VspConstants.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/VspConstants.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/VspConstants.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/commands/VspConstants.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVlanIpRangeResponse.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVlanIpRangeResponse.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVlanIpRangeResponse.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVlanIpRangeResponse.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVspDeviceResponse.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVspDeviceResponse.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDomainTemplateResponse.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVspDomainTemplateResponse.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDomainTemplateResponse.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVspDomainTemplateResponse.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVspResourceResponse.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/api/response/NuageVspResourceResponse.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/NuageVspDeviceVO.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/NuageVspDeviceVO.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/dao/NuageVspDao.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/dao/NuageVspDao.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDaoImpl.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/dao/NuageVspDaoImpl.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDaoImpl.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/dao/NuageVspDaoImpl.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/element/NuageVspElement.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/element/NuageVspElement.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/AbstractListener.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/manager/AbstractListener.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/AbstractListener.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/manager/AbstractListener.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/manager/NuageVspManager.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/manager/NuageVspManager.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/manager/NuageVspManagerImpl.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/manager/NuageVspManagerImpl.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspRequestWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspRequestWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspRequestWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspRequestWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspResource.java
similarity index 99%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspResource.java
index dae21a9..74b9c1d 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java
+++ b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspResource.java
@@ -189,7 +189,7 @@
         try {
             JmxUtil.unregisterMBean("NuageVspResource", _name);
         } catch (Exception e) {
-            s_logger.warn("Unable to initialize inaccurate clock", e);
+            s_logger.warn("Unable to stop NuageVspResource", e);
         }
 
         return true;
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResourceConfiguration.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspResourceConfiguration.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResourceConfiguration.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/NuageVspResourceConfiguration.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/VspStatisticsMBean.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/VspStatisticsMBean.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/VspStatisticsMBean.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/VspStatisticsMBean.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/VspStatisticsMBeanImpl.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/VspStatisticsMBeanImpl.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/VspStatisticsMBeanImpl.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/resource/VspStatisticsMBeanImpl.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspApiSupportCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspApiSupportCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspApiSupportCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspApiSupportCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspApplyAclRulesCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspApplyAclRulesCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspApplyAclRulesCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspApplyAclRulesCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspApplyStaticNatCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspApplyStaticNatCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspApplyStaticNatCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspApplyStaticNatCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspCleanupDomainCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCleanupDomainCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspCleanupDomainCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCleanupDomainCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspDeallocateVmInterfaceCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspDeallocateVmInterfaceCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspDeallocateVmInterfaceCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspDeallocateVmInterfaceCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspEntityExistsCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspEntityExistsCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspEntityExistsCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspEntityExistsCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspGetApiDefaultsCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspGetApiDefaultsCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspGetApiDefaultsCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspGetApiDefaultsCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspGuruImplementNetworkCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspGuruImplementNetworkCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspGuruImplementNetworkCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspGuruImplementNetworkCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspGuruTrashNetworkCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspGuruTrashNetworkCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspGuruTrashNetworkCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspGuruTrashNetworkCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspImplementNetworkCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspImplementNetworkCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspImplementNetworkCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspImplementNetworkCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspListDomainTemplatesCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspListDomainTemplatesCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspListDomainTemplatesCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspListDomainTemplatesCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspMaintainCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspMaintainCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspMaintainCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspMaintainCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspReadyCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspReadyCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspReadyCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspReadyCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspReserveVmInterfaceCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspReserveVmInterfaceCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspReserveVmInterfaceCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspReserveVmInterfaceCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownNetworkCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownNetworkCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownNetworkCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownNetworkCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownVpcCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownVpcCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownVpcCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspShutdownVpcCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspSyncCmsIdCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspSyncCmsIdCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspSyncCmsIdCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspSyncCmsIdCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspSyncDomainCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspSyncDomainCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspSyncDomainCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspSyncDomainCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspUpdateDhcpOptionsCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspUpdateDhcpOptionsCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/NuageVspUpdateDhcpOptionsCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspUpdateDhcpOptionsCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/UpdateNuageVspDeviceCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/UpdateNuageVspDeviceCommandWrapper.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/network/vsp/resource/wrapper/UpdateNuageVspDeviceCommandWrapper.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/UpdateNuageVspDeviceCommandWrapper.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/util/NuageVspEntityBuilder.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/util/NuageVspEntityBuilder.java
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/util/NuageVspUtil.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/util/NuageVspUtil.java
diff --git a/plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/module.properties b/plugins/network-elements/nuage-vsp/src/main/resources/META-INF/cloudstack/vsp/module.properties
similarity index 100%
rename from plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/module.properties
rename to plugins/network-elements/nuage-vsp/src/main/resources/META-INF/cloudstack/vsp/module.properties
diff --git a/plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml b/plugins/network-elements/nuage-vsp/src/main/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml
similarity index 100%
rename from plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml
rename to plugins/network-elements/nuage-vsp/src/main/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/NuageTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/NuageTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/NuageTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/NuageTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/agent/api/CommandsTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/agent/api/CommandsTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/element/NuageVspElementTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/element/NuageVspElementTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/manager/NuageVspManagerTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/manager/NuageVspManagerTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/resource/NuageVspResourceTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/network/resource/NuageVspResourceTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/util/NuageVspEntityBuilderTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/util/NuageVspEntityBuilderTest.java
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspUtilTest.java b/plugins/network-elements/nuage-vsp/src/test/java/com/cloud/util/NuageVspUtilTest.java
similarity index 100%
rename from plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspUtilTest.java
rename to plugins/network-elements/nuage-vsp/src/test/java/com/cloud/util/NuageVspUtilTest.java
diff --git a/plugins/network-elements/opendaylight/pom.xml b/plugins/network-elements/opendaylight/pom.xml
index 8ef30b7..09341eb4 100644
--- a/plugins/network-elements/opendaylight/pom.xml
+++ b/plugins/network-elements/opendaylight/pom.xml
@@ -1,86 +1,51 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-opendaylight</artifactId>
-  <name>Apache CloudStack Plugin - Network Opendaylight</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-
-  <!-- not parenting to the maven-default pom, as we want this in services -->
-  <build>
-    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
-    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
-    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
-    <outputDirectory>${basedir}/target/classes</outputDirectory>
-    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
-    <resources>
-      <resource>
-        <directory>${basedir}/src/main/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>${basedir}/src/test/resources</directory>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checklicence</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>integration</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-failsafe-plugin</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>integration-test</goal>
-                  <goal>verify</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-opendaylight</artifactId>
+    <name>Apache CloudStack Plugin - Network Opendaylight</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <profiles>
+        <profile>
+            <id>integration</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/plugins/network-elements/opendaylight/src/main/java/org/apache/cloudstack/network/opendaylight/api/resources/Action.java b/plugins/network-elements/opendaylight/src/main/java/org/apache/cloudstack/network/opendaylight/api/resources/Action.java
index 2711fef..0038ffd 100644
--- a/plugins/network-elements/opendaylight/src/main/java/org/apache/cloudstack/network/opendaylight/api/resources/Action.java
+++ b/plugins/network-elements/opendaylight/src/main/java/org/apache/cloudstack/network/opendaylight/api/resources/Action.java
@@ -175,7 +175,7 @@
                 String errorMessage = responseToErrorMessage(putMethod);
                 putMethod.releaseConnection();
                 s_logger.error("Failed to update object : " + errorMessage);
-                throw new NeutronRestApiException("Failed to create object : " + errorMessage);
+                throw new NeutronRestApiException("Failed to update object : " + errorMessage);
             }
         } catch (NeutronRestApiException e) {
             s_logger.error("NeutronRestApiException caught while trying to execute HTTP Method on the Neutron Controller", e);
@@ -207,7 +207,7 @@
                 String errorMessage = responseToErrorMessage(putMethod);
                 putMethod.releaseConnection();
                 s_logger.error("Failed to update object : " + errorMessage);
-                throw new NeutronRestApiException("Failed to create object : " + errorMessage);
+                throw new NeutronRestApiException("Failed to update object : " + errorMessage);
             }
 
             return putMethod.getResponseBodyAsString();
@@ -244,8 +244,8 @@
             if (deleteMethod.getStatusCode() != HttpStatus.SC_NO_CONTENT) {
                 String errorMessage = responseToErrorMessage(deleteMethod);
                 deleteMethod.releaseConnection();
-                s_logger.error("Failed to update object : " + errorMessage);
-                throw new NeutronRestApiException("Failed to create object : " + errorMessage);
+                s_logger.error("Failed to delete object : " + errorMessage);
+                throw new NeutronRestApiException("Failed to delete object : " + errorMessage);
             }
         } catch (NeutronRestApiException e) {
             s_logger.error("NeutronRestApiException caught while trying to execute HTTP Method on the Neutron Controller", e);
diff --git a/plugins/network-elements/ovs/pom.xml b/plugins/network-elements/ovs/pom.xml
index b69294d..5bf53cf 100644
--- a/plugins/network-elements/ovs/pom.xml
+++ b/plugins/network-elements/ovs/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-ovs</artifactId>
-  <name>Apache CloudStack Plugin - Open vSwitch</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-ovs</artifactId>
+    <name>Apache CloudStack Plugin - Open vSwitch</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateGreTunnelAnswer.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateGreTunnelAnswer.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateGreTunnelAnswer.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateGreTunnelAnswer.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateGreTunnelCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateGreTunnelCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateGreTunnelCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateGreTunnelCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateTunnelAnswer.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateTunnelAnswer.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateTunnelAnswer.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateTunnelAnswer.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateTunnelCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateTunnelCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsCreateTunnelCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsCreateTunnelCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsDeleteFlowCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsDeleteFlowCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsDeleteFlowCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsDeleteFlowCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsDestroyBridgeCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsDestroyBridgeCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsDestroyBridgeCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsDestroyBridgeCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsDestroyTunnelCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsDestroyTunnelCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsDestroyTunnelCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsDestroyTunnelCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsFetchInterfaceAnswer.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsFetchInterfaceAnswer.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsFetchInterfaceAnswer.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsFetchInterfaceAnswer.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsFetchInterfaceCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsFetchInterfaceCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsFetchInterfaceCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsFetchInterfaceCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsSetTagAndFlowAnswer.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsSetTagAndFlowAnswer.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsSetTagAndFlowAnswer.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsSetTagAndFlowAnswer.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsSetTagAndFlowCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsSetTagAndFlowCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsSetTagAndFlowCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsSetTagAndFlowCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsSetupBridgeCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsSetupBridgeCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsSetupBridgeCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsSetupBridgeCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsVpcPhysicalTopologyConfigCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsVpcPhysicalTopologyConfigCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsVpcPhysicalTopologyConfigCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsVpcPhysicalTopologyConfigCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/OvsVpcRoutingPolicyConfigCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsVpcRoutingPolicyConfigCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/OvsVpcRoutingPolicyConfigCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/OvsVpcRoutingPolicyConfigCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/agent/api/StartupOvsCommand.java b/plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/StartupOvsCommand.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/agent/api/StartupOvsCommand.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/agent/api/StartupOvsCommand.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/element/OvsElement.java
similarity index 99%
rename from plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/element/OvsElement.java
index bfb92f9..4e89e7b 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
+++ b/plugins/network-elements/ovs/src/main/java/com/cloud/network/element/OvsElement.java
@@ -513,7 +513,7 @@
             final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(
                     network.getId(), Role.VIRTUAL_ROUTER);
             if (routers == null || routers.isEmpty()) {
-                s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual "
+                s_logger.debug("Virtual router elemnt doesn't need to apply load balancing rules on the backend; virtual "
                         + "router doesn't exist in the network "
                         + network.getId());
                 return true;
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElementService.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/element/OvsElementService.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/element/OvsElementService.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/element/OvsElementService.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java
similarity index 99%
rename from plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java
index 50b9857..45969e7 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java
+++ b/plugins/network-elements/ovs/src/main/java/com/cloud/network/guru/OvsGuestNetworkGuru.java
@@ -132,7 +132,7 @@
             .findById(physicalNetworkId);
 
         if (!canHandle(offering, nwType, physnet)) {
-            s_logger.debug("Refusing to design this network");
+            s_logger.debug("Refusing to implement this network");
             return null;
         }
         NetworkVO implemented = (NetworkVO)super.implement(network, offering,
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/GreTunnelException.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/GreTunnelException.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/GreTunnelException.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/GreTunnelException.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsNetworkTopologyGuru.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsNetworkTopologyGuru.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsNetworkTopologyGuru.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsNetworkTopologyGuru.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsNetworkTopologyGuruImpl.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsNetworkTopologyGuruImpl.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsNetworkTopologyGuruImpl.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsNetworkTopologyGuruImpl.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManager.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManager.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
similarity index 98%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
index cde4ee8..aca3609 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java
+++ b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
@@ -212,7 +212,7 @@
         Long from = r.getFrom();
         Long to = r.getTo();
         long networkId = r.getNetworkId();
-        OvsTunnelNetworkVO tunnel = _tunnelNetworkDao.getByFromToNetwork(from, to, networkId);
+        OvsTunnelNetworkVO tunnel = _tunnelNetworkDao.findByFromToNetwork(from, to, networkId);
         if (tunnel == null) {
             throw new CloudRuntimeException(
                     String.format("Unable find tunnelNetwork record" +
@@ -321,7 +321,7 @@
             if (rh == hostId) {
                 continue;
             }
-            OvsTunnelNetworkVO ta = _tunnelNetworkDao.getByFromToNetwork(hostId, rh.longValue(), nw.getId());
+            OvsTunnelNetworkVO ta = _tunnelNetworkDao.findByFromToNetwork(hostId, rh.longValue(), nw.getId());
             // Try and create the tunnel even if a previous attempt failed
             if (ta == null || ta.getState().equals(OvsTunnel.State.Failed.name())) {
                 s_logger.debug("Attempting to create tunnel from:" + hostId + " to:" + rh.longValue());
@@ -333,7 +333,7 @@
                 }
             }
 
-            ta = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(),
+            ta = _tunnelNetworkDao.findByFromToNetwork(rh.longValue(),
                     hostId, nw.getId());
             // Try and create the tunnel even if a previous attempt failed
             if (ta == null || ta.getState().equals(OvsTunnel.State.Failed.name())) {
@@ -576,7 +576,7 @@
                 Answer[] answers = _agentMgr.send(hostId, cmds);
                 handleSetupBridgeAnswer(answers);
             } catch (OperationTimedoutException | AgentUnavailableException e) {
-                s_logger.warn("Ovs Tunnel network created tunnel failed", e);
+                s_logger.warn("Ovs Tunnel network created bridge failed", e);
             }
 
             // now that bridge is setup, populate network acl's before the VM gets created
@@ -605,7 +605,7 @@
                 if (rh == hostId) {
                     continue;
                 }
-                tunnelRecord = _tunnelNetworkDao.getByFromToNetwork(hostId, rh.longValue(), vpcNetwork.getId());
+                tunnelRecord = _tunnelNetworkDao.findByFromToNetwork(hostId, rh.longValue(), vpcNetwork.getId());
                 // Try and create the tunnel if does not exit or previous attempt failed
                 if (tunnelRecord == null || tunnelRecord.getState().equals(OvsTunnel.State.Failed.name())) {
                     s_logger.debug("Attempting to create tunnel from:" + hostId + " to:" + rh.longValue());
@@ -616,7 +616,7 @@
                         toHostIds.add(rh);
                     }
                 }
-                tunnelRecord = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(), hostId, vpcNetwork.getId());
+                tunnelRecord = _tunnelNetworkDao.findByFromToNetwork(rh.longValue(), hostId, vpcNetwork.getId());
                 // Try and create the tunnel if does not exit or previous attempt failed
                 if (tunnelRecord == null || tunnelRecord.getState().equals(OvsTunnel.State.Failed.name())) {
                     s_logger.debug("Attempting to create tunnel from:" + rh.longValue() + " to:" + hostId);
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnel.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnel.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnel.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnel.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelInterfaceDao.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelInterfaceDao.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelInterfaceDao.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelInterfaceDao.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelInterfaceDaoImpl.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelInterfaceDaoImpl.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelInterfaceDaoImpl.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelInterfaceDaoImpl.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelInterfaceVO.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelInterfaceVO.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelInterfaceVO.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelInterfaceVO.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkDao.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkDao.java
similarity index 93%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkDao.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkDao.java
index 1c7f493..0aeb271 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkDao.java
+++ b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkDao.java
@@ -22,7 +22,7 @@
 import com.cloud.utils.db.GenericDao;
 
 public interface OvsTunnelNetworkDao extends GenericDao<OvsTunnelNetworkVO, Long> {
-    OvsTunnelNetworkVO getByFromToNetwork(long from, long to, long networkId);
+    OvsTunnelNetworkVO findByFromToNetwork(long from, long to, long networkId);
 
     void removeByFromNetwork(long from, long networkId);
 
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkDaoImpl.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkDaoImpl.java
similarity index 97%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkDaoImpl.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkDaoImpl.java
index 5e314f0..6d12c19 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkDaoImpl.java
+++ b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkDaoImpl.java
@@ -53,7 +53,7 @@
     }
 
     @Override
-    public OvsTunnelNetworkVO getByFromToNetwork(long from, long to, long networkId) {
+    public OvsTunnelNetworkVO findByFromToNetwork(long from, long to, long networkId) {
         SearchCriteria<OvsTunnelNetworkVO> sc = fromToNetworkSearch.create();
         sc.setParameters("from", from);
         sc.setParameters("to", to);
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkVO.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkVO.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/OvsTunnelNetworkVO.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/OvsTunnelNetworkVO.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDao.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDao.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDao.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDao.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDaoImpl.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDaoImpl.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDaoImpl.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoDaoImpl.java
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoVO.java b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoVO.java
similarity index 100%
rename from plugins/network-elements/ovs/src/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoVO.java
rename to plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/dao/VpcDistributedRouterSeqNoVO.java
diff --git a/plugins/network-elements/ovs/resources/META-INF/cloudstack/ovs/module.properties b/plugins/network-elements/ovs/src/main/resources/META-INF/cloudstack/ovs/module.properties
similarity index 100%
rename from plugins/network-elements/ovs/resources/META-INF/cloudstack/ovs/module.properties
rename to plugins/network-elements/ovs/src/main/resources/META-INF/cloudstack/ovs/module.properties
diff --git a/plugins/network-elements/ovs/resources/META-INF/cloudstack/ovs/spring-ovs-context.xml b/plugins/network-elements/ovs/src/main/resources/META-INF/cloudstack/ovs/spring-ovs-context.xml
similarity index 100%
rename from plugins/network-elements/ovs/resources/META-INF/cloudstack/ovs/spring-ovs-context.xml
rename to plugins/network-elements/ovs/src/main/resources/META-INF/cloudstack/ovs/spring-ovs-context.xml
diff --git a/plugins/network-elements/palo-alto/pom.xml b/plugins/network-elements/palo-alto/pom.xml
index af6ef27..cd36a1f 100644
--- a/plugins/network-elements/palo-alto/pom.xml
+++ b/plugins/network-elements/palo-alto/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-palo-alto</artifactId>
-  <name>Apache CloudStack Plugin - Palo Alto</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-palo-alto</artifactId>
+    <name>Apache CloudStack Plugin - Palo Alto</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/api/commands/AddPaloAltoFirewallCmd.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/AddPaloAltoFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/api/commands/AddPaloAltoFirewallCmd.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/AddPaloAltoFirewallCmd.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/api/commands/ConfigurePaloAltoFirewallCmd.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/ConfigurePaloAltoFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/api/commands/ConfigurePaloAltoFirewallCmd.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/ConfigurePaloAltoFirewallCmd.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/api/commands/DeletePaloAltoFirewallCmd.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/DeletePaloAltoFirewallCmd.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/api/commands/DeletePaloAltoFirewallCmd.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/DeletePaloAltoFirewallCmd.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/api/commands/ListPaloAltoFirewallNetworksCmd.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/ListPaloAltoFirewallNetworksCmd.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/api/commands/ListPaloAltoFirewallNetworksCmd.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/ListPaloAltoFirewallNetworksCmd.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/api/commands/ListPaloAltoFirewallsCmd.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/ListPaloAltoFirewallsCmd.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/api/commands/ListPaloAltoFirewallsCmd.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/api/commands/ListPaloAltoFirewallsCmd.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/api/response/PaloAltoFirewallResponse.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/api/response/PaloAltoFirewallResponse.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/api/response/PaloAltoFirewallResponse.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/api/response/PaloAltoFirewallResponse.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/network/element/PaloAltoExternalFirewallElement.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/network/element/PaloAltoExternalFirewallElement.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/network/element/PaloAltoExternalFirewallElement.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/network/element/PaloAltoExternalFirewallElement.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/network/element/PaloAltoFirewallElementService.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/network/element/PaloAltoFirewallElementService.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/network/element/PaloAltoFirewallElementService.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/network/element/PaloAltoFirewallElementService.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/network/resource/PaloAltoResource.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/network/resource/PaloAltoResource.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/network/resource/PaloAltoResource.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/network/resource/PaloAltoResource.java
diff --git a/plugins/network-elements/palo-alto/src/com/cloud/network/utils/HttpClientWrapper.java b/plugins/network-elements/palo-alto/src/main/java/com/cloud/network/utils/HttpClientWrapper.java
similarity index 100%
rename from plugins/network-elements/palo-alto/src/com/cloud/network/utils/HttpClientWrapper.java
rename to plugins/network-elements/palo-alto/src/main/java/com/cloud/network/utils/HttpClientWrapper.java
diff --git a/plugins/network-elements/palo-alto/resources/META-INF/cloudstack/paloalto/module.properties b/plugins/network-elements/palo-alto/src/main/resources/META-INF/cloudstack/paloalto/module.properties
similarity index 100%
rename from plugins/network-elements/palo-alto/resources/META-INF/cloudstack/paloalto/module.properties
rename to plugins/network-elements/palo-alto/src/main/resources/META-INF/cloudstack/paloalto/module.properties
diff --git a/plugins/network-elements/palo-alto/resources/META-INF/cloudstack/paloalto/spring-paloalto-context.xml b/plugins/network-elements/palo-alto/src/main/resources/META-INF/cloudstack/paloalto/spring-paloalto-context.xml
similarity index 100%
rename from plugins/network-elements/palo-alto/resources/META-INF/cloudstack/paloalto/spring-paloalto-context.xml
rename to plugins/network-elements/palo-alto/src/main/resources/META-INF/cloudstack/paloalto/spring-paloalto-context.xml
diff --git a/plugins/network-elements/palo-alto/test/com/cloud/network/resource/MockablePaloAltoResource.java b/plugins/network-elements/palo-alto/src/test/java/com/cloud/network/resource/MockablePaloAltoResource.java
similarity index 100%
rename from plugins/network-elements/palo-alto/test/com/cloud/network/resource/MockablePaloAltoResource.java
rename to plugins/network-elements/palo-alto/src/test/java/com/cloud/network/resource/MockablePaloAltoResource.java
diff --git a/plugins/network-elements/palo-alto/test/com/cloud/network/resource/PaloAltoResourceTest.java b/plugins/network-elements/palo-alto/src/test/java/com/cloud/network/resource/PaloAltoResourceTest.java
similarity index 100%
rename from plugins/network-elements/palo-alto/test/com/cloud/network/resource/PaloAltoResourceTest.java
rename to plugins/network-elements/palo-alto/src/test/java/com/cloud/network/resource/PaloAltoResourceTest.java
diff --git a/plugins/network-elements/stratosphere-ssp/pom.xml b/plugins/network-elements/stratosphere-ssp/pom.xml
index 3ab63b7..cdcc516 100644
--- a/plugins/network-elements/stratosphere-ssp/pom.xml
+++ b/plugins/network-elements/stratosphere-ssp/pom.xml
@@ -1,31 +1,31 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-ssp</artifactId>
-  <name>Apache CloudStack Plugin - Stratosphere SSP</name>
-  <url>http://www.stratosphere.co.jp/</url>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-ssp</artifactId>
+    <name>Apache CloudStack Plugin - Stratosphere SSP</name>
+    <url>http://www.stratosphere.co.jp/</url>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/api/commands/AddSspCmd.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/api/commands/AddSspCmd.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/api/commands/DeleteSspCmd.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/api/commands/DeleteSspCmd.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/response/SspResponse.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/api/response/SspResponse.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/response/SspResponse.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/api/response/SspResponse.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspCredentialDao.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspCredentialDao.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspCredentialDao.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspCredentialDao.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspCredentialDaoImpl.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspCredentialDaoImpl.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspCredentialDaoImpl.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspCredentialDaoImpl.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspCredentialVO.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspCredentialVO.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspCredentialVO.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspCredentialVO.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspTenantDao.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspTenantDao.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspTenantDao.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspTenantDao.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspTenantDaoImpl.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspTenantDaoImpl.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspTenantDaoImpl.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspTenantDaoImpl.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspTenantVO.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspTenantVO.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspTenantVO.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspTenantVO.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspUuidDao.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspUuidDao.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspUuidDao.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspUuidDao.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspUuidDaoImpl.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspUuidDaoImpl.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspUuidDaoImpl.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspUuidDaoImpl.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspUuidVO.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspUuidVO.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/dao/SspUuidVO.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/dao/SspUuidVO.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspClient.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspClient.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspClient.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspElement.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspElement.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspElement.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspElement.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspManager.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspManager.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspManager.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspManager.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspService.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspService.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/element/SspService.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/element/SspService.java
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/guru/SspGuestNetworkGuru.java b/plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/guru/SspGuestNetworkGuru.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/network/guru/SspGuestNetworkGuru.java
rename to plugins/network-elements/stratosphere-ssp/src/main/java/org/apache/cloudstack/network/guru/SspGuestNetworkGuru.java
diff --git a/plugins/network-elements/stratosphere-ssp/resources/META-INF/cloudstack/ssp/module.properties b/plugins/network-elements/stratosphere-ssp/src/main/resources/META-INF/cloudstack/ssp/module.properties
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/resources/META-INF/cloudstack/ssp/module.properties
rename to plugins/network-elements/stratosphere-ssp/src/main/resources/META-INF/cloudstack/ssp/module.properties
diff --git a/plugins/network-elements/stratosphere-ssp/resources/META-INF/cloudstack/ssp/spring-ssp-context.xml b/plugins/network-elements/stratosphere-ssp/src/main/resources/META-INF/cloudstack/ssp/spring-ssp-context.xml
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/resources/META-INF/cloudstack/ssp/spring-ssp-context.xml
rename to plugins/network-elements/stratosphere-ssp/src/main/resources/META-INF/cloudstack/ssp/spring-ssp-context.xml
diff --git a/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java b/plugins/network-elements/stratosphere-ssp/src/test/java/org/apache/cloudstack/network/element/SspClientTest.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspClientTest.java
rename to plugins/network-elements/stratosphere-ssp/src/test/java/org/apache/cloudstack/network/element/SspClientTest.java
diff --git a/plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspElementTest.java b/plugins/network-elements/stratosphere-ssp/src/test/java/org/apache/cloudstack/network/element/SspElementTest.java
similarity index 100%
rename from plugins/network-elements/stratosphere-ssp/test/org/apache/cloudstack/network/element/SspElementTest.java
rename to plugins/network-elements/stratosphere-ssp/src/test/java/org/apache/cloudstack/network/element/SspElementTest.java
diff --git a/plugins/network-elements/vxlan/pom.xml b/plugins/network-elements/vxlan/pom.xml
index 5e481d9..74809ad 100644
--- a/plugins/network-elements/vxlan/pom.xml
+++ b/plugins/network-elements/vxlan/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-network-vxlan</artifactId>
-  <name>Apache CloudStack Plugin - Network VXLAN</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-network-vxlan</artifactId>
+    <name>Apache CloudStack Plugin - Network VXLAN</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/network-elements/vxlan/src/com/cloud/network/guru/VxlanGuestNetworkGuru.java b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
similarity index 100%
rename from plugins/network-elements/vxlan/src/com/cloud/network/guru/VxlanGuestNetworkGuru.java
rename to plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java
diff --git a/plugins/network-elements/vxlan/resources/META-INF/cloudstack/vxlan/module.properties b/plugins/network-elements/vxlan/src/main/resources/META-INF/cloudstack/vxlan/module.properties
similarity index 100%
rename from plugins/network-elements/vxlan/resources/META-INF/cloudstack/vxlan/module.properties
rename to plugins/network-elements/vxlan/src/main/resources/META-INF/cloudstack/vxlan/module.properties
diff --git a/plugins/network-elements/vxlan/resources/META-INF/cloudstack/vxlan/spring-vxlan-context.xml b/plugins/network-elements/vxlan/src/main/resources/META-INF/cloudstack/vxlan/spring-vxlan-context.xml
similarity index 100%
rename from plugins/network-elements/vxlan/resources/META-INF/cloudstack/vxlan/spring-vxlan-context.xml
rename to plugins/network-elements/vxlan/src/main/resources/META-INF/cloudstack/vxlan/spring-vxlan-context.xml
diff --git a/plugins/network-elements/vxlan/test/com/cloud/network/guru/VxlanGuestNetworkGuruTest.java b/plugins/network-elements/vxlan/src/test/java/com/cloud/network/guru/VxlanGuestNetworkGuruTest.java
similarity index 100%
rename from plugins/network-elements/vxlan/test/com/cloud/network/guru/VxlanGuestNetworkGuruTest.java
rename to plugins/network-elements/vxlan/src/test/java/com/cloud/network/guru/VxlanGuestNetworkGuruTest.java
diff --git a/plugins/outofbandmanagement-drivers/ipmitool/pom.xml b/plugins/outofbandmanagement-drivers/ipmitool/pom.xml
index 10fecb9..49a0f79 100644
--- a/plugins/outofbandmanagement-drivers/ipmitool/pom.xml
+++ b/plugins/outofbandmanagement-drivers/ipmitool/pom.xml
@@ -1,41 +1,42 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-outofbandmanagement-driver-ipmitool</artifactId>
-  <name>Apache CloudStack Plugin - Power Management Driver ipmitool</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-outofbandmanagement-driver-ipmitool</artifactId>
+    <name>Apache CloudStack Plugin - Power Management Driver ipmitool</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/outofbandmanagement-drivers/ipmitool/src/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolOutOfBandManagementDriver.java b/plugins/outofbandmanagement-drivers/ipmitool/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolOutOfBandManagementDriver.java
similarity index 100%
rename from plugins/outofbandmanagement-drivers/ipmitool/src/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolOutOfBandManagementDriver.java
rename to plugins/outofbandmanagement-drivers/ipmitool/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolOutOfBandManagementDriver.java
diff --git a/plugins/outofbandmanagement-drivers/ipmitool/src/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapper.java b/plugins/outofbandmanagement-drivers/ipmitool/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapper.java
similarity index 100%
rename from plugins/outofbandmanagement-drivers/ipmitool/src/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapper.java
rename to plugins/outofbandmanagement-drivers/ipmitool/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapper.java
diff --git a/plugins/outofbandmanagement-drivers/ipmitool/resources/META-INF/cloudstack/ipmitool/module.properties b/plugins/outofbandmanagement-drivers/ipmitool/src/main/resources/META-INF/cloudstack/ipmitool/module.properties
similarity index 100%
rename from plugins/outofbandmanagement-drivers/ipmitool/resources/META-INF/cloudstack/ipmitool/module.properties
rename to plugins/outofbandmanagement-drivers/ipmitool/src/main/resources/META-INF/cloudstack/ipmitool/module.properties
diff --git a/plugins/outofbandmanagement-drivers/ipmitool/resources/META-INF/cloudstack/ipmitool/spring-ipmitool-context.xml b/plugins/outofbandmanagement-drivers/ipmitool/src/main/resources/META-INF/cloudstack/ipmitool/spring-ipmitool-context.xml
similarity index 100%
rename from plugins/outofbandmanagement-drivers/ipmitool/resources/META-INF/cloudstack/ipmitool/spring-ipmitool-context.xml
rename to plugins/outofbandmanagement-drivers/ipmitool/src/main/resources/META-INF/cloudstack/ipmitool/spring-ipmitool-context.xml
diff --git a/plugins/outofbandmanagement-drivers/ipmitool/test/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapperTest.java b/plugins/outofbandmanagement-drivers/ipmitool/src/test/java/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapperTest.java
similarity index 100%
rename from plugins/outofbandmanagement-drivers/ipmitool/test/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapperTest.java
rename to plugins/outofbandmanagement-drivers/ipmitool/src/test/java/org/apache/cloudstack/outofbandmanagement/driver/ipmitool/IpmitoolWrapperTest.java
diff --git a/plugins/outofbandmanagement-drivers/nested-cloudstack/pom.xml b/plugins/outofbandmanagement-drivers/nested-cloudstack/pom.xml
index 7cea2ca..2fc372b 100644
--- a/plugins/outofbandmanagement-drivers/nested-cloudstack/pom.xml
+++ b/plugins/outofbandmanagement-drivers/nested-cloudstack/pom.xml
@@ -1,46 +1,46 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-outofbandmanagement-driver-nested-cloudstack</artifactId>
-  <name>Apache CloudStack Plugin - Power Management Driver nested-cloudstack</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>br.com.autonomiccs</groupId>
-        <artifactId>apache-cloudstack-java-client</artifactId>
-        <version>1.0.9</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-outofbandmanagement-driver-nested-cloudstack</artifactId>
+    <name>Apache CloudStack Plugin - Power Management Driver nested-cloudstack</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>br.com.autonomiccs</groupId>
+            <artifactId>apache-cloudstack-java-client</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/outofbandmanagement-drivers/nested-cloudstack/src/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriver.java b/plugins/outofbandmanagement-drivers/nested-cloudstack/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriver.java
similarity index 100%
rename from plugins/outofbandmanagement-drivers/nested-cloudstack/src/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriver.java
rename to plugins/outofbandmanagement-drivers/nested-cloudstack/src/main/java/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriver.java
diff --git a/plugins/outofbandmanagement-drivers/nested-cloudstack/resources/META-INF/cloudstack/nested-cloudstack/module.properties b/plugins/outofbandmanagement-drivers/nested-cloudstack/src/main/resources/META-INF/cloudstack/nested-cloudstack/module.properties
similarity index 100%
rename from plugins/outofbandmanagement-drivers/nested-cloudstack/resources/META-INF/cloudstack/nested-cloudstack/module.properties
rename to plugins/outofbandmanagement-drivers/nested-cloudstack/src/main/resources/META-INF/cloudstack/nested-cloudstack/module.properties
diff --git a/plugins/outofbandmanagement-drivers/nested-cloudstack/resources/META-INF/cloudstack/nested-cloudstack/spring-nested-cloudstack-context.xml b/plugins/outofbandmanagement-drivers/nested-cloudstack/src/main/resources/META-INF/cloudstack/nested-cloudstack/spring-nested-cloudstack-context.xml
similarity index 100%
rename from plugins/outofbandmanagement-drivers/nested-cloudstack/resources/META-INF/cloudstack/nested-cloudstack/spring-nested-cloudstack-context.xml
rename to plugins/outofbandmanagement-drivers/nested-cloudstack/src/main/resources/META-INF/cloudstack/nested-cloudstack/spring-nested-cloudstack-context.xml
diff --git a/plugins/outofbandmanagement-drivers/nested-cloudstack/test/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriverTest.java b/plugins/outofbandmanagement-drivers/nested-cloudstack/src/test/java/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriverTest.java
similarity index 100%
rename from plugins/outofbandmanagement-drivers/nested-cloudstack/test/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriverTest.java
rename to plugins/outofbandmanagement-drivers/nested-cloudstack/src/test/java/org/apache/cloudstack/outofbandmanagement/driver/nestedcloudstack/NestedCloudStackOutOfBandManagementDriverTest.java
diff --git a/plugins/pom.xml b/plugins/pom.xml
index fb2e81b..7e693af 100755
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -1,225 +1,228 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloudstack-plugins</artifactId>
-  <name>Apache CloudStack Plugin POM</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloudstack-plugins</artifactId>
+    <name>Apache CloudStack Plugin POM</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <modules>
+        <!-- keep in alphabetic order -->
+        <module>acl/dynamic-role-based</module>
+        <module>acl/static-role-based</module>
 
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>cloudstack-checkstyle</id>
-              <phase>none</phase>
-              <inherited>false</inherited>
-            </execution>
-          </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <modules>
-    <module>api/rate-limit</module>
-    <module>api/solidfire-intg-test</module>
-    <module>api/discovery</module>
-    <module>acl/static-role-based</module>
-    <module>acl/dynamic-role-based</module>
-    <module>affinity-group-processors/host-anti-affinity</module>
-    <module>affinity-group-processors/explicit-dedication</module>
-    <module>ca/root-ca</module>
-    <module>deployment-planners/user-concentrated-pod</module>
-    <module>deployment-planners/user-dispersing</module>
-    <module>deployment-planners/implicit-dedication</module>
-    <module>ha-planners/skip-heurestics</module>
-    <module>host-allocators/random</module>
-    <module>dedicated-resources</module>
-    <module>hypervisors/ovm</module>
-    <module>hypervisors/xenserver</module>
-    <module>hypervisors/kvm</module>
-    <module>event-bus/rabbitmq</module>
-    <module>event-bus/inmemory</module>
-    <module>event-bus/kafka</module>
-    <module>hypervisors/baremetal</module>
-    <module>hypervisors/ucs</module>
-    <module>hypervisors/hyperv</module>
-    <module>hypervisors/ovm3</module>
-    <module>metrics</module>
-    <module>network-elements/elastic-loadbalancer</module>
-    <module>network-elements/ovs</module>
-    <module>network-elements/juniper-contrail</module>
-    <module>network-elements/palo-alto</module>
-    <module>network-elements/netscaler</module>
-    <module>network-elements/nicira-nvp</module>
-    <module>network-elements/nuage-vsp</module>
-    <module>network-elements/bigswitch</module>
-    <module>network-elements/brocade-vcs</module>
-    <module>network-elements/stratosphere-ssp</module>
-    <module>network-elements/opendaylight</module>
-    <module>outofbandmanagement-drivers/ipmitool</module>
-    <module>outofbandmanagement-drivers/nested-cloudstack</module>
-    <module>storage-allocators/random</module>
-    <module>user-authenticators/ldap</module>
-    <module>user-authenticators/md5</module>
-    <module>user-authenticators/pbkdf2</module>
-    <module>user-authenticators/plain-text</module>
-    <module>user-authenticators/saml2</module>
-    <module>user-authenticators/sha256salted</module>
-    <module>network-elements/dns-notifier</module>
-    <module>storage/image/s3</module>
-    <module>storage/image/swift</module>
-    <module>storage/image/default</module>
-    <module>storage/image/sample</module>
-    <module>storage/volume/nexenta</module>
-    <module>storage/volume/solidfire</module>
-    <module>storage/volume/cloudbyte</module>
-    <module>storage/volume/default</module>
-    <module>storage/volume/sample</module>
-    <module>alert-handlers/snmp-alerts</module>
-    <module>alert-handlers/syslog-alerts</module>
-    <module>network-elements/internal-loadbalancer</module>
-    <module>network-elements/vxlan</module>
-    <module>network-elements/globodns</module>
-    <module>database/quota</module>
-    <module>integrations/cloudian</module>
-    <module>integrations/prometheus</module>
-    <module>affinity-group-processors/host-affinity</module>
-  </modules>
+        <module>affinity-group-processors/explicit-dedication</module>
+        <module>affinity-group-processors/host-affinity</module>
+        <module>affinity-group-processors/host-anti-affinity</module>
 
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>      
-    </dependency>
-  </dependencies>
+        <module>alert-handlers/snmp-alerts</module>
+        <module>alert-handlers/syslog-alerts</module>
 
-  <profiles>
-    <profile>
-      <id>netapp</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>file-systems/netapp</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>f5</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>network-elements/f5</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>srx</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>network-elements/juniper-srx</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>vmware</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>hypervisors/vmware</module>
-        <module>network-elements/cisco-vnmc</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>vmware-sioc</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>api/vmware-sioc</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>mysqlha</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>database/mysql-ha</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>simulator</id>
-      <activation>
-        <property>
-          <name>simulator</name>
-        </property>
-      </activation>
-      <modules>
-        <module>hypervisors/simulator</module>
-      </modules>
-    </profile>
-  </profiles>
+        <module>api/discovery</module>
+        <module>api/rate-limit</module>
+        <module>api/solidfire-intg-test</module>
+
+        <module>ca/root-ca</module>
+
+        <module>database/quota</module>
+
+        <module>dedicated-resources</module>
+
+        <module>deployment-planners/implicit-dedication</module>
+        <module>deployment-planners/user-concentrated-pod</module>
+        <module>deployment-planners/user-dispersing</module>
+
+        <module>event-bus/inmemory</module>
+        <module>event-bus/kafka</module>
+        <module>event-bus/rabbitmq</module>
+
+        <module>ha-planners/skip-heurestics</module>
+
+        <module>host-allocators/random</module>
+
+        <module>hypervisors/baremetal</module>
+        <module>hypervisors/hyperv</module>
+        <module>hypervisors/kvm</module>
+        <module>hypervisors/ovm3</module>
+        <module>hypervisors/ovm</module>
+        <module>hypervisors/ucs</module>
+        <module>hypervisors/xenserver</module>
+
+        <module>integrations/cloudian</module>
+        <module>integrations/prometheus</module>
+
+        <module>metrics</module>
+
+        <module>network-elements/bigswitch</module>
+        <module>network-elements/dns-notifier</module>
+        <module>network-elements/juniper-contrail</module>
+        <module>network-elements/elastic-loadbalancer</module>
+        <module>network-elements/globodns</module>
+        <module>network-elements/internal-loadbalancer</module>
+        <module>network-elements/netscaler</module>
+        <module>network-elements/nicira-nvp</module>
+        <module>network-elements/opendaylight</module>
+        <module>network-elements/ovs</module>
+        <module>network-elements/palo-alto</module>
+        <module>network-elements/stratosphere-ssp</module>
+        <module>network-elements/brocade-vcs</module>
+        <module>network-elements/nuage-vsp</module>
+        <module>network-elements/vxlan</module>
+
+        <module>outofbandmanagement-drivers/ipmitool</module>
+        <module>outofbandmanagement-drivers/nested-cloudstack</module>
+
+        <module>storage/image/default</module>
+        <module>storage/image/s3</module>
+        <module>storage/image/sample</module>
+        <module>storage/image/swift</module>
+        <module>storage/volume/cloudbyte</module>
+        <module>storage/volume/default</module>
+        <module>storage/volume/nexenta</module>
+        <module>storage/volume/sample</module>
+        <module>storage/volume/solidfire</module>
+
+        <module>storage-allocators/random</module>
+
+        <module>user-authenticators/ldap</module>
+        <module>user-authenticators/md5</module>
+        <module>user-authenticators/pbkdf2</module>
+        <module>user-authenticators/plain-text</module>
+        <module>user-authenticators/saml2</module>
+        <module>user-authenticators/sha256salted</module>
+    </modules>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <profiles>
+        <profile>
+            <id>f5</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <modules>
+                <module>network-elements/f5</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>srx</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <modules>
+                <module>network-elements/juniper-srx</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>vmware</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <modules>
+                <module>hypervisors/vmware</module>
+                <module>network-elements/cisco-vnmc</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>vmware-sioc</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <modules>
+                <module>api/vmware-sioc</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>mysqlha</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <modules>
+                <module>database/mysql-ha</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>simulator</id>
+            <activation>
+                <property>
+                    <name>simulator</name>
+                </property>
+            </activation>
+            <modules>
+                <module>hypervisors/simulator</module>
+            </modules>
+        </profile>
+    </profiles>
 </project>
diff --git a/plugins/storage-allocators/random/pom.xml b/plugins/storage-allocators/random/pom.xml
index 2b313c7..511d31e 100644
--- a/plugins/storage-allocators/random/pom.xml
+++ b/plugins/storage-allocators/random/pom.xml
@@ -1,37 +1,37 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-allocator-random</artifactId>
-  <name>Apache CloudStack Plugin - Storage Allocator Random</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-allocator-random</artifactId>
+    <name>Apache CloudStack Plugin - Storage Allocator Random</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/storage-allocators/random/src/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java b/plugins/storage-allocators/random/src/main/java/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
similarity index 100%
rename from plugins/storage-allocators/random/src/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
rename to plugins/storage-allocators/random/src/main/java/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java
diff --git a/plugins/storage/image/default/pom.xml b/plugins/storage/image/default/pom.xml
index 598f46f..e64efb2 100644
--- a/plugins/storage/image/default/pom.xml
+++ b/plugins/storage/image/default/pom.xml
@@ -1,62 +1,70 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-image-default</artifactId>
-  <name>Apache CloudStack Plugin - Storage Image default provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>  
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>    
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-snapshot</artifactId>
-      <version>${project.version}</version>
-    </dependency>        
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-image-default</artifactId>
+    <name>Apache CloudStack Plugin - Storage Image default provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-snapshot</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java b/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java
similarity index 100%
rename from plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java
rename to plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java
diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java b/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
rename to plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java b/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
similarity index 100%
rename from plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
rename to plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
diff --git a/plugins/storage/image/default/resources/META-INF/cloudstack/storage-image-default/module.properties b/plugins/storage/image/default/src/main/resources/META-INF/cloudstack/storage-image-default/module.properties
similarity index 100%
rename from plugins/storage/image/default/resources/META-INF/cloudstack/storage-image-default/module.properties
rename to plugins/storage/image/default/src/main/resources/META-INF/cloudstack/storage-image-default/module.properties
diff --git a/plugins/storage/image/default/resources/META-INF/cloudstack/storage-image-default/spring-storage-image-default-context.xml b/plugins/storage/image/default/src/main/resources/META-INF/cloudstack/storage-image-default/spring-storage-image-default-context.xml
similarity index 100%
rename from plugins/storage/image/default/resources/META-INF/cloudstack/storage-image-default/spring-storage-image-default-context.xml
rename to plugins/storage/image/default/src/main/resources/META-INF/cloudstack/storage-image-default/spring-storage-image-default-context.xml
diff --git a/plugins/storage/image/s3/pom.xml b/plugins/storage/image/s3/pom.xml
index c644d64..1eac819 100644
--- a/plugins/storage/image/s3/pom.xml
+++ b/plugins/storage/image/s3/pom.xml
@@ -1,51 +1,52 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-image-s3</artifactId>
-  <name>Apache CloudStack Plugin - Storage Image S3 provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>  
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>    
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-snapshot</artifactId>
-      <version>${project.version}</version>
-    </dependency>            
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-image-s3</artifactId>
+    <name>Apache CloudStack Plugin - Storage Image S3 provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-snapshot</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java b/plugins/storage/image/s3/src/main/java/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
similarity index 100%
rename from plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
rename to plugins/storage/image/s3/src/main/java/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java b/plugins/storage/image/s3/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java
rename to plugins/storage/image/s3/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java
diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java b/plugins/storage/image/s3/src/main/java/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
similarity index 100%
rename from plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
rename to plugins/storage/image/s3/src/main/java/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
diff --git a/plugins/storage/image/s3/resources/META-INF/cloudstack/storage-image-s3/module.properties b/plugins/storage/image/s3/src/main/resources/META-INF/cloudstack/storage-image-s3/module.properties
similarity index 100%
rename from plugins/storage/image/s3/resources/META-INF/cloudstack/storage-image-s3/module.properties
rename to plugins/storage/image/s3/src/main/resources/META-INF/cloudstack/storage-image-s3/module.properties
diff --git a/plugins/storage/image/s3/resources/META-INF/cloudstack/storage-image-s3/spring-storage-image-s3-context.xml b/plugins/storage/image/s3/src/main/resources/META-INF/cloudstack/storage-image-s3/spring-storage-image-s3-context.xml
similarity index 100%
rename from plugins/storage/image/s3/resources/META-INF/cloudstack/storage-image-s3/spring-storage-image-s3-context.xml
rename to plugins/storage/image/s3/src/main/resources/META-INF/cloudstack/storage-image-s3/spring-storage-image-s3-context.xml
diff --git a/plugins/storage/image/sample/pom.xml b/plugins/storage/image/sample/pom.xml
index da377a6..1db337e 100644
--- a/plugins/storage/image/sample/pom.xml
+++ b/plugins/storage/image/sample/pom.xml
@@ -1,62 +1,70 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-image-sample</artifactId>
-  <name>Apache CloudStack Plugin - Storage Image sample provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>    
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-snapshot</artifactId>
-      <version>${project.version}</version>
-    </dependency>            
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-image-sample</artifactId>
+    <name>Apache CloudStack Plugin - Storage Image sample provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-snapshot</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/driver/SampleImageStoreDriverImpl.java b/plugins/storage/image/sample/src/main/java/org/apache/cloudstack/storage/datastore/driver/SampleImageStoreDriverImpl.java
similarity index 100%
rename from plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/driver/SampleImageStoreDriverImpl.java
rename to plugins/storage/image/sample/src/main/java/org/apache/cloudstack/storage/datastore/driver/SampleImageStoreDriverImpl.java
diff --git a/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/lifecycle/SampleImageStoreLifeCycleImpl.java b/plugins/storage/image/sample/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SampleImageStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/lifecycle/SampleImageStoreLifeCycleImpl.java
rename to plugins/storage/image/sample/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SampleImageStoreLifeCycleImpl.java
diff --git a/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java b/plugins/storage/image/sample/src/main/java/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
similarity index 100%
rename from plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
rename to plugins/storage/image/sample/src/main/java/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
diff --git a/plugins/storage/image/swift/pom.xml b/plugins/storage/image/swift/pom.xml
index bd83554..5835c95 100644
--- a/plugins/storage/image/swift/pom.xml
+++ b/plugins/storage/image/swift/pom.xml
@@ -1,62 +1,70 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-image-swift</artifactId>
-  <name>Apache CloudStack Plugin - Storage Image Swift provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-image</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>    
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-snapshot</artifactId>
-      <version>${project.version}</version>
-    </dependency>            
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-image-swift</artifactId>
+    <name>Apache CloudStack Plugin - Storage Image Swift provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-image</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-snapshot</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java b/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java
similarity index 100%
rename from plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java
rename to plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java
diff --git a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/lifecycle/SwiftImageStoreLifeCycleImpl.java b/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SwiftImageStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/lifecycle/SwiftImageStoreLifeCycleImpl.java
rename to plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SwiftImageStoreLifeCycleImpl.java
diff --git a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java b/plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
similarity index 100%
rename from plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
rename to plugins/storage/image/swift/src/main/java/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
diff --git a/plugins/storage/image/swift/resources/META-INF/cloudstack/storage-image-swift/module.properties b/plugins/storage/image/swift/src/main/resources/META-INF/cloudstack/storage-image-swift/module.properties
similarity index 100%
rename from plugins/storage/image/swift/resources/META-INF/cloudstack/storage-image-swift/module.properties
rename to plugins/storage/image/swift/src/main/resources/META-INF/cloudstack/storage-image-swift/module.properties
diff --git a/plugins/storage/image/swift/resources/META-INF/cloudstack/storage-image-swift/spring-storage-image-swift-context.xml b/plugins/storage/image/swift/src/main/resources/META-INF/cloudstack/storage-image-swift/spring-storage-image-swift-context.xml
similarity index 100%
rename from plugins/storage/image/swift/resources/META-INF/cloudstack/storage-image-swift/spring-storage-image-swift-context.xml
rename to plugins/storage/image/swift/src/main/resources/META-INF/cloudstack/storage-image-swift/spring-storage-image-swift-context.xml
diff --git a/plugins/storage/volume/cloudbyte/pom.xml b/plugins/storage/volume/cloudbyte/pom.xml
old mode 100755
new mode 100644
index 5444bba..d3ae8d2
--- a/plugins/storage/volume/cloudbyte/pom.xml
+++ b/plugins/storage/volume/cloudbyte/pom.xml
@@ -1,94 +1,73 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-volume-cloudbyte</artifactId>
-  <name>Apache CloudStack Plugin - Storage Volume CloudByte Provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-volume-default</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <version>${cs.mysql.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-      <version>${cs.gson.version}</version>
-    </dependency>
-    <dependency>
-	<groupId>com.sun.jersey</groupId>
-	<artifactId>jersey-bundle</artifactId>
-	<version>1.19.4</version>
-</dependency>
-  </dependencies>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checklicence</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-volume-cloudbyte</artifactId>
+    <name>Apache CloudStack Plugin - Storage Volume CloudByte Provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-default</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-bundle</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java
similarity index 98%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java
index 74fbde5..89e8c4f 100644
--- a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java
+++ b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java
@@ -321,6 +321,9 @@
 
     }
 
+    @Override
+    public void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, QualityOfServiceState qualityOfServiceState) {}
+
     //this method will utilize the volume details table to add third party volume properties
     public void updateVolumeDetails(VolumeVO volume, FileSystem esvolume) {
 
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/lifecycle/ElastistorPrimaryDataStoreLifeCycle.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/ElastistorPrimaryDataStoreLifeCycle.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/lifecycle/ElastistorPrimaryDataStoreLifeCycle.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/ElastistorPrimaryDataStoreLifeCycle.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/provider/ElastistorHostListener.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/provider/ElastistorHostListener.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/provider/ElastistorHostListener.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/provider/ElastistorHostListener.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/provider/ElastistorPrimaryDataStoreProvider.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/provider/ElastistorPrimaryDataStoreProvider.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/provider/ElastistorPrimaryDataStoreProvider.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/provider/ElastistorPrimaryDataStoreProvider.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorUtil.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ElastistorUtil.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorUtil.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ElastistorUtil.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiService.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiService.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiService.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiService.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiServiceImpl.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiServiceImpl.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiServiceImpl.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ElastistorVolumeApiServiceImpl.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceCmd.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceCmd.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceCmd.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceCmd.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceResponse.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceResponse.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceResponse.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorInterfaceResponse.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolCmd.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolCmd.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolCmd.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolCmd.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolResponse.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolResponse.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolResponse.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorPoolResponse.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeCmd.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeCmd.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeCmd.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeCmd.java
diff --git a/plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeResponse.java b/plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeResponse.java
similarity index 100%
rename from plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeResponse.java
rename to plugins/storage/volume/cloudbyte/src/main/java/org/apache/cloudstack/storage/datastore/util/ListElastistorVolumeResponse.java
diff --git a/plugins/storage/volume/cloudbyte/resources/META-INF/cloudstack/storage-volume-cloudbyte/module.properties b/plugins/storage/volume/cloudbyte/src/main/resources/META-INF/cloudstack/storage-volume-cloudbyte/module.properties
similarity index 100%
rename from plugins/storage/volume/cloudbyte/resources/META-INF/cloudstack/storage-volume-cloudbyte/module.properties
rename to plugins/storage/volume/cloudbyte/src/main/resources/META-INF/cloudstack/storage-volume-cloudbyte/module.properties
diff --git a/plugins/storage/volume/cloudbyte/resources/META-INF/cloudstack/storage-volume-cloudbyte/spring-storage-volume-cloudbyte-context.xml b/plugins/storage/volume/cloudbyte/src/main/resources/META-INF/cloudstack/storage-volume-cloudbyte/spring-storage-volume-cloudbyte-context.xml
similarity index 100%
rename from plugins/storage/volume/cloudbyte/resources/META-INF/cloudstack/storage-volume-cloudbyte/spring-storage-volume-cloudbyte-context.xml
rename to plugins/storage/volume/cloudbyte/src/main/resources/META-INF/cloudstack/storage-volume-cloudbyte/spring-storage-volume-cloudbyte-context.xml
diff --git a/plugins/storage/volume/default/pom.xml b/plugins/storage/volume/default/pom.xml
index 0345399..645fa37 100644
--- a/plugins/storage/volume/default/pom.xml
+++ b/plugins/storage/volume/default/pom.xml
@@ -1,47 +1,55 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-volume-default</artifactId>
-  <name>Apache CloudStack Plugin - Storage Volume default provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-volume-default</artifactId>
+    <name>Apache CloudStack Plugin - Storage Volume default provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java b/plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
similarity index 98%
rename from plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
rename to plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
index b5aee54..1136305 100644
--- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
+++ b/plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
@@ -385,4 +385,7 @@
 
         callback.complete(result);
     }
+
+    @Override
+    public void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, QualityOfServiceState qualityOfServiceState) {}
 }
diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java b/plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
rename to plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackPrimaryDataStoreProviderImpl.java b/plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/provider/CloudStackPrimaryDataStoreProviderImpl.java
similarity index 100%
rename from plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackPrimaryDataStoreProviderImpl.java
rename to plugins/storage/volume/default/src/main/java/org/apache/cloudstack/storage/datastore/provider/CloudStackPrimaryDataStoreProviderImpl.java
diff --git a/plugins/storage/volume/default/resources/META-INF/cloudstack/storage-volume-default/module.properties b/plugins/storage/volume/default/src/main/resources/META-INF/cloudstack/storage-volume-default/module.properties
similarity index 100%
rename from plugins/storage/volume/default/resources/META-INF/cloudstack/storage-volume-default/module.properties
rename to plugins/storage/volume/default/src/main/resources/META-INF/cloudstack/storage-volume-default/module.properties
diff --git a/plugins/storage/volume/default/resources/META-INF/cloudstack/storage-volume-default/spring-storage-volume-default-context.xml b/plugins/storage/volume/default/src/main/resources/META-INF/cloudstack/storage-volume-default/spring-storage-volume-default-context.xml
similarity index 100%
rename from plugins/storage/volume/default/resources/META-INF/cloudstack/storage-volume-default/spring-storage-volume-default-context.xml
rename to plugins/storage/volume/default/src/main/resources/META-INF/cloudstack/storage-volume-default/spring-storage-volume-default-context.xml
diff --git a/plugins/storage/volume/default/test/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImplTest.java b/plugins/storage/volume/default/src/test/java/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImplTest.java
similarity index 100%
rename from plugins/storage/volume/default/test/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImplTest.java
rename to plugins/storage/volume/default/src/test/java/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImplTest.java
diff --git a/plugins/storage/volume/nexenta/pom.xml b/plugins/storage/volume/nexenta/pom.xml
index 6b18095..add8f3d 100644
--- a/plugins/storage/volume/nexenta/pom.xml
+++ b/plugins/storage/volume/nexenta/pom.xml
@@ -1,47 +1,55 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-  license agreements. See the NOTICE file distributed with this work for additional
-  information regarding copyright ownership. The ASF licenses this file to
-  you under the Apache License, Version 2.0 (the "License"); you may not use
-  this file except in compliance with the License. You may obtain a copy of
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-  by applicable law or agreed to in writing, software distributed under the
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-  OF ANY KIND, either express or implied. See the License for the specific
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-volume-nexenta</artifactId>
-  <name>Apache CloudStack Plugin - Storage Volume Nexenta Provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-volume-nexenta</artifactId>
+    <name>Apache CloudStack Plugin - Storage Volume Nexenta Provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
similarity index 98%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
index c6ae3ed..d59fce4 100644
--- a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
+++ b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
@@ -206,4 +206,7 @@
 
     @Override
     public void resize(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {}
+
+    @Override
+    public void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, QualityOfServiceState qualityOfServiceState) {}
 }
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/lifecylce/NexentaPrimaryDataStoreLifeCycle.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/lifecylce/NexentaPrimaryDataStoreLifeCycle.java
similarity index 98%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/lifecylce/NexentaPrimaryDataStoreLifeCycle.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/lifecylce/NexentaPrimaryDataStoreLifeCycle.java
index 4fffb34..3273566 100644
--- a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/lifecylce/NexentaPrimaryDataStoreLifeCycle.java
+++ b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/lifecylce/NexentaPrimaryDataStoreLifeCycle.java
@@ -102,7 +102,7 @@
         details.put(NexentaUtil.NMS_URL, params.getNmsUrl().toString());
 
         details.put(NexentaUtil.VOLUME, params.getVolume());
-        details.put(NexentaUtil.SPARSE_VOLUMES, params.getSparseVolumes().toString());
+        details.put(NexentaUtil.SPARSE_VOLUMES, params.isSparseVolumes().toString());
 
         details.put(NexentaUtil.STORAGE_TYPE, params.getStorageType().toString());
         details.put(NexentaUtil.STORAGE_HOST, params.getStorageHost());
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/provider/NexentaHostListener.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/provider/NexentaHostListener.java
similarity index 100%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/provider/NexentaHostListener.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/provider/NexentaHostListener.java
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/provider/NexentaPrimaryDataStoreProvider.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/provider/NexentaPrimaryDataStoreProvider.java
similarity index 100%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/provider/NexentaPrimaryDataStoreProvider.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/provider/NexentaPrimaryDataStoreProvider.java
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaNmsClient.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaNmsClient.java
similarity index 100%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaNmsClient.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaNmsClient.java
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaNmsUrl.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaNmsUrl.java
similarity index 100%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaNmsUrl.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaNmsUrl.java
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaStorAppliance.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaStorAppliance.java
similarity index 99%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaStorAppliance.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaStorAppliance.java
index c1efc75..fbb6645 100644
--- a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaStorAppliance.java
+++ b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaStorAppliance.java
@@ -337,7 +337,7 @@
         final String zvolName = getVolumeName(volumeName);
         String volumeSizeString = String.format("%dB", volumeSize);
 
-        client.execute(NmsResponse.class, "zvol", "create", zvolName, volumeSizeString, parameters.getVolumeBlockSize(), parameters.getSparseVolumes());
+        client.execute(NmsResponse.class, "zvol", "create", zvolName, volumeSizeString, parameters.getVolumeBlockSize(), parameters.isSparseVolumes());
 
         final String targetName = getTargetName(volumeName);
         final String targetGroupName = getTargetGroupName(volumeName);
diff --git a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaUtil.java b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaUtil.java
similarity index 99%
rename from plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaUtil.java
rename to plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaUtil.java
index ee6a78f..7eef85b 100644
--- a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/util/NexentaUtil.java
+++ b/plugins/storage/volume/nexenta/src/main/java/org/apache/cloudstack/storage/datastore/util/NexentaUtil.java
@@ -194,7 +194,7 @@
             this.sparseVolumes = Boolean.TRUE.toString().equalsIgnoreCase(sparseVolumes);
         }
 
-        public Boolean getSparseVolumes() {
+        public Boolean isSparseVolumes() {
             return sparseVolumes;
         }
 
diff --git a/plugins/storage/volume/nexenta/resources/META-INF.cloudstack.storage-volume-solidfire/module.properties b/plugins/storage/volume/nexenta/src/main/resources/META-INF.cloudstack.storage-volume-solidfire/module.properties
similarity index 100%
rename from plugins/storage/volume/nexenta/resources/META-INF.cloudstack.storage-volume-solidfire/module.properties
rename to plugins/storage/volume/nexenta/src/main/resources/META-INF.cloudstack.storage-volume-solidfire/module.properties
diff --git a/plugins/storage/volume/nexenta/resources/META-INF.cloudstack.storage-volume-solidfire/spring-storage-volume-nexenta-context.xml b/plugins/storage/volume/nexenta/src/main/resources/META-INF.cloudstack.storage-volume-solidfire/spring-storage-volume-nexenta-context.xml
similarity index 100%
rename from plugins/storage/volume/nexenta/resources/META-INF.cloudstack.storage-volume-solidfire/spring-storage-volume-nexenta-context.xml
rename to plugins/storage/volume/nexenta/src/main/resources/META-INF.cloudstack.storage-volume-solidfire/spring-storage-volume-nexenta-context.xml
diff --git a/plugins/storage/volume/nexenta/test/org/apache/cloudstack/storage/datastore/util/NexentaStorApplianceTest.java b/plugins/storage/volume/nexenta/src/test/java/org/apache/cloudstack/storage/datastore/util/NexentaStorApplianceTest.java
similarity index 100%
rename from plugins/storage/volume/nexenta/test/org/apache/cloudstack/storage/datastore/util/NexentaStorApplianceTest.java
rename to plugins/storage/volume/nexenta/src/test/java/org/apache/cloudstack/storage/datastore/util/NexentaStorApplianceTest.java
diff --git a/plugins/storage/volume/nexenta/test/org/apache/cloudstack/storage/datastore/util/NexentaUtilTest.java b/plugins/storage/volume/nexenta/src/test/java/org/apache/cloudstack/storage/datastore/util/NexentaUtilTest.java
similarity index 96%
rename from plugins/storage/volume/nexenta/test/org/apache/cloudstack/storage/datastore/util/NexentaUtilTest.java
rename to plugins/storage/volume/nexenta/src/test/java/org/apache/cloudstack/storage/datastore/util/NexentaUtilTest.java
index 8f44985..45bffb0 100644
--- a/plugins/storage/volume/nexenta/test/org/apache/cloudstack/storage/datastore/util/NexentaUtilTest.java
+++ b/plugins/storage/volume/nexenta/src/test/java/org/apache/cloudstack/storage/datastore/util/NexentaUtilTest.java
@@ -74,7 +74,7 @@
         assertEquals(parameters.getStorageHost(), "192.168.1.1");
         assertEquals((int) parameters.getStoragePort(), NexentaUtil.DEFAULT_ISCSI_TARGET_PORTAL_PORT);
         assertNull(parameters.getStoragePath());
-        assertEquals((boolean) parameters.getSparseVolumes(), false);
+        assertEquals((boolean) parameters.isSparseVolumes(), false);
         assertEquals(parameters.getVolumeBlockSize(), "8K");
 
         url += "volume=cloudstack";
@@ -109,7 +109,7 @@
 
         url += "sparseVolumes=true;";
         parameters = NexentaUtil.parseNexentaPluginUrl(url);
-        assertEquals(parameters.getSparseVolumes(), Boolean.TRUE);
+        assertEquals(parameters.isSparseVolumes(), Boolean.TRUE);
 
         url += "volumeBlockSize=128K;";
         parameters = NexentaUtil.parseNexentaPluginUrl(url);
@@ -124,7 +124,7 @@
         assertEquals(parameters.getStorageHost(), "192.168.1.2");
         assertEquals((int) parameters.getStoragePort(), 3000);
         assertEquals(parameters.getStoragePath(), "/volumes/cloudstack");
-        assertEquals(parameters.getSparseVolumes(), Boolean.TRUE);
+        assertEquals(parameters.isSparseVolumes(), Boolean.TRUE);
         assertEquals(parameters.getVolumeBlockSize(), "128K");
 
         exception.expect(RuntimeException.class);
diff --git a/plugins/storage/volume/sample/pom.xml b/plugins/storage/volume/sample/pom.xml
index d70f3e2..c66855b 100644
--- a/plugins/storage/volume/sample/pom.xml
+++ b/plugins/storage/volume/sample/pom.xml
@@ -1,47 +1,55 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-volume-sample</artifactId>
-  <name>Apache CloudStack Plugin - Storage Volume sample provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-volume-sample</artifactId>
+    <name>Apache CloudStack Plugin - Storage Volume sample provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java b/plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
similarity index 97%
rename from plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
rename to plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
index 343b08a..fc0186f 100644
--- a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
+++ b/plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
@@ -32,6 +32,7 @@
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.framework.async.AsyncRpcContext;
@@ -228,6 +229,10 @@
     }
 
     @Override
+    public void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, QualityOfServiceState qualityOfServiceState) {
+    }
+
+    @Override
     public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CreateCmdResult> callback) {
     }
 
diff --git a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/lifecycle/SamplePrimaryDataStoreLifeCycleImpl.java b/plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SamplePrimaryDataStoreLifeCycleImpl.java
similarity index 100%
rename from plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/lifecycle/SamplePrimaryDataStoreLifeCycleImpl.java
rename to plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SamplePrimaryDataStoreLifeCycleImpl.java
diff --git a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/provider/SamplePrimaryDatastoreProviderImpl.java b/plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/provider/SamplePrimaryDatastoreProviderImpl.java
similarity index 100%
rename from plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/provider/SamplePrimaryDatastoreProviderImpl.java
rename to plugins/storage/volume/sample/src/main/java/org/apache/cloudstack/storage/datastore/provider/SamplePrimaryDatastoreProviderImpl.java
diff --git a/plugins/storage/volume/solidfire/pom.xml b/plugins/storage/volume/solidfire/pom.xml
index 85b4218..0fbac73 100644
--- a/plugins/storage/volume/solidfire/pom.xml
+++ b/plugins/storage/volume/solidfire/pom.xml
@@ -1,66 +1,74 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-storage-volume-solidfire</artifactId>
-  <name>Apache CloudStack Plugin - Storage Volume SolidFire Provider</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>com.solidfire</groupId>
-      <artifactId>solidfire-sdk-java</artifactId>
-      <version>1.2.0.29</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-plugin-storage-volume-default</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-volume</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.aspectj</groupId>
-      <artifactId>aspectjtools</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>integration-test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-storage-volume-solidfire</artifactId>
+    <name>Apache CloudStack Plugin - Storage Volume SolidFire Provider</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>com.solidfire</groupId>
+            <artifactId>solidfire-sdk-java</artifactId>
+            <version>1.2.0.29</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-plugin-storage-volume-default</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-volume</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjtools</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
similarity index 95%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
index 3600ea9..370cdb0 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
+++ b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
@@ -30,8 +30,6 @@
 import com.cloud.agent.api.to.DataTO;
 import com.cloud.agent.api.to.DiskTO;
 import com.cloud.dc.ClusterVO;
-import com.cloud.dc.ClusterDetailsVO;
-import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.host.Host;
 import com.cloud.host.HostVO;
@@ -88,12 +86,12 @@
 
 public class SolidFirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
     private static final Logger LOGGER = Logger.getLogger(SolidFirePrimaryDataStoreDriver.class);
-    private static final int LOCK_TIME_IN_SECONDS = 300;
     private static final int LOWEST_HYPERVISOR_SNAPSHOT_RESERVE = 10;
     private static final long MIN_IOPS_FOR_TEMPLATE_VOLUME = 100L;
     private static final long MAX_IOPS_FOR_TEMPLATE_VOLUME = 20000L;
     private static final long MIN_IOPS_FOR_TEMP_VOLUME = 100L;
     private static final long MAX_IOPS_FOR_TEMP_VOLUME = 20000L;
+    private static final long MAX_IOPS_FOR_MIGRATING_VOLUME = 20000L;
     private static final long MIN_IOPS_FOR_SNAPSHOT_VOLUME = 100L;
     private static final long MAX_IOPS_FOR_SNAPSHOT_VOLUME = 20000L;
 
@@ -102,7 +100,6 @@
     @Inject private AccountDao accountDao;
     @Inject private AccountDetailsDao accountDetailsDao;
     @Inject private ClusterDao clusterDao;
-    @Inject private ClusterDetailsDao clusterDetailsDao;
     @Inject private DataStoreManager dataStoreMgr;
     @Inject private HostDao hostDao;
     @Inject private SnapshotDao snapshotDao;
@@ -147,14 +144,8 @@
         return null;
     }
 
-    // get the VAG associated with volumeInfo's cluster, if any (ListVolumeAccessGroups)
-    // if the VAG exists
-    //     update the VAG to contain all IQNs of the hosts (ModifyVolumeAccessGroup)
-    //     if the ID of volumeInfo in not in the VAG, add it (ModifyVolumeAccessGroup)
-    // if the VAG doesn't exist, create it with the IQNs of the hosts and the ID of volumeInfo (CreateVolumeAccessGroup)
     @Override
-    public boolean grantAccess(DataObject dataObject, Host host, DataStore dataStore)
-    {
+    public boolean grantAccess(DataObject dataObject, Host host, DataStore dataStore) {
         Preconditions.checkArgument(dataObject != null, "'dataObject' should not be 'null'");
         Preconditions.checkArgument(host != null, "'host' should not be 'null'");
         Preconditions.checkArgument(dataStore != null, "'dataStore' should not be 'null'");
@@ -167,7 +158,7 @@
 
         GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());
 
-        if (!lock.lock(LOCK_TIME_IN_SECONDS)) {
+        if (!lock.lock(SolidFireUtil.LOCK_TIME_IN_SECONDS)) {
             String errMsg = "Couldn't lock the DB (in grantAccess) on the following string: " + cluster.getUuid();
 
             LOGGER.warn(errMsg);
@@ -176,32 +167,11 @@
         }
 
         try {
-            ClusterDetailsVO clusterDetail = clusterDetailsDao.findDetail(clusterId, SolidFireUtil.getVagKey(storagePoolId));
-
-            String vagId = clusterDetail != null ? clusterDetail.getValue() : null;
-
             List<HostVO> hosts = hostDao.findByClusterId(clusterId);
 
-            if (!SolidFireUtil.hostsSupport_iScsi(hosts)) {
-                String errMsg = "Not all hosts in the compute cluster support iSCSI.";
-
-                LOGGER.warn(errMsg);
-
-                throw new CloudRuntimeException(errMsg);
-            }
-
             SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);
 
-            if (vagId != null) {
-                SolidFireUtil.SolidFireVag sfVag = SolidFireUtil.getVag(sfConnection, Long.parseLong(vagId));
-
-                long[] volumeIds = SolidFireUtil.getNewVolumeIds(sfVag.getVolumeIds(), sfVolumeId, true);
-
-                SolidFireUtil.modifyVag(sfConnection, sfVag.getId(), sfVag.getInitiators(), volumeIds);
-            }
-            else {
-                SolidFireUtil.placeVolumeInVolumeAccessGroup(sfConnection, sfVolumeId, storagePoolId, cluster.getUuid(), hosts, clusterDetailsDao);
-            }
+            SolidFireUtil.placeVolumeInVolumeAccessGroups(sfConnection, sfVolumeId, hosts);
 
             return true;
         }
@@ -211,9 +181,6 @@
         }
     }
 
-    // get the VAG associated with volumeInfo's cluster, if any (ListVolumeAccessGroups) // might not exist if using CHAP
-    // if the VAG exists
-    //     remove the ID of volumeInfo from the VAG (ModifyVolumeAccessGroup)
     @Override
     public void revokeAccess(DataObject dataObject, Host host, DataStore dataStore)
     {
@@ -229,27 +196,23 @@
 
         GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());
 
-        if (!lock.lock(LOCK_TIME_IN_SECONDS)) {
+        if (!lock.lock(SolidFireUtil.LOCK_TIME_IN_SECONDS)) {
             String errMsg = "Couldn't lock the DB (in revokeAccess) on the following string: " + cluster.getUuid();
 
-            LOGGER.debug(errMsg);
+            LOGGER.warn(errMsg);
 
             throw new CloudRuntimeException(errMsg);
         }
 
         try {
-            ClusterDetailsVO clusterDetail = clusterDetailsDao.findDetail(clusterId, SolidFireUtil.getVagKey(storagePoolId));
+            SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);
 
-            String vagId = clusterDetail != null ? clusterDetail.getValue() : null;
+            List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
 
-            if (vagId != null) {
-                SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);
-
-                SolidFireUtil.SolidFireVag sfVag = SolidFireUtil.getVag(sfConnection, Long.parseLong(vagId));
-
-                long[] volumeIds = SolidFireUtil.getNewVolumeIds(sfVag.getVolumeIds(), sfVolumeId, false);
-
-                SolidFireUtil.modifyVag(sfConnection, sfVag.getId(), sfVag.getInitiators(), volumeIds);
+            for (SolidFireUtil.SolidFireVag sfVag : sfVags) {
+                if (SolidFireUtil.sfVagContains(sfVag, sfVolumeId, clusterId, hostDao)) {
+                    SolidFireUtil.removeVolumeIdsFromSolidFireVag(sfConnection, sfVag.getId(), new Long[] { sfVolumeId });
+                }
             }
         }
         finally {
@@ -724,6 +687,10 @@
         return getBooleanValueFromVolumeDetails(volumeId, BASIC_DELETE_FAILURE);
     }
 
+    private boolean isBasicDeleteByFolder(long volumeId) {
+        return getBooleanValueFromVolumeDetails(volumeId, PrimaryDataStoreDriver.BASIC_DELETE_BY_FOLDER);
+    }
+
     private boolean isBasicGrantAccess(long volumeId) {
         return getBooleanValueFromVolumeDetails(volumeId, BASIC_GRANT_ACCESS);
     }
@@ -735,11 +702,7 @@
     private boolean getBooleanValueFromVolumeDetails(long volumeId, String name) {
         VolumeDetailVO volumeDetail = volumeDetailsDao.findDetail(volumeId, name);
 
-        if (volumeDetail != null && volumeDetail.getValue() != null) {
-            return Boolean.parseBoolean(volumeDetail.getValue());
-        }
-
-        return false;
+        return volumeDetail != null && volumeDetail.getValue() != null && Boolean.parseBoolean(volumeDetail.getValue());
     }
 
     private long getCsIdForCloning(long volumeId, String cloneOf) {
@@ -755,11 +718,7 @@
     private boolean shouldTakeSnapshot(long snapshotId) {
         SnapshotDetailsVO snapshotDetails = snapshotDetailsDao.findDetail(snapshotId, "takeSnapshot");
 
-        if (snapshotDetails != null && snapshotDetails.getValue() != null) {
-            return Boolean.parseBoolean(snapshotDetails.getValue());
-        }
-
-        return false;
+        return snapshotDetails != null && snapshotDetails.getValue() != null && Boolean.parseBoolean(snapshotDetails.getValue());
     }
 
     private SolidFireUtil.SolidFireVolume createClone(SolidFireUtil.SolidFireConnection sfConnection, long dataObjectId, VolumeInfo volumeInfo, long sfAccountId,
@@ -1264,13 +1223,30 @@
         volumeDetailsDao.removeDetail(volumeId, BASIC_DELETE_FAILURE);
     }
 
+    private void performBasicDeleteByFolder(SolidFireUtil.SolidFireConnection sfConnection, long volumeId) {
+        VolumeVO volumeVO = volumeDao.findById(volumeId);
+
+        Preconditions.checkNotNull(volumeVO, "'volumeVO' should not be 'null'.");
+
+        String folder = volumeVO.getFolder();
+
+        Preconditions.checkNotNull(folder, "'folder' should not be 'null'.");
+
+        long sfVolumeId = Long.parseLong(folder);
+
+        SolidFireUtil.deleteVolume(sfConnection, sfVolumeId);
+    }
+
     private void deleteVolume(VolumeInfo volumeInfo, long storagePoolId) {
         try {
             long volumeId = volumeInfo.getId();
 
             SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);
 
-            if (isBasicDelete(volumeId)) {
+            if (isBasicDeleteByFolder(volumeId)) {
+                performBasicDeleteByFolder(sfConnection, volumeId);
+            }
+            else if (isBasicDelete(volumeId)) {
                 performBasicDelete(sfConnection, volumeId);
             }
             else if (isBasicDeleteFailure(volumeId)) {
@@ -1482,6 +1458,21 @@
         }
     }
 
+    @Override
+    public void handleQualityOfServiceForVolumeMigration(VolumeInfo volumeInfo, QualityOfServiceState qualityOfServiceState) {
+        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(volumeInfo.getPoolId(), storagePoolDetailsDao);
+
+        Iops iops;
+
+        if (QualityOfServiceState.MIGRATION.equals(qualityOfServiceState)) {
+            iops = getIops(volumeInfo.getMinIops(), MAX_IOPS_FOR_MIGRATING_VOLUME, volumeInfo.getPoolId());
+        } else {
+            iops = getIops(volumeInfo.getMinIops(), volumeInfo.getMaxIops(), volumeInfo.getPoolId());
+        }
+
+        SolidFireUtil.modifyVolumeQoS(sfConnection, Long.parseLong(volumeInfo.getFolder()), iops.getMinIops(), iops.getMaxIops(), iops.getBurstIops());
+    }
+
     private void verifySufficientBytesForStoragePool(long requestedBytes, long storagePoolId) {
         StoragePoolVO storagePool = storagePoolDao.findById(storagePoolId);
 
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFireSharedPrimaryDataStoreDriver.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/driver/SolidFireSharedPrimaryDataStoreDriver.java
similarity index 100%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFireSharedPrimaryDataStoreDriver.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/driver/SolidFireSharedPrimaryDataStoreDriver.java
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFirePrimaryDataStoreLifeCycle.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SolidFirePrimaryDataStoreLifeCycle.java
similarity index 100%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFirePrimaryDataStoreLifeCycle.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SolidFirePrimaryDataStoreLifeCycle.java
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java
similarity index 77%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java
index 3172b1a..2ebd69a 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java
+++ b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java
@@ -49,8 +49,6 @@
 import com.cloud.agent.api.DeleteStoragePoolCommand;
 import com.cloud.agent.api.ModifyTargetsCommand;
 import com.cloud.agent.api.StoragePoolInfo;
-import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterDetailsVO;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.dc.dao.DataCenterDao;
@@ -75,23 +73,22 @@
 import com.cloud.utils.exception.CloudRuntimeException;
 
 public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStoreLifeCycle {
-    private static final Logger s_logger = Logger.getLogger(SolidFireSharedPrimaryDataStoreLifeCycle.class);
+    private static final Logger LOGGER = Logger.getLogger(SolidFireSharedPrimaryDataStoreLifeCycle.class);
 
-    @Inject private AccountDao _accountDao;
-    @Inject private AccountDetailsDao _accountDetailsDao;
-    @Inject private AgentManager _agentMgr;
-    @Inject private ClusterDao _clusterDao;
-    @Inject private ClusterDetailsDao _clusterDetailsDao;
-    @Inject private DataCenterDao _zoneDao;
-    @Inject private HostDao _hostDao;
-    @Inject private PrimaryDataStoreDao _primaryDataStoreDao;
-    @Inject private PrimaryDataStoreHelper _primaryDataStoreHelper;
-    @Inject private ResourceManager _resourceMgr;
-    @Inject private StorageManager _storageMgr;
-    @Inject private StoragePoolAutomation _storagePoolAutomation;
-    @Inject private StoragePoolDetailsDao _storagePoolDetailsDao;
-    @Inject private StoragePoolHostDao _storagePoolHostDao;
-    @Inject private TemplateManager _tmpltMgr;
+    @Inject private AccountDao accountDao;
+    @Inject private AccountDetailsDao accountDetailsDao;
+    @Inject private AgentManager agentMgr;
+    @Inject private ClusterDao clusterDao;
+    @Inject private DataCenterDao zoneDao;
+    @Inject private HostDao hostDao;
+    @Inject private PrimaryDataStoreDao primaryDataStoreDao;
+    @Inject private PrimaryDataStoreHelper primaryDataStoreHelper;
+    @Inject private ResourceManager resourceMgr;
+    @Inject private StorageManager storageMgr;
+    @Inject private StoragePoolAutomation storagePoolAutomation;
+    @Inject private StoragePoolDetailsDao storagePoolDetailsDao;
+    @Inject private StoragePoolHostDao storagePoolHostDao;
+    @Inject private TemplateManager tmpltMgr;
 
     // invoked to add primary storage that is based on the SolidFire plug-in
     @Override
@@ -184,7 +181,7 @@
                 lMinIops = Long.parseLong(minIops);
             }
         } catch (Exception ex) {
-            s_logger.info("[ignored] error getting Min IOPS: " + ex.getLocalizedMessage());
+            LOGGER.info("[ignored] error getting Min IOPS: " + ex.getLocalizedMessage());
         }
 
         try {
@@ -194,7 +191,7 @@
                 lMaxIops = Long.parseLong(maxIops);
             }
         } catch (Exception ex) {
-            s_logger.info("[ignored] error getting Max IOPS: " + ex.getLocalizedMessage());
+            LOGGER.info("[ignored] error getting Max IOPS: " + ex.getLocalizedMessage());
         }
 
         try {
@@ -204,7 +201,7 @@
                 lBurstIops = Long.parseLong(burstIops);
             }
         } catch (Exception ex) {
-            s_logger.info("[ignored] error getting Burst IOPS: " + ex.getLocalizedMessage());
+            LOGGER.info("[ignored] error getting Burst IOPS: " + ex.getLocalizedMessage());
         }
 
         if (lMinIops > lMaxIops) {
@@ -266,14 +263,14 @@
             parameters.setPath(iqn);
         }
 
-        ClusterVO cluster = _clusterDao.findById(clusterId);
+        ClusterVO cluster = clusterDao.findById(clusterId);
 
         GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());
 
-        if (!lock.lock(SolidFireUtil.s_lockTimeInSeconds)) {
+        if (!lock.lock(SolidFireUtil.LOCK_TIME_IN_SECONDS)) {
             String errMsg = "Couldn't lock the DB on the following string: " + cluster.getUuid();
 
-            s_logger.debug(errMsg);
+            LOGGER.debug(errMsg);
 
             throw new CloudRuntimeException(errMsg);
         }
@@ -282,21 +279,21 @@
 
         try {
             // this adds a row in the cloud.storage_pool table for this SolidFire volume
-            dataStore = _primaryDataStoreHelper.createPrimaryDataStore(parameters);
+            dataStore = primaryDataStoreHelper.createPrimaryDataStore(parameters);
 
             // now that we have a DataStore (we need the id from the DataStore instance), we can create a Volume Access Group, if need be, and
             // place the newly created volume in the Volume Access Group
-            List<HostVO> hosts = _hostDao.findByClusterId(clusterId);
+            List<HostVO> hosts = hostDao.findByClusterId(clusterId);
 
-            SolidFireUtil.placeVolumeInVolumeAccessGroup(sfConnection, sfVolume.getId(), dataStore.getId(), cluster.getUuid(), hosts, _clusterDetailsDao);
+            SolidFireUtil.placeVolumeInVolumeAccessGroups(sfConnection, sfVolume.getId(), hosts);
 
             SolidFireUtil.SolidFireAccount sfAccount = sfCreateVolume.getAccount();
             Account csAccount = CallContext.current().getCallingAccount();
 
-            SolidFireUtil.updateCsDbWithSolidFireAccountInfo(csAccount.getId(), sfAccount, dataStore.getId(), _accountDetailsDao);
+            SolidFireUtil.updateCsDbWithSolidFireAccountInfo(csAccount.getId(), sfAccount, dataStore.getId(), accountDetailsDao);
         } catch (Exception ex) {
             if (dataStore != null) {
-                _primaryDataStoreDao.expunge(dataStore.getId());
+                primaryDataStoreDao.expunge(dataStore.getId());
             }
 
             throw new CloudRuntimeException(ex.getMessage());
@@ -310,7 +307,7 @@
     }
 
     private HypervisorType getHypervisorTypeForCluster(long clusterId) {
-        ClusterVO cluster = _clusterDao.findById(clusterId);
+        ClusterVO cluster = clusterDao.findById(clusterId);
 
         if (cluster == null) {
             throw new CloudRuntimeException("Cluster ID '" + clusterId + "' was not found in the database.");
@@ -354,7 +351,7 @@
         try {
             Account csAccount = CallContext.current().getCallingAccount();
             long csAccountId = csAccount.getId();
-            AccountVO accountVo = _accountDao.findById(csAccountId);
+            AccountVO accountVo = accountDao.findById(csAccountId);
 
             String sfAccountName = SolidFireUtil.getSolidFireAccountName(accountVo.getUuid(), csAccountId);
 
@@ -386,11 +383,11 @@
         PrimaryDataStoreInfo primaryDataStoreInfo = (PrimaryDataStoreInfo)store;
 
         // check if there is at least one host up in this cluster
-        List<HostVO> allHosts = _resourceMgr.listAllUpHosts(Host.Type.Routing, primaryDataStoreInfo.getClusterId(),
+        List<HostVO> allHosts = resourceMgr.listAllUpHosts(Host.Type.Routing, primaryDataStoreInfo.getClusterId(),
                 primaryDataStoreInfo.getPodId(), primaryDataStoreInfo.getDataCenterId());
 
         if (allHosts.isEmpty()) {
-            _primaryDataStoreDao.expunge(primaryDataStoreInfo.getId());
+            primaryDataStoreDao.expunge(primaryDataStoreInfo.getId());
 
             throw new CloudRuntimeException("No host up to associate a storage pool with in cluster " + primaryDataStoreInfo.getClusterId());
         }
@@ -413,23 +410,23 @@
 
         for (HostVO host : allHosts) {
             try {
-                _storageMgr.connectHostToSharedPool(host.getId(), primaryDataStoreInfo.getId());
+                storageMgr.connectHostToSharedPool(host.getId(), primaryDataStoreInfo.getId());
 
                 poolHosts.add(host);
             } catch (Exception e) {
-                s_logger.warn("Unable to establish a connection between " + host + " and " + primaryDataStoreInfo, e);
+                LOGGER.warn("Unable to establish a connection between " + host + " and " + primaryDataStoreInfo, e);
             }
         }
 
         if (poolHosts.isEmpty()) {
-            s_logger.warn("No host can access storage pool '" + primaryDataStoreInfo + "' on cluster '" + primaryDataStoreInfo.getClusterId() + "'.");
+            LOGGER.warn("No host can access storage pool '" + primaryDataStoreInfo + "' on cluster '" + primaryDataStoreInfo.getClusterId() + "'.");
 
-            _primaryDataStoreDao.expunge(primaryDataStoreInfo.getId());
+            primaryDataStoreDao.expunge(primaryDataStoreInfo.getId());
 
             throw new CloudRuntimeException("Failed to access storage pool");
         }
 
-        _primaryDataStoreHelper.attachCluster(store);
+        primaryDataStoreHelper.attachCluster(store);
 
         return true;
     }
@@ -444,31 +441,31 @@
 
             Map<String, String> details = new HashMap<>();
 
-            StoragePoolDetailVO storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.DATASTORE_NAME);
+            StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.DATASTORE_NAME);
 
             details.put(CreateStoragePoolCommand.DATASTORE_NAME, storagePoolDetail.getValue());
 
-            storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.IQN);
+            storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.IQN);
 
             details.put(CreateStoragePoolCommand.IQN, storagePoolDetail.getValue());
 
-            storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_VIP);
+            storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_VIP);
 
             details.put(CreateStoragePoolCommand.STORAGE_HOST, storagePoolDetail.getValue());
 
-            storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_PORT);
+            storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_PORT);
 
             details.put(CreateStoragePoolCommand.STORAGE_PORT, storagePoolDetail.getValue());
 
             cmd.setDetails(details);
         }
 
-        Answer answer = _agentMgr.easySend(hostId, cmd);
+        Answer answer = agentMgr.easySend(hostId, cmd);
 
         if (answer != null && answer.getResult()) {
             return true;
         } else {
-            _primaryDataStoreDao.expunge(storagePool.getId());
+            primaryDataStoreDao.expunge(storagePool.getId());
 
             final String msg;
 
@@ -478,7 +475,7 @@
                 msg = "Cannot create storage pool through host '" + hostId + "' due to CreateStoragePoolCommand returns null";
             }
 
-            s_logger.warn(msg);
+            LOGGER.warn(msg);
 
             throw new CloudRuntimeException(msg);
         }
@@ -491,16 +488,16 @@
 
     @Override
     public boolean maintain(DataStore dataStore) {
-        _storagePoolAutomation.maintain(dataStore);
-        _primaryDataStoreHelper.maintain(dataStore);
+        storagePoolAutomation.maintain(dataStore);
+        primaryDataStoreHelper.maintain(dataStore);
 
         return true;
     }
 
     @Override
     public boolean cancelMaintain(DataStore store) {
-        _primaryDataStoreHelper.cancelMaintain(store);
-        _storagePoolAutomation.cancelMaintain(store);
+        primaryDataStoreHelper.cancelMaintain(store);
+        storagePoolAutomation.cancelMaintain(store);
 
         return true;
     }
@@ -508,7 +505,7 @@
     // invoked to delete primary storage that is based on the SolidFire plug-in
     @Override
     public boolean deleteDataStore(DataStore dataStore) {
-        List<StoragePoolHostVO> hostPoolRecords = _storagePoolHostDao.listByPoolId(dataStore.getId());
+        List<StoragePoolHostVO> hostPoolRecords = storagePoolHostDao.listByPoolId(dataStore.getId());
 
         HypervisorType hypervisorType = null;
 
@@ -521,11 +518,11 @@
         }
 
         StoragePool storagePool = (StoragePool)dataStore;
-        StoragePoolVO storagePoolVO = _primaryDataStoreDao.findById(storagePool.getId());
-        List<VMTemplateStoragePoolVO> unusedTemplatesInPool = _tmpltMgr.getUnusedTemplatesInPool(storagePoolVO);
+        StoragePoolVO storagePoolVO = primaryDataStoreDao.findById(storagePool.getId());
+        List<VMTemplateStoragePoolVO> unusedTemplatesInPool = tmpltMgr.getUnusedTemplatesInPool(storagePoolVO);
 
         for (VMTemplateStoragePoolVO templatePoolVO : unusedTemplatesInPool) {
-            _tmpltMgr.evictTemplateFromStoragePool(templatePoolVO);
+            tmpltMgr.evictTemplateFromStoragePool(templatePoolVO);
         }
 
         Long clusterId = null;
@@ -539,31 +536,31 @@
 
                 Map<String, String> details = new HashMap<>();
 
-                StoragePoolDetailVO storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.DATASTORE_NAME);
+                StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.DATASTORE_NAME);
 
                 details.put(DeleteStoragePoolCommand.DATASTORE_NAME, storagePoolDetail.getValue());
 
-                storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.IQN);
+                storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.IQN);
 
                 details.put(DeleteStoragePoolCommand.IQN, storagePoolDetail.getValue());
 
-                storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_VIP);
+                storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_VIP);
 
                 details.put(DeleteStoragePoolCommand.STORAGE_HOST, storagePoolDetail.getValue());
 
-                storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_PORT);
+                storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_PORT);
 
                 details.put(DeleteStoragePoolCommand.STORAGE_PORT, storagePoolDetail.getValue());
 
                 deleteCmd.setDetails(details);
             }
 
-            final Answer answer = _agentMgr.easySend(host.getHostId(), deleteCmd);
+            final Answer answer = agentMgr.easySend(host.getHostId(), deleteCmd);
 
             if (answer != null && answer.getResult()) {
-                s_logger.info("Successfully deleted storage pool using Host ID " + host.getHostId());
+                LOGGER.info("Successfully deleted storage pool using Host ID " + host.getHostId());
 
-                HostVO hostVO = _hostDao.findById(host.getHostId());
+                HostVO hostVO = hostDao.findById(host.getHostId());
 
                 if (hostVO != null) {
                     clusterId = hostVO.getClusterId();
@@ -574,29 +571,39 @@
             }
             else {
                 if (answer != null) {
-                    s_logger.error("Failed to delete storage pool using Host ID " + host.getHostId() + ": " + answer.getResult());
+                    LOGGER.error("Failed to delete storage pool using Host ID " + host.getHostId() + ": " + answer.getResult());
                 }
                 else {
-                    s_logger.error("Failed to delete storage pool using Host ID " + host.getHostId());
+                    LOGGER.error("Failed to delete storage pool using Host ID " + host.getHostId());
                 }
             }
         }
 
         if (clusterId != null) {
-            ClusterVO cluster = _clusterDao.findById(clusterId);
+            ClusterVO cluster = clusterDao.findById(clusterId);
 
             GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());
 
-            if (!lock.lock(SolidFireUtil.s_lockTimeInSeconds)) {
+            if (!lock.lock(SolidFireUtil.LOCK_TIME_IN_SECONDS)) {
                 String errMsg = "Couldn't lock the DB on the following string: " + cluster.getUuid();
 
-                s_logger.debug(errMsg);
+                LOGGER.debug(errMsg);
 
                 throw new CloudRuntimeException(errMsg);
             }
 
             try {
-                removeVolumeFromVag(storagePool.getId(), clusterId);
+                long sfVolumeId = getVolumeId(storagePool.getId());
+
+                SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);
+
+                List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
+
+                for (SolidFireUtil.SolidFireVag sfVag : sfVags) {
+                    if (SolidFireUtil.sfVagContains(sfVag, sfVolumeId, clusterId, hostDao)) {
+                        SolidFireUtil.removeVolumeIdsFromSolidFireVag(sfConnection, sfVag.getId(), new Long[] { sfVolumeId });
+                    }
+                }
             }
             finally {
                 lock.unlock();
@@ -610,16 +617,16 @@
 
         deleteSolidFireVolume(storagePool.getId());
 
-        return _primaryDataStoreHelper.deletePrimaryDataStore(dataStore);
+        return primaryDataStoreHelper.deletePrimaryDataStore(dataStore);
     }
 
     private void handleTargetsForVMware(long hostId, long storagePoolId) {
-        HostVO host = _hostDao.findById(hostId);
+        HostVO host = hostDao.findById(hostId);
 
         if (host.getHypervisorType() == HypervisorType.VMware) {
-            String storageAddress = _storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.STORAGE_VIP).getValue();
-            int storagePort = Integer.parseInt(_storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.STORAGE_PORT).getValue());
-            String iqn = _storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.IQN).getValue();
+            String storageAddress = storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.STORAGE_VIP).getValue();
+            int storagePort = Integer.parseInt(storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.STORAGE_PORT).getValue());
+            String iqn = storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.IQN).getValue();
 
             ModifyTargetsCommand cmd = new ModifyTargetsCommand();
 
@@ -644,39 +651,22 @@
     }
 
     private void sendModifyTargetsCommand(ModifyTargetsCommand cmd, long hostId) {
-        Answer answer = _agentMgr.easySend(hostId, cmd);
+        Answer answer = agentMgr.easySend(hostId, cmd);
 
         if (answer == null) {
             String msg = "Unable to get an answer to the modify targets command";
 
-            s_logger.warn(msg);
+            LOGGER.warn(msg);
         }
         else if (!answer.getResult()) {
             String msg = "Unable to modify target on the following host: " + hostId;
 
-            s_logger.warn(msg);
-        }
-    }
-
-    private void removeVolumeFromVag(long storagePoolId, long clusterId) {
-        long sfVolumeId = getVolumeId(storagePoolId);
-        ClusterDetailsVO clusterDetail = _clusterDetailsDao.findDetail(clusterId, SolidFireUtil.getVagKey(storagePoolId));
-
-        String vagId = clusterDetail != null ? clusterDetail.getValue() : null;
-
-        if (vagId != null) {
-            SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, _storagePoolDetailsDao);
-
-            SolidFireUtil.SolidFireVag sfVag = SolidFireUtil.getVag(sfConnection, Long.parseLong(vagId));
-
-            long[] volumeIds = SolidFireUtil.getNewVolumeIds(sfVag.getVolumeIds(), sfVolumeId, false);
-
-            SolidFireUtil.modifyVag(sfConnection, sfVag.getId(), sfVag.getInitiators(), volumeIds);
+            LOGGER.warn(msg);
         }
     }
 
     private void deleteSolidFireVolume(long storagePoolId) {
-        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, _storagePoolDetailsDao);
+        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);
 
         long sfVolumeId = getVolumeId(storagePoolId);
 
@@ -684,7 +674,7 @@
     }
 
     private long getVolumeId(long storagePoolId) {
-        StoragePoolDetailVO storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.VOLUME_ID);
+        StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.VOLUME_ID);
 
         String volumeId = storagePoolDetail.getValue();
 
@@ -692,7 +682,7 @@
     }
 
     private long getIopsValue(long storagePoolId, String iopsKey) {
-        StoragePoolDetailVO storagePoolDetail = _storagePoolDetailsDao.findDetail(storagePoolId, iopsKey);
+        StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePoolId, iopsKey);
 
         String iops = storagePoolDetail.getValue();
 
@@ -704,7 +694,7 @@
     }
 
     private HypervisorType getHypervisorType(long hostId) {
-        HostVO host = _hostDao.findById(hostId);
+        HostVO host = hostDao.findById(hostId);
 
         if (host != null) {
             return host.getHypervisorType();
@@ -729,7 +719,7 @@
         Long capacityBytes = strCapacityBytes != null ? Long.parseLong(strCapacityBytes) : null;
         Long capacityIops = strCapacityIops != null ? Long.parseLong(strCapacityIops) : null;
 
-        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), _storagePoolDetailsDao);
+        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);
 
         long size = capacityBytes != null ? capacityBytes : storagePool.getCapacityBytes();
 
@@ -764,16 +754,16 @@
 
         SolidFireUtil.modifyVolume(sfConnection, getVolumeId(storagePool.getId()), size, null, minIops, maxIops, burstIops);
 
-        SolidFireUtil.updateCsDbWithSolidFireIopsInfo(storagePool.getId(), _primaryDataStoreDao, _storagePoolDetailsDao, minIops, maxIops, burstIops);
+        SolidFireUtil.updateCsDbWithSolidFireIopsInfo(storagePool.getId(), primaryDataStoreDao, storagePoolDetailsDao, minIops, maxIops, burstIops);
     }
 
     @Override
     public void enableStoragePool(DataStore dataStore) {
-        _primaryDataStoreHelper.enable(dataStore);
+        primaryDataStoreHelper.enable(dataStore);
     }
 
     @Override
     public void disableStoragePool(DataStore dataStore) {
-        _primaryDataStoreHelper.disable(dataStore);
+        primaryDataStoreHelper.disable(dataStore);
     }
 }
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireHostListener.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireHostListener.java
similarity index 76%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireHostListener.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireHostListener.java
index f2a4b79..4fffb70 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireHostListener.java
+++ b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireHostListener.java
@@ -40,7 +40,6 @@
 import com.cloud.agent.api.ModifyStoragePoolCommand;
 import com.cloud.agent.api.ModifyTargetsCommand;
 import com.cloud.alert.AlertManager;
-import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
@@ -56,31 +55,31 @@
 import com.cloud.vm.dao.VMInstanceDao;
 
 public class SolidFireHostListener implements HypervisorHostListener {
-    private static final Logger s_logger = Logger.getLogger(SolidFireHostListener.class);
+    private static final Logger LOGGER = Logger.getLogger(SolidFireHostListener.class);
 
-    @Inject private AgentManager _agentMgr;
-    @Inject private AlertManager _alertMgr;
-    @Inject private ClusterDao _clusterDao;
-    @Inject private ClusterDetailsDao _clusterDetailsDao;
-    @Inject private DataStoreManager _dataStoreMgr;
-    @Inject private HostDao _hostDao;
-    @Inject private PrimaryDataStoreDao _storagePoolDao;
-    @Inject private StoragePoolDetailsDao _storagePoolDetailsDao;
+    @Inject private AgentManager agentMgr;
+    @Inject private AlertManager alertMgr;
+    @Inject private ClusterDao clusterDao;
+    @Inject private DataStoreManager dataStoreMgr;
+    @Inject private HostDao hostDao;
+    @Inject private PrimaryDataStoreDao storagePoolDao;
+    @Inject private StoragePoolDetailsDao storagePoolDetailsDao;
     @Inject private StoragePoolHostDao storagePoolHostDao;
-    @Inject private VMInstanceDao _vmDao;
-    @Inject private VolumeDao _volumeDao;
+    @Inject private VMInstanceDao vmDao;
+    @Inject private VolumeDao volumeDao;
 
     @Override
     public boolean hostAdded(long hostId) {
-        HostVO host = _hostDao.findById(hostId);
+        HostVO host = hostDao.findById(hostId);
 
         if (host == null) {
-            s_logger.error("Failed to add host by SolidFireHostListener as host was not found with id=" + hostId);
+            LOGGER.error("Failed to add host by SolidFireHostListener as host was not found with id = " + hostId);
+
             return false;
         }
 
-        SolidFireUtil.hostAddedToOrRemovedFromCluster(hostId, host.getClusterId(), true, SolidFireUtil.PROVIDER_NAME,
-                _clusterDao, _clusterDetailsDao, _storagePoolDao, _storagePoolDetailsDao, _hostDao);
+        SolidFireUtil.hostAddedToCluster(hostId, host.getClusterId(), SolidFireUtil.PROVIDER_NAME,
+                clusterDao, hostDao, storagePoolDao, storagePoolDetailsDao);
 
         handleVMware(host, true, ModifyTargetsCommand.TargetTypeToRemove.NEITHER);
 
@@ -89,7 +88,7 @@
 
     @Override
     public boolean hostConnect(long hostId, long storagePoolId) {
-        HostVO host = _hostDao.findById(hostId);
+        HostVO host = hostDao.findById(hostId);
 
         StoragePoolHostVO storagePoolHost = storagePoolHostDao.findByPoolHost(storagePoolId, hostId);
 
@@ -122,25 +121,25 @@
 
     @Override
     public boolean hostAboutToBeRemoved(long hostId) {
-        return true;
-    }
+        HostVO host = hostDao.findById(hostId);
 
-    @Override
-    public boolean hostRemoved(long hostId, long clusterId) {
-        SolidFireUtil.hostAddedToOrRemovedFromCluster(hostId, clusterId, false, SolidFireUtil.PROVIDER_NAME,
-                _clusterDao, _clusterDetailsDao, _storagePoolDao, _storagePoolDetailsDao, _hostDao);
-
-        HostVO host = _hostDao.findById(hostId);
+        SolidFireUtil.hostRemovedFromCluster(hostId, host.getClusterId(), SolidFireUtil.PROVIDER_NAME,
+                clusterDao, hostDao, storagePoolDao, storagePoolDetailsDao);
 
         handleVMware(host, false, ModifyTargetsCommand.TargetTypeToRemove.BOTH);
 
         return true;
     }
 
+    @Override
+    public boolean hostRemoved(long hostId, long clusterId) {
+        return true;
+    }
+
     private void handleXenServer(long clusterId, long hostId, long storagePoolId) {
         List<String> storagePaths = getStoragePaths(clusterId, storagePoolId);
 
-        StoragePool storagePool = (StoragePool)_dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
+        StoragePool storagePool = (StoragePool)dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
 
         for (String storagePath : storagePaths) {
             ModifyStoragePoolCommand cmd = new ModifyStoragePoolCommand(true, storagePool);
@@ -153,7 +152,7 @@
 
     private void handleVMware(HostVO host, boolean add, ModifyTargetsCommand.TargetTypeToRemove targetTypeToRemove) {
         if (host != null && HypervisorType.VMware.equals(host.getHypervisorType())) {
-            List<StoragePoolVO> storagePools = _storagePoolDao.findPoolsByProvider(SolidFireUtil.PROVIDER_NAME);
+            List<StoragePoolVO> storagePools = storagePoolDao.findPoolsByProvider(SolidFireUtil.PROVIDER_NAME);
 
             if (storagePools != null && storagePools.size() > 0) {
                 List<Map<String, String>> targets = new ArrayList<>();
@@ -169,6 +168,7 @@
                 cmd.setTargets(targets);
                 cmd.setAdd(add);
                 cmd.setTargetTypeToRemove(targetTypeToRemove);
+                cmd.setRemoveAsync(true);
 
                 sendModifyTargetsCommand(cmd, host.getId());
             }
@@ -176,7 +176,7 @@
     }
 
     private void handleKVM(long hostId, long storagePoolId) {
-        StoragePool storagePool = (StoragePool)_dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
+        StoragePool storagePool = (StoragePool)dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
 
         ModifyStoragePoolCommand cmd = new ModifyStoragePoolCommand(true, storagePool);
 
@@ -187,19 +187,19 @@
         List<String> storagePaths = new ArrayList<>();
 
         // If you do not pass in null for the second parameter, you only get back applicable ROOT disks.
-        List<VolumeVO> volumes = _volumeDao.findByPoolId(storagePoolId, null);
+        List<VolumeVO> volumes = volumeDao.findByPoolId(storagePoolId, null);
 
         if (volumes != null) {
             for (VolumeVO volume : volumes) {
                 Long instanceId = volume.getInstanceId();
 
                 if (instanceId != null) {
-                    VMInstanceVO vmInstance = _vmDao.findById(instanceId);
+                    VMInstanceVO vmInstance = vmDao.findById(instanceId);
 
                     Long hostIdForVm = vmInstance.getHostId() != null ? vmInstance.getHostId() : vmInstance.getLastHostId();
 
                     if (hostIdForVm != null) {
-                        HostVO hostForVm = _hostDao.findById(hostIdForVm);
+                        HostVO hostForVm = hostDao.findById(hostIdForVm);
 
                         if (hostForVm != null && hostForVm.getClusterId().equals(clusterId)) {
                             storagePaths.add(volume.get_iScsiName());
@@ -215,22 +215,22 @@
     private List<Map<String, String>> getTargets(long clusterId, long storagePoolId) {
         List<Map<String, String>> targets = new ArrayList<>();
 
-        StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolId);
+        StoragePoolVO storagePool = storagePoolDao.findById(storagePoolId);
 
         // If you do not pass in null for the second parameter, you only get back applicable ROOT disks.
-        List<VolumeVO> volumes = _volumeDao.findByPoolId(storagePoolId, null);
+        List<VolumeVO> volumes = volumeDao.findByPoolId(storagePoolId, null);
 
         if (volumes != null) {
             for (VolumeVO volume : volumes) {
                 Long instanceId = volume.getInstanceId();
 
                 if (instanceId != null) {
-                    VMInstanceVO vmInstance = _vmDao.findById(instanceId);
+                    VMInstanceVO vmInstance = vmDao.findById(instanceId);
 
                     Long hostIdForVm = vmInstance.getHostId() != null ? vmInstance.getHostId() : vmInstance.getLastHostId();
 
                     if (hostIdForVm != null) {
-                        HostVO hostForVm = _hostDao.findById(hostIdForVm);
+                        HostVO hostForVm = hostDao.findById(hostIdForVm);
 
                         if (hostForVm.getClusterId().equals(clusterId)) {
                             Map<String, String> details = new HashMap<>();
@@ -250,7 +250,7 @@
     }
 
     private void sendModifyTargetsCommand(ModifyTargetsCommand cmd, long hostId) {
-        Answer answer = _agentMgr.easySend(hostId, cmd);
+        Answer answer = agentMgr.easySend(hostId, cmd);
 
         if (answer == null) {
             throw new CloudRuntimeException("Unable to get an answer to the modify targets command");
@@ -259,16 +259,16 @@
         if (!answer.getResult()) {
             String msg = "Unable to modify targets on the following host: " + hostId;
 
-            HostVO host = _hostDao.findById(hostId);
+            HostVO host = hostDao.findById(hostId);
 
-            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), msg, msg);
+            alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), msg, msg);
 
             throw new CloudRuntimeException(msg);
         }
     }
 
     private void sendModifyStoragePoolCommand(ModifyStoragePoolCommand cmd, StoragePool storagePool, long hostId) {
-        Answer answer = _agentMgr.easySend(hostId, cmd);
+        Answer answer = agentMgr.easySend(hostId, cmd);
 
         if (answer == null) {
             throw new CloudRuntimeException("Unable to get an answer to the modify storage pool command (" + storagePool.getId() + ")");
@@ -277,7 +277,7 @@
         if (!answer.getResult()) {
             String msg = "Unable to attach storage pool " + storagePool.getId() + " to host " + hostId;
 
-            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, storagePool.getDataCenterId(), storagePool.getPodId(), msg, msg);
+            alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, storagePool.getDataCenterId(), storagePool.getPodId(), msg, msg);
 
             throw new CloudRuntimeException("Unable to establish a connection from agent to storage pool " + storagePool.getId() + " due to " + answer.getDetails() +
                 " (" + storagePool.getId() + ")");
@@ -285,6 +285,6 @@
 
         assert (answer instanceof ModifyStoragePoolAnswer) : "ModifyStoragePoolAnswer expected ; Pool = " + storagePool.getId() + " Host = " + hostId;
 
-        s_logger.info("Connection established between storage pool " + storagePool + " and host + " + hostId);
+        LOGGER.info("Connection established between storage pool " + storagePool + " and host + " + hostId);
     }
 }
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFirePrimaryDataStoreProvider.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFirePrimaryDataStoreProvider.java
similarity index 100%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFirePrimaryDataStoreProvider.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFirePrimaryDataStoreProvider.java
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedHostListener.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedHostListener.java
similarity index 89%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedHostListener.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedHostListener.java
index 66aafac..575a302 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedHostListener.java
+++ b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedHostListener.java
@@ -40,7 +40,6 @@
 import com.cloud.agent.api.ModifyStoragePoolCommand;
 import com.cloud.agent.api.ModifyTargetsCommand;
 import com.cloud.alert.AlertManager;
-import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
@@ -57,7 +56,6 @@
     @Inject private AgentManager agentMgr;
     @Inject private AlertManager alertMgr;
     @Inject private ClusterDao clusterDao;
-    @Inject private ClusterDetailsDao clusterDetailsDao;
     @Inject private DataStoreManager dataStoreMgr;
     @Inject private HostDao hostDao;
     @Inject private PrimaryDataStoreDao storagePoolDao;
@@ -69,14 +67,15 @@
         HostVO host = hostDao.findById(hostId);
 
         if (host == null) {
-            LOGGER.error("Failed to add host by SolidFireSharedHostListener as host was not found with id=" + hostId);
+            LOGGER.error("Failed to add host by SolidFireSharedHostListener as host was not found with id = " + hostId);
+
             return false;
         }
 
-        SolidFireUtil.hostAddedToOrRemovedFromCluster(hostId, host.getClusterId(), true, SolidFireUtil.SHARED_PROVIDER_NAME,
-                clusterDao, clusterDetailsDao, storagePoolDao, storagePoolDetailsDao, hostDao);
+        SolidFireUtil.hostAddedToCluster(hostId, host.getClusterId(), SolidFireUtil.SHARED_PROVIDER_NAME,
+                clusterDao, hostDao, storagePoolDao, storagePoolDetailsDao);
 
-        handleVMware(hostId, true, ModifyTargetsCommand.TargetTypeToRemove.NEITHER);
+        handleVMware(host, true, ModifyTargetsCommand.TargetTypeToRemove.NEITHER);
 
         return true;
     }
@@ -123,10 +122,10 @@
     public boolean hostAboutToBeRemoved(long hostId) {
         HostVO host = hostDao.findById(hostId);
 
-        SolidFireUtil.hostAddedToOrRemovedFromCluster(hostId, host.getClusterId(), false, SolidFireUtil.SHARED_PROVIDER_NAME,
-                clusterDao, clusterDetailsDao, storagePoolDao, storagePoolDetailsDao, hostDao);
+        SolidFireUtil.hostRemovedFromCluster(hostId, host.getClusterId(), SolidFireUtil.SHARED_PROVIDER_NAME,
+                clusterDao, hostDao, storagePoolDao, storagePoolDetailsDao);
 
-        handleVMware(hostId, false, ModifyTargetsCommand.TargetTypeToRemove.BOTH);
+        handleVMware(host, false, ModifyTargetsCommand.TargetTypeToRemove.BOTH);
 
         return true;
     }
@@ -136,9 +135,7 @@
         return true;
     }
 
-    private void handleVMware(long hostId, boolean add, ModifyTargetsCommand.TargetTypeToRemove targetTypeToRemove) {
-        HostVO host = hostDao.findById(hostId);
-
+    private void handleVMware(HostVO host, boolean add, ModifyTargetsCommand.TargetTypeToRemove targetTypeToRemove) {
         if (HypervisorType.VMware.equals(host.getHypervisorType())) {
             List<StoragePoolVO> storagePools = storagePoolDao.findPoolsByProvider(SolidFireUtil.SHARED_PROVIDER_NAME);
 
@@ -179,7 +176,7 @@
                     cmd.setTargetTypeToRemove(targetTypeToRemove);
                     cmd.setRemoveAsync(true);
 
-                    sendModifyTargetsCommand(cmd, hostId);
+                    sendModifyTargetsCommand(cmd, host.getId());
                 }
             }
         }
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedPrimaryDataStoreProvider.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedPrimaryDataStoreProvider.java
similarity index 100%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedPrimaryDataStoreProvider.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/provider/SolidFireSharedPrimaryDataStoreProvider.java
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
similarity index 63%
rename from plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
rename to plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
index 81adf4b..9f7b205 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
+++ b/plugins/storage/volume/solidfire/src/main/java/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
@@ -17,13 +17,16 @@
 package org.apache.cloudstack.storage.datastore.util;
 
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Random;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.UUID;
 
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 
@@ -32,8 +35,6 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 
-import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterDetailsVO;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.host.Host;
@@ -44,11 +45,14 @@
 import com.cloud.utils.db.GlobalLock;
 import com.cloud.utils.exception.CloudRuntimeException;
 
+import com.google.common.base.Preconditions;
 import com.google.common.primitives.Longs;
 
 import com.solidfire.client.ElementFactory;
 import com.solidfire.element.api.Account;
 import com.solidfire.element.api.AddAccountRequest;
+import com.solidfire.element.api.AddInitiatorsToVolumeAccessGroupRequest;
+import com.solidfire.element.api.AddVolumesToVolumeAccessGroupRequest;
 import com.solidfire.element.api.CloneVolumeRequest;
 import com.solidfire.element.api.CloneVolumeResult;
 import com.solidfire.element.api.CreateSnapshotRequest;
@@ -62,9 +66,10 @@
 import com.solidfire.element.api.ListSnapshotsRequest;
 import com.solidfire.element.api.ListVolumeAccessGroupsRequest;
 import com.solidfire.element.api.ListVolumesRequest;
-import com.solidfire.element.api.ModifyVolumeAccessGroupRequest;
 import com.solidfire.element.api.ModifyVolumeRequest;
 import com.solidfire.element.api.QoS;
+import com.solidfire.element.api.RemoveInitiatorsFromVolumeAccessGroupRequest;
+import com.solidfire.element.api.RemoveVolumesFromVolumeAccessGroupRequest;
 import com.solidfire.element.api.RollbackToSnapshotRequest;
 import com.solidfire.element.api.Snapshot;
 import com.solidfire.element.api.SolidFireElement;
@@ -75,12 +80,13 @@
 import static org.apache.commons.lang.ArrayUtils.toPrimitive;
 
 public class SolidFireUtil {
-    private static final Logger s_logger = Logger.getLogger(SolidFireUtil.class);
+    private static final Logger LOGGER = Logger.getLogger(SolidFireUtil.class);
 
     public static final String PROVIDER_NAME = "SolidFire";
     public static final String SHARED_PROVIDER_NAME = "SolidFireShared";
 
-    public static final int s_lockTimeInSeconds = 300;
+    private static final Random RANDOM = new Random(System.nanoTime());
+    public static final int LOCK_TIME_IN_SECONDS = 300;
 
     public static final String LOG_PREFIX = "SolidFire: ";
 
@@ -127,6 +133,8 @@
     public static final String DATASTORE_NAME = "datastoreName";
     public static final String IQN = "iqn";
 
+    private static final String SF_CS_ACCOUNT_PREFIX = "CloudStack_";
+
     public static final long MIN_VOLUME_SIZE = 1000000000;
 
     public static final long MIN_IOPS_PER_VOLUME = 100;
@@ -136,6 +144,9 @@
     private static final int DEFAULT_MANAGEMENT_PORT = 443;
     private static final int DEFAULT_STORAGE_PORT = 3260;
 
+    private static final int MAX_NUM_VAGS_PER_VOLUME = 4;
+    private static final int MAX_NUM_INITIATORS_PER_VAG = 64;
+
     public static class SolidFireConnection {
         private final String _managementVip;
         private final int _managementPort;
@@ -300,7 +311,7 @@
     }
 
     public static String getSolidFireAccountName(String csAccountUuid, long csAccountId) {
-        return "CloudStack_" + csAccountUuid + "_" + csAccountId;
+        return SF_CS_ACCOUNT_PREFIX + csAccountUuid + "_" + csAccountId;
     }
 
     public static void updateCsDbWithSolidFireIopsInfo(long storagePoolId, PrimaryDataStoreDao primaryDataStoreDao,
@@ -344,17 +355,72 @@
         }
     }
 
-    public static void hostAddedToOrRemovedFromCluster(long hostId, long clusterId, boolean added, String storageProvider,
-            ClusterDao clusterDao, ClusterDetailsDao clusterDetailsDao, PrimaryDataStoreDao storagePoolDao,
-            StoragePoolDetailsDao storagePoolDetailsDao, HostDao hostDao) {
+    private static boolean isCloudStackOnlyVag(SolidFireConnection sfConnection, SolidFireVag sfVag) {
+        long[] volumeIds = sfVag.getVolumeIds();
+
+        if (ArrayUtils.isEmpty(volumeIds)) {
+            // We count this situation as being "CloudStack only" because the reason we call this method is to determine
+            // if we can remove a host from a VAG (we only want to allow the host to be removed from the VAG if there are
+            // no non-CloudStack volumes in it).
+            return true;
+        }
+
+        List<Long> knownSfAccountsForCs = new ArrayList<>();
+
+        for (long volumeId : volumeIds) {
+            SolidFireVolume sfVolume = getVolume(sfConnection, volumeId);
+            long sfAccountId = sfVolume.getAccountId();
+
+            if (!knownSfAccountsForCs.contains(sfAccountId)) {
+                SolidFireAccount sfAccount = getAccountById(sfConnection, sfAccountId);
+
+                if (sfAccount.getName().startsWith(SF_CS_ACCOUNT_PREFIX)) {
+                    knownSfAccountsForCs.add(sfAccountId);
+                }
+                else {
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    }
+
+    private static boolean isStorageApplicableToZoneOrCluster(StoragePoolVO storagePoolVO, long clusterId, ClusterDao clusterDao) {
+        if (storagePoolVO.getClusterId() != null) {
+            if (storagePoolVO.getClusterId() == clusterId) {
+                return true;
+            }
+        }
+        else {
+            List<ClusterVO> clustersInZone = clusterDao.listByZoneId(storagePoolVO.getDataCenterId());
+
+            if (clustersInZone != null) {
+                for (ClusterVO clusterInZone : clustersInZone) {
+                    if (clusterInZone.getId() == clusterId) {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public static void hostRemovedFromCluster(long hostId, long clusterId, String storageProvider, ClusterDao clusterDao, HostDao hostDao,
+                                              PrimaryDataStoreDao storagePoolDao, StoragePoolDetailsDao storagePoolDetailsDao) {
+        HostVO hostVO = hostDao.findByIdIncludingRemoved(hostId);
+
+        Preconditions.checkArgument(hostVO != null, "Could not locate host for ID: " + hostId);
+
         ClusterVO cluster = clusterDao.findById(clusterId);
 
         GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());
 
-        if (!lock.lock(s_lockTimeInSeconds)) {
+        if (!lock.lock(LOCK_TIME_IN_SECONDS)) {
             String errMsg = "Couldn't lock the DB on the following string: " + cluster.getUuid();
 
-            s_logger.debug(errMsg);
+            LOGGER.warn(errMsg);
 
             throw new CloudRuntimeException(errMsg);
         }
@@ -366,26 +432,20 @@
                 List<SolidFireUtil.SolidFireConnection> sfConnections = new ArrayList<>();
 
                 for (StoragePoolVO storagePool : storagePools) {
-                    ClusterDetailsVO clusterDetail = clusterDetailsDao.findDetail(clusterId, SolidFireUtil.getVagKey(storagePool.getId()));
+                    if (!isStorageApplicableToZoneOrCluster(storagePool, clusterId, clusterDao)) {
+                        continue;
+                    }
 
-                    String vagId = clusterDetail != null ? clusterDetail.getValue() : null;
+                    SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);
 
-                    if (vagId != null) {
-                        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);
+                    if (!sfConnections.contains(sfConnection)) {
+                        sfConnections.add(sfConnection);
 
-                        if (!sfConnections.contains(sfConnection)) {
-                            sfConnections.add(sfConnection);
+                        List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
+                        SolidFireVag sfVag = getVolumeAccessGroup(hostVO.getStorageUrl(), sfVags);
 
-                            SolidFireUtil.SolidFireVag sfVag = SolidFireUtil.getVag(sfConnection, Long.parseLong(vagId));
-
-                            List<HostVO> hostsToAddOrRemove = new ArrayList<>();
-                            HostVO hostToAddOrRemove = hostDao.findByIdIncludingRemoved(hostId);
-
-                            hostsToAddOrRemove.add(hostToAddOrRemove);
-
-                            String[] hostIqns = SolidFireUtil.getNewHostIqns(sfVag.getInitiators(), SolidFireUtil.getIqnsFromHosts(hostsToAddOrRemove), added);
-
-                            SolidFireUtil.modifyVag(sfConnection, sfVag.getId(), hostIqns, sfVag.getVolumeIds());
+                        if (sfVag != null && isCloudStackOnlyVag(sfConnection, sfVag)) {
+                            removeInitiatorsFromSolidFireVag(sfConnection, sfVag.getId(), new String[] { hostVO.getStorageUrl() });
                         }
                     }
                 }
@@ -397,50 +457,337 @@
         }
     }
 
-    public static long placeVolumeInVolumeAccessGroup(SolidFireConnection sfConnection, long sfVolumeId, long storagePoolId,
-                                                      String vagUuid, List<HostVO> hosts, ClusterDetailsDao clusterDetailsDao) {
-        if (hosts == null || hosts.isEmpty()) {
-            throw new CloudRuntimeException("There must be at least one host in the cluster.");
-        }
+    public static void hostAddedToCluster(long hostId, long clusterId, String storageProvider, ClusterDao clusterDao, HostDao hostDao,
+                                          PrimaryDataStoreDao storagePoolDao, StoragePoolDetailsDao storagePoolDetailsDao) {
+        HostVO hostVO = hostDao.findById(hostId);
 
-        long lVagId;
+        Preconditions.checkArgument(hostVO != null, "Could not locate host for ID: " + hostId);
+
+        ClusterVO cluster = clusterDao.findById(clusterId);
+
+        GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());
+
+        if (!lock.lock(LOCK_TIME_IN_SECONDS)) {
+            String errMsg = "Couldn't lock the DB on the following string: " + cluster.getUuid();
+
+            LOGGER.warn(errMsg);
+
+            throw new CloudRuntimeException(errMsg);
+        }
 
         try {
-            lVagId = SolidFireUtil.createVag(sfConnection, "CloudStack-" + vagUuid,
-                SolidFireUtil.getIqnsFromHosts(hosts), new long[] { sfVolumeId });
-        }
-        catch (Exception ex) {
-            String iqnInVagAlready1 = "Exceeded maximum number of Volume Access Groups per initiator";
-            String iqnInVagAlready2 = "Exceeded maximum number of VolumeAccessGroups per Initiator";
+            List<StoragePoolVO> storagePools = storagePoolDao.findPoolsByProvider(storageProvider);
 
-            if (!ex.getMessage().contains(iqnInVagAlready1) && !ex.getMessage().contains(iqnInVagAlready2)) {
-                throw new CloudRuntimeException(ex.getMessage());
+            if (storagePools != null && storagePools.size() > 0) {
+                List<SolidFireUtil.SolidFireConnection> sfConnections = new ArrayList<>();
+
+                for (StoragePoolVO storagePool : storagePools) {
+                    if (!isStorageApplicableToZoneOrCluster(storagePool, clusterId, clusterDao)) {
+                        continue;
+                    }
+
+                    SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);
+
+                    if (!sfConnections.contains(sfConnection)) {
+                        sfConnections.add(sfConnection);
+
+                        List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
+                        SolidFireVag sfVag = getVolumeAccessGroup(hostVO.getStorageUrl(), sfVags);
+
+                        if (sfVag != null) {
+                            placeVolumeIdsInVag(sfConnection, sfVags, sfVag, hostVO, hostDao);
+                        } else {
+                            handleVagForHost(sfConnection, sfVags, hostVO, hostDao);
+                        }
+                    }
+                }
             }
-
-            // getCompatibleVag throws an exception if an existing VAG can't be located
-            SolidFireUtil.SolidFireVag sfVag = getCompatibleVag(sfConnection, hosts);
-
-            lVagId = sfVag.getId();
-
-            long[] volumeIds = getNewVolumeIds(sfVag.getVolumeIds(), sfVolumeId, true);
-
-            SolidFireUtil.modifyVag(sfConnection, lVagId, sfVag.getInitiators(), volumeIds);
         }
-
-        ClusterDetailsVO clusterDetail = new ClusterDetailsVO(hosts.get(0).getClusterId(), getVagKey(storagePoolId), String.valueOf(lVagId));
-
-        clusterDetailsDao.persist(clusterDetail);
-
-        return lVagId;
+        finally {
+            lock.unlock();
+            lock.releaseRef();
+        }
     }
 
-    public static boolean hostsSupport_iScsi(List<HostVO> hosts) {
+    // Put the host in an existing VAG or create a new one (only create a new one if all existing VAGs are full (i.e. 64 hosts max per VAG) and if
+    // creating a new VAG won't exceed 4 VAGs for the computer cluster).
+    // If none of the hosts in the cluster are in a VAG, then leave this host out of a VAG.
+    // Place applicable volume IDs in VAG, if need be (account of volume starts with SF_CS_ACCOUNT_PREFIX).
+    private static void handleVagForHost(SolidFireUtil.SolidFireConnection sfConnection, List<SolidFireUtil.SolidFireVag> sfVags, Host host, HostDao hostDao) {
+        List<HostVO> hostVOs = hostDao.findByClusterId(host.getClusterId());
+
+        if (hostVOs != null) {
+            int numVags = 0;
+
+            Collections.shuffle(hostVOs, RANDOM);
+
+            for (HostVO hostVO : hostVOs) {
+                if (hostVO.getId() != host.getId()) {
+                    SolidFireVag sfVag = getVolumeAccessGroup(hostVO.getStorageUrl(), sfVags);
+
+                    if (sfVag != null) {
+                        numVags++;
+
+                        // A volume should be visible to all hosts that are in the same compute cluster. That being the case, you
+                        // can use MAX_NUM_VAGS_PER_VOLUME here. This is to limit the number of VAGs being used in a compute cluster
+                        // to MAX_NUM_VAGS_PER_VOLUME.
+                        if (numVags > MAX_NUM_VAGS_PER_VOLUME) {
+                            throw new CloudRuntimeException("Can support at most four volume access groups per compute cluster (>)");
+                        }
+
+                        if (sfVag.getInitiators().length < MAX_NUM_INITIATORS_PER_VAG) {
+                            if (!hostSupports_iScsi(host)) {
+                                String errMsg = "Host with ID " + host.getId() + " does not support iSCSI.";
+
+                                LOGGER.warn(errMsg);
+
+                                throw new CloudRuntimeException(errMsg);
+                            }
+
+                            addInitiatorsToSolidFireVag(sfConnection, sfVag.getId(), new String[] { host.getStorageUrl() });
+
+                            return;
+                        }
+                    }
+                }
+            }
+
+            if (numVags == MAX_NUM_VAGS_PER_VOLUME) {
+                throw new CloudRuntimeException("Can support at most four volume access groups per compute cluster (==)");
+            }
+
+            if (numVags > 0) {
+                if (!hostSupports_iScsi(host)) {
+                    String errMsg = "Host with ID " + host.getId() + " does not support iSCSI.";
+
+                    LOGGER.warn(errMsg);
+
+                    throw new CloudRuntimeException(errMsg);
+                }
+
+                SolidFireUtil.createVag(sfConnection, "CloudStack-" + UUID.randomUUID().toString(),
+                        new String[]{host.getStorageUrl()}, getVolumeIds(sfConnection, sfVags, host, hostDao));
+            }
+        }
+    }
+
+    /**
+     * Make use of the volume access group (VAG) of a random host in the cluster. With this VAG, collect all of its volume IDs that are for
+     * volumes that are in SolidFire accounts that are for CloudStack.
+     */
+    private static long[] getVolumeIds(SolidFireUtil.SolidFireConnection sfConnection, List<SolidFireUtil.SolidFireVag> sfVags,
+                                       Host host, HostDao hostDao) {
+        List<Long> volumeIdsToReturn = new ArrayList<>();
+
+        SolidFireVag sfVagForRandomHostInCluster = getVagForRandomHostInCluster(sfVags, host, hostDao);
+
+        if (sfVagForRandomHostInCluster != null) {
+            long[] volumeIds = sfVagForRandomHostInCluster.getVolumeIds();
+
+            if (volumeIds != null) {
+                List<Long> knownSfAccountsForCs = new ArrayList<>();
+                List<Long> knownSfAccountsNotForCs = new ArrayList<>();
+
+                for (long volumeId : volumeIds) {
+                    SolidFireVolume sfVolume = getVolume(sfConnection, volumeId);
+                    long sfAccountId = sfVolume.getAccountId();
+
+                    if (knownSfAccountsForCs.contains(sfAccountId)) {
+                        volumeIdsToReturn.add(volumeId);
+                    }
+                    else if (!knownSfAccountsNotForCs.contains(sfAccountId)) {
+                        SolidFireAccount sfAccount = getAccountById(sfConnection, sfAccountId);
+
+                        if (sfAccount.getName().startsWith(SF_CS_ACCOUNT_PREFIX)) {
+                            knownSfAccountsForCs.add(sfAccountId);
+
+                            volumeIdsToReturn.add(volumeId);
+                        }
+                        else {
+                            knownSfAccountsNotForCs.add(sfAccountId);
+                        }
+                    }
+                }
+            }
+        }
+
+        return volumeIdsToReturn.stream().mapToLong(l -> l).toArray();
+    }
+
+    private static void placeVolumeIdsInVag(SolidFireUtil.SolidFireConnection sfConnection, List<SolidFireUtil.SolidFireVag> sfVags,
+                                            SolidFireVag sfVag, Host host, HostDao hostDao) {
+        SolidFireVag sfVagForRandomHostInCluster = getVagForRandomHostInCluster(sfVags, host, hostDao);
+
+        if (sfVagForRandomHostInCluster != null) {
+            long[] volumeIds = sfVagForRandomHostInCluster.getVolumeIds();
+
+            if (volumeIds != null) {
+                List<Long> knownSfAccountsForCs = new ArrayList<>();
+                List<Long> knownSfAccountsNotForCs = new ArrayList<>();
+
+                List<Long> newVolumeIds = new ArrayList<>();
+
+                for (long volumeId : volumeIds) {
+                    SolidFireVolume sfVolume = getVolume(sfConnection, volumeId);
+                    long sfAccountId = sfVolume.getAccountId();
+
+                    if (knownSfAccountsForCs.contains(sfAccountId)) {
+                        addVolumeIdToSolidFireVag(volumeId, sfVag, newVolumeIds);
+                    }
+                    else if (!knownSfAccountsNotForCs.contains(sfAccountId)) {
+                        SolidFireAccount sfAccount = getAccountById(sfConnection, sfAccountId);
+
+                        if (sfAccount.getName().startsWith(SF_CS_ACCOUNT_PREFIX)) {
+                            knownSfAccountsForCs.add(sfAccountId);
+
+                            addVolumeIdToSolidFireVag(volumeId, sfVag, newVolumeIds);
+                        }
+                        else {
+                            knownSfAccountsNotForCs.add(sfAccountId);
+                        }
+                    }
+                }
+
+                if (newVolumeIds.size() > 0) {
+                    addVolumeIdsToSolidFireVag(sfConnection, sfVag.getId(), newVolumeIds.toArray(new Long[0]));
+                }
+            }
+        }
+    }
+
+    private static void addVolumeIdToSolidFireVag(long volumeId, SolidFireVag sfVag, List<Long> newVolumeIds) {
+        List<Long> existingVolumeIds = Longs.asList(sfVag.getVolumeIds());
+
+        if (!existingVolumeIds.contains(volumeId) && !newVolumeIds.contains(volumeId)) {
+            newVolumeIds.add(volumeId);
+        }
+    }
+
+    private static SolidFireVag getVagForRandomHostInCluster(List<SolidFireUtil.SolidFireVag> sfVags, Host host, HostDao hostDao) {
+        List<HostVO> hostVOs = hostDao.findByClusterId(host.getClusterId());
+
+        if (hostVOs != null) {
+            Collections.shuffle(hostVOs, RANDOM);
+
+            for (HostVO hostVO : hostVOs) {
+                if (hostVO.getId() != host.getId() && hostSupports_iScsi(hostVO)) {
+                    SolidFireVag sfVag = getVolumeAccessGroup(hostVO.getStorageUrl(), sfVags);
+
+                    if (sfVag != null) {
+                        return sfVag;
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public static void placeVolumeInVolumeAccessGroups(SolidFireConnection sfConnection, long sfVolumeId, List<HostVO> hosts) {
+        if (!SolidFireUtil.hostsSupport_iScsi(hosts)) {
+            String errMsg = "Not all hosts in the compute cluster support iSCSI.";
+
+            LOGGER.warn(errMsg);
+
+            throw new CloudRuntimeException(errMsg);
+        }
+
+        List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
+
+        Map<SolidFireUtil.SolidFireVag, List<String>> sfVagToIqnsMap = new HashMap<>();
+
+        for (HostVO hostVO : hosts) {
+            String iqn = hostVO.getStorageUrl();
+
+            SolidFireUtil.SolidFireVag sfVag = getVolumeAccessGroup(iqn, sfVags);
+
+            List<String> iqnsInVag = sfVagToIqnsMap.computeIfAbsent(sfVag, k -> new ArrayList<>());
+
+            iqnsInVag.add(iqn);
+        }
+
+        if (sfVagToIqnsMap.size() > MAX_NUM_VAGS_PER_VOLUME) {
+            throw new CloudRuntimeException("A SolidFire volume can be in at most four volume access groups simultaneously.");
+        }
+
+        for (SolidFireUtil.SolidFireVag sfVag : sfVagToIqnsMap.keySet()) {
+            if (sfVag != null) {
+                if (!SolidFireUtil.isVolumeIdInSfVag(sfVolumeId, sfVag)) {
+                    SolidFireUtil.addVolumeIdsToSolidFireVag(sfConnection, sfVag.getId(), new Long[] { sfVolumeId });
+                }
+            }
+            else {
+                List<String> iqnsNotInVag = sfVagToIqnsMap.get(null);
+
+                SolidFireUtil.createVag(sfConnection, "CloudStack-" + UUID.randomUUID().toString(),
+                        iqnsNotInVag.toArray(new String[0]), new long[] { sfVolumeId });
+            }
+        }
+    }
+
+    public static SolidFireUtil.SolidFireVag getVolumeAccessGroup(String hostIqn, List<SolidFireUtil.SolidFireVag> sfVags) {
+        if (hostIqn == null) {
+            return null;
+        }
+
+        hostIqn = hostIqn.toLowerCase();
+
+        if (sfVags != null) {
+            for (SolidFireUtil.SolidFireVag sfVag : sfVags) {
+                List<String> lstInitiators = getStringArrayAsLowerCaseStringList(sfVag.getInitiators());
+
+                // lstInitiators should not be returned from getStringArrayAsLowerCaseStringList as null
+                if (lstInitiators.contains(hostIqn)) {
+                    return sfVag;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public static boolean sfVagContains(SolidFireUtil.SolidFireVag sfVag, long sfVolumeId, long clusterId, HostDao hostDao) {
+        if (isVolumeIdInSfVag(sfVolumeId, sfVag)) {
+            String[] iqns = sfVag.getInitiators();
+            List<HostVO> hosts = hostDao.findByClusterId(clusterId);
+
+            for (String iqn : iqns) {
+                for (HostVO host : hosts) {
+                    String hostIqn = host.getStorageUrl();
+
+                    if (iqn.equalsIgnoreCase(hostIqn)) {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    private static boolean isVolumeIdInSfVag(long sfVolumeIdToCheck, SolidFireUtil.SolidFireVag sfVag) {
+        long[] sfVolumeIds = sfVag.getVolumeIds();
+
+        for (long sfVolumeId : sfVolumeIds) {
+            if (sfVolumeId == sfVolumeIdToCheck) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private static boolean hostSupports_iScsi(Host host) {
+        return host != null && host.getStorageUrl() != null && host.getStorageUrl().trim().length() > 0 && host.getStorageUrl().startsWith("iqn");
+    }
+
+    private static boolean hostsSupport_iScsi(List<HostVO> hosts) {
         if (hosts == null || hosts.size() == 0) {
             return false;
         }
 
         for (Host host : hosts) {
-            if (host == null || host.getStorageUrl() == null || host.getStorageUrl().trim().length() == 0 || !host.getStorageUrl().startsWith("iqn")) {
+            if (!hostSupports_iScsi(host)) {
                 return false;
             }
         }
@@ -448,14 +795,6 @@
         return true;
     }
 
-    public static long[] getNewVolumeIds(long[] volumeIds, long volumeIdToAddOrRemove, boolean add) {
-        if (add) {
-            return getNewVolumeIdsAdd(volumeIds, volumeIdToAddOrRemove);
-        }
-
-        return getNewVolumeIdsRemove(volumeIds, volumeIdToAddOrRemove);
-    }
-
     public static String getVagKey(long storagePoolId) {
         return "sfVolumeAccessGroup_" + storagePoolId;
     }
@@ -518,6 +857,15 @@
         getSolidFireElement(sfConnection).modifyVolume(request);
     }
 
+    public static void modifyVolumeQoS(SolidFireConnection sfConnection, long volumeId, long minIops, long maxIops, long burstIops) {
+        ModifyVolumeRequest request = ModifyVolumeRequest.builder()
+                .volumeID(volumeId)
+                .optionalQos(new QoS(Optional.of(minIops), Optional.of(maxIops), Optional.of(burstIops), Optional.EMPTY_LONG))
+                .build();
+
+        getSolidFireElement(sfConnection).modifyVolume(request);
+    }
+
     public static SolidFireVolume getVolume(SolidFireConnection sfConnection, long volumeId) {
         ListVolumesRequest request = ListVolumesRequest.builder()
                 .optionalStartVolumeID(volumeId)
@@ -851,32 +1199,43 @@
         return getSolidFireElement(sfConnection).createVolumeAccessGroup(request).getVolumeAccessGroupID();
     }
 
-    public static void modifyVag(SolidFireConnection sfConnection, long vagId, String[] iqns, long[] volumeIds) {
-        ModifyVolumeAccessGroupRequest request = ModifyVolumeAccessGroupRequest.builder()
+    private static void addInitiatorsToSolidFireVag(SolidFireConnection sfConnection, long vagId, String[] initiators) {
+        AddInitiatorsToVolumeAccessGroupRequest request = AddInitiatorsToVolumeAccessGroupRequest.builder()
                 .volumeAccessGroupID(vagId)
-                .optionalInitiators(iqns)
-                .optionalVolumes(Longs.asList(volumeIds).toArray(new Long[volumeIds.length]))
+                .initiators(initiators)
                 .build();
 
-        getSolidFireElement(sfConnection).modifyVolumeAccessGroup(request);
+        getSolidFireElement(sfConnection).addInitiatorsToVolumeAccessGroup(request);
     }
 
-    public static SolidFireVag getVag(SolidFireConnection sfConnection, long vagId)
-    {
-        ListVolumeAccessGroupsRequest request = ListVolumeAccessGroupsRequest.builder()
-                .optionalStartVolumeAccessGroupID(vagId)
-                .optionalLimit(1L)
+    private static void removeInitiatorsFromSolidFireVag(SolidFireConnection sfConnection, long vagId, String[] initiators) {
+        RemoveInitiatorsFromVolumeAccessGroupRequest request = RemoveInitiatorsFromVolumeAccessGroupRequest.builder()
+                .volumeAccessGroupID(vagId)
+                .initiators(initiators)
                 .build();
 
-        VolumeAccessGroup vag = getSolidFireElement(sfConnection).listVolumeAccessGroups(request).getVolumeAccessGroups()[0];
-
-        String[] vagIqns = vag.getInitiators();
-        long[] vagVolumeIds = toPrimitive(vag.getVolumes());
-
-        return new SolidFireVag(vagId, vagIqns, vagVolumeIds);
+        getSolidFireElement(sfConnection).removeInitiatorsFromVolumeAccessGroup(request);
     }
 
-    private static List<SolidFireVag> getAllVags(SolidFireConnection sfConnection)
+    private static void addVolumeIdsToSolidFireVag(SolidFireConnection sfConnection, long vagId, Long[] volumeIds) {
+        AddVolumesToVolumeAccessGroupRequest request = AddVolumesToVolumeAccessGroupRequest.builder()
+                .volumeAccessGroupID(vagId)
+                .volumes(volumeIds)
+                .build();
+
+        getSolidFireElement(sfConnection).addVolumesToVolumeAccessGroup(request);
+    }
+
+    public static void removeVolumeIdsFromSolidFireVag(SolidFireConnection sfConnection, long vagId, Long[] volumeIds) {
+        RemoveVolumesFromVolumeAccessGroupRequest request = RemoveVolumesFromVolumeAccessGroupRequest.builder()
+                .volumeAccessGroupID(vagId)
+                .volumes(volumeIds)
+                .build();
+
+        getSolidFireElement(sfConnection).removeVolumesFromVolumeAccessGroup(request);
+    }
+
+    public static List<SolidFireVag> getAllVags(SolidFireConnection sfConnection)
     {
         ListVolumeAccessGroupsRequest request = ListVolumeAccessGroupsRequest.builder().build();
 
@@ -980,113 +1339,6 @@
         return portNumber;
     }
 
-    private static String[] getNewHostIqns(String[] iqns, String[] iqnsToAddOrRemove, boolean add) {
-        if (add) {
-            return getNewHostIqnsAdd(iqns, iqnsToAddOrRemove);
-        }
-
-        return getNewHostIqnsRemove(iqns, iqnsToAddOrRemove);
-    }
-
-    private static String[] getNewHostIqnsAdd(String[] iqns, String[] iqnsToAdd) {
-        List<String> lstIqns = iqns != null ? new ArrayList<>(Arrays.asList(iqns)) : new ArrayList<String>();
-
-        if (iqnsToAdd != null) {
-            for (String iqnToAdd : iqnsToAdd) {
-                if (!lstIqns.contains(iqnToAdd)) {
-                    lstIqns.add(iqnToAdd);
-                }
-            }
-        }
-
-        return lstIqns.toArray(new String[0]);
-    }
-
-    private static String[] getNewHostIqnsRemove(String[] iqns, String[] iqnsToRemove) {
-        List<String> lstIqns = iqns != null ? new ArrayList<>(Arrays.asList(iqns)) : new ArrayList<String>();
-
-        if (iqnsToRemove != null) {
-            for (String iqnToRemove : iqnsToRemove) {
-                lstIqns.remove(iqnToRemove);
-            }
-        }
-
-        return lstIqns.toArray(new String[0]);
-    }
-
-    private static long[] getNewVolumeIdsAdd(long[] volumeIds, long volumeIdToAdd) {
-        List<Long> lstVolumeIds = new ArrayList<>();
-
-        if (volumeIds != null) {
-            for (long volumeId : volumeIds) {
-                lstVolumeIds.add(volumeId);
-            }
-        }
-
-        if (lstVolumeIds.contains(volumeIdToAdd)) {
-            return volumeIds;
-        }
-
-        lstVolumeIds.add(volumeIdToAdd);
-
-        return toPrimitive(lstVolumeIds.toArray(new Long[lstVolumeIds.size()]));
-    }
-
-    private static long[] getNewVolumeIdsRemove(long[] volumeIds, long volumeIdToRemove) {
-        List<Long> lstVolumeIds = new ArrayList<>();
-
-        if (volumeIds != null) {
-            for (long volumeId : volumeIds) {
-                lstVolumeIds.add(volumeId);
-            }
-        }
-
-        lstVolumeIds.remove(volumeIdToRemove);
-
-        return toPrimitive(lstVolumeIds.toArray(new Long[lstVolumeIds.size()]));
-    }
-
-    private static String[] getIqnsFromHosts(List<? extends Host> hosts) {
-        if (hosts == null || hosts.size() == 0) {
-            throw new CloudRuntimeException("There do not appear to be any hosts in this cluster.");
-        }
-
-        List<String> lstIqns = new ArrayList<>();
-
-        for (Host host : hosts) {
-            lstIqns.add(host.getStorageUrl());
-        }
-
-        return lstIqns.toArray(new String[0]);
-    }
-
-    // this method takes in a collection of hosts and tries to find an existing VAG that has all of them in it
-    // if successful, the VAG is returned; else, a CloudRuntimeException is thrown and this issue should be corrected by an admin
-    private static SolidFireUtil.SolidFireVag getCompatibleVag(SolidFireConnection sfConnection, List<HostVO> hosts) {
-        List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);
-
-        if (sfVags != null) {
-            List<String> hostIqns = new ArrayList<>();
-
-            // where the method we're in is called, hosts should not be null
-            for (HostVO host : hosts) {
-                // where the method we're in is called, host.getStorageUrl() should not be null (it actually should start with "iqn")
-                hostIqns.add(host.getStorageUrl().toLowerCase());
-            }
-
-            for (SolidFireUtil.SolidFireVag sfVag : sfVags) {
-                List<String> lstInitiators = getStringArrayAsLowerCaseStringList(sfVag.getInitiators());
-
-                // lstInitiators should not be returned from getStringArrayAsLowerCaseStringList as null
-                if (lstInitiators.containsAll(hostIqns)) {
-                    return sfVag;
-                }
-            }
-        }
-
-        throw new CloudRuntimeException("Unable to locate the appropriate SolidFire Volume Access Group");
-    }
-
     private static List<String> getStringArrayAsLowerCaseStringList(String[] aString) {
         List<String> lstLowerCaseString = new ArrayList<>();
 
@@ -1106,10 +1358,6 @@
             return null;
         }
 
-        Map<String, Object> convertedMap = new HashMap<>();
-
-        convertedMap.putAll(map);
-
-        return convertedMap;
+        return new HashMap<>(map);
     }
 }
diff --git a/plugins/storage/volume/solidfire/resources/META-INF/cloudstack/storage-volume-solidfire/module.properties b/plugins/storage/volume/solidfire/src/main/resources/META-INF/cloudstack/storage-volume-solidfire/module.properties
similarity index 100%
rename from plugins/storage/volume/solidfire/resources/META-INF/cloudstack/storage-volume-solidfire/module.properties
rename to plugins/storage/volume/solidfire/src/main/resources/META-INF/cloudstack/storage-volume-solidfire/module.properties
diff --git a/plugins/storage/volume/solidfire/resources/META-INF/cloudstack/storage-volume-solidfire/spring-storage-volume-solidfire-context.xml b/plugins/storage/volume/solidfire/src/main/resources/META-INF/cloudstack/storage-volume-solidfire/spring-storage-volume-solidfire-context.xml
similarity index 100%
rename from plugins/storage/volume/solidfire/resources/META-INF/cloudstack/storage-volume-solidfire/spring-storage-volume-solidfire-context.xml
rename to plugins/storage/volume/solidfire/src/main/resources/META-INF/cloudstack/storage-volume-solidfire/spring-storage-volume-solidfire-context.xml
diff --git a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/AopTestAdvice.java b/plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/AopTestAdvice.java
similarity index 100%
rename from plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/AopTestAdvice.java
rename to plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/AopTestAdvice.java
diff --git a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java b/plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
similarity index 100%
rename from plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
rename to plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
diff --git a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/TestConfiguration.java b/plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/TestConfiguration.java
similarity index 100%
rename from plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/TestConfiguration.java
rename to plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/TestConfiguration.java
diff --git a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java b/plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java
similarity index 100%
rename from plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java
rename to plugins/storage/volume/solidfire/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java
diff --git a/plugins/storage/volume/solidfire/test/resource/storageContext.xml b/plugins/storage/volume/solidfire/src/test/resource/storageContext.xml
similarity index 100%
rename from plugins/storage/volume/solidfire/test/resource/storageContext.xml
rename to plugins/storage/volume/solidfire/src/test/resource/storageContext.xml
diff --git a/plugins/user-authenticators/ldap/pom.xml b/plugins/user-authenticators/ldap/pom.xml
index a4e23ab..43151b6 100644
--- a/plugins/user-authenticators/ldap/pom.xml
+++ b/plugins/user-authenticators/ldap/pom.xml
@@ -1,112 +1,118 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-  license agreements. See the NOTICE file distributed with this work for additional
-  information regarding copyright ownership. The ASF licenses this file to you under
-  the Apache License, Version 2.0 (the "License"); you may not use this file except
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-  Unless required by applicable law or agreed to in writing, software distributed under
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-  OF ANY KIND, either express or implied. See the License for the specific language
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-user-authenticator-ldap</artifactId>
-  <name>Apache CloudStack Plugin - User Authenticator LDAP</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-user-authenticator-ldap</artifactId>
+    <name>Apache CloudStack Plugin - User Authenticator LDAP</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.gmaven</groupId>
+                <artifactId>gmaven-plugin</artifactId>
+                <version>1.3</version>
+                <configuration>
+                    <providerSelection>1.7</providerSelection>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>testCompile</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <fileset>
+                                    <directory>test</directory>
+                                    <includes>
+                                        <include>groovy/**/*.groovy</include>
+                                    </includes>
+                                </fileset>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.codehaus.gmaven.runtime</groupId>
+                        <artifactId>gmaven-runtime-1.7</artifactId>
+                        <version>1.3</version>
+                        <exclusions>
+                            <exclusion>
+                                <groupId>org.codehaus.groovy</groupId>
+                                <artifactId>groovy-all</artifactId>
+                            </exclusion>
+                        </exclusions>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.codehaus.groovy</groupId>
+                        <artifactId>groovy-all</artifactId>
+                        <version>${cs.groovy.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>**/*Spec.groovy</include>
+                        <include>**/*Test.java</include>
+                    </includes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.btmatthews.maven.plugins</groupId>
+                <artifactId>ldap-maven-plugin</artifactId>
+                <version>1.1.0</version>
+                <configuration>
+                    <monitorPort>11389</monitorPort>
+                    <monitorKey>ldap</monitorKey>
+                    <daemon>false</daemon>
+                    <rootDn>dc=cloudstack,dc=org</rootDn>
+                    <ldapPort>10389</ldapPort>
+                    <ldifFile>test/resources/cloudstack.org.ldif</ldifFile>
+                </configuration>
+            </plugin>
+        </plugins>
+        <testSourceDirectory>test</testSourceDirectory>
+    </build>
+    <dependencies>
+        <!-- Mandatory dependencies for using Spock -->
+        <dependency>
+            <groupId>org.spockframework</groupId>
+            <artifactId>spock-core</artifactId>
+            <version>1.1-groovy-2.4</version>
+            <scope>test</scope>
+        </dependency>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.gmaven</groupId>
-        <artifactId>gmaven-plugin</artifactId>
-        <version>1.3</version>
-        <configuration>
-          <providerSelection>1.7</providerSelection>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>compile</goal>
-              <goal>testCompile</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <fileset>
-                  <directory>test</directory>
-                  <includes>
-                    <include>groovy/**/*.groovy</include>
-                  </includes>
-                </fileset>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-        <dependencies>
-          <dependency>
-            <groupId>org.codehaus.gmaven.runtime</groupId>
-            <artifactId>gmaven-runtime-1.7</artifactId>
-            <version>1.3</version>
-            <exclusions>
-              <exclusion>
-                <groupId>org.codehaus.groovy</groupId>
-                <artifactId>groovy-all</artifactId>
-              </exclusion>
-            </exclusions>
-          </dependency>
-          <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-all</artifactId>
-            <version>2.0.5</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <includes>
-            <include>**/*Spec.groovy</include>
-            <include>**/*Test.java</include>
-          </includes>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>com.btmatthews.maven.plugins</groupId>
-        <artifactId>ldap-maven-plugin</artifactId>
-        <version>1.1.0</version>
-        <configuration>
-          <monitorPort>11389</monitorPort>
-            <monitorKey>ldap</monitorKey>
-            <daemon>false</daemon>
-            <rootDn>dc=cloudstack,dc=org</rootDn>
-            <ldapPort>10389</ldapPort>
-            <ldifFile>test/resources/cloudstack.org.ldif</ldifFile>
-        </configuration>
-      </plugin>
-
-    </plugins>
-    <testSourceDirectory>test</testSourceDirectory>
-  </build>
-  <dependencies>
-    <!-- Mandatory dependencies for using Spock -->
-    <dependency>
-      <groupId>org.spockframework</groupId>
-      <artifactId>spock-core</artifactId>
-      <version>1.1-groovy-2.4</version>
-      <scope>test</scope>
-    </dependency>
-
-    <!-- Optional dependencies for using Spock -->
-    <dependency> <!-- enables mocking of classes (in addition to interfaces) -->
-      <groupId>cglib</groupId>
-      <artifactId>cglib-nodep</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+        <!-- Optional dependencies for using Spock -->
+        <dependency> <!-- enables mocking of classes (in addition to interfaces) -->
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LDAPConfigCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LDAPConfigCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LDAPConfigCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LDAPConfigCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LDAPRemoveCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LDAPRemoveCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LDAPRemoveCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LDAPRemoveCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapAddConfigurationCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapAddConfigurationCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapAddConfigurationCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapAddConfigurationCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapCreateAccountCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapCreateAccountCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapCreateAccountCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapCreateAccountCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapDeleteConfigurationCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapDeleteConfigurationCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapDeleteConfigurationCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapDeleteConfigurationCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapImportUsersCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapImportUsersCmd.java
similarity index 83%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapImportUsersCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapImportUsersCmd.java
index 564c1d0..9011452 100644
--- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapImportUsersCmd.java
+++ b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapImportUsersCmd.java
@@ -26,9 +26,6 @@
 
 import javax.inject.Inject;
 
-import com.cloud.user.Account;
-import com.cloud.user.User;
-import com.cloud.user.UserAccount;
 import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
@@ -36,6 +33,7 @@
 import org.apache.cloudstack.api.BaseListCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.LdapUserResponse;
 import org.apache.cloudstack.api.response.ListResponse;
@@ -54,25 +52,23 @@
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.user.Account;
 import com.cloud.user.AccountService;
 import com.cloud.user.DomainService;
+import com.cloud.user.User;
+import com.cloud.user.UserAccount;
 
-@APICommand(name = "importLdapUsers", description = "Import LDAP users", responseObject = LdapUserResponse.class, since = "4.3.0",
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+@APICommand(name = "importLdapUsers", description = "Import LDAP users", responseObject = LdapUserResponse.class, since = "4.3.0", requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class LdapImportUsersCmd extends BaseListCmd {
 
     public static final Logger s_logger = Logger.getLogger(LdapImportUsersCmd.class.getName());
 
     private static final String s_name = "ldapuserresponse";
 
-    @Parameter(name = ApiConstants.TIMEZONE,
-               type = CommandType.STRING,
-               description = "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")
+    @Parameter(name = ApiConstants.TIMEZONE, type = CommandType.STRING, description = "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")
     private String timezone;
 
-    @Parameter(name = ApiConstants.ACCOUNT_TYPE,
-               type = CommandType.SHORT,
-               description = "Type of the account.  Specify 0 for user, 1 for root admin, and 2 for domain admin")
+    @Parameter(name = ApiConstants.ACCOUNT_TYPE, type = CommandType.SHORT, description = "Type of the account.  Specify 0 for user, 1 for root admin, and 2 for domain admin")
     private Short accountType;
 
     @Parameter(name = ApiConstants.ROLE_ID, type = CommandType.UUID, entityType = RoleResponse.class, description = "Creates the account under the specified role.")
@@ -81,16 +77,13 @@
     @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters")
     private Map<String, String> details;
 
-    @Parameter(name = ApiConstants.DOMAIN_ID,
-               type = CommandType.UUID,
-               entityType = DomainResponse.class,
-               description = "Specifies the domain to which the ldap users are to be "
-                   + "imported. If no domain is specified, a domain will created using group parameter. If the group is also not specified, a domain name based on the OU information will be "
-                   + "created. If no OU hierarchy exists, will be defaulted to ROOT domain")
+    @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID, entityType = DomainResponse.class, description = "Specifies the domain to which the ldap users are to be "
+            + "imported. If no domain is specified, a domain will created using group parameter. If the group is also not specified, a domain name based on the OU information will be "
+            + "created. If no OU hierarchy exists, will be defaulted to ROOT domain")
     private Long domainId;
 
     @Parameter(name = ApiConstants.GROUP, type = CommandType.STRING, description = "Specifies the group name from which the ldap users are to be imported. "
-        + "If no group is specified, all the users will be imported.")
+            + "If no group is specified, all the users will be imported.")
     private String groupName;
 
     private Domain _domain;
@@ -121,20 +114,27 @@
         } else {
 //            check if the user exists. if yes, call update
             UserAccount csuser = _accountService.getActiveUserAccount(user.getUsername(), domain.getId());
-            if(csuser == null) {
+            if (csuser == null) {
                 s_logger.debug("No user exists with name: " + user.getUsername() + " creating a user in the account: " + accountName);
                 _accountService.createUser(user.getUsername(), generatePassword(), user.getFirstname(), user.getLastname(), user.getEmail(), timezone, accountName, domain.getId(),
-                                           UUID.randomUUID().toString(), User.Source.LDAP);
+                        UUID.randomUUID().toString(), User.Source.LDAP);
             } else {
-                s_logger.debug("account with name: " + accountName + " exist and user with name: " + user.getUsername() + " exists in the account. Updating the account.");
-                _accountService.updateUser(csuser.getId(), user.getFirstname(), user.getLastname(), user.getEmail(), null, null, null, null, null);
+                s_logger.debug("Account [name=%s] and user [name=%s] already exist in CloudStack. Executing the user update.");
+
+                UpdateUserCmd updateUserCmd = new UpdateUserCmd();
+                updateUserCmd.setId(csuser.getId());
+                updateUserCmd.setFirstname(user.getFirstname());
+                updateUserCmd.setLastname(user.getLastname());
+                updateUserCmd.setEmail(user.getEmail());
+
+                _accountService.updateUser(updateUserCmd);
             }
         }
     }
 
     @Override
-    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
-        ResourceAllocationException, NetworkRuleConflictException {
+    public void execute()
+            throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
         if (getAccountType() == null && getRoleId() == null) {
             throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Both account type and role ID are not provided");
         }
@@ -177,7 +177,7 @@
 
     private String getAccountName(LdapUser user) {
         String finalAccountName = accountName;
-        if(finalAccountName == null ) {
+        if (finalAccountName == null) {
             finalAccountName = user.getUsername();
         }
         return finalAccountName;
@@ -244,7 +244,7 @@
             final byte bytes[] = new byte[20];
             randomGen.nextBytes(bytes);
             return new String(Base64.encode(bytes), "UTF-8");
-        } catch ( NoSuchAlgorithmException | UnsupportedEncodingException e) {
+        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate random password");
         }
     }
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapListConfigurationCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapListConfigurationCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapListConfigurationCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapListConfigurationCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapListUsersCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapListUsersCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapListUsersCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapListUsersCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapUserSearchCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapUserSearchCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapUserSearchCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LdapUserSearchCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LinkDomainToLdapCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkDomainToLdapCmd.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LinkDomainToLdapCmd.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkDomainToLdapCmd.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LDAPConfigResponse.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LDAPConfigResponse.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LDAPRemoveResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LDAPRemoveResponse.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LDAPRemoveResponse.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LDAPRemoveResponse.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LdapConfigurationResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LdapConfigurationResponse.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LdapConfigurationResponse.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LdapConfigurationResponse.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LdapUserResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LdapUserResponse.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LdapUserResponse.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LdapUserResponse.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LinkAccountToLdapResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LinkAccountToLdapResponse.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LinkAccountToLdapResponse.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LinkAccountToLdapResponse.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LinkDomainToLdapResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LinkDomainToLdapResponse.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/response/LinkDomainToLdapResponse.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LinkDomainToLdapResponse.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapAuthenticator.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapAuthenticator.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfiguration.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfiguration.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfigurationVO.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfigurationVO.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfigurationVO.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapConfigurationVO.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapContextFactory.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapContextFactory.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapContextFactory.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapContextFactory.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManager.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManager.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManager.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManager.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManagerImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManagerImpl.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManagerImpl.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapManagerImpl.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapTrustMapVO.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapTrustMapVO.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapTrustMapVO.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapTrustMapVO.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUser.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUser.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUser.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUser.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUserManager.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUserManager.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUserManagerFactory.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUserManagerFactory.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUtils.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUtils.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUtils.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/LdapUtils.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryException.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryException.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryException.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryException.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDao.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapConfigurationDaoImpl.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapTrustMapDao.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapTrustMapDao.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapTrustMapDao.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapTrustMapDao.java
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapTrustMapDaoImpl.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapTrustMapDaoImpl.java
similarity index 100%
rename from plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/dao/LdapTrustMapDaoImpl.java
rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/ldap/dao/LdapTrustMapDaoImpl.java
diff --git a/plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/module.properties b/plugins/user-authenticators/ldap/src/main/resources/META-INF/cloudstack/ldap/module.properties
similarity index 100%
rename from plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/module.properties
rename to plugins/user-authenticators/ldap/src/main/resources/META-INF/cloudstack/ldap/module.properties
diff --git a/plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml b/plugins/user-authenticators/ldap/src/main/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml
similarity index 100%
rename from plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml
rename to plugins/user-authenticators/ldap/src/main/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/BasicNamingEnumerationImpl.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/BasicNamingEnumerationImpl.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/BasicNamingEnumerationImpl.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/BasicNamingEnumerationImpl.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapAddConfigurationCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapAddConfigurationCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapAddConfigurationCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapAddConfigurationCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapAuthenticatorSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapAuthenticatorSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapAuthenticatorSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapAuthenticatorSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationDaoImplSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationDaoImplSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationDaoImplSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationDaoImplSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationResponseSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationResponseSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationResponseSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationResponseSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationVOSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationVOSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationVOSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationVOSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapContextFactorySpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapContextFactorySpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapContextFactorySpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapContextFactorySpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapDeleteConfigurationCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapDeleteConfigurationCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapDeleteConfigurationCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapDeleteConfigurationCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapImportUsersCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapImportUsersCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapImportUsersCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapImportUsersCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapListConfigurationCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapListConfigurationCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapListConfigurationCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapListConfigurationCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapListUsersCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapListUsersCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapListUsersCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapListUsersCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapSearchUserCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapSearchUserCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapSearchUserCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapSearchUserCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserResponseSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUserResponseSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserResponseSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUserResponseSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUserSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUserSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUtilsSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUtilsSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUtilsSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LdapUtilsSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LinkDomainToLdapCmdSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LinkDomainToLdapCmdSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LinkDomainToLdapCmdSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/LinkDomainToLdapCmdSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryExceptionSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryExceptionSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryExceptionSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/NoLdapUserMatchingQueryExceptionSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy b/plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy
similarity index 100%
rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy
rename to plugins/user-authenticators/ldap/src/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy
diff --git a/plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LdapConfigurationChanger.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LdapConfigurationChanger.java
similarity index 100%
rename from plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LdapConfigurationChanger.java
rename to plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LdapConfigurationChanger.java
diff --git a/plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LdapCreateAccountCmdTest.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LdapCreateAccountCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LdapCreateAccountCmdTest.java
rename to plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LdapCreateAccountCmdTest.java
diff --git a/plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LdapImportUsersCmdTest.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LdapImportUsersCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LdapImportUsersCmdTest.java
rename to plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LdapImportUsersCmdTest.java
diff --git a/plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
rename to plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
diff --git a/plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LinkDomainToLdapCmdTest.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkDomainToLdapCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/ldap/test/org/apache/cloudstack/api/command/LinkDomainToLdapCmdTest.java
rename to plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkDomainToLdapCmdTest.java
diff --git a/plugins/user-authenticators/ldap/test/org/apache/cloudstack/ldap/LdapConfigurationTest.java b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/ldap/LdapConfigurationTest.java
similarity index 100%
rename from plugins/user-authenticators/ldap/test/org/apache/cloudstack/ldap/LdapConfigurationTest.java
rename to plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/ldap/LdapConfigurationTest.java
diff --git a/plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif b/plugins/user-authenticators/ldap/src/test/resources/cloudstack.org.ldif
similarity index 100%
rename from plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif
rename to plugins/user-authenticators/ldap/src/test/resources/cloudstack.org.ldif
diff --git a/plugins/user-authenticators/md5/pom.xml b/plugins/user-authenticators/md5/pom.xml
index f8a5c54..87b61a7 100644
--- a/plugins/user-authenticators/md5/pom.xml
+++ b/plugins/user-authenticators/md5/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-user-authenticator-md5</artifactId>
-  <name>Apache CloudStack Plugin - User Authenticator MD5</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-user-authenticator-md5</artifactId>
+    <name>Apache CloudStack Plugin - User Authenticator MD5</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java b/plugins/user-authenticators/md5/src/main/java/com/cloud/server/auth/MD5UserAuthenticator.java
similarity index 100%
rename from plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
rename to plugins/user-authenticators/md5/src/main/java/com/cloud/server/auth/MD5UserAuthenticator.java
diff --git a/plugins/user-authenticators/md5/resources/META-INF/cloudstack/md5/module.properties b/plugins/user-authenticators/md5/src/main/resources/META-INF/cloudstack/md5/module.properties
similarity index 100%
rename from plugins/user-authenticators/md5/resources/META-INF/cloudstack/md5/module.properties
rename to plugins/user-authenticators/md5/src/main/resources/META-INF/cloudstack/md5/module.properties
diff --git a/plugins/user-authenticators/md5/resources/META-INF/cloudstack/md5/spring-md5-context.xml b/plugins/user-authenticators/md5/src/main/resources/META-INF/cloudstack/md5/spring-md5-context.xml
similarity index 100%
rename from plugins/user-authenticators/md5/resources/META-INF/cloudstack/md5/spring-md5-context.xml
rename to plugins/user-authenticators/md5/src/main/resources/META-INF/cloudstack/md5/spring-md5-context.xml
diff --git a/plugins/user-authenticators/md5/test/com/cloud/server/auth/MD5UserAuthenticatorTest.java b/plugins/user-authenticators/md5/src/test/java/com/cloud/server/auth/MD5UserAuthenticatorTest.java
similarity index 100%
rename from plugins/user-authenticators/md5/test/com/cloud/server/auth/MD5UserAuthenticatorTest.java
rename to plugins/user-authenticators/md5/src/test/java/com/cloud/server/auth/MD5UserAuthenticatorTest.java
diff --git a/plugins/user-authenticators/pbkdf2/pom.xml b/plugins/user-authenticators/pbkdf2/pom.xml
index a7dfd3a..a5d6b9e 100644
--- a/plugins/user-authenticators/pbkdf2/pom.xml
+++ b/plugins/user-authenticators/pbkdf2/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-user-authenticator-pbkdf2</artifactId>
-  <name>Apache CloudStack Plugin - User Authenticator PBKDF2-SHA-256</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-user-authenticator-pbkdf2</artifactId>
+    <name>Apache CloudStack Plugin - User Authenticator PBKDF2-SHA-256</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/user-authenticators/pbkdf2/src/org/apache/cloudstack/server/auth/PBKDF2UserAuthenticator.java b/plugins/user-authenticators/pbkdf2/src/main/java/org/apache/cloudstack/server/auth/PBKDF2UserAuthenticator.java
similarity index 100%
rename from plugins/user-authenticators/pbkdf2/src/org/apache/cloudstack/server/auth/PBKDF2UserAuthenticator.java
rename to plugins/user-authenticators/pbkdf2/src/main/java/org/apache/cloudstack/server/auth/PBKDF2UserAuthenticator.java
diff --git a/plugins/user-authenticators/pbkdf2/resources/META-INF/cloudstack/pbkdf2/module.properties b/plugins/user-authenticators/pbkdf2/src/main/resources/META-INF/cloudstack/pbkdf2/module.properties
similarity index 100%
rename from plugins/user-authenticators/pbkdf2/resources/META-INF/cloudstack/pbkdf2/module.properties
rename to plugins/user-authenticators/pbkdf2/src/main/resources/META-INF/cloudstack/pbkdf2/module.properties
diff --git a/plugins/user-authenticators/pbkdf2/resources/META-INF/cloudstack/pbkdf2/spring-pbkdf2-context.xml b/plugins/user-authenticators/pbkdf2/src/main/resources/META-INF/cloudstack/pbkdf2/spring-pbkdf2-context.xml
similarity index 100%
rename from plugins/user-authenticators/pbkdf2/resources/META-INF/cloudstack/pbkdf2/spring-pbkdf2-context.xml
rename to plugins/user-authenticators/pbkdf2/src/main/resources/META-INF/cloudstack/pbkdf2/spring-pbkdf2-context.xml
diff --git a/plugins/user-authenticators/pbkdf2/test/org/apache/cloudstack/server/auth/PBKD2UserAuthenticatorTest.java b/plugins/user-authenticators/pbkdf2/src/test/java/org/apache/cloudstack/server/auth/PBKD2UserAuthenticatorTest.java
similarity index 100%
rename from plugins/user-authenticators/pbkdf2/test/org/apache/cloudstack/server/auth/PBKD2UserAuthenticatorTest.java
rename to plugins/user-authenticators/pbkdf2/src/test/java/org/apache/cloudstack/server/auth/PBKD2UserAuthenticatorTest.java
diff --git a/plugins/user-authenticators/plain-text/pom.xml b/plugins/user-authenticators/plain-text/pom.xml
index 18112b1..d5989a4 100644
--- a/plugins/user-authenticators/plain-text/pom.xml
+++ b/plugins/user-authenticators/plain-text/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-user-authenticator-plaintext</artifactId>
-  <name>Apache CloudStack Plugin - User Authenticator Plain Text</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-user-authenticator-plaintext</artifactId>
+    <name>Apache CloudStack Plugin - User Authenticator Plain Text</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java b/plugins/user-authenticators/plain-text/src/main/java/com/cloud/server/auth/PlainTextUserAuthenticator.java
similarity index 100%
rename from plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
rename to plugins/user-authenticators/plain-text/src/main/java/com/cloud/server/auth/PlainTextUserAuthenticator.java
diff --git a/plugins/user-authenticators/plain-text/resources/META-INF/cloudstack/plaintext/module.properties b/plugins/user-authenticators/plain-text/src/main/resources/META-INF/cloudstack/plaintext/module.properties
similarity index 100%
rename from plugins/user-authenticators/plain-text/resources/META-INF/cloudstack/plaintext/module.properties
rename to plugins/user-authenticators/plain-text/src/main/resources/META-INF/cloudstack/plaintext/module.properties
diff --git a/plugins/user-authenticators/plain-text/resources/META-INF/cloudstack/plaintext/spring-plaintext-context.xml b/plugins/user-authenticators/plain-text/src/main/resources/META-INF/cloudstack/plaintext/spring-plaintext-context.xml
similarity index 100%
rename from plugins/user-authenticators/plain-text/resources/META-INF/cloudstack/plaintext/spring-plaintext-context.xml
rename to plugins/user-authenticators/plain-text/src/main/resources/META-INF/cloudstack/plaintext/spring-plaintext-context.xml
diff --git a/plugins/user-authenticators/saml2/pom.xml b/plugins/user-authenticators/saml2/pom.xml
index 2635c5a..769a364 100644
--- a/plugins/user-authenticators/saml2/pom.xml
+++ b/plugins/user-authenticators/saml2/pom.xml
@@ -1,57 +1,57 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-user-authenticator-saml2</artifactId>
-  <name>Apache CloudStack Plugin - User Authenticator SAML2</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.opensaml</groupId>
-      <artifactId>opensaml</artifactId>
-      <version>${cs.opensaml.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xercesImpl</artifactId>
-      <version>2.11.0</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-user-authenticator-saml2</artifactId>
+    <name>Apache CloudStack Plugin - User Authenticator SAML2</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.opensaml</groupId>
+            <artifactId>opensaml</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>xerces</groupId>
+            <artifactId>xercesImpl</artifactId>
+            <version>${cs.xercesImpl.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListIdpsCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListIdpsCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListIdpsCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListIdpsCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/IdpResponse.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/IdpResponse.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/IdpResponse.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/IdpResponse.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SAMLMetaDataResponse.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/SAMLMetaDataResponse.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SAMLMetaDataResponse.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/SAMLMetaDataResponse.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlUserAccountResponse.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/SamlUserAccountResponse.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlUserAccountResponse.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/api/response/SamlUserAccountResponse.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManager.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManager.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManager.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManager.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2UserAuthenticator.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2UserAuthenticator.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2UserAuthenticator.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAML2UserAuthenticator.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLPluginConstants.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLPluginConstants.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLPluginConstants.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLPluginConstants.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLProviderMetadata.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLProviderMetadata.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLProviderMetadata.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLProviderMetadata.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDao.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLTokenDao.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDao.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLTokenDao.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenVO.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLTokenVO.java
similarity index 100%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenVO.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLTokenVO.java
diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLUtils.java b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLUtils.java
similarity index 98%
rename from plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLUtils.java
rename to plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLUtils.java
index 5b00d47..6110cc5 100644
--- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLUtils.java
+++ b/plugins/user-authenticators/saml2/src/main/java/org/apache/cloudstack/saml/SAMLUtils.java
@@ -295,7 +295,7 @@
             X509EncodedKeySpec spec = keyFactory.getKeySpec(key, X509EncodedKeySpec.class);
             return new String(org.bouncycastle.util.encoders.Base64.encode(spec.getEncoded()), Charset.forName("UTF-8"));
         } catch (InvalidKeySpecException e) {
-            s_logger.error("Unable to create KeyFactory:" + e.getMessage());
+            s_logger.error("Unable to get KeyFactory:" + e.getMessage());
         }
         return null;
     }
@@ -313,7 +313,7 @@
                     PKCS8EncodedKeySpec.class);
             return new String(org.bouncycastle.util.encoders.Base64.encode(spec.getEncoded()), Charset.forName("UTF-8"));
         } catch (InvalidKeySpecException e) {
-            s_logger.error("Unable to create KeyFactory:" + e.getMessage());
+            s_logger.error("Unable to get KeyFactory:" + e.getMessage());
         }
         return null;
     }
@@ -332,7 +332,7 @@
         try {
             return keyFactory.generatePublic(x509KeySpec);
         } catch (InvalidKeySpecException e) {
-            s_logger.error("Unable to create PrivateKey from privateKey string:" + e.getMessage());
+            s_logger.error("Unable to create PublicKey from PublicKey string:" + e.getMessage());
         }
         return null;
     }
diff --git a/plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/module.properties b/plugins/user-authenticators/saml2/src/main/resources/META-INF/cloudstack/saml2/module.properties
similarity index 100%
rename from plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/module.properties
rename to plugins/user-authenticators/saml2/src/main/resources/META-INF/cloudstack/saml2/module.properties
diff --git a/plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml b/plugins/user-authenticators/saml2/src/main/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml
similarity index 100%
rename from plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml
rename to plugins/user-authenticators/saml2/src/main/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2AuthManagerImplTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/SAML2AuthManagerImplTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2AuthManagerImplTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/SAML2AuthManagerImplTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2UserAuthenticatorTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/SAML2UserAuthenticatorTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2UserAuthenticatorTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/SAML2UserAuthenticatorTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAMLUtilsTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/SAMLUtilsTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAMLUtilsTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/SAMLUtilsTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java
diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java b/plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java
similarity index 100%
rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java
rename to plugins/user-authenticators/saml2/src/test/java/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java
diff --git a/plugins/user-authenticators/sha256salted/pom.xml b/plugins/user-authenticators/sha256salted/pom.xml
index f5deae4..9d45502 100644
--- a/plugins/user-authenticators/sha256salted/pom.xml
+++ b/plugins/user-authenticators/sha256salted/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-user-authenticator-sha256salted</artifactId>
-  <name>Apache CloudStack Plugin - User Authenticator SHA256 Salted</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-plugins</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-user-authenticator-sha256salted</artifactId>
+    <name>Apache CloudStack Plugin - User Authenticator SHA256 Salted</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-plugins</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java b/plugins/user-authenticators/sha256salted/src/main/java/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
similarity index 100%
rename from plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
rename to plugins/user-authenticators/sha256salted/src/main/java/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java
diff --git a/plugins/user-authenticators/sha256salted/resources/META-INF/cloudstack/sha256salted/module.properties b/plugins/user-authenticators/sha256salted/src/main/resources/META-INF/cloudstack/sha256salted/module.properties
similarity index 100%
rename from plugins/user-authenticators/sha256salted/resources/META-INF/cloudstack/sha256salted/module.properties
rename to plugins/user-authenticators/sha256salted/src/main/resources/META-INF/cloudstack/sha256salted/module.properties
diff --git a/plugins/user-authenticators/sha256salted/resources/META-INF/cloudstack/sha256salted/spring-sha256salted-context.xml b/plugins/user-authenticators/sha256salted/src/main/resources/META-INF/cloudstack/sha256salted/spring-sha256salted-context.xml
similarity index 100%
rename from plugins/user-authenticators/sha256salted/resources/META-INF/cloudstack/sha256salted/spring-sha256salted-context.xml
rename to plugins/user-authenticators/sha256salted/src/main/resources/META-INF/cloudstack/sha256salted/spring-sha256salted-context.xml
diff --git a/plugins/user-authenticators/sha256salted/test/src/com/cloud/server/auth/test/AuthenticatorTest.java b/plugins/user-authenticators/sha256salted/src/test/java/com/cloud/server/auth/test/AuthenticatorTest.java
similarity index 98%
rename from plugins/user-authenticators/sha256salted/test/src/com/cloud/server/auth/test/AuthenticatorTest.java
rename to plugins/user-authenticators/sha256salted/src/test/java/com/cloud/server/auth/test/AuthenticatorTest.java
index 0a9bd2f..f770b74 100644
--- a/plugins/user-authenticators/sha256salted/test/src/com/cloud/server/auth/test/AuthenticatorTest.java
+++ b/plugins/user-authenticators/sha256salted/src/test/java/com/cloud/server/auth/test/AuthenticatorTest.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package src.com.cloud.server.auth.test;
+package com.cloud.server.auth.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
diff --git a/pom.xml b/pom.xml
index f94e7bc..7f8d3e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,1201 +1,1268 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
- 
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>11</version>
-  </parent>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-  <groupId>org.apache.cloudstack</groupId>
-  <artifactId>cloudstack</artifactId>
-  <version>4.11.2.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-  <name>Apache CloudStack</name>
-  <description>Apache CloudStack is an IaaS ("Infrastructure as a Service") cloud orchestration platform.</description>
-  <url>http://www.cloudstack.org</url>
-  <scm>
-    <connection>scm:git:https://gitbox.apache.org/repos/asf/cloudstack.git</connection>
-    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/cloudstack.git</developerConnection>
-  </scm>
-  <issueManagement>
-    <system>jira</system>
-    <url>https://issues.apache.org/jira/browse/CLOUDSTACK</url>
-  </issueManagement>
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>11</version>
+        <relativePath />
+    </parent>
 
-  <properties>
-    <cs.jdk.version>1.8</cs.jdk.version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <groupId>org.apache.cloudstack</groupId>
+    <artifactId>cloudstack</artifactId>
+    <version>4.12.0.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>Apache CloudStack</name>
+    <description>Apache CloudStack is an IaaS ("Infrastructure as a Service") cloud orchestration platform.</description>
+    <url>http://www.cloudstack.org</url>
 
-    <cs.log4j.version>1.2.17</cs.log4j.version>
-    <cs.log4j.extras.version>1.2.17</cs.log4j.extras.version>
-    <cs.cglib.version>3.2.5</cs.cglib.version>
-    <cs.dbcp.version>2.2.0</cs.dbcp.version>
-    <cs.pool.version>2.4.3</cs.pool.version>
-    <cs.codec.version>1.11</cs.codec.version>
-    <cs.configuration.version>1.10</cs.configuration.version>
-    <cs.logging.version>1.1.1</cs.logging.version>
-    <cs.discovery.version>0.5</cs.discovery.version>
-    
-    <!-- do not forget to also upgrade hamcrest library with junit -->
-    <cs.junit.version>4.12</cs.junit.version>
-    <cs.hamcrest.version>1.3</cs.hamcrest.version>
-    <cs.junit.dataprovider.version>1.13.1</cs.junit.dataprovider.version>
-    <cs.bcprov.version>1.59</cs.bcprov.version>
-    <cs.jsch.version>0.1.54</cs.jsch.version>
-    <cs.jpa.version>2.2.0</cs.jpa.version>
-    <cs.jasypt.version>1.9.2</cs.jasypt.version>
-    <cs.trilead.version>1.0.0-build221</cs.trilead.version>
-    <cs.ehcache.version>2.6.11</cs.ehcache.version>
-    <cs.gson.version>1.7.2</cs.gson.version>
-    <cs.guava-testlib.version>18.0</cs.guava-testlib.version>
-    <cs.guava.version>23.6-jre</cs.guava.version>
-    <cs.xapi.version>6.2.0-3.1</cs.xapi.version>
-    <cs.httpclient.version>4.5.4</cs.httpclient.version>
-    <cs.httpcore.version>4.4.8</cs.httpcore.version>
-    <cs.commons-httpclient.version>3.1</cs.commons-httpclient.version>
-    <cs.mysql.version>5.1.34</cs.mysql.version>
-    <cs.xstream.version>1.4.10</cs.xstream.version>
-    <cs.xmlrpc.version>3.1.3</cs.xmlrpc.version>
-    <cs.mail.version>1.5.0-b01</cs.mail.version>
-    <cs.axis.version>1.4</cs.axis.version>
-    <cs.axis2.version>1.5.6</cs.axis2.version>
-    <cs.rampart.version>1.5.1</cs.rampart.version>
-    <cs.axiom.version>1.2.8</cs.axiom.version>
-    <cs.neethi.version>2.0.4</cs.neethi.version>
-    <cs.servlet.version>4.0.0</cs.servlet.version>
-    <cs.jstl.version>1.2</cs.jstl.version>
-    <cs.jstl-api.version>1.2.1</cs.jstl-api.version>
-    <cs.selenium.server.version>1.0-20081010.060147</cs.selenium.server.version>
-    <cs.vmware.api.version>6.7</cs.vmware.api.version>
-    <org.springframework.version>5.0.2.RELEASE</org.springframework.version>
-    <cs.mockito.version>1.10.19</cs.mockito.version>
-    <cs.powermock.version>1.6.4</cs.powermock.version>
-    <cs.aws.sdk.version>1.11.213</cs.aws.sdk.version>
-    <cs.jackson.version>2.9.2</cs.jackson.version>
-    <cs.lang.version>2.6</cs.lang.version>
-    <cs.commons-lang3.version>3.6</cs.commons-lang3.version>
-    <cs.commons-io.version>2.6</cs.commons-io.version>
-    <cs.commons-fileupload.version>1.3.3</cs.commons-fileupload.version>
-    <cs.commons-collections.version>4.1</cs.commons-collections.version>
-    <cs.commons-validator.version>1.6</cs.commons-validator.version>
-    <cs.reflections.version>0.9.11</cs.reflections.version>
-    <cs.javassist.version>3.22.0-GA</cs.javassist.version>
-    <cs.java-ipv6.version>0.16</cs.java-ipv6.version>
-    <cs.replace.properties>build/replace.properties</cs.replace.properties>
-    <cs.libvirt-java.version>0.5.1</cs.libvirt-java.version>
-    <cs.rados-java.version>0.2.0</cs.rados-java.version>
-    <cs.target.dir>target</cs.target.dir>
-    <cs.daemon.version>1.1.0</cs.daemon.version>
-    <cs.jna.version>4.0.0</cs.jna.version>
-    <cs.checkstyle.version>2.17</cs.checkstyle.version>
-    <cs.mycila.license.version>2.11</cs.mycila.license.version>
-    <cs.findbugs.version>3.0.3</cs.findbugs.version>
-    <cs.javadoc.version>2.10.3</cs.javadoc.version>
-    <cs.opensaml.version>2.6.4</cs.opensaml.version>
-    <cs.xml-apis.version>1.4.01</cs.xml-apis.version>
-    <cs.joda-time.version>2.8.1</cs.joda-time.version>
-    <cs.batik.version>1.9.1</cs.batik.version>
-    <cs.servicemix.version>2.5.8_1</cs.servicemix.version>
-    <cs.cxf.version>3.2.0</cs.cxf.version>
-    <cs.groovy.version>2.4.12</cs.groovy.version>
-    <cs.nitro.version>10.1</cs.nitro.version>
-    <cs.wiremock.version>2.11.0</cs.wiremock.version>
-    <cs.jetty.version>9.4.8.v20171121</cs.jetty.version>
-    <cs.jetty-maven-plugin.version>9.2.22.v20170606</cs.jetty-maven-plugin.version>
-  </properties>
+    <scm>
+        <connection>scm:git:https://gitbox.apache.org/repos/asf/cloudstack.git</connection>
+        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/cloudstack.git</developerConnection>
+    </scm>
 
-  <distributionManagement>
-    <site>
-      <id>apache.cloudstack.site</id>
-      <url>${site.deploy.url}</url>
-    </site>
-  </distributionManagement>
+    <issueManagement>
+        <system>Github</system>
+        <url>https://github.com/apache/cloudstack/issues</url>
+    </issueManagement>
 
-  <inceptionYear>2012</inceptionYear>
+    <properties>
+        <!-- keep in alphabetic order -->
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-  <mailingLists>
-    <mailingList>
-      <name>Apache CloudStack User List</name>
-      <subscribe>users-subscribe@cloudstack.apache.org</subscribe>
-      <unsubscribe>users-unsubscribe@cloudstack.apache.org</unsubscribe>
-      <post>users@cloudstack.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-users</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-users</otherArchive>
-      </otherArchives>
-    </mailingList>
-    <mailingList>
-      <name>Apache CloudStack Developer List</name>
-      <subscribe>dev-subscribe@cloudstack.apache.org</subscribe>
-      <unsubscribe>dev-unsubscribe@cloudstack.apache.org</unsubscribe>
-      <post>dev@cloudstack.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-dev</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-dev</otherArchive>
-      </otherArchives>
-    </mailingList>
-    <mailingList>
-      <name>Apache CloudStack Commits List</name>
-      <subscribe>commits-subscribe@cloudstack.apache.org</subscribe>
-      <unsubscribe>commits-unsubscribe@cloudstack.apache.org</unsubscribe>
-      <post>commits@cloudstack.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-commits</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-commits</otherArchive>
-      </otherArchives>
-    </mailingList>
-  </mailingLists>
+        <!-- Build properties -->
+        <cs.jdk.version>1.8</cs.jdk.version>
+        <cs.target.dir>target</cs.target.dir>
+        <cs.replace.properties>build/replace.properties</cs.replace.properties>
 
-  <developers>
-    <developer>
-      <name>The Apache CloudStack Team</name>
-      <email>dev@cloudstack.apache.org</email>
-      <url>http://cloudstack.apache.org/</url>
-      <organization>Apache Software Foundation</organization>
-      <organizationUrl>http://apache.org/</organizationUrl>
-    </developer>
-  </developers>
+        <!-- Plugins versions -->
+        <cs.antrun-plugin.version>1.8</cs.antrun-plugin.version>
+        <cs.builder-helper-plugin.version>3.0.0</cs.builder-helper-plugin.version>
+        <cs.checkstyle-plugin.version>3.0.0</cs.checkstyle-plugin.version>
+        <cs.cobertura-plugin.version>2.7</cs.cobertura-plugin.version>
+        <cs.compiler-plugin.version>3.7.0</cs.compiler-plugin.version>
+        <cs.dependency-plugin.version>3.1.0</cs.dependency-plugin.version>
+        <cs.failsafe-plugin.version>2.21.0</cs.failsafe-plugin.version>
+        <cs.findbugs-plugin.version>3.0.5</cs.findbugs-plugin.version>
+        <cs.jar-plugin.version>3.1.0</cs.jar-plugin.version>
+        <cs.pmd-plugin.version>3.9.0</cs.pmd-plugin.version>
+        <cs.project-info-plugin.version>2.9</cs.project-info-plugin.version>
+        <cs.release-plugin.version>2.5.3</cs.release-plugin.version>
+        <cs.resources-plugin.version>3.1.0</cs.resources-plugin.version>
+        <cs.site-plugin.version>3.7.1</cs.site-plugin.version>
+        <cs.surefire-plugin.version>2.21.0</cs.surefire-plugin.version>
 
-  <ciManagement>
-    <system>Jenkins</system>
-    <url>http://builds.apache.org/</url>
-  </ciManagement>
+        <!-- Logging versions -->
+        <cs.log4j.version>1.2.17</cs.log4j.version>
+        <cs.log4j.extras.version>1.2.17</cs.log4j.extras.version>
+        <cs.logging.version>1.1.1</cs.logging.version>
 
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
+        <!-- Apache Commons versions -->
+        <cs.codec.version>1.11</cs.codec.version>
+        <cs.commons-collections.version>4.1</cs.commons-collections.version>
+        <cs.commons-compress.version>1.15</cs.commons-compress.version>
+        <cs.commons-exec.version>1.3</cs.commons-exec.version>
+        <cs.commons-fileupload.version>1.3.3</cs.commons-fileupload.version>
+        <cs.commons-httpclient.version>3.1</cs.commons-httpclient.version>
+        <cs.commons-io.version>2.6</cs.commons-io.version>
+        <cs.commons-lang3.version>3.6</cs.commons-lang3.version>
+        <cs.commons-net.version>3.6</cs.commons-net.version>
+        <cs.commons-validator.version>1.6</cs.commons-validator.version>
+        <cs.configuration.version>1.10</cs.configuration.version>
+        <cs.daemon.version>1.1.0</cs.daemon.version>
+        <cs.dbcp.version>2.2.0</cs.dbcp.version>
+        <cs.discovery.version>0.5</cs.discovery.version>
+        <cs.lang.version>2.6</cs.lang.version>
+        <cs.pool.version>2.4.3</cs.pool.version>
 
-  <organization>
-    <name>The Apache Software Foundation</name>
-    <url>http://www.apache.org/</url>
-  </organization>
+        <!-- Testing versions -->
+        <!-- do not forget to also upgrade hamcrest library with junit -->
+        <cs.dbunit.version>2.5.4</cs.dbunit.version>
+        <cs.hamcrest.version>1.3</cs.hamcrest.version>
+        <cs.junit.version>4.12</cs.junit.version>
+        <cs.junit.dataprovider.version>1.13.1</cs.junit.dataprovider.version>
+        <cs.guava-testlib.version>18.0</cs.guava-testlib.version>
+        <cs.mockito.version>1.10.19</cs.mockito.version>
+        <cs.powermock.version>1.6.4</cs.powermock.version>
+        <cs.selenium.server.version>1.0-20081010.060147</cs.selenium.server.version>
+        <cs.selenium-java-client-driver.version>1.0.1</cs.selenium-java-client-driver.version>
+        <cs.testng.version>6.1.1</cs.testng.version>
+        <cs.wiremock.version>2.11.0</cs.wiremock.version>
+        <cs.xercesImpl.version>2.11.0</cs.xercesImpl.version>
 
-  <modules>
-    <module>tools/checkstyle</module>
-    <module>api</module>
-    <module>agent</module>
-    <module>core</module>
-    <module>server</module>
-    <module>usage</module>
-    <module>utils</module>
-    <module>engine</module>
-    <module>plugins</module>
-    <module>framework</module>
-    <module>client</module>
-    <module>services</module>
-    <module>maven-standard</module>
-    <module>quickcloud</module>
-  </modules>
+        <!-- Dependencies versions -->
+        <cs.amqp-client.version>5.1.1</cs.amqp-client.version>
+        <cs.apache-cloudstack-java-client.version>1.0.9</cs.apache-cloudstack-java-client.version>
+        <cs.aspectjrt.version>1.7.1</cs.aspectjrt.version>
+        <cs.aws.sdk.version>1.11.213</cs.aws.sdk.version>
+        <cs.axiom.version>1.2.8</cs.axiom.version>
+        <cs.axis.version>1.4</cs.axis.version>
+        <cs.axis2.version>1.5.6</cs.axis2.version>
+        <cs.batik.version>1.9.1</cs.batik.version>
+        <cs.bcprov.version>1.59</cs.bcprov.version>
+        <cs.cglib.version>3.2.5</cs.cglib.version>
+        <cs.checkstyle-lib.version>8.7</cs.checkstyle-lib.version>
+        <cs.cxf.version>3.2.0</cs.cxf.version>
+        <cs.ehcache.version>2.6.11</cs.ehcache.version>
+        <cs.globodns-client.version>0.0.23</cs.globodns-client.version>
+        <cs.groovy.version>2.4.12</cs.groovy.version>
+        <cs.gson.version>1.7.2</cs.gson.version>
+        <cs.guava.version>23.6-jre</cs.guava.version>
+        <cs.httpclient.version>4.5.4</cs.httpclient.version>
+        <cs.httpcore.version>4.4.8</cs.httpcore.version>
+        <cs.jackson.version>2.9.2</cs.jackson.version>
+        <cs.jasypt.version>1.9.2</cs.jasypt.version>
+        <cs.java-ipv6.version>0.16</cs.java-ipv6.version>
+        <cs.javassist.version>3.22.0-GA</cs.javassist.version>
+        <cs.javadoc.version>2.10.3</cs.javadoc.version>
+        <cs.jersey-bundle.version>1.19.4</cs.jersey-bundle.version>
+        <cs.jetty.version>9.4.8.v20171121</cs.jetty.version>
+        <cs.jetty-maven-plugin.version>9.2.22.v20170606</cs.jetty-maven-plugin.version>
+        <cs.jna.version>4.0.0</cs.jna.version>
+        <cs.joda-time.version>2.8.1</cs.joda-time.version>
+        <cs.jpa.version>2.2.0</cs.jpa.version>
+        <cs.jsch.version>0.1.54</cs.jsch.version>
+        <cs.json.version>20090211</cs.json.version>
+        <cs.jstl.version>1.2</cs.jstl.version>
+        <cs.jstl-api.version>1.2.1</cs.jstl-api.version>
+        <cs.kafka-clients.version>0.11.0.1</cs.kafka-clients.version>
+        <cs.libvirt-java.version>0.5.1</cs.libvirt-java.version>
+        <cs.mail.version>1.5.0-b01</cs.mail.version>
+        <cs.mysql.version>5.1.34</cs.mysql.version>
+        <cs.neethi.version>2.0.4</cs.neethi.version>
+        <cs.nitro.version>10.1</cs.nitro.version>
+        <cs.opensaml.version>2.6.4</cs.opensaml.version>
+        <cs.rados-java.version>0.2.0</cs.rados-java.version>
+        <cs.rampart.version>1.5.1</cs.rampart.version>
+        <cs.reflections.version>0.9.11</cs.reflections.version>
+        <cs.servicemix.version>2.5.8_1</cs.servicemix.version>
+        <cs.servlet.version>4.0.0</cs.servlet.version>
+        <cs.tomcat-embed-core.version>8.0.30</cs.tomcat-embed-core.version>
+        <cs.trilead.version>1.0.0-build221</cs.trilead.version>
+        <cs.vmware.api.version>6.5</cs.vmware.api.version>
+        <cs.xapi.version>6.2.0-3.1</cs.xapi.version>
+        <cs.xml-apis.version>1.4.01</cs.xml-apis.version>
+        <cs.xmlrpc.version>3.1.3</cs.xmlrpc.version>
+        <cs.xstream.version>1.4.10</cs.xstream.version>
+        <org.springframework.version>5.0.2.RELEASE</org.springframework.version>
+    </properties>
 
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.codehaus.groovy</groupId>
-        <artifactId>groovy-all</artifactId>
-        <version>${cs.groovy.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.bouncycastle</groupId>
-        <artifactId>bcprov-jdk15on</artifactId>
-        <version>${cs.bcprov.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.bouncycastle</groupId>
-        <artifactId>bcpkix-jdk15on</artifactId>
-        <version>${cs.bcprov.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.xmlgraphics</groupId>
-        <artifactId>batik-css</artifactId>
-        <version>${cs.batik.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.xmlgraphics</groupId>
-        <artifactId>batik-ext</artifactId>
-        <version>${cs.batik.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.xmlgraphics</groupId>
-        <artifactId>batik-util</artifactId>
-        <version>${cs.batik.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-collections4</artifactId>
-        <version>${cs.commons-collections.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>mysql</groupId>
-        <artifactId>mysql-connector-java</artifactId>
-        <version>${cs.mysql.version}</version>
-        <scope>provided,test</scope>
-      </dependency>
-      <dependency>
-        <groupId>log4j</groupId>
-        <artifactId>log4j</artifactId>
-        <version>${cs.log4j.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-context</artifactId>
-        <version>${org.springframework.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>cglib</groupId>
-        <artifactId>cglib-nodep</artifactId>
-        <version>${cs.cglib.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-dbcp2</artifactId>
-        <version>${cs.dbcp.version}</version>
-        <exclusions>
-          <exclusion>
-            <artifactId>org.apache.commons</artifactId>
-            <groupId>commons-pool2</groupId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>net.sf.ehcache</groupId>
-        <artifactId>ehcache-core</artifactId>
-        <version>${cs.ehcache.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-codec</groupId>
-        <artifactId>commons-codec</artifactId>
-        <version>${cs.codec.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-fileupload</groupId>
-        <artifactId>commons-fileupload</artifactId>
-        <version>${cs.commons-fileupload.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-pool2</artifactId>
-        <version>${cs.pool.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-validator</groupId>
-        <artifactId>commons-validator</artifactId>
-        <version>${cs.commons-validator.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.jcraft</groupId>
-        <artifactId>jsch</artifactId>
-        <version>${cs.jsch.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.jasypt</groupId>
-        <artifactId>jasypt</artifactId>
-        <version>${cs.jasypt.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.trilead</groupId>
-        <artifactId>trilead-ssh2</artifactId>
-        <version>${cs.trilead.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.amazonaws</groupId>
-        <artifactId>aws-java-sdk-core</artifactId>
-        <version>${cs.aws.sdk.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.amazonaws</groupId>
-        <artifactId>aws-java-sdk-s3</artifactId>
-        <version>${cs.aws.sdk.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>log4j</groupId>
-        <artifactId>apache-log4j-extras</artifactId>
-        <version>${cs.log4j.extras.version}</version>
-        <exclusions>
-          <exclusion>
-            <artifactId>log4j</artifactId>
-            <groupId>log4j</groupId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>com.googlecode.java-ipv6</groupId>
-        <artifactId>java-ipv6</artifactId>
-        <version>${cs.java-ipv6.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-configuration</groupId>
-        <artifactId>commons-configuration</artifactId>
-        <version>${cs.configuration.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <version>${cs.commons-io.version}</version>
-      </dependency>
-      <!-- Test dependency in mysql for db tests -->
-      <dependency>
-        <groupId>org.reflections</groupId>
-        <artifactId>reflections</artifactId>
-        <version>${cs.reflections.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.javassist</groupId>
-        <artifactId>javassist</artifactId>
-        <version>${cs.javassist.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.owasp.esapi</groupId>
-        <artifactId>esapi</artifactId>
-        <version>2.1.0.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.persistence</groupId>
-        <artifactId>javax.persistence</artifactId>
-        <version>${cs.jpa.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-web</artifactId>
-        <version>${org.springframework.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>javax.servlet</groupId>
-        <artifactId>javax.servlet-api</artifactId>
-        <version>${cs.servlet.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpcore</artifactId>
-        <version>${cs.httpcore.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpclient</artifactId>
-        <version>${cs.httpclient.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.thoughtworks.xstream</groupId>
-        <artifactId>xstream</artifactId>
-        <version>${cs.xstream.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>javax.mail</groupId>
-        <artifactId>mail</artifactId>
-        <version>${cs.mail.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>jstl</groupId>
-        <artifactId>jstl</artifactId>
-        <version>${cs.jstl.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-aop</artifactId>
-        <version>${org.springframework.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.springframework</groupId>
-        <artifactId>spring-beans</artifactId>
-        <version>${org.springframework.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.google.code.gson</groupId>
-        <artifactId>gson</artifactId>
-        <version>${cs.gson.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>com.google.guava</groupId>
-        <artifactId>guava</artifactId>
-        <version>${cs.guava.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicemix.bundles</groupId>
-        <artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
-        <version>${cs.servicemix.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.aspectj</groupId>
-        <artifactId>aspectjtools</artifactId>
-        <version>1.8.13</version>
-      </dependency>
-      <dependency>
-        <groupId>org.aspectj</groupId>
-        <artifactId>aspectjweaver</artifactId>
-        <version>1.8.13</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.axis</groupId>
-        <artifactId>axis</artifactId>
-        <version>${cs.axis.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-daemon</groupId>
-        <artifactId>commons-daemon</artifactId>
-        <version>${cs.daemon.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.axis</groupId>
-        <artifactId>axis-jaxrpc</artifactId>
-        <version>${cs.axis.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>wsdl4j</groupId>
-        <artifactId>wsdl4j</artifactId>
-        <version>1.6.3</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>1.7.22</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
-        <version>1.7.22</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-server</artifactId>
-        <version>${cs.jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-servlets</artifactId>
-        <version>${cs.jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-webapp</artifactId>
-        <version>${cs.jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-jmx</artifactId>
-        <version>${cs.jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-util</artifactId>
-        <version>${cs.jetty.version}</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
+    <distributionManagement>
+        <site>
+            <id>apache.cloudstack.site</id>
+            <url>${site.deploy.url}</url>
+        </site>
+    </distributionManagement>
 
-  <dependencies>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-all</artifactId>
-      <version>${cs.hamcrest.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <version>${cs.mockito.version}</version>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <artifactId>hamcrest-core</artifactId>
-          <groupId>org.hamcrest</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${cs.junit.version}</version>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <artifactId>hamcrest-core</artifactId>
-          <groupId>org.hamcrest</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>com.tngtech.java</groupId>
-      <artifactId>junit-dataprovider</artifactId>
-      <version>${cs.junit.dataprovider.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-module-junit4</artifactId>
-      <version>${cs.powermock.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-api-mockito</artifactId>
-      <version>${cs.powermock.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-test</artifactId>
-      <version>${org.springframework.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-      <version>1</version>
-    </dependency>
-  </dependencies>
+    <inceptionYear>2012</inceptionYear>
 
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <sourceDirectory>src</sourceDirectory>
-    <testSourceDirectory>test</testSourceDirectory>
-    <resources>
-      <resource>
-        <directory>${basedir}/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>test/resources</directory>
-      </testResource>
-    </testResources>
-    <outputDirectory>${basedir}/${cs.target.dir}/classes</outputDirectory>
-    <testOutputDirectory>${basedir}/${cs.target.dir}/test-classes</testOutputDirectory>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checkstyle</id>
-            <phase>none</phase>
-            <inherited>false</inherited>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-checklicence</id>
-            <phase>none</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>findbugs-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>cloudstack-findbugs</id>
-            <phase>none</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-checkstyle-plugin</artifactId>
-          <version>${cs.checkstyle.version}</version>
-          <dependencies>
+    <mailingLists>
+        <mailingList>
+            <name>Apache CloudStack User List</name>
+            <subscribe>users-subscribe@cloudstack.apache.org</subscribe>
+            <unsubscribe>users-unsubscribe@cloudstack.apache.org</unsubscribe>
+            <post>users@cloudstack.apache.org</post>
+            <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-users</archive>
+            <otherArchives>
+                <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-users</otherArchive>
+            </otherArchives>
+        </mailingList>
+        <mailingList>
+            <name>Apache CloudStack Developer List</name>
+            <subscribe>dev-subscribe@cloudstack.apache.org</subscribe>
+            <unsubscribe>dev-unsubscribe@cloudstack.apache.org</unsubscribe>
+            <post>dev@cloudstack.apache.org</post>
+            <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-dev</archive>
+            <otherArchives>
+                <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-dev</otherArchive>
+            </otherArchives>
+        </mailingList>
+        <mailingList>
+            <name>Apache CloudStack Commits List</name>
+            <subscribe>commits-subscribe@cloudstack.apache.org</subscribe>
+            <unsubscribe>commits-unsubscribe@cloudstack.apache.org</unsubscribe>
+            <post>commits@cloudstack.apache.org</post>
+            <archive>http://mail-archives.apache.org/mod_mbox/cloudstack-commits</archive>
+            <otherArchives>
+                <otherArchive>http://mail-archives.apache.org/mod_mbox/incubator-cloudstack-commits</otherArchive>
+            </otherArchives>
+        </mailingList>
+    </mailingLists>
+
+    <developers>
+        <developer>
+            <name>The Apache CloudStack Team</name>
+            <email>dev@cloudstack.apache.org</email>
+            <url>http://cloudstack.apache.org/</url>
+            <organization>Apache Software Foundation</organization>
+            <organizationUrl>http://apache.org/</organizationUrl>
+        </developer>
+    </developers>
+
+    <ciManagement>
+        <system>Jenkins</system>
+        <url>http://builds.apache.org/</url>
+    </ciManagement>
+
+    <licenses>
+        <license>
+            <name>The Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <organization>
+        <name>The Apache Software Foundation</name>
+        <url>http://www.apache.org/</url>
+    </organization>
+
+    <modules>
+        <module>tools/checkstyle</module>
+        <module>api</module>
+        <module>agent</module>
+        <module>core</module>
+        <module>server</module>
+        <module>usage</module>
+        <module>utils</module>
+        <module>engine</module>
+        <module>plugins</module>
+        <module>framework</module>
+        <module>client</module>
+        <module>services</module>
+        <module>quickcloud</module>
+    </modules>
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- keep in alphabetic order -->
             <dependency>
-              <groupId>org.apache.cloudstack</groupId>
-              <artifactId>checkstyle</artifactId>
-              <version>${project.version}</version>
+                <groupId>br.com.autonomiccs</groupId>
+                <artifactId>apache-cloudstack-java-client</artifactId>
+                <version>${cs.apache-cloudstack-java-client.version}</version>
             </dependency>
-          </dependencies>
-          <executions>
-            <execution>
-              <id>cloudstack-checkstyle</id>
-              <phase>validate</phase>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-          <configuration>
-            <failsOnError>true</failsOnError>
-            <configLocation>cloud-style.xml</configLocation>
-            <consoleOutput>true</consoleOutput>
-            <includeTestSourceDirectory>true</includeTestSourceDirectory>
-            <sourceDirectory>${project.basedir}</sourceDirectory>
-            <includes>**\/*.java</includes>
-            <excludes>**\/deps\/,**\/test\/,**\/target\/,**\/bin\/,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat,**\/apidoc\/</excludes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>com.mycila</groupId>
-          <artifactId>license-maven-plugin</artifactId>
-          <version>${cs.mycila.license.version}</version>
-          <executions>
-            <execution>
-              <id>cloudstack-checklicence</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-          <configuration>
-            <strictCheck>true</strictCheck>
-            <aggregate>true</aggregate>
-            <header>LICENSE.header</header>
-            <mapping>
-              <xml>XML_STYLE</xml>
-              <java>DOUBLESLASH_STYLE</java>
-              <clj>SEMICOLON_STYLE</clj>
-            </mapping>
-            <useDefaultExcludes>false</useDefaultExcludes>
-            <excludes>
-              <exclude>**/target/**</exclude>
-              <exclude>.settings/**</exclude>
-              <exclude>.checkstyle</exclude>
-              <exclude>.project</exclude>
-              <exclude>.classpath</exclude>
-              <exclude>.pmd*</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <artifactId>maven-clean-plugin</artifactId>
-          <configuration>
-            <excludeDefaultDirectories>true</excludeDefaultDirectories>
-            <filesets>
-              <fileset>
-                <directory>${cs.target.dir}</directory>
-                <includes>
-                  <include>**/*</include>
-                </includes>
-              </fileset>
-              <fileset>
-                <directory>dist</directory>
-                <includes>
-                  <include>**/*</include>
-                </includes>
-              </fileset>
-              <fileset>
-                <directory>${basedir}</directory>
-                <includes>
-                  <include>${cs.target.dir}</include>
-                  <include>dist</include>
-                </includes>
-              </fileset>
-            </filesets>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.5.1</version>
-          <executions>
-            <execution>
-              <id>default</id>
-              <goals>
-                <goal>perform</goal>
-              </goals>
-              <configuration>
-                <pomFileName>pom.xml</pomFileName>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build
-          itself. -->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
+            <dependency>
+                <groupId>cglib</groupId>
+                <artifactId>cglib-nodep</artifactId>
+                <version>${cs.cglib.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.amazonaws</groupId>
+                <artifactId>aws-java-sdk-core</artifactId>
+                <version>${cs.aws.sdk.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.amazonaws</groupId>
+                <artifactId>aws-java-sdk-s3</artifactId>
+                <version>${cs.aws.sdk.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.globo.globodns</groupId>
+                <artifactId>globodns-client</artifactId>
+                <version>${cs.globodns-client.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.google.code.gson</groupId>
+                <artifactId>gson</artifactId>
+                <version>${cs.gson.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.google.guava</groupId>
+                <artifactId>guava</artifactId>
+                <version>${cs.guava.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.googlecode.java-ipv6</groupId>
+                <artifactId>java-ipv6</artifactId>
+                <version>${cs.java-ipv6.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.jcraft</groupId>
+                <artifactId>jsch</artifactId>
+                <version>${cs.jsch.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.rabbitmq</groupId>
+                <artifactId>amqp-client</artifactId>
+                <version>${cs.amqp-client.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.sun.jersey</groupId>
+                <artifactId>jersey-bundle</artifactId>
+                <version>${cs.jersey-bundle.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.thoughtworks.xstream</groupId>
+                <artifactId>xstream</artifactId>
+                <version>${cs.xstream.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.trilead</groupId>
+                <artifactId>trilead-ssh2</artifactId>
+                <version>${cs.trilead.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-codec</groupId>
+                <artifactId>commons-codec</artifactId>
+                <version>${cs.codec.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-configuration</groupId>
+                <artifactId>commons-configuration</artifactId>
+                <version>${cs.configuration.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-daemon</groupId>
+                <artifactId>commons-daemon</artifactId>
+                <version>${cs.daemon.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-dbcp2</artifactId>
+                <version>${cs.dbcp.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <artifactId>org.apache.commons</artifactId>
+                        <groupId>commons-pool2</groupId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>commons-discovery</groupId>
+                <artifactId>commons-discovery</artifactId>
+                <version>${cs.discovery.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-fileupload</groupId>
+                <artifactId>commons-fileupload</artifactId>
+                <version>${cs.commons-fileupload.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${cs.commons-io.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-lang</groupId>
+                <artifactId>commons-lang</artifactId>
+                <version>${cs.lang.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-net</groupId>
+                <artifactId>commons-net</artifactId>
+                <version>${cs.commons-net.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-pool2</artifactId>
+                <version>${cs.pool.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-validator</groupId>
+                <artifactId>commons-validator</artifactId>
+                <version>${cs.commons-validator.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>javax.mail</groupId>
+                <artifactId>mail</artifactId>
+                <version>${cs.mail.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>javax.servlet</groupId>
+                <artifactId>javax.servlet-api</artifactId>
+                <version>${cs.servlet.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jstl</groupId>
+                <artifactId>jstl</artifactId>
+                <version>${cs.jstl.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>apache-log4j-extras</artifactId>
+                <version>${cs.log4j.extras.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <artifactId>log4j</artifactId>
+                        <groupId>log4j</groupId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>${cs.log4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>mysql</groupId>
+                <artifactId>mysql-connector-java</artifactId>
+                <version>${cs.mysql.version}</version>
+                <scope>provided,test</scope>
+            </dependency>
+            <dependency>
+                <groupId>net.sf.ehcache</groupId>
+                <artifactId>ehcache-core</artifactId>
+                <version>${cs.ehcache.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.axis</groupId>
+                <artifactId>axis</artifactId>
+                <version>${cs.axis.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.axis</groupId>
+                <artifactId>axis-jaxrpc</artifactId>
+                <version>${cs.axis.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-collections4</artifactId>
+                <version>${cs.commons-collections.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-compress</artifactId>
+                <version>${cs.commons-compress.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-exec</artifactId>
+                <version>${cs.commons-exec.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-lang3</artifactId>
+                <version>${cs.commons-lang3.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpclient</artifactId>
+                <version>${cs.httpclient.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpcore</artifactId>
+                <version>${cs.httpcore.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.kafka</groupId>
+                <artifactId>kafka-clients</artifactId>
+                <version>${cs.kafka-clients.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.servicemix.bundles</groupId>
+                <artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
+                <version>${cs.servicemix.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.tomcat.embed</groupId>
+                <artifactId>tomcat-embed-core</artifactId>
+                <version>${cs.tomcat-embed-core.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.xmlgraphics</groupId>
+                <artifactId>batik-css</artifactId>
+                <version>${cs.batik.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.xmlgraphics</groupId>
+                <artifactId>batik-ext</artifactId>
+                <version>${cs.batik.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.xmlgraphics</groupId>
+                <artifactId>batik-util</artifactId>
+                <version>${cs.batik.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.aspectj</groupId>
+                <artifactId>aspectjrt</artifactId>
+                <version>${cs.aspectjrt.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.aspectj</groupId>
+                <artifactId>aspectjtools</artifactId>
+                <version>1.8.13</version>
+            </dependency>
+            <dependency>
+                <groupId>org.aspectj</groupId>
+                <artifactId>aspectjweaver</artifactId>
+                <version>1.8.13</version>
+            </dependency>
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcpkix-jdk15on</artifactId>
+                <version>${cs.bcprov.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcprov-jdk15on</artifactId>
+                <version>${cs.bcprov.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.groovy</groupId>
+                <artifactId>groovy-all</artifactId>
+                <version>${cs.groovy.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-jmx</artifactId>
+                <version>${cs.jetty.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-server</artifactId>
+                <version>${cs.jetty.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-servlets</artifactId>
+                <version>${cs.jetty.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-util</artifactId>
+                <version>${cs.jetty.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-webapp</artifactId>
+                <version>${cs.jetty.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.persistence</groupId>
+                <artifactId>javax.persistence</artifactId>
+                <version>${cs.jpa.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.jasypt</groupId>
+                <artifactId>jasypt</artifactId>
+                <version>${cs.jasypt.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.javassist</groupId>
+                <artifactId>javassist</artifactId>
+                <version>${cs.javassist.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.json</groupId>
+                <artifactId>json</artifactId>
+                <version>${cs.json.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opensaml</groupId>
+                <artifactId>opensaml</artifactId>
+                <version>${cs.opensaml.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.owasp.esapi</groupId>
+                <artifactId>esapi</artifactId>
+                <version>2.1.0.1</version>
+            </dependency>
+            <!-- Test dependency in mysql for db tests -->
+            <dependency>
+                <groupId>org.reflections</groupId>
+                <artifactId>reflections</artifactId>
+                <version>${cs.reflections.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-api</artifactId>
+                <version>1.7.22</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-log4j12</artifactId>
+                <version>1.7.22</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-aop</artifactId>
+                <version>${org.springframework.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-beans</artifactId>
+                <version>${org.springframework.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-context</artifactId>
+                <version>${org.springframework.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-web</artifactId>
+                <version>${org.springframework.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.testng</groupId>
+                <artifactId>testng</artifactId>
+                <version>${cs.testng.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>wsdl4j</groupId>
+                <artifactId>wsdl4j</artifactId>
+                <version>1.6.3</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <!-- hamcrest should always be the first -->
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-all</artifactId>
+            <version>${cs.hamcrest.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>${cs.mockito.version}</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <artifactId>hamcrest-core</artifactId>
+                    <groupId>org.hamcrest</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${cs.junit.version}</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <artifactId>hamcrest-core</artifactId>
+                    <groupId>org.hamcrest</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.tngtech.java</groupId>
+            <artifactId>junit-dataprovider</artifactId>
+            <version>${cs.junit.dataprovider.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>${cs.powermock.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito</artifactId>
+            <version>${cs.powermock.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>${org.springframework.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <defaultGoal>install</defaultGoal>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-findbugs</id>
+                        <phase>none</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-checkstyle-plugin</artifactId>
+                    <version>${cs.checkstyle-plugin.version}</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.cloudstack</groupId>
+                            <artifactId>checkstyle</artifactId>
+                            <version>${project.version}</version>
+                        </dependency>
+                        <dependency>
+                            <groupId>com.puppycrawl.tools</groupId>
+                            <artifactId>checkstyle</artifactId>
+                            <version>${cs.checkstyle-lib.version}</version>
+                        </dependency>
+                    </dependencies>
+                    <executions>
+                        <execution>
+                            <id>cloudstack-checkstyle</id>
+                            <phase>validate</phase>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <failsOnError>true</failsOnError>
+                        <configLocation>cloud-style.xml</configLocation>
+                        <consoleOutput>true</consoleOutput>
+                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
+                        <sourceDirectories>
+                            <sourceDirectory>${project.basedir}</sourceDirectory>
+                        </sourceDirectories>
+                        <includes>**\/*.java</includes>
+                        <excludes>**\/deps\/,**\/test\/,**\/target\/,**\/bin\/,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat,**\/XmlToHtmlConverter*,**\/generated-sources\/**\/*</excludes>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-clean-plugin</artifactId>
+                    <configuration>
+                        <excludeDefaultDirectories>true</excludeDefaultDirectories>
+                        <filesets>
+                            <fileset>
+                                <directory>${cs.target.dir}</directory>
+                                <includes>
+                                    <include>**/*</include>
+                                </includes>
+                            </fileset>
+                            <fileset>
+                                <directory>dist</directory>
+                                <includes>
+                                    <include>**/*</include>
+                                </includes>
+                            </fileset>
+                            <fileset>
+                                <directory>${basedir}</directory>
+                                <includes>
+                                    <include>${cs.target.dir}</include>
+                                    <include>dist</include>
+                                </includes>
+                            </fileset>
+                        </filesets>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-release-plugin</artifactId>
+                    <version>${cs.release-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <id>default</id>
+                            <goals>
+                                <goal>perform</goal>
+                            </goals>
+                            <configuration>
+                                <pomFileName>pom.xml</pomFileName>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. -->
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.apache.maven.plugins</groupId>
+                                        <artifactId>maven-antrun-plugin</artifactId>
+                                        <versionRange>[1.7,)</versionRange>
+                                        <goals>
+                                            <goal>run</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore />
+                                    </action>
+                                </pluginExecution>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.apache.maven.plugins</groupId>
+                                        <artifactId>maven-dependency-plugin</artifactId>
+                                        <versionRange>[2.0,)</versionRange>
+                                        <goals>
+                                            <goal>copy-dependencies</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore />
+                                    </action>
+                                </pluginExecution>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.codehaus.gmaven</groupId>
+                                        <artifactId>gmaven-plugin</artifactId>
+                                        <versionRange>[1.3,)</versionRange>
+                                        <goals>
+                                            <goal>compile</goal>
+                                            <goal>testCompile</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore></ignore>
+                                    </action>
+                                </pluginExecution>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.apache.maven.plugins</groupId>
+                                        <artifactId>maven-checkstyle-plugin</artifactId>
+                                        <versionRange>[2.11,)</versionRange>
+                                        <goals>
+                                            <goal>check</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore></ignore>
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+                <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-antrun-plugin</artifactId>
-                    <versionRange>[1.7,)</versionRange>
-                    <goals>
-                      <goal>run</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
+                    <version>${cs.antrun-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.rat</groupId>
+                    <artifactId>apache-rat-plugin</artifactId>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <numUnapprovedLicenses>0</numUnapprovedLicenses>
+                        <excludeSubProjects>false</excludeSubProjects>
+                        <excludes>
+                            <!-- keep in alphabetic order -->
+                            <exclude>**/*.log</exclude>
+                            <exclude>**/*.patch</exclude>
+                            <exclude>**/.classpath</exclude>
+                            <exclude>**/.project</exclude>
+                            <exclude>**/.idea/**</exclude>
+                            <exclude>**/*.iml</exclude>
+                            <exclude>**/.settings/**</exclude>
+                            <exclude>**/*.crt</exclude>
+                            <exclude>**/*.csr</exclude>
+                            <exclude>**/*.key</exclude>
+                            <exclude>**/authorized_keys</exclude>
+                            <exclude>**/*.war</exclude>
+                            <exclude>**/*.mar</exclude>
+                            <exclude>**/*.jar</exclude>
+                            <exclude>**/*.iso</exclude>
+                            <exclude>**/*.tgz</exclude>
+                            <exclude>**/*.zip</exclude>
+                            <exclude>**/target/**</exclude>
+                            <exclude>**/.vagrant</exclude>
+                            <exclude>**/*.json</exclude>
+                            <exclude>**/.checkstyle</exclude>
+                            <exclude>**/*.md</exclude>
+                            <exclude>.java-version</exclude>
+                            <exclude>.python-version</exclude>
+                            <exclude>.idea/</exclude>
+                            <exclude>.metadata/**</exclude>
+                            <exclude>.git/**</exclude>
+                            <exclude>.gitignore</exclude>
+                            <exclude>CHANGES.md</exclude>
+                            <exclude>CONTRIBUTING.md</exclude>
+                            <exclude>README.md</exclude>
+                            <exclude>INSTALL.md</exclude>
+                            <exclude>build/build.number</exclude>
+                            <exclude>debian/cloudstack-agent.dirs</exclude>
+                            <exclude>debian/cloudstack-usage.dirs</exclude>
+                            <exclude>debian/compat</exclude>
+                            <exclude>debian/control</exclude>
+                            <exclude>debian/dirs</exclude>
+                            <exclude>debian/rules</exclude>
+                            <exclude>debian/source/format</exclude>
+                            <exclude>dist/console-proxy/js/jquery.js</exclude>
+                            <exclude>plugins/hypervisors/hyperv/conf/agent.properties</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/ServerResource.sln</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/packages/**</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/.nuget/**</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/obj/**</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/bin/**</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/packages.config</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/App.config</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/*.csproj</exclude>
+                            <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/*.settings</exclude>
+                            <exclude>scripts/installer/windows/acs_license.rtf</exclude>
+                            <exclude>scripts/vm/systemvm/id_rsa.cloud</exclude>
+                            <exclude>services/console-proxy/server/conf/agent.properties</exclude>
+                            <exclude>services/console-proxy/server/conf/environment.properties</exclude>
+                            <exclude>services/console-proxy/server/js/jquery.js</exclude>
+                            <exclude>services/secondary-storage/conf/agent.properties</exclude>
+                            <exclude>services/secondary-storage/conf/environment.properties</exclude>
+                            <exclude>systemvm/agent/conf/agent.properties</exclude>
+                            <exclude>systemvm/agent/conf/environment.properties</exclude>
+                            <exclude>systemvm/agent/js/jquery.js</exclude>
+                            <exclude>systemvm/agent/js/jquery.flot.navigate.js</exclude>
+                            <exclude>systemvm/debian/**</exclude>
+                            <exclude>test/integration/component/test_host_ha.sh</exclude>
+                            <exclude>test/systemvm/README.md</exclude>
+                            <exclude>tools/appliance/*/template.json</exclude>
+                            <exclude>tools/cli/cloudmonkey.egg-info/*</exclude>
+                            <exclude>tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf</exclude>
+                            <exclude>tools/docker/Dockerfile</exclude>
+                            <exclude>tools/docker/supervisord.conf</exclude>
+                            <exclude>tools/logo/apache_cloudstack.png</exclude>
+                            <exclude>tools/marvin/Marvin.egg-info/*</exclude>
+                            <exclude>tools/marvin/marvin/sandbox/advanced/sandbox.cfg</exclude>
+                            <exclude>tools/ngui/static/bootstrap/*</exclude>
+                            <exclude>tools/ngui/static/js/lib/*</exclude>
+                            <exclude>tools/transifex/.tx/config</exclude>
+                            <exclude>ui/css/token-input-facebook.css</exclude>
+                            <exclude>ui/l10n/*</exclude>
+                            <exclude>ui/lib/flot/jquery.colorhelpers.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.crosshair.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.fillbetween.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.image.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.navigate.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.pie.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.resize.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.selection.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.stack.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.symbol.js</exclude>
+                            <exclude>ui/lib/flot/jquery.flot.threshold.js</exclude>
+                            <exclude>ui/lib/jquery-ui/css/jquery-ui.css</exclude>
+                            <exclude>ui/lib/jquery-ui/index.html</exclude>
+                            <exclude>ui/lib/jquery-ui/js/jquery-ui.js</exclude>
+                            <exclude>ui/lib/jquery.cookies.js</exclude>
+                            <exclude>ui/lib/jquery.easing.js</exclude>
+                            <exclude>ui/lib/jquery.js</exclude>
+                            <exclude>ui/lib/jquery.md5.js</exclude>
+                            <exclude>ui/lib/jquery.validate.js</exclude>
+                            <exclude>ui/lib/jquery.tokeninput.js</exclude>
+                            <exclude>ui/lib/qunit/qunit.css</exclude>
+                            <exclude>ui/lib/qunit/qunit.js</exclude>
+                            <exclude>ui/lib/reset.css</exclude>
+                            <exclude>ui/lib/require.js</exclude>
+                            <exclude>utils/testsmallfileinactive</exclude>
+                        </excludes>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>${cs.compiler-plugin.version}</version>
+                    <configuration>
+                        <source>${cs.jdk.version}</source>
+                        <target>${cs.jdk.version}</target>
+                        <fork>true</fork>
+                        <meminitial>128m</meminitial>
+                        <maxmem>512m</maxmem>
+                        <compilerArgument>-XDignore.symbol.file=true</compilerArgument>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>${cs.jar-plugin.version}</version>
+                    <configuration>
+                        <archive>
+                            <addMavenDescriptor>false</addMavenDescriptor>
+                            <manifest>
+                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                            </manifest>
+                        </archive>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>build-helper-maven-plugin</artifactId>
+                    <version>${cs.builder-helper-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <id>remove-old-installers</id>
+                            <goals>
+                                <goal>remove-project-artifact</goal>
+                            </goals>
+                            <configuration>
+                                <removeAll>true</removeAll>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-dependency-plugin</artifactId>
-                    <versionRange>[2.0,)</versionRange>
-                    <goals>
-                      <goal>copy-dependencies</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>com.mycila</groupId>
-                    <artifactId>license-maven-plugin</artifactId>
-                    <versionRange>[2.5,)</versionRange>
-                    <goals>
-                      <goal>format</goal>
-                      <goal>check</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore></ignore>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.codehaus.gmaven</groupId>
-                    <artifactId>gmaven-plugin</artifactId>
-                    <versionRange>[1.3,)</versionRange>
-                    <goals>
-                      <goal>compile</goal>
-                      <goal>testCompile</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore></ignore>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-			<pluginExecutionFilter>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-checkstyle-plugin</artifactId>
-				<versionRange>[2.11,)</versionRange>
-				<goals>
-					<goal>check</goal>
-				</goals>
-			</pluginExecutionFilter>
-			<action>
-				<ignore></ignore>
-			</action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-antrun-plugin</artifactId>
-          <version>1.8</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <configuration>
-            <numUnapprovedLicenses>0</numUnapprovedLicenses>
-            <excludeSubProjects>false</excludeSubProjects>
-            <excludes>
-              <exclude>CHANGES.md</exclude>
-              <exclude>README.md</exclude>
-              <exclude>INSTALL.md</exclude>
-              <exclude>CONTRIBUTING.md</exclude>
-              <exclude>tools/docker/Dockerfile</exclude>
-              <exclude>tools/docker/supervisord.conf</exclude>
-              <exclude>.java-version</exclude>
-              <exclude>.python-version</exclude>
-              <exclude>.idea/</exclude>
-              <exclude>**/*.log</exclude>
-              <exclude>**/*.patch</exclude>
-              <exclude>**/.classpath</exclude>
-              <exclude>**/.project</exclude>
-              <exclude>**/.idea/**</exclude>
-              <exclude>**/*.iml</exclude>
-              <exclude>**/.settings/**</exclude>
-              <exclude>.metadata/**</exclude>
-              <exclude>.git/**</exclude>
-              <exclude>.gitignore</exclude>
-              <exclude>**/*.crt</exclude>
-              <exclude>**/*.csr</exclude>
-              <exclude>**/*.key</exclude>
-              <exclude>**/authorized_keys</exclude>
-              <exclude>**/*.war</exclude>
-              <exclude>**/*.mar</exclude>
-              <exclude>**/*.jar</exclude>
-              <exclude>**/*.iso</exclude>
-              <exclude>**/*.tgz</exclude>
-              <exclude>**/*.zip</exclude>
-              <exclude>**/target/**</exclude>
-              <exclude>**/.vagrant</exclude>
-              <exclude>**/*.json</exclude>
-              <exclude>build/build.number</exclude>
-              <exclude>services/console-proxy/server/js/jquery.js</exclude>
-              <exclude>debian/cloudstack-usage.dirs</exclude>
-              <exclude>debian/cloudstack-agent.dirs</exclude>
-              <exclude>debian/compat</exclude>
-              <exclude>debian/control</exclude>
-              <exclude>debian/dirs</exclude>
-              <exclude>debian/rules</exclude>
-              <exclude>debian/source/format</exclude>
-              <exclude>dist/console-proxy/js/jquery.js</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/ServerResource.sln</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/packages/**</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/.nuget/**</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/obj/**</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/bin/**</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/packages.config</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/App.config</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/*.csproj</exclude>
-              <exclude>plugins/hypervisors/hyperv/DotNet/ServerResource/**/*.settings</exclude>
-              <exclude>plugins/hypervisors/hyperv/conf/agent.properties</exclude>
-              <exclude>scripts/vm/systemvm/id_rsa.cloud</exclude>
-              <exclude>services/console-proxy/server/conf/agent.properties</exclude>
-              <exclude>services/console-proxy/server/conf/environment.properties</exclude>
-              <exclude>services/secondary-storage/conf/agent.properties</exclude>
-              <exclude>services/secondary-storage/conf/environment.properties</exclude>
-              <exclude>test/systemvm/README.md</exclude>
-              <exclude>tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf</exclude>
-              <exclude>tools/appliance/*/template.json</exclude>
-              <exclude>tools/cli/cloudmonkey.egg-info/*</exclude>
-              <exclude>tools/marvin/Marvin.egg-info/*</exclude>
-              <exclude>ui/css/token-input-facebook.css</exclude>
-              <exclude>ui/l10n/*</exclude>
-              <exclude>ui/lib/flot/jquery.colorhelpers.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.crosshair.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.fillbetween.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.image.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.navigate.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.pie.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.resize.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.selection.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.stack.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.symbol.js</exclude>
-              <exclude>ui/lib/flot/jquery.flot.threshold.js</exclude>
-              <exclude>ui/lib/jquery-ui/css/jquery-ui.css</exclude>
-              <exclude>ui/lib/jquery-ui/index.html</exclude>
-              <exclude>ui/lib/jquery-ui/js/jquery-ui.js</exclude>
-              <exclude>ui/lib/jquery.cookies.js</exclude>
-              <exclude>ui/lib/jquery.easing.js</exclude>
-              <exclude>ui/lib/jquery.js</exclude>
-              <exclude>ui/lib/jquery.md5.js</exclude>
-              <exclude>ui/lib/jquery.validate.js</exclude>
-              <exclude>ui/lib/jquery.tokeninput.js</exclude>
-              <exclude>ui/lib/qunit/qunit.css</exclude>
-              <exclude>ui/lib/qunit/qunit.js</exclude>
-              <exclude>ui/lib/reset.css</exclude>
-              <exclude>ui/lib/require.js</exclude>
-              <exclude>utils/testsmallfileinactive</exclude>
-              <exclude>systemvm/agent/conf/agent.properties</exclude>
-              <exclude>systemvm/agent/conf/environment.properties</exclude>
-              <exclude>systemvm/agent/js/jquery.js</exclude>
-              <exclude>systemvm/agent/js/jquery.flot.navigate.js</exclude>
-              <exclude>systemvm/debian/**</exclude>
-              <exclude>tools/transifex/.tx/config</exclude>
-              <exclude>tools/logo/apache_cloudstack.png</exclude>
-              <exclude>tools/marvin/marvin/sandbox/advanced/sandbox.cfg</exclude>
-              <exclude>tools/ngui/static/bootstrap/*</exclude>
-              <exclude>tools/ngui/static/js/lib/*</exclude>
-              <exclude>**/.checkstyle</exclude>
-              <exclude>scripts/installer/windows/acs_license.rtf</exclude>
-              <exclude>**/*.md</exclude>
-              <exclude>test/integration/component/test_host_ha.sh</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.2</version>
-          <configuration>
-            <source>${cs.jdk.version}</source>
-            <target>${cs.jdk.version}</target>
-            <fork>true</fork>
-            <meminitial>128m</meminitial>
-            <maxmem>512m</maxmem>
-            <compilerArgument>-XDignore.symbol.file=true</compilerArgument>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <version>2.5</version>
-          <configuration>
-            <archive>
-              <addMavenDescriptor>false</addMavenDescriptor>
-              <manifest>
-                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-              </manifest>
-            </archive>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>build-helper-maven-plugin</artifactId>
-          <version>1.9.1</version>
-          <executions>
-            <execution>
-              <id>remove-old-installers</id>
-              <goals>
-                <goal>remove-project-artifact</goal>
-              </goals>
-              <configuration>
-                <removeAll>true</removeAll>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-dependency-plugin</artifactId>
-          <version>2.9</version>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>cobertura-maven-plugin</artifactId>
-          <configuration>
-            <formats>
-              <format>html</format>
-              <format>xml</format>
-            </formats>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>findbugs-maven-plugin</artifactId>
-          <version>${cs.findbugs.version}</version>
-          <dependencies>
-            <dependency>
-              <groupId>org.apache.cloudstack</groupId>
-              <artifactId>checkstyle</artifactId>
-              <version>${project.version}</version>
-            </dependency>
-          </dependencies>
-          <configuration>
-            <effort>Max</effort>
-            <threshold>High</threshold>
-            <xmlOutput>true</xmlOutput>
-            <failOnError>false</failOnError>
-            <maxHeap>2048</maxHeap>
-            <excludeFilterFile>findbugsExcludeFilter.xml</excludeFilterFile>
-          </configuration>
-          <executions>
-            <execution>
-              <id>cloudstack-findbugs</id>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-pmd-plugin</artifactId>
-          <version>3.3</version>
-          <dependencies>
-            <dependency>
-              <groupId>org.apache.cloudstack</groupId>
-              <artifactId>checkstyle</artifactId>
-              <version>${project.version}</version>
-            </dependency>
-          </dependencies>
-          <configuration>
-            <failOnViolation>false</failOnViolation>
-            <rulesets>
-              <ruleset>cloud-pmd.xml</ruleset>
-            </rulesets>
-          </configuration>
-          <executions>
-            <execution>
-              <id>cloudstack-pmd</id>
-              <goals>
-                <goal>check</goal>
-                <goal>cpd-check</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <version>2.18.1</version>
-          <configuration>
-            <argLine>-Djava.security.egd=file:/dev/./urandom -noverify</argLine>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-failsafe-plugin</artifactId>
-          <version>2.18.1</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>findbugs-maven-plugin</artifactId>
-        <version>${cs.findbugs.version}</version>
-        <configuration>
-          <threshold>Low</threshold><!-- High|Normal|Low|Exp|Ignore -->
-          <effort>Default</effort><!-- Min|Default|Max -->
-          <excludeFilterFile>${basedir}/findbugsExcludeFilter.xml</excludeFilterFile>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>${cs.javadoc.version}</version>
-        <configuration>
-          <minmemory>128m</minmemory>
-          <maxmemory>1g</maxmemory>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>2.7</version>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>cobertura-maven-plugin</artifactId>
-        <version>2.6</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-site-plugin</artifactId>
-        <version>3.4</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <version>2.7</version>
-      </plugin>
-    </plugins>
-  </reporting>
-  <profiles>
-    <profile>
-      <id>systemvm</id>
-      <activation>
-        <property>
-          <name>systemvm</name>
-        </property>
-      </activation>
-      <modules>
-        <module>systemvm</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>eclipse</id>
-      <properties>
-        <cs.target.dir>target-eclipse</cs.target.dir>
-      </properties>
-    </profile>
-    <profile>
-      <id>developer</id>
-      <properties>
-        <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
-      </properties>
-      <modules>
-        <module>test</module>
-        <module>developer</module>
-        <module>tools</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>impatient</id>
-      <properties>
-        <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
-      </properties>
-      <modules>
-        <module>developer</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>vmware</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-      <modules>
-        <module>vmware-base</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>disablecheckstyle</id>
-      <build>
+                    <version>${cs.dependency-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>cobertura-maven-plugin</artifactId>
+                    <configuration>
+                        <formats>
+                            <format>html</format>
+                            <format>xml</format>
+                        </formats>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>findbugs-maven-plugin</artifactId>
+                    <version>${cs.findbugs-plugin.version}</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.cloudstack</groupId>
+                            <artifactId>checkstyle</artifactId>
+                            <version>${project.version}</version>
+                        </dependency>
+                    </dependencies>
+                    <configuration>
+                        <effort>Max</effort>
+                        <threshold>High</threshold>
+                        <xmlOutput>true</xmlOutput>
+                        <failOnError>false</failOnError>
+                        <maxHeap>2048</maxHeap>
+                        <excludeFilterFile>findbugsExcludeFilter.xml</excludeFilterFile>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>cloudstack-findbugs</id>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-pmd-plugin</artifactId>
+                    <version>${cs.pmd-plugin.version}</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.cloudstack</groupId>
+                            <artifactId>checkstyle</artifactId>
+                            <version>${project.version}</version>
+                        </dependency>
+                    </dependencies>
+                    <configuration>
+                        <failOnViolation>false</failOnViolation>
+                        <rulesets>
+                            <ruleset>cloud-pmd.xml</ruleset>
+                        </rulesets>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>cloudstack-pmd</id>
+                            <goals>
+                                <goal>check</goal>
+                                <goal>cpd-check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>${cs.surefire-plugin.version}</version>
+                    <configuration>
+                        <argLine>-Djava.security.egd=file:/dev/./urandom -noverify</argLine>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-failsafe-plugin</artifactId>
+                    <version>${cs.failsafe-plugin.version}</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+    <reporting>
         <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-checkstyle-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>cloudstack-checkstyle</id>
-                <phase>none</phase>
-                <inherited>true</inherited>
-              </execution>
-            </executions>
-          </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <version>${cs.findbugs-plugin.version}</version>
+                <configuration>
+                    <threshold>Low</threshold><!-- High|Normal|Low|Exp|Ignore -->
+                    <effort>Default</effort><!-- Min|Default|Max -->
+                    <excludeFilterFile>${basedir}/findbugsExcludeFilter.xml</excludeFilterFile>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${cs.javadoc.version}</version>
+                <configuration>
+                    <minmemory>128m</minmemory>
+                    <maxmemory>1g</maxmemory>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>${cs.project-info-plugin.version}</version>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>cobertura-maven-plugin</artifactId>
+                <version>${cs.cobertura-plugin.version}</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-site-plugin</artifactId>
+                <version>${cs.site-plugin.version}</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>${cs.resources-plugin.version}</version>
+            </plugin>
         </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>enablefindbugs</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>findbugs-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>cloudstack-findbugs</id>
-                <phase>process-classes</phase>
-                <inherited>true</inherited>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>buildw</id>
-      <activation>
-        <property>
-          <name>buildw</name>
-        </property>
-      </activation>
-      <modules>
-        <module>tools/wix-cloudstack-maven-plugin</module>
-      </modules>
-    </profile>
-  </profiles>
+    </reporting>
+    <profiles>
+        <profile>
+            <id>systemvm</id>
+            <activation>
+                <property>
+                    <name>systemvm</name>
+                </property>
+            </activation>
+            <modules>
+                <module>systemvm</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>eclipse</id>
+            <properties>
+                <cs.target.dir>target-eclipse</cs.target.dir>
+            </properties>
+        </profile>
+        <profile>
+            <id>developer</id>
+            <properties>
+                <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
+            </properties>
+            <modules>
+                <module>test</module>
+                <module>developer</module>
+                <module>tools</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>impatient</id>
+            <properties>
+                <marvin.config>tools/devcloud/devcloud.cfg</marvin.config>
+            </properties>
+            <modules>
+                <module>developer</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>vmware</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <modules>
+                <module>vmware-base</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>disablecheckstyle</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-checkstyle-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>cloudstack-checkstyle</id>
+                                <phase>none</phase>
+                                <inherited>true</inherited>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>enablefindbugs</id>
+            <build>
+                <plugins>
+<!--                     <plugin> -->
+<!--                         <groupId>org.apache.maven.plugins</groupId> -->
+<!--                         <artifactId>maven-pmd-plugin</artifactId> -->
+<!--                     </plugin> -->
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>findbugs-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>cloudstack-findbugs</id>
+                                <phase>process-classes</phase>
+                                <inherited>true</inherited>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>buildw</id>
+            <activation>
+                <property>
+                    <name>buildw</name>
+                </property>
+            </activation>
+            <modules>
+                <module>tools/wix-cloudstack-maven-plugin</module>
+            </modules>
+        </profile>
+    </profiles>
 </project>
diff --git a/quickcloud/pom.xml b/quickcloud/pom.xml
index 103df28..f39f9ec 100644
--- a/quickcloud/pom.xml
+++ b/quickcloud/pom.xml
@@ -1,30 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-quickcloud</artifactId>
-  <name>Apache CloudStack Framework - QuickCloud</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-maven-standard</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../maven-standard/pom.xml</relativePath>
-  </parent>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-quickcloud</artifactId>
+    <name>Apache CloudStack Framework - QuickCloud</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
 </project>
diff --git a/requirements.txt b/requirements.txt
index 5f2551e..4485f5d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -21,5 +21,4 @@
 # Marvin dependencies are installed via its bundle
 
 # Install the SolidFire SDK for Python
-solidfire-sdk-python
-
+solidfire-sdk-python
\ No newline at end of file
diff --git a/scripts/installer/windows/client.wxs b/scripts/installer/windows/client.wxs
index ee09744..8dfec67 100644
--- a/scripts/installer/windows/client.wxs
+++ b/scripts/installer/windows/client.wxs
@@ -242,52 +242,6 @@
                         <Component Id="cmpB896F9C9402F7ED2A5A73E7E72AA47EC" Guid="{09161858-B862-4F63-BFC7-29D987F979B2}">
                             <File Id="fil6294934093F183677F1A4AD751513E3B" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\index.html" />
                         </Component>
-                        <Directory Id="dirC806E0BA40BBC0495FCEC8FB488812B0" Name="css">
-                            <Component Id="cmp6BEE710358ED5D0560BAEA9B4BF6830C" Guid="{B59E38D3-875C-4C3A-9F41-15C47EBF5C6B}">
-                                <File Id="filB6CF9EFD6D31DAC31A5451BB68BE7976" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\jquery-ui.css" />
-                            </Component>
-                            <Directory Id="dir40F32B62EF8F8E3765CBA3DB53D9A606" Name="images">
-                                <Component Id="cmp21F37DDAADFFEE972EF4291DE2C0E6CB" Guid="{A149C437-AD9B-40B9-A412-A2084F45E412}">
-                                    <File Id="fil68FD224A3F75BC3917D7BBF14493A630" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_flat_0_aaaaaa_40x100.png" />
-                                </Component>
-                                <Component Id="cmpE4F2B110A7EFD179E687179AE1AA86A2" Guid="{FCD6DE81-D3CE-40F2-AB20-434DEDC45BCD}">
-                                    <File Id="fil1A31F18ECF985E67CA819DC857FD25FA" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_flat_75_ffffff_40x100.png" />
-                                </Component>
-                                <Component Id="cmp818FCCB7641D478456749FAA06AE6D5C" Guid="{5104511A-8782-4EF0-B083-7FC82B07E213}">
-                                    <File Id="filFC158394112CF07E1C65BD8482D95187" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_glass_55_fbf9ee_1x400.png" />
-                                </Component>
-                                <Component Id="cmp44E96AA22DDD71CB6D2AF9F0E94D900A" Guid="{5B9702D4-0326-4ED1-90BD-6DE0D572B506}">
-                                    <File Id="filB158DA221A80AE27D2DF51185F7C9537" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_glass_65_ffffff_1x400.png" />
-                                </Component>
-                                <Component Id="cmp9F07D2C402E481C9A32B832E9767F54A" Guid="{3797F95D-F296-4278-8FEB-EF443DE4C810}">
-                                    <File Id="fil06B08BFD4F535FE76C3945549BF4A68E" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_glass_75_dadada_1x400.png" />
-                                </Component>
-                                <Component Id="cmp4F8EE7EF5CC235B975A88C5F5F7EADB1" Guid="{70337B38-CAEC-4C93-9943-B361AAA5D4A9}">
-                                    <File Id="filEC3A72A46009E27C908675849A49A348" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_glass_75_e6e6e6_1x400.png" />
-                                </Component>
-                                <Component Id="cmp0BF64BE05CC2A27F7E3AA10F198E7258" Guid="{65206B31-FC9C-4FD0-81F6-8A9F444DE240}">
-                                    <File Id="fil7278C7C5E3D8DB4F98F167E48B415041" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_highlight-hard_75_a7c1d2_1x100.png" />
-                                </Component>
-                                <Component Id="cmp097C9AEBBD0BB12A63B41A5505EABF92" Guid="{633B153D-494E-400A-95D5-6AD2013821FE}">
-                                    <File Id="filAD6FE25F6623292C5FAA1833EB693EC8" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-bg_inset-soft_95_fef1ec_1x100.png" />
-                                </Component>
-                                <Component Id="cmpF4E73A2FE6A8101861EBB6248B78CDB9" Guid="{B3F937A5-DFB3-429B-89F7-FF6E59DA6926}">
-                                    <File Id="fil56EC5C018E24F998AEB81B9F6D01019D" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-icons_222222_256x240.png" />
-                                </Component>
-                                <Component Id="cmp17CF84538B1BCD9FF96FBD0F636410B1" Guid="{69B11891-9B51-457B-BEFC-2E361D8FA5AA}">
-                                    <File Id="fil6C4C42211A7E622A380F15EF4FD8F691" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-icons_2e83ff_256x240.png" />
-                                </Component>
-                                <Component Id="cmp27075FFB9AF246A5F27D1B07E59E4807" Guid="{35C7E5C3-5EF9-44CC-958D-4E5E0E03DD68}">
-                                    <File Id="fil7DBFF6F1A5CCF82626E9D02C5E85FBE0" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-icons_454545_256x240.png" />
-                                </Component>
-                                <Component Id="cmp23B407781C5AA7099F7779F0EC9E5239" Guid="{333E199D-F898-4E7E-8F7D-2C6C6BA41EE0}">
-                                    <File Id="filB4656FAE675473310875665E6BE9A9C0" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-icons_888888_256x240.png" />
-                                </Component>
-                                <Component Id="cmpC00F3D14E656727772C11FADE4C236B2" Guid="{650C3EA7-58A2-406F-92FA-633F4D89AD1E}">
-                                    <File Id="fil267CDE35AFF0624F5FAC1FEC6C53ECE5" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\css\images\ui-icons_cd0a0a_256x240.png" />
-                                </Component>
-                            </Directory>
-                        </Directory>
                         <Directory Id="dir8BD83F54792BF112293F68228061B997" Name="js">
                             <Component Id="cmpA0734BF7F3979F291D1861DF998DADA5" Guid="{7D82D9A4-D927-4B70-88F3-BB727880B0B8}">
                                 <File Id="fil2785FBE05BDB131F0F6415B8F155621B" KeyPath="yes" Source="!(wix.SourceClient)\lib\jquery-ui\js\jquery-ui.js" />
@@ -437,9 +391,6 @@
                     <Component Id="cmpA9C076F1199B904BB57D1BC96A919814" Guid="{91870ECD-F1AA-4B69-BCEC-9536BA94A0DC}">
                         <File Id="fil4CE0C842A4EF2E3C8322F88626C527E4" KeyPath="yes" Source="!(wix.SourceClient)\scripts\templates.js" />
                     </Component>
-                    <Component Id="cmp429AD4BBE2ABA44D598EF5DC4482C2A4" Guid="{29B7D8A7-D7FB-46C3-8808-4EBE6D848116}">
-                        <File Id="filDFD0025C484842DE376C881CFB81DC80" KeyPath="yes" Source="!(wix.SourceClient)\scripts\vm_snapshots.js" />
-                    </Component>
                     <Component Id="cmpA7B70148FAF23BE9246895B84B8E76EE" Guid="{06FB0332-62B7-4753-A0DA-B4906498D3A6}">
                         <File Id="fil560BA36DCB23B6FD4BCC65D8B062DAE6" KeyPath="yes" Source="!(wix.SourceClient)\scripts\vpc.js" />
                     </Component>
@@ -1892,20 +1843,6 @@
             <ComponentRef Id="cmpB1A795AD8630C8AA4ACBCA057CADD8F9" />
             <ComponentRef Id="cmp5C4C9F9823053BCD798D1613E8B706F9" />
             <ComponentRef Id="cmpB896F9C9402F7ED2A5A73E7E72AA47EC" />
-            <ComponentRef Id="cmp6BEE710358ED5D0560BAEA9B4BF6830C" />
-            <ComponentRef Id="cmp21F37DDAADFFEE972EF4291DE2C0E6CB" />
-            <ComponentRef Id="cmpE4F2B110A7EFD179E687179AE1AA86A2" />
-            <ComponentRef Id="cmp818FCCB7641D478456749FAA06AE6D5C" />
-            <ComponentRef Id="cmp44E96AA22DDD71CB6D2AF9F0E94D900A" />
-            <ComponentRef Id="cmp9F07D2C402E481C9A32B832E9767F54A" />
-            <ComponentRef Id="cmp4F8EE7EF5CC235B975A88C5F5F7EADB1" />
-            <ComponentRef Id="cmp0BF64BE05CC2A27F7E3AA10F198E7258" />
-            <ComponentRef Id="cmp097C9AEBBD0BB12A63B41A5505EABF92" />
-            <ComponentRef Id="cmpF4E73A2FE6A8101861EBB6248B78CDB9" />
-            <ComponentRef Id="cmp17CF84538B1BCD9FF96FBD0F636410B1" />
-            <ComponentRef Id="cmp27075FFB9AF246A5F27D1B07E59E4807" />
-            <ComponentRef Id="cmp23B407781C5AA7099F7779F0EC9E5239" />
-            <ComponentRef Id="cmpC00F3D14E656727772C11FADE4C236B2" />
             <ComponentRef Id="cmpA0734BF7F3979F291D1861DF998DADA5" />
             <ComponentRef Id="cmp9F3BE4D0A2BC109FDC307245FD9C487F" />
             <ComponentRef Id="cmpA3E293FCC7C5356BDED5B30A37517512" />
@@ -1948,7 +1885,6 @@
             <ComponentRef Id="cmp71D078D75E83971F80181453EA717D8B" />
             <ComponentRef Id="cmpD605A23799365004C20E5DE80CA738F3" />
             <ComponentRef Id="cmpA9C076F1199B904BB57D1BC96A919814" />
-            <ComponentRef Id="cmp429AD4BBE2ABA44D598EF5DC4482C2A4" />
             <ComponentRef Id="cmpA7B70148FAF23BE9246895B84B8E76EE" />
             <ComponentRef Id="cmpA09401C5AC6539FD960D21860A2494EA" />
             <ComponentRef Id="cmp4EF2024F5F084664B8B4EA6D2CFC68B7" />
diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py
index 19aa735..0471dbe 100755
--- a/scripts/vm/network/security_group.py
+++ b/scripts/vm/network/security_group.py
@@ -17,7 +17,7 @@
 # under the License.
 
 import cloud_utils
-from cloud_utils import Command
+from subprocess import check_output, CalledProcessError
 from cloudutils.configFileOps import configFileOps
 import logging
 import sys
@@ -34,9 +34,6 @@
 
 logpath = "/var/run/cloud/"        # FIXME: Logs should reside in /var/log/cloud
 lock_file = "/var/lock/cloudstack_security_group.lock"
-iptables = Command("iptables")
-bash = Command("/bin/bash")
-ebtables = Command("ebtables")
 driver = "qemu:///system"
 cfo = configFileOps("/etc/cloudstack/agent/agent.properties")
 hyper = cfo.getEntry("hypervisor.type")
@@ -45,6 +42,7 @@
 
 lock_handle = None
 
+
 def obtain_file_lock(path):
     global lock_handle
 
@@ -57,21 +55,26 @@
 
     return False
 
+
 def execute(cmd):
     logging.debug(cmd)
-    return bash("-c", cmd).stdout
+    try:
+        return check_output(cmd, shell=True)
+    except CalledProcessError as e:
+        pass
+
 
 def can_bridge_firewall(privnic):
     try:
         execute("which iptables")
     except:
-        print "no iptables on your host machine"
+        print("no iptables on your host machine")
         sys.exit(1)
 
     try:
         execute("which ebtables")
     except:
-        print "no ebtables on your host machine"
+        print("no ebtables on your host machine")
         sys.exit(2)
 
 
@@ -82,34 +85,9 @@
     cleanup_rules()
 
     return True
-'''
-def ipset(ipsetname, proto, start, end, ips):
-    try:
-        check_call(['ipset', '-N', ipsetname, 'iptreemap'])
-    except:
-        logging.debug("ipset chain already exists" + ipsetname)
 
-    result = True
-    ipsettmp = ''.join(''.join(ipsetname.split('-')).split('_')) + str(int(time.time()) % 1000)
 
-    try:
-        check_call(['ipset', '-N', ipsettmp, 'iptreemap'])
-        for ip in ips:
-            try:
-                check_call(['ipset', '-A', ipsettmp, ip])
-            except CommandException, cex:
-                if cex.reason.rfind('already in set') == -1:
-                   raise
-        check_call(['ipset', '-W', ipsettmp, ipsetname])
-        check_call(['ipset', '-X', ipsettmp])
-    except:
-        logging.debug("Failed to program ipset " + ipsetname)
-        result = False
-
-    return result
-'''
 def virshlist(states):
-
     libvirt_states={ 'running'  : libvirt.VIR_DOMAIN_RUNNING,
                      'shutoff'  : libvirt.VIR_DOMAIN_SHUTOFF,
                      'shutdown' : libvirt.VIR_DOMAIN_SHUTDOWN,
@@ -122,8 +100,8 @@
     searchstates = list(libvirt_states[state] for state in states)
 
     conn = libvirt.openReadOnly(driver)
-    if conn == None:
-       print 'Failed to open connection to the hypervisor'
+    if not conn:
+       print('Failed to open connection to the hypervisor')
        sys.exit(3)
 
     alldomains = map(conn.lookupByID, conn.listDomainsID())
@@ -138,8 +116,8 @@
 
     return domains
 
-def virshdomstate(domain):
 
+def virshdomstate(domain):
     libvirt_states={ libvirt.VIR_DOMAIN_RUNNING  : 'running',
                      libvirt.VIR_DOMAIN_SHUTOFF  : 'shut off',
                      libvirt.VIR_DOMAIN_SHUTDOWN : 'shut down',
@@ -150,8 +128,8 @@
     }
 
     conn = libvirt.openReadOnly(driver)
-    if conn == None:
-       print 'Failed to open connection to the hypervisor'
+    if not conn:
+       print('Failed to open connection to the hypervisor')
        sys.exit(3)
 
     try:
@@ -164,11 +142,11 @@
 
     return state
 
-def virshdumpxml(domain):
 
+def virshdumpxml(domain):
     conn = libvirt.openReadOnly(driver)
-    if conn == None:
-       print 'Failed to open connection to the hypervisor'
+    if not conn:
+       print('Failed to open connection to the hypervisor')
        sys.exit(3)
 
     try:
@@ -223,7 +201,7 @@
     except:
         logging.debug("Ignoring failure to delete ipset " + vmchain)
 
-    if vif is not None:
+    if vif:
         try:
             dnats = execute("""iptables -t nat -S | awk '/%s/ { sub(/-A/, "-D", $1) ; print }'""" % vif ).split("\n")
             for dnat in filter(None, dnats):
@@ -237,9 +215,10 @@
     remove_secip_log_for_vm(vm_name)
 
     if 1 in [ vm_name.startswith(c) for c in ['r-', 's-', 'v-'] ]:
-        return 'true'
+        return True
 
-    return 'true'
+    return True
+
 
 def destroy_ebtables_rules(vm_name, vif):
     eb_vm_chain=ebtables_chain_name(vm_name)
@@ -273,6 +252,7 @@
         except:
             logging.debug("Ignoring failure to delete ebtables chain for vm " + vm_name)
 
+
 def default_ebtables_rules(vm_name, vm_ip, vm_mac, vif):
     eb_vm_chain=ebtables_chain_name(vm_name)
     vmchain_in = eb_vm_chain + "-in"
@@ -294,13 +274,13 @@
         execute("ebtables -t nat -A " + vmchain_out_ips + " -j DROP")
     except:
         logging.debug("Failed to program default rules")
-        return 'false'
+        return False
 
     try:
         execute("ebtables -t nat -A " + vmchain_in + " -s ! " + vm_mac + " -j DROP")
         execute("ebtables -t nat -A " + vmchain_in + " -p ARP -s ! " + vm_mac + " -j DROP")
         execute("ebtables -t nat -A " + vmchain_in + " -p ARP --arp-mac-src ! " + vm_mac + " -j DROP")
-        if vm_ip is not None:
+        if vm_ip:
             execute("ebtables -t nat -A " + vmchain_in + " -p ARP -j " + vmchain_in_ips)
             execute("ebtables -t nat -I " + vmchain_in_ips + " -p ARP --arp-ip-src " + vm_ip + " -j RETURN")
         execute("ebtables -t nat -A " + vmchain_in + " -p ARP --arp-op Request -j ACCEPT")
@@ -308,11 +288,11 @@
         execute("ebtables -t nat -A " + vmchain_in + " -p ARP -j DROP")
     except:
         logging.exception("Failed to program default ebtables IN rules")
-        return 'false'
+        return False
 
     try:
         execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Reply --arp-mac-dst ! " + vm_mac + " -j DROP")
-        if vm_ip is not None:
+        if vm_ip:
             execute("ebtables -t nat -A " + vmchain_out + " -p ARP -j " + vmchain_out_ips )
             execute("ebtables -t nat -I " + vmchain_out_ips + " -p ARP --arp-ip-dst " + vm_ip + " -j RETURN")
         execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Request -j ACCEPT")
@@ -320,7 +300,7 @@
         execute("ebtables -t nat -A " + vmchain_out + " -p ARP -j DROP")
     except:
         logging.debug("Failed to program default ebtables OUT rules")
-        return 'false'
+        return False
 
 
 def default_network_rules_systemvm(vm_name, localbrname):
@@ -348,13 +328,14 @@
                     execute("iptables -A " + vmchain + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j RETURN")
                 except:
                     logging.debug("Failed to program default rules")
-                    return 'false'
+                    return False
 
     execute("iptables -A " + vmchain + " -j ACCEPT")
 
-    if write_rule_log_for_vm(vm_name, '-1', '_ignore_', domid, '_initial_', '-1') == False:
+    if not write_rule_log_for_vm(vm_name, '-1', '_ignore_', domid, '_initial_', '-1'):
         logging.debug("Failed to log default network rules for systemvm, ignoring")
-    return 'true'
+    return True
+
 
 def remove_secip_log_for_vm(vmName):
     vm_name = vmName
@@ -369,6 +350,7 @@
 
     return result
 
+
 def write_secip_log_for_vm (vmName, secIps, vmId):
     vm_name = vmName
     logfilename = logpath + vm_name + ".ip"
@@ -388,6 +370,7 @@
 
     return result
 
+
 def create_ipset_forvm(ipsetname, type='iphash', family='inet'):
     result = True
     try:
@@ -401,6 +384,7 @@
 
     return result
 
+
 def add_to_ipset(ipsetname, ips, action):
     result = True
     for ip in ips:
@@ -413,6 +397,7 @@
 
     return result
 
+
 def network_rules_vmSecondaryIp(vm_name, ip_secondary, action):
     logging.debug("vmName = "+ vm_name)
     logging.debug("action = "+ action)
@@ -425,7 +410,8 @@
     #add ebtables rules for the secondary ip
     ebtables_rules_vmip(vm_name, [ip_secondary], action)
 
-    return 'true'
+    return True
+
 
 def ebtables_rules_vmip (vmname, ips, action):
     eb_vm_chain=ebtables_chain_name(vmname)
@@ -445,6 +431,7 @@
         except:
             logging.debug("Failed to program ebtables rules for secondary ip %s for vm %s with action %s" % (ip, vmname, action))
 
+
 def default_network_rules(vm_name, vm_id, vm_ip, vm_ip6, vm_mac, vif, brname, sec_ips):
     if not addFWFramework(brname):
         return False
@@ -474,26 +461,26 @@
     action = "-A"
     vmipsetName = ipset_chain_name(vm_name)
     #create ipset and add vm ips to that ip set
-    if create_ipset_forvm(vmipsetName) == False:
+    if not create_ipset_forvm(vmipsetName):
        logging.debug(" failed to create ipset for rule " + str(tokens))
-       return 'false'
+       return False
 
     #add primary nic ip to ipset
-    if add_to_ipset(vmipsetName, [vm_ip], action ) == False:
+    if not add_to_ipset(vmipsetName, [vm_ip], action ):
        logging.debug(" failed to add vm " + vm_ip + " ip to set ")
-       return 'false'
+       return False
 
     #add secodnary nic ips to ipset
     secIpSet = "1"
     ips = sec_ips.split(';')
     ips.pop()
     if ips[0] == "0":
-        secIpSet = "0";
+        secIpSet = "0"
 
     if secIpSet == "1":
         logging.debug("Adding ipset for secondary ips")
         add_to_ipset(vmipsetName, ips, action)
-        if write_secip_log_for_vm(vm_name, sec_ips, vm_id) == False:
+        if not write_secip_log_for_vm(vm_name, sec_ips, vm_id):
             logging.debug("Failed to log default network rules, ignoring")
 
     try:
@@ -505,7 +492,7 @@
         execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -p udp --dport 68 --sport 67  -j ACCEPT")
 
         #don't let vm spoof its ip address
-        if vm_ip is not None:
+        if vm_ip:
             execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -m set ! --set " + vmipsetName + " src -j DROP")
             execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -m set --set " + vmipsetName + " src -p udp --dport 53  -j RETURN ")
             execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -m set --set " + vmipsetName + " src -p tcp --dport 53  -j RETURN ")
@@ -514,21 +501,21 @@
         execute("iptables -A " + vmchain + " -j DROP")
     except:
         logging.debug("Failed to program default rules for vm " + vm_name)
-        return 'false'
+        return False
 
     default_ebtables_rules(vm_name, vm_ip, vm_mac, vif)
     #default ebtables rules for vm secondary ips
     ebtables_rules_vmip(vm_name, ips, "-I")
 
-    if vm_ip is not None:
-        if write_rule_log_for_vm(vmName, vm_id, vm_ip, domID, '_initial_', '-1') == False:
+    if vm_ip:
+        if not write_rule_log_for_vm(vmName, vm_id, vm_ip, domID, '_initial_', '-1'):
             logging.debug("Failed to log default network rules, ignoring")
 
     vm_ip6_set_name = vm_name + '-6'
 
     if not create_ipset_forvm(vm_ip6_set_name, family='inet6', type='hash:net'):
        logging.debug(" failed to create ivp6 ipset for rule " + str(tokens))
-       return 'false'
+       return False
 
     vm_ip6_addr = [ipv6_link_local]
     try:
@@ -593,10 +580,11 @@
         execute('ip6tables -A ' + vmchain + ' -j DROP')
     except:
         logging.debug('Failed to program default rules for vm ' + vm_name)
-        return 'false'
+        return False
 
     logging.debug("Programmed default rules for vm " + vm_name)
-    return 'true'
+    return True
+
 
 def post_default_network_rules(vm_name, vm_id, vm_ip, vm_mac, vif, brname, dhcpSvr, hostIp, hostMacAddr):
     vmchain_default = '-'.join(vm_name.split('-')[:-1]) + "-def"
@@ -626,9 +614,10 @@
         execute("ebtables -t nat -I " + vmchain_out + " 2 -p ARP --arp-ip-dst ! " + vm_ip + " -j DROP")
     except:
         pass
-    if write_rule_log_for_vm(vm_name, vm_id, vm_ip, domID, '_initial_', '-1') == False:
+    if not write_rule_log_for_vm(vm_name, vm_id, vm_ip, domID, '_initial_', '-1'):
             logging.debug("Failed to log default network rules, ignoring")
 
+
 def delete_rules_for_vm_in_bridge_firewall_chain(vmName):
     vm_name = vmName
     if vm_name.startswith('i-'):
@@ -653,6 +642,7 @@
         except:
               logging.exception("Ignoring failure to delete rules for vm " + vmName)
 
+
 def rewrite_rule_log_for_vm(vm_name, new_domid):
     logfilename = logpath + vm_name + ".log"
     if not os.path.exists(logfilename):
@@ -666,8 +656,9 @@
 
     write_rule_log_for_vm(_vmName, _vmID, '0.0.0.0', new_domid, _signature, '-1')
 
+
 def get_rule_log_for_vm(vmName):
-    vm_name = vmName;
+    vm_name = vmName
     logfilename = logpath + vm_name + ".log"
     if not os.path.exists(logfilename):
         return ''
@@ -681,12 +672,13 @@
 
     return ','.join([_vmName, _vmID, _vmIP, _domID, _signature, _seqno])
 
+
 def check_domid_changed(vmName):
     curr_domid = getvmId(vmName)
     if (curr_domid is None) or (not curr_domid.isdigit()):
         curr_domid = '-1'
 
-    vm_name = vmName;
+    vm_name = vmName
     logfilename = logpath + vm_name + ".log"
     if not os.path.exists(logfilename):
         return ['-1', curr_domid]
@@ -700,6 +692,7 @@
 
     return [curr_domid, old_domid]
 
+
 def network_rules_for_rebooted_vm(vmName):
     vm_name = vmName
     [curr_domid, old_domid] = check_domid_changed(vm_name)
@@ -761,6 +754,7 @@
     rewrite_rule_log_for_vm(vm_name, curr_domid)
     return True
 
+
 def get_rule_logs_for_vms():
     state=['running']
     vms = virshlist(state)
@@ -778,11 +772,13 @@
     except:
         logging.exception("Failed to get rule logs, better luck next time!")
 
-    print ";".join(result)
+    print(";".join(result))
+
 
 def cleanup_rules_for_dead_vms():
     return True
 
+
 def cleanup_bridge(bridge):
     bridge_name = getBrfw(bridge)
     logging.debug("Cleaning old bridge chains: " + bridge_name)
@@ -810,6 +806,7 @@
         except: pass
     return True
 
+
 def cleanup_rules():
     try:
         states=['running','paused']
@@ -865,8 +862,9 @@
     except:
         logging.debug("Failed to cleanup rules !")
 
+
 def check_rule_log_for_vm(vmName, vmId, vmIP, domID, signature, seqno):
-    vm_name = vmName;
+    vm_name = vmName
     logfilename = logpath + vm_name + ".log"
     if not os.path.exists(logfilename):
         return [True, True, True, True, True, True]
@@ -889,6 +887,7 @@
 
     return [(vm_name != _vmName), (vmId != _vmID), (vmIP != _vmIP), (domID != _domID), (signature != _signature),(seqno != _seqno)]
 
+
 def write_rule_log_for_vm(vmName, vmID, vmIP, domID, signature, seqno):
     vm_name = vmName
     logfilename = logpath + vm_name + ".log"
@@ -907,6 +906,7 @@
 
     return result
 
+
 def remove_rule_log_for_vm(vmName):
     vm_name = vmName
     logfilename = logpath + vm_name + ".log"
@@ -920,6 +920,7 @@
 
     return result
 
+
 #ebtables chain max len 31 char
 def ebtables_chain_name(vm_name):
     # 23 because there are appends to the chains
@@ -927,6 +928,7 @@
         vm_name = vm_name[0:22]
     return vm_name
 
+
 #ipset chain max len 31 char
 def ipset_chain_name(vm_name):
     if len(vm_name) > 30:
@@ -940,6 +942,7 @@
         vm_name = vm_name[0:24]
     return vm_name
 
+
 def egress_chain_name(vm_name):
     chain_name = iptables_chain_name(vm_name)
     return chain_name + "-eg"
@@ -960,7 +963,7 @@
     ruletype, protocol = tokens[0].split(':')
     start = int(tokens[1])
     end = int(tokens[2])
-    cidrs = tokens.pop();
+    cidrs = tokens.pop()
 
     ipv4 = []
     ipv6 = []
@@ -979,17 +982,17 @@
 
   return ret
 
+
 def add_network_rules(vm_name, vm_id, vm_ip, vm_ip6, signature, seqno, vmMac, rules, vif, brname, sec_ips):
   try:
     vmName = vm_name
     domId = getvmId(vmName)
 
-    changes = []
     changes = check_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno)
 
     if not 1 in changes:
         logging.debug("Rules already programmed for vm " + vm_name)
-        return 'true'
+        return True
 
     if changes[0] or changes[1] or changes[2] or changes[3]:
         default_network_rules(vmName, vm_id, vm_ip, vm_ip6, vmMac, vif, brname, sec_ips)
@@ -1073,17 +1076,18 @@
     execute('iptables -A ' + vmchain + ' -j DROP')
     execute('ip6tables -A ' + vmchain + ' -j DROP')
 
-    if write_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno) == False:
-        return 'false'
+    if not write_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno):
+        return False
 
-    return 'true'
+    return True
   except:
     logging.exception("Failed to network rule !")
 
+
 def getVifs(vmName):
     vifs = []
     xmlfile = virshdumpxml(vmName)
-    if xmlfile == None:
+    if not xmlfile:
         return vifs
 
     dom = xml.dom.minidom.parseString(xmlfile)
@@ -1093,10 +1097,11 @@
         vifs.append(nicdev)
     return vifs
 
+
 def getVifsForBridge(vmName, brname):
     vifs = []
     xmlfile = virshdumpxml(vmName)
-    if xmlfile == None:
+    if not xmlfile:
         return vifs
 
     dom = xml.dom.minidom.parseString(xmlfile)
@@ -1109,10 +1114,11 @@
             vifs.append(nicdev)
     return list(set(vifs))
 
+
 def getBridges(vmName):
     bridges = []
     xmlfile = virshdumpxml(vmName)
-    if xmlfile == None:
+    if not xmlfile:
         return bridges
 
     dom = xml.dom.minidom.parseString(xmlfile)
@@ -1122,11 +1128,12 @@
             bridges.append(bridge)
     return list(set(bridges))
 
+
 def getvmId(vmName):
 
     conn = libvirt.openReadOnly(driver)
-    if conn == None:
-       print 'Failed to open connection to the hypervisor'
+    if not conn:
+       print('Failed to open connection to the hypervisor')
        sys.exit(3)
 
     try:
@@ -1141,13 +1148,15 @@
         res = str(res)
     return res
 
+
 def getBrfw(brname):
     cmd = "iptables-save |grep physdev-is-bridged |grep FORWARD |grep BF |grep '\-o' | grep -w " + brname  + "|awk '{print $9}' | head -1"
-    brfwname = bash("-c", cmd).stdout.strip()
-    if brfwname == "":
+    brfwname = execute(cmd).strip()
+    if not brfwname:
         brfwname = "BF-" + brname
     return brfwname
 
+
 def addFWFramework(brname):
     try:
         execute("sysctl -w net.bridge.bridge-nf-call-arptables=1")
@@ -1226,6 +1235,7 @@
             return False
         return False
 
+
 if __name__ == '__main__':
     logging.basicConfig(filename="/var/log/cloudstack/agent/security_group.log", format="%(asctime)s - %(message)s", level=logging.DEBUG)
     parser = OptionParser()
@@ -1254,7 +1264,7 @@
 
     for i in range(0, 30):
         if obtain_file_lock(lock_file) is False:
-            logging.warn("Lock on %s is being held by other process. Waiting for release." % lock_file)
+            logging.warning("Lock on %s is being held by other process. Waiting for release." % lock_file)
             time.sleep(0.5)
         else:
             break
diff --git a/server/pom.xml b/server/pom.xml
index 8c6d84d..e246150 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -1,242 +1,239 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-server</artifactId>
-  <name>Apache CloudStack Server</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${cs.commons-io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-web</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-cluster</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-security</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpcore</artifactId>
-      <version>${cs.httpcore.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ca</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-jobs</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.thoughtworks.xstream</groupId>
-      <artifactId>xstream</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.mail</groupId>
-      <artifactId>mail</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-      <exclusions>
-      	<exclusion>
-      		<artifactId>xml-apis</artifactId>
-      		<groupId>xml-apis</groupId>
-      	</exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.reflections</groupId>
-      <artifactId>reflections</artifactId>
-      <exclusions>
-      	<exclusion>
-      		<artifactId>xml-apis</artifactId>
-      		<groupId>xml-apis</groupId>
-      	</exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ipc</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-events</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-config</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-agent-lb</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-configdrive</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.opensaml</groupId>
-      <artifactId>opensaml</artifactId>
-      <version>${cs.opensaml.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <testResources>
-      <testResource>
-        <directory>test/resources</directory>
-        <excludes>
-          <exclude>%regex[.*[0-9]*To[0-9]*.*Test.*]</exclude>
-        </excludes>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>default-testCompile</id>
-            <phase>test-compile</phase>
-            <configuration>
-              <testExcludes>
-                <exclude>**/com/cloud/upgrade/*.java</exclude>
-                <exclude>**/com/cloud/async/*.java</exclude>
-              </testExcludes>
-            </configuration>
-            <goals>
-              <goal>testCompile</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <argLine>-Xmx2048m -XX:MaxPermSize=512m -Djava.security.egd=file:/dev/./urandom</argLine>
-          <excludes>
-            <exclude>%regex[.*[0-9]*To[0-9]*.*Test.*]</exclude>
-            <exclude>com/cloud/upgrade/AdvanceZone223To224UpgradeTest</exclude>
-            <exclude>com/cloud/upgrade/AdvanceZone217To224UpgradeTest</exclude>
-            <exclude>com/cloud/async/*</exclude>
-            <exclude>com/cloud/cluster/*</exclude>
-            <exclude>com/cloud/snapshot/*</exclude>
-            <exclude>com/cloud/storage/dao/*</exclude>
-            <exclude>com/cloud/vm/dao/*</exclude>
-            <exclude>com/cloud/api/ListPerfTest.java</exclude>
-            <exclude>com/cloud/network/vpn/RemoteAccessVpnTest.java</exclude>
-            <exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
-            <exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
-            <exclude>com/cloud/vpc/VpcTestConfiguration.java</exclude>
-            <exclude>com/cloud/vpc/VpcApiUnitTest.java</exclude>
-            <exclude>com/cloud/vpc/VpcManagerTest.java</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy overwrite="true" todir="${basedir}/target/conf">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${project.basedir}/../${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-                <copy todir="${basedir}/target/conf">
-                  <fileset dir="${basedir}/conf">
-                    <exclude name="*.in" />
-                  </fileset>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-server</artifactId>
+    <name>Apache CloudStack Server</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-cluster</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-security</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ca</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-jobs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.thoughtworks.xstream</groupId>
+            <artifactId>xstream</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>xml-apis</artifactId>
+                    <groupId>xml-apis</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>xml-apis</artifactId>
+                    <groupId>xml-apis</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ipc</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-agent-lb</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-configdrive</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensaml</groupId>
+            <artifactId>opensaml</artifactId>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-testCompile</id>
+                        <phase>test-compile</phase>
+                        <configuration>
+                            <testExcludes>
+                                <exclude>**/com/cloud/upgrade/*.java</exclude>
+                                <exclude>**/com/cloud/async/*.java</exclude>
+                            </testExcludes>
+                        </configuration>
+                        <goals>
+                            <goal>testCompile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <argLine>-Xmx2048m -XX:MaxPermSize=512m -Djava.security.egd=file:/dev/./urandom</argLine>
+                    <excludes>
+                        <exclude>%regex[.*[0-9]*To[0-9]*.*Test.*]</exclude>
+                        <exclude>com/cloud/upgrade/AdvanceZone223To224UpgradeTest</exclude>
+                        <exclude>com/cloud/upgrade/AdvanceZone217To224UpgradeTest</exclude>
+                        <exclude>com/cloud/async/*</exclude>
+                        <exclude>com/cloud/cluster/*</exclude>
+                        <exclude>com/cloud/snapshot/*</exclude>
+                        <exclude>com/cloud/storage/dao/*</exclude>
+                        <exclude>com/cloud/vm/dao/*</exclude>
+                        <exclude>com/cloud/api/ListPerfTest.java</exclude>
+                        <exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
+                        <exclude>com/cloud/network/security/SecurityGroupManagerImpl2Test.java</exclude>
+                        <exclude>com/cloud/vpc/VpcTestConfiguration.java</exclude>
+                        <exclude>com/cloud/vpc/VpcApiUnitTest.java</exclude>
+                        <exclude>com/cloud/vpc/VpcManagerTest.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-resource</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <copy overwrite="true" todir="${basedir}/target/conf">
+                                    <fileset dir="${basedir}/conf">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${project.basedir}/../${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                                <copy todir="${basedir}/target/conf">
+                                    <fileset dir="${basedir}/conf">
+                                        <exclude name="*.in" />
+                                    </fileset>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java b/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java
deleted file mode 100644
index 2aa9b04..0000000
--- a/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java
+++ /dev/null
@@ -1,507 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import org.apache.cloudstack.api.ResourceDetail;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.StartupCommandProcessor;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupStorageCommand;
-import com.cloud.agent.manager.authn.AgentAuthnException;
-import com.cloud.configuration.ConfigurationManager;
-import com.cloud.configuration.ZoneConfig;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.dao.ClusterDao;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.DataCenterDetailsDao;
-import com.cloud.dc.dao.HostPodDao;
-import com.cloud.exception.ConnectionException;
-import com.cloud.host.DetailVO;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.utils.component.AdapterBase;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.net.MacAddress;
-import com.cloud.utils.net.NetUtils;
-
-/**
- * Creates a host record and supporting records such as pod and ip address
- *
- */
-@Component
-public class CloudZonesStartupProcessor extends AdapterBase implements StartupCommandProcessor {
-    private static final Logger s_logger = Logger.getLogger(CloudZonesStartupProcessor.class);
-    @Inject
-    ClusterDao _clusterDao = null;
-    @Inject
-    ConfigurationDao _configDao = null;
-    @Inject
-    DataCenterDao _zoneDao = null;
-    @Inject
-    HostDao _hostDao = null;
-    @Inject
-    private HostDetailsDao hostDetailsDao;
-    @Inject
-    HostPodDao _podDao = null;
-    @Inject
-    DataCenterDetailsDao _zoneDetailsDao = null;
-
-    @Inject
-    AgentManager _agentManager = null;
-    @Inject
-    ConfigurationManager _configurationManager = null;
-
-    long _nodeId = -1;
-
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-        _agentManager.registerForInitialConnects(this, false);
-        if (_nodeId == -1) {
-            // FIXME: We really should not do this like this. It should be done
-            // at config time and is stored as a config variable.
-            _nodeId = MacAddress.getMacAddress().toLong();
-        }
-        return true;
-    }
-
-    @Override
-    public boolean processInitialConnect(StartupCommand[] cmd) throws ConnectionException {
-        StartupCommand startup = cmd[0];
-        if (startup instanceof StartupRoutingCommand) {
-            return processHostStartup((StartupRoutingCommand)startup);
-        } else if (startup instanceof StartupStorageCommand) {
-            return processStorageStartup((StartupStorageCommand)startup);
-        }
-
-        return false;
-    }
-
-    protected boolean processHostStartup(StartupRoutingCommand startup) throws ConnectionException {
-        /*
-        boolean found = false;
-        Type type = Host.Type.Routing;
-        final Map<String, String> hostDetails = startup.getHostDetails();
-        HostVO server = _hostDao.findByGuid(startup.getGuid());
-        if (server == null) {
-            server = _hostDao.findByGuid(startup.getGuidWithoutResource());
-        }
-        if (server != null && server.getRemoved() == null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Found the host " + server.getId() + " by guid: "
-                        + startup.getGuid());
-            }
-            found = true;
-
-        } else {
-            server = new HostVO(startup.getGuid());
-        }
-        server.setDetails(hostDetails);
-
-        try {
-            updateComputeHost(server, startup, type);
-        } catch (AgentAuthnException e) {
-            throw new ConnectionException(true, "Failed to authorize host, invalid configuration", e);
-        }
-        if (!found) {
-            server.setHostAllocationState(Host.HostAllocationState.Enabled);
-            server = _hostDao.persist(server);
-        } else {
-            if (!_hostDao.connect(server, _nodeId)) {
-                throw new CloudRuntimeException(
-                        "Agent cannot connect because the current state is "
-                        + server.getStatus().toString());
-            }
-            s_logger.info("Old " + server.getType().toString()
-                    + " host reconnected w/ id =" + server.getId());
-        }
-        */
-        return true;
-
-    }
-
-    protected void updateComputeHost(final HostVO host, final StartupCommand startup, final Host.Type type) throws AgentAuthnException {
-
-        String zoneToken = startup.getDataCenter();
-        if (zoneToken == null) {
-            s_logger.warn("No Zone Token passed in, cannot not find zone for the agent");
-            throw new AgentAuthnException("No Zone Token passed in, cannot not find zone for agent");
-        }
-
-        DataCenterVO zone = _zoneDao.findByToken(zoneToken);
-        if (zone == null) {
-            zone = _zoneDao.findByName(zoneToken);
-            if (zone == null) {
-                try {
-                    long zoneId = Long.parseLong(zoneToken);
-                    zone = _zoneDao.findById(zoneId);
-                    if (zone == null) {
-                        throw new AgentAuthnException("Could not find zone for agent with token " + zoneToken);
-                    }
-                } catch (NumberFormatException nfe) {
-                    throw new AgentAuthnException("Could not find zone for agent with token " + zoneToken);
-                }
-            }
-        }
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Successfully loaded the DataCenter from the zone token passed in ");
-        }
-
-        long zoneId = zone.getId();
-        ResourceDetail maxHostsInZone = _zoneDetailsDao.findDetail(zoneId, ZoneConfig.MaxHosts.key());
-        if (maxHostsInZone != null) {
-            long maxHosts = Long.parseLong(maxHostsInZone.getValue());
-            long currentCountOfHosts = _hostDao.countRoutingHostsByDataCenter(zoneId);
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Number of hosts in Zone:" + currentCountOfHosts + ", max hosts limit: " + maxHosts);
-            }
-            if (currentCountOfHosts >= maxHosts) {
-                throw new AgentAuthnException("Number of running Routing hosts in the Zone:" + zone.getName() + " is already at the max limit:" + maxHosts +
-                    ", cannot start one more host");
-            }
-        }
-
-        HostPodVO pod = null;
-
-        if (startup.getPrivateIpAddress() == null) {
-            s_logger.warn("No private IP address passed in for the agent, cannot not find pod for agent");
-            throw new AgentAuthnException("No private IP address passed in for the agent, cannot not find pod for agent");
-        }
-
-        if (startup.getPrivateNetmask() == null) {
-            s_logger.warn("No netmask passed in for the agent, cannot not find pod for agent");
-            throw new AgentAuthnException("No netmask passed in for the agent, cannot not find pod for agent");
-        }
-
-        if (host.getPodId() != null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Pod is already created for this agent, looks like agent is reconnecting...");
-            }
-            pod = _podDao.findById(host.getPodId());
-            if (!checkCIDR(type, pod, startup.getPrivateIpAddress(), startup.getPrivateNetmask())) {
-                pod = null;
-                if (s_logger.isDebugEnabled()) {
-                    s_logger.debug("Subnet of Pod does not match the subnet of the agent, not using this Pod: " + host.getPodId());
-                }
-            } else {
-                updatePodNetmaskIfNeeded(pod, startup.getPrivateNetmask());
-            }
-        }
-
-        if (pod == null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Trying to detect the Pod to use from the agent's ip address and netmask passed in ");
-            }
-
-            //deduce pod
-            boolean podFound = false;
-            List<HostPodVO> podsInZone = _podDao.listByDataCenterId(zoneId);
-            for (HostPodVO hostPod : podsInZone) {
-                if (checkCIDR(type, hostPod, startup.getPrivateIpAddress(), startup.getPrivateNetmask())) {
-                    pod = hostPod;
-
-                    //found the default POD having the same subnet.
-                    updatePodNetmaskIfNeeded(pod, startup.getPrivateNetmask());
-                    podFound = true;
-                    break;
-                }
-            }
-
-            if (!podFound) {
-                if (s_logger.isDebugEnabled()) {
-                    s_logger.debug("Creating a new Pod since no default Pod found that matches the agent's ip address and netmask passed in ");
-                }
-
-                if (startup.getGatewayIpAddress() == null) {
-                    s_logger.warn("No Gateway IP address passed in for the agent, cannot create a new pod for the agent");
-                    throw new AgentAuthnException("No Gateway IP address passed in for the agent, cannot create a new pod for the agent");
-                }
-                //auto-create a new pod, since pod matching the agent's ip is not found
-                String podName = "POD-" + (podsInZone.size() + 1);
-                try {
-                    String gateway = startup.getGatewayIpAddress();
-                    String cidr = NetUtils.getCidrFromGatewayAndNetmask(gateway, startup.getPrivateNetmask());
-                    String[] cidrPair = cidr.split("\\/");
-                    String cidrAddress = cidrPair[0];
-                    long cidrSize = Long.parseLong(cidrPair[1]);
-                    String startIp = NetUtils.getIpRangeStartIpFromCidr(cidrAddress, cidrSize);
-                    String endIp = NetUtils.getIpRangeEndIpFromCidr(cidrAddress, cidrSize);
-                    pod = _configurationManager.createPod(-1, podName, zoneId, gateway, cidr, startIp, endIp, null, true);
-                } catch (Exception e) {
-                    // no longer tolerate exception during the cluster creation phase
-                    throw new CloudRuntimeException("Unable to create new Pod " + podName + " in Zone: " + zoneId, e);
-                }
-
-            }
-        }
-        final StartupRoutingCommand scc = (StartupRoutingCommand)startup;
-
-        ClusterVO cluster = null;
-        if (host.getClusterId() != null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Cluster is already created for this agent, looks like agent is reconnecting...");
-            }
-            cluster = _clusterDao.findById(host.getClusterId());
-        }
-        if (cluster == null) {
-            //auto-create cluster - assume one host per cluster
-            String clusterName = "Cluster-" + startup.getPrivateIpAddress();
-            ClusterVO existingCluster = _clusterDao.findBy(clusterName, pod.getId());
-            if (existingCluster != null) {
-                cluster = existingCluster;
-            } else {
-                if (s_logger.isDebugEnabled()) {
-                    s_logger.debug("Creating a new Cluster for this agent with name: " + clusterName + " in Pod: " + pod.getId() + ", in Zone:" + zoneId);
-                }
-
-                cluster = new ClusterVO(zoneId, pod.getId(), clusterName);
-                cluster.setHypervisorType(scc.getHypervisorType().toString());
-                try {
-                    cluster = _clusterDao.persist(cluster);
-                } catch (Exception e) {
-                    // no longer tolerate exception during the cluster creation phase
-                    throw new CloudRuntimeException("Unable to create cluster " + clusterName + " in pod " + pod.getId() + " and data center " + zoneId, e);
-                }
-            }
-        }
-
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Detected Zone: " + zoneId + ", Pod: " + pod.getId() + ", Cluster:" + cluster.getId());
-        }
-        host.setDataCenterId(zone.getId());
-        host.setPodId(pod.getId());
-        host.setClusterId(cluster.getId());
-        host.setPrivateIpAddress(startup.getPrivateIpAddress());
-        host.setPrivateNetmask(startup.getPrivateNetmask());
-        host.setPrivateMacAddress(startup.getPrivateMacAddress());
-        host.setPublicIpAddress(startup.getPublicIpAddress());
-        host.setPublicMacAddress(startup.getPublicMacAddress());
-        host.setPublicNetmask(startup.getPublicNetmask());
-        host.setStorageIpAddress(startup.getStorageIpAddress());
-        host.setStorageMacAddress(startup.getStorageMacAddress());
-        host.setStorageNetmask(startup.getStorageNetmask());
-        host.setVersion(startup.getVersion());
-        host.setName(startup.getName());
-        host.setType(type);
-        host.setStorageUrl(startup.getIqn());
-        host.setLastPinged(System.currentTimeMillis() >> 10);
-        host.setCaps(scc.getCapabilities());
-        host.setCpus(scc.getCpus());
-        host.setTotalMemory(scc.getMemory());
-        host.setSpeed(scc.getSpeed());
-        HypervisorType hyType = scc.getHypervisorType();
-        host.setHypervisorType(hyType);
-        host.setHypervisorVersion(scc.getHypervisorVersion());
-
-        updateHostDetails(host, scc);
-    }
-
-    private void updateHostDetails(HostVO host, StartupRoutingCommand startupRoutingCmd) {
-        final String name = "supportsResign";
-        final String value = String.valueOf(startupRoutingCmd.getSupportsClonedVolumes());
-
-        DetailVO hostDetail = hostDetailsDao.findDetail(host.getId(), name);
-
-        if (hostDetail != null) {
-            hostDetail.setValue(value);
-
-            hostDetailsDao.update(hostDetail.getId(), hostDetail);
-        }
-        else {
-            hostDetail = new DetailVO(host.getId(), name, value);
-
-            hostDetailsDao.persist(hostDetail);
-        }
-    }
-
-    private boolean checkCIDR(Host.Type type, HostPodVO pod, String serverPrivateIP, String serverPrivateNetmask) {
-        if (serverPrivateIP == null) {
-            return true;
-        }
-        // Get the CIDR address and CIDR size
-        String cidrAddress = pod.getCidrAddress();
-        long cidrSize = pod.getCidrSize();
-
-        // If the server's private IP address is not in the same subnet as the
-        // pod's CIDR, return false
-        String cidrSubnet = NetUtils.getCidrSubNet(cidrAddress, cidrSize);
-        String serverSubnet = NetUtils.getSubNet(serverPrivateIP, serverPrivateNetmask);
-        if (!cidrSubnet.equals(serverSubnet)) {
-            return false;
-        }
-        return true;
-    }
-
-    private void updatePodNetmaskIfNeeded(HostPodVO pod, String agentNetmask) {
-        // If the server's private netmask is less inclusive than the pod's CIDR
-        // netmask, update cidrSize of the default POD
-        //(reason: we are maintaining pods only for internal accounting.)
-        long cidrSize = pod.getCidrSize();
-        String cidrNetmask = NetUtils.getCidrSubNet("255.255.255.255", cidrSize);
-        long cidrNetmaskNumeric = NetUtils.ip2Long(cidrNetmask);
-        long serverNetmaskNumeric = NetUtils.ip2Long(agentNetmask);//
-        if (serverNetmaskNumeric > cidrNetmaskNumeric) {
-            //update pod's cidrsize
-            int newCidrSize = new Long(NetUtils.getCidrSize(agentNetmask)).intValue();
-            pod.setCidrSize(newCidrSize);
-            _podDao.update(pod.getId(), pod);
-        }
-    }
-
-    protected boolean processStorageStartup(StartupStorageCommand startup) throws ConnectionException {
-        /*
-        if (startup.getResourceType() != Storage.StorageResourceType.LOCAL_SECONDARY_STORAGE) {
-            return false;
-        }
-        boolean found = false;
-        Type type = Host.Type.LocalSecondaryStorage;
-        final Map<String, String> hostDetails = startup.getHostDetails();
-        HostVO server = _hostDao.findByGuid(startup.getGuid());
-        if (server == null) {
-            server = _hostDao.findByGuid(startup.getGuidWithoutResource());
-        }
-        if (server != null && server.getRemoved() == null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Found the host " + server.getId() + " by guid: "
-                        + startup.getGuid());
-            }
-            found = true;
-
-        } else {
-            server = new HostVO(startup.getGuid());
-        }
-        server.setDetails(hostDetails);
-
-        try {
-            updateSecondaryHost(server, startup, type);
-        } catch (AgentAuthnException e) {
-            throw new ConnectionException(true, "Failed to authorize host, invalid configuration", e);
-        }
-        if (!found) {
-            server.setHostAllocationState(Host.HostAllocationState.Enabled);
-            server = _hostDao.persist(server);
-        } else {
-            if (!_hostDao.connect(server, _nodeId)) {
-                throw new CloudRuntimeException(
-                        "Agent cannot connect because the current state is "
-                        + server.getStatus().toString());
-            }
-            s_logger.info("Old " + server.getType().toString()
-                    + " host reconnected w/ id =" + server.getId());
-        }
-        */
-        return true;
-
-    }
-
-    protected void updateSecondaryHost(final HostVO host, final StartupStorageCommand startup, final Host.Type type) throws AgentAuthnException {
-
-        String zoneToken = startup.getDataCenter();
-        if (zoneToken == null) {
-            s_logger.warn("No Zone Token passed in, cannot not find zone for the agent");
-            throw new AgentAuthnException("No Zone Token passed in, cannot not find zone for agent");
-        }
-
-        DataCenterVO zone = _zoneDao.findByToken(zoneToken);
-        if (zone == null) {
-            zone = _zoneDao.findByName(zoneToken);
-            if (zone == null) {
-                try {
-                    long zoneId = Long.parseLong(zoneToken);
-                    zone = _zoneDao.findById(zoneId);
-                    if (zone == null) {
-                        throw new AgentAuthnException("Could not find zone for agent with token " + zoneToken);
-                    }
-                } catch (NumberFormatException nfe) {
-                    throw new AgentAuthnException("Could not find zone for agent with token " + zoneToken);
-                }
-            }
-        }
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Successfully loaded the DataCenter from the zone token passed in ");
-        }
-
-        HostPodVO pod = findPod(startup, zone.getId(), Host.Type.Routing); //yes, routing
-        Long podId = null;
-        if (pod != null) {
-            s_logger.debug("Found pod " + pod.getName() + " for the secondary storage host " + startup.getName());
-            podId = pod.getId();
-        }
-        host.setDataCenterId(zone.getId());
-        host.setPodId(podId);
-        host.setClusterId(null);
-        host.setPrivateIpAddress(startup.getPrivateIpAddress());
-        host.setPrivateNetmask(startup.getPrivateNetmask());
-        host.setPrivateMacAddress(startup.getPrivateMacAddress());
-        host.setPublicIpAddress(startup.getPublicIpAddress());
-        host.setPublicMacAddress(startup.getPublicMacAddress());
-        host.setPublicNetmask(startup.getPublicNetmask());
-        host.setStorageIpAddress(startup.getStorageIpAddress());
-        host.setStorageMacAddress(startup.getStorageMacAddress());
-        host.setStorageNetmask(startup.getStorageNetmask());
-        host.setVersion(startup.getVersion());
-        host.setName(startup.getName());
-        host.setType(type);
-        host.setStorageUrl(startup.getIqn());
-        host.setLastPinged(System.currentTimeMillis() >> 10);
-        host.setCaps(null);
-        host.setCpus(null);
-        host.setTotalMemory(0);
-        host.setSpeed(null);
-        host.setParent(startup.getParent());
-        host.setTotalSize(startup.getTotalSize());
-        host.setHypervisorType(HypervisorType.None);
-        if (startup.getNfsShare() != null) {
-            host.setStorageUrl(startup.getNfsShare());
-        }
-
-    }
-
-    private HostPodVO findPod(StartupCommand startup, long zoneId, Host.Type type) {
-        HostPodVO pod = null;
-        List<HostPodVO> podsInZone = _podDao.listByDataCenterId(zoneId);
-        for (HostPodVO hostPod : podsInZone) {
-            if (checkCIDR(type, hostPod, startup.getPrivateIpAddress(), startup.getPrivateNetmask())) {
-                pod = hostPod;
-
-                //found the default POD having the same subnet.
-                updatePodNetmaskIfNeeded(pod, startup.getPrivateNetmask());
-
-                break;
-            }
-        }
-        return pod;
-
-    }
-
-}
diff --git a/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
deleted file mode 100644
index 1743f5c..0000000
--- a/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
+++ /dev/null
@@ -1,683 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.network.vpc;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
-import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
-import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.event.ActionEvent;
-import com.cloud.event.EventTypes;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.Networks;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.dao.NetworkVO;
-import com.cloud.network.vpc.dao.NetworkACLDao;
-import com.cloud.network.vpc.dao.VpcDao;
-import com.cloud.network.vpc.dao.VpcGatewayDao;
-import com.cloud.projects.Project.ListProjectResourcesCriteria;
-import com.cloud.server.ResourceTag.ResourceObjectType;
-import com.cloud.tags.ResourceTagVO;
-import com.cloud.tags.dao.ResourceTagDao;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.utils.Pair;
-import com.cloud.utils.Ternary;
-import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.db.EntityManager;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.JoinBuilder;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria.Op;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.net.NetUtils;
-
-@Component
-public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLService {
-    private static final Logger s_logger = Logger.getLogger(NetworkACLServiceImpl.class);
-
-    @Inject
-    AccountManager _accountMgr;
-    @Inject
-    NetworkModel _networkMgr;
-    @Inject
-    ResourceTagDao _resourceTagDao;
-    @Inject
-    NetworkACLDao _networkACLDao;
-    @Inject
-    NetworkACLItemDao _networkACLItemDao;
-    @Inject
-    NetworkModel _networkModel;
-    @Inject
-    NetworkDao _networkDao;
-    @Inject
-    NetworkACLManager _networkAclMgr;
-    @Inject
-    VpcGatewayDao _vpcGatewayDao;
-    @Inject
-    VpcManager _vpcMgr;
-    @Inject
-    EntityManager _entityMgr;
-    @Inject
-    VpcDao _vpcDao;
-    @Inject
-    VpcService _vpcSvc;
-
-    @Override
-    public NetworkACL createNetworkACL(final String name, final String description, final long vpcId, final Boolean forDisplay) {
-        final Account caller = CallContext.current().getCallingAccount();
-        final Vpc vpc = _entityMgr.findById(Vpc.class, vpcId);
-        if (vpc == null) {
-            throw new InvalidParameterValueException("Unable to find VPC");
-        }
-        _accountMgr.checkAccess(caller, null, true, vpc);
-        return _networkAclMgr.createNetworkACL(name, description, vpcId, forDisplay);
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_CREATE, eventDescription = "creating network acl list", async = true)
-    public NetworkACL getNetworkACL(final long id) {
-        return _networkAclMgr.getNetworkACL(id);
-    }
-
-    @Override
-    public Pair<List<? extends NetworkACL>, Integer> listNetworkACLs(final ListNetworkACLListsCmd cmd) {
-        final Long id = cmd.getId();
-        final String name = cmd.getName();
-        final Long networkId = cmd.getNetworkId();
-        final Long vpcId = cmd.getVpcId();
-        final String keyword = cmd.getKeyword();
-        final Boolean display = cmd.getDisplay();
-
-        final SearchBuilder<NetworkACLVO> sb = _networkACLDao.createSearchBuilder();
-        sb.and("id", sb.entity().getId(), Op.EQ);
-        sb.and("name", sb.entity().getName(), Op.EQ);
-        sb.and("vpcId", sb.entity().getVpcId(), Op.IN);
-        sb.and("display", sb.entity().isDisplay(), Op.EQ);
-
-        final Account caller = CallContext.current().getCallingAccount();
-
-        if (networkId != null) {
-            final SearchBuilder<NetworkVO> network = _networkDao.createSearchBuilder();
-            network.and("networkId", network.entity().getId(), Op.EQ);
-            sb.join("networkJoin", network, sb.entity().getId(), network.entity().getNetworkACLId(), JoinBuilder.JoinType.INNER);
-        }
-
-        final SearchCriteria<NetworkACLVO> sc = sb.create();
-
-        if (keyword != null) {
-            final SearchCriteria<NetworkACLVO> ssc = _networkACLDao.createSearchCriteria();
-            ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
-            ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%");
-            sc.addAnd("name", SearchCriteria.Op.SC, ssc);
-        }
-
-        if (display != null) {
-            sc.setParameters("display", display);
-        }
-
-        if(id != null){
-            sc.setParameters("id", id);
-        }
-
-        if (name != null) {
-            sc.setParameters("name", name);
-        }
-
-        if (vpcId != null) {
-            final Vpc vpc = _entityMgr.findById(Vpc.class, vpcId);
-            if (vpc == null) {
-                throw new InvalidParameterValueException("Unable to find VPC");
-            }
-            _accountMgr.checkAccess(caller, null, true, vpc);
-            //Include vpcId 0 to list default ACLs
-            sc.setParameters("vpcId", vpcId, 0);
-        } else {
-            //ToDo: Add accountId to network_acl table for permission check
-
-            // VpcId is not specified. Find permitted VPCs for the caller
-            // and list ACLs belonging to the permitted VPCs
-            final List<Long> permittedAccounts = new ArrayList<Long>();
-            Long domainId = cmd.getDomainId();
-            boolean isRecursive = cmd.isRecursive();
-            final String accountName = cmd.getAccountName();
-            final Long projectId = cmd.getProjectId();
-            final boolean listAll = cmd.listAll();
-            final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
-                    ListProjectResourcesCriteria>(domainId, isRecursive, null);
-            _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject,
-                    listAll, false);
-            domainId = domainIdRecursiveListProject.first();
-            isRecursive = domainIdRecursiveListProject.second();
-            final ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
-            final SearchBuilder<VpcVO> sbVpc = _vpcDao.createSearchBuilder();
-            _accountMgr.buildACLSearchBuilder(sbVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
-            final SearchCriteria<VpcVO> scVpc = sbVpc.create();
-            _accountMgr.buildACLSearchCriteria(scVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
-            final List<VpcVO> vpcs = _vpcDao.search(scVpc, null);
-            final List<Long> vpcIds = new ArrayList<Long>();
-            for (final VpcVO vpc : vpcs) {
-                vpcIds.add(vpc.getId());
-            }
-            //Add vpc_id 0 to list default ACLs
-            vpcIds.add(0L);
-            sc.setParameters("vpcId", vpcIds.toArray());
-        }
-
-        if (networkId != null) {
-            sc.setJoinParameters("networkJoin", "networkId", networkId);
-        }
-
-        final Filter filter = new Filter(NetworkACLVO.class, "id", false, null, null);
-        final Pair<List<NetworkACLVO>, Integer> acls =  _networkACLDao.searchAndCount(sc, filter);
-        return new Pair<List<? extends NetworkACL>, Integer>(acls.first(), acls.second());
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_DELETE, eventDescription = "Deleting Network ACL List", async = true)
-    public boolean deleteNetworkACL(final long id) {
-        final Account caller = CallContext.current().getCallingAccount();
-        final NetworkACL acl = _networkACLDao.findById(id);
-        if (acl == null) {
-            throw new InvalidParameterValueException("Unable to find specified ACL");
-        }
-
-        //Do not allow deletion of default ACLs
-        if (acl.getId() == NetworkACL.DEFAULT_ALLOW || acl.getId() == NetworkACL.DEFAULT_DENY) {
-            throw new InvalidParameterValueException("Default ACL cannot be removed");
-        }
-
-        final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-        if (vpc == null) {
-            throw new InvalidParameterValueException("Unable to find specified VPC associated with the ACL");
-        }
-        _accountMgr.checkAccess(caller, null, true, vpc);
-        return _networkAclMgr.deleteNetworkACL(acl);
-    }
-
-    @Override
-    public boolean replaceNetworkACLonPrivateGw(final long aclId, final long privateGatewayId) throws ResourceUnavailableException {
-        final Account caller = CallContext.current().getCallingAccount();
-        final VpcGateway gateway = _vpcGatewayDao.findById(privateGatewayId);
-        if (gateway == null) {
-            throw new InvalidParameterValueException("Unable to find specified private gateway");
-        }
-
-        final VpcGatewayVO vo = _vpcGatewayDao.findById(privateGatewayId);
-        if (vo.getState() != VpcGateway.State.Ready) {
-            throw new InvalidParameterValueException("Gateway is not in Ready state");
-        }
-
-        final NetworkACL acl = _networkACLDao.findById(aclId);
-        if (acl == null) {
-            throw new InvalidParameterValueException("Unable to find specified NetworkACL");
-        }
-
-        if (gateway.getVpcId() == null) {
-            throw new InvalidParameterValueException("Unable to find specified vpc id");
-        }
-
-        if (aclId != NetworkACL.DEFAULT_DENY && aclId != NetworkACL.DEFAULT_ALLOW) {
-            final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-            if (vpc == null) {
-                throw new InvalidParameterValueException("Unable to find Vpc associated with the NetworkACL");
-            }
-            _accountMgr.checkAccess(caller, null, true, vpc);
-            if (!gateway.getVpcId().equals(acl.getVpcId())) {
-                throw new InvalidParameterValueException("private gateway: " + privateGatewayId + " and ACL: " + aclId + " do not belong to the same VPC");
-            }
-        }
-
-        final PrivateGateway privateGateway = _vpcSvc.getVpcPrivateGateway(gateway.getId());
-        _accountMgr.checkAccess(caller, null, true, privateGateway);
-
-        return  _networkAclMgr.replaceNetworkACLForPrivateGw(acl, privateGateway);
-
-    }
-
-    @Override
-    public boolean replaceNetworkACL(final long aclId, final long networkId) throws ResourceUnavailableException {
-        final Account caller = CallContext.current().getCallingAccount();
-
-        final NetworkVO network = _networkDao.findById(networkId);
-        if (network == null) {
-            throw new InvalidParameterValueException("Unable to find specified Network");
-        }
-
-        final NetworkACL acl = _networkACLDao.findById(aclId);
-        if (acl == null) {
-            throw new InvalidParameterValueException("Unable to find specified NetworkACL");
-        }
-
-        if (network.getVpcId() == null) {
-            throw new InvalidParameterValueException("Network is not part of a VPC: " + network.getUuid());
-        }
-
-        if (network.getTrafficType() != Networks.TrafficType.Guest) {
-            throw new InvalidParameterValueException("Network ACL can be created just for networks of type " + Networks.TrafficType.Guest);
-        }
-
-        if (aclId != NetworkACL.DEFAULT_DENY && aclId != NetworkACL.DEFAULT_ALLOW) {
-            //ACL is not default DENY/ALLOW
-            // ACL should be associated with a VPC
-            final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-            if (vpc == null) {
-                throw new InvalidParameterValueException("Unable to find Vpc associated with the NetworkACL");
-            }
-
-            _accountMgr.checkAccess(caller, null, true, vpc);
-            if (!network.getVpcId().equals(acl.getVpcId())) {
-                throw new InvalidParameterValueException("Network: " + networkId + " and ACL: " + aclId + " do not belong to the same VPC");
-            }
-        }
-
-        return _networkAclMgr.replaceNetworkACL(acl, network);
-    }
-
-    @Override
-    public NetworkACLItem createNetworkACLItem(final CreateNetworkACLCmd aclItemCmd) {
-        final Account caller = CallContext.current().getCallingAccount();
-        Long aclId = aclItemCmd.getACLId();
-        if (aclId == null) {
-            //ACL id is not specified. Get the ACL details from network
-            if (aclItemCmd.getNetworkId() == null) {
-                throw new InvalidParameterValueException("Cannot create Network ACL Item. ACL Id or network Id is required");
-            }
-            final Network network = _networkMgr.getNetwork(aclItemCmd.getNetworkId());
-            if (network.getVpcId() == null) {
-                throw new InvalidParameterValueException("Network: " + network.getUuid() + " does not belong to VPC");
-            }
-            aclId = network.getNetworkACLId();
-
-            if (aclId == null) {
-                //Network is not associated with any ACL. Create a new ACL and add aclItem in it for backward compatibility
-                s_logger.debug("Network " + network.getId() + " is not associated with any ACL. Creating an ACL before adding acl item");
-
-                //verify that ACLProvider is supported by network offering
-                if (!_networkModel.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.NetworkACL)) {
-                    throw new InvalidParameterValueException("Network Offering does not support NetworkACL service");
-                }
-
-                final Vpc vpc = _entityMgr.findById(Vpc.class, network.getVpcId());
-                if (vpc == null) {
-                    throw new InvalidParameterValueException("Unable to find Vpc associated with the Network");
-                }
-
-                //Create new ACL
-                final String aclName = "VPC_" + vpc.getName() + "_Tier_" + network.getName() + "_ACL_" + network.getUuid();
-                final String description = "ACL for " + aclName;
-                final NetworkACL acl = _networkAclMgr.createNetworkACL(aclName, description, network.getVpcId(), aclItemCmd.getDisplay());
-                if (acl == null) {
-                    throw new CloudRuntimeException("Error while create ACL before adding ACL Item for network " + network.getId());
-                }
-                s_logger.debug("Created ACL: " + aclName + " for network " + network.getId());
-                aclId = acl.getId();
-                //Apply acl to network
-                try {
-                    if (!_networkAclMgr.replaceNetworkACL(acl, (NetworkVO)network)) {
-                        throw new CloudRuntimeException("Unable to apply auto created ACL to network " + network.getId());
-                    }
-                    s_logger.debug("Created ACL is applied to network " + network.getId());
-                } catch (final ResourceUnavailableException e) {
-                    throw new CloudRuntimeException("Unable to apply auto created ACL to network " + network.getId(), e);
-                }
-            }
-        }
-
-        final NetworkACL acl = _networkAclMgr.getNetworkACL(aclId);
-        if (acl == null) {
-            throw new InvalidParameterValueException("Unable to find specified ACL");
-        }
-
-        if (aclId == NetworkACL.DEFAULT_DENY || aclId == NetworkACL.DEFAULT_ALLOW) {
-            throw new InvalidParameterValueException("Default ACL cannot be modified");
-        }
-
-        final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-        if (vpc == null) {
-            throw new InvalidParameterValueException("Unable to find Vpc associated with the NetworkACL");
-        }
-        _accountMgr.checkAccess(caller, null, true, vpc);
-
-        //Ensure that number is unique within the ACL
-        if (aclItemCmd.getNumber() != null) {
-            if (_networkACLItemDao.findByAclAndNumber(aclId, aclItemCmd.getNumber()) != null) {
-                throw new InvalidParameterValueException("ACL item with number " + aclItemCmd.getNumber() + " already exists in ACL: " + acl.getUuid());
-            }
-        }
-
-        validateNetworkACLItem(aclItemCmd.getSourcePortStart(), aclItemCmd.getSourcePortEnd(), aclItemCmd.getSourceCidrList(), aclItemCmd.getProtocol(),
-                aclItemCmd.getIcmpCode(), aclItemCmd.getIcmpType(), aclItemCmd.getAction(), aclItemCmd.getNumber());
-
-        return _networkAclMgr.createNetworkACLItem(aclItemCmd.getSourcePortStart(), aclItemCmd.getSourcePortEnd(), aclItemCmd.getProtocol(),
-                aclItemCmd.getSourceCidrList(), aclItemCmd.getIcmpCode(), aclItemCmd.getIcmpType(), aclItemCmd.getTrafficType(), aclId, aclItemCmd.getAction(),
-                aclItemCmd.getNumber(), aclItemCmd.getDisplay());
-    }
-
-    private void validateNetworkACLItem(final Integer portStart, final Integer portEnd, final List<String> sourceCidrList, final String protocol, final Integer icmpCode, final Integer icmpType,
-            final String action, final Integer number) {
-
-        if (portStart != null && !NetUtils.isValidPort(portStart)) {
-            throw new InvalidParameterValueException("publicPort is an invalid value: " + portStart);
-        }
-        if (portEnd != null && !NetUtils.isValidPort(portEnd)) {
-            throw new InvalidParameterValueException("Public port range is an invalid value: " + portEnd);
-        }
-
-        // start port can't be bigger than end port
-        if (portStart != null && portEnd != null && portStart > portEnd) {
-            throw new InvalidParameterValueException("Start port can't be bigger than end port");
-        }
-
-        // start port and end port must be null for protocol = 'all'
-        if ((portStart != null || portEnd != null) && protocol != null && protocol.equalsIgnoreCase("all")) {
-            throw new InvalidParameterValueException("start port and end port must be null if protocol = 'all'");
-        }
-
-        if (sourceCidrList != null) {
-            for (final String cidr : sourceCidrList) {
-                if (!NetUtils.isValidIp4Cidr(cidr)) {
-                    throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Source cidrs formatting error " + cidr);
-                }
-            }
-        }
-
-        //Validate Protocol
-        if (protocol != null) {
-            //Check if protocol is a number
-            if (StringUtils.isNumeric(protocol)) {
-                final int protoNumber = Integer.parseInt(protocol);
-                if (protoNumber < 0 || protoNumber > 255) {
-                    throw new InvalidParameterValueException("Invalid protocol number: " + protoNumber);
-                }
-            } else {
-                //Protocol is not number
-                //Check for valid protocol strings
-                final String supportedProtocols = "tcp,udp,icmp,all";
-                if (!supportedProtocols.contains(protocol.toLowerCase())) {
-                    throw new InvalidParameterValueException("Invalid protocol: " + protocol);
-                }
-            }
-
-            // icmp code and icmp type can't be passed in for any other protocol rather than icmp
-            if (!protocol.equalsIgnoreCase(NetUtils.ICMP_PROTO) && (icmpCode != null || icmpType != null)) {
-                throw new InvalidParameterValueException("Can specify icmpCode and icmpType for ICMP protocol only");
-            }
-
-            if (protocol.equalsIgnoreCase(NetUtils.ICMP_PROTO) && (portStart != null || portEnd != null)) {
-                throw new InvalidParameterValueException("Can't specify start/end port when protocol is ICMP");
-            }
-        }
-
-        //validate icmp code and type
-        if (icmpType != null) {
-            if (icmpType.longValue() != -1 && !NetUtils.validateIcmpType(icmpType.longValue())) {
-                throw new InvalidParameterValueException("Invalid icmp type; should belong to [0-255] range");
-            }
-            if (icmpCode != null) {
-                if (icmpCode.longValue() != -1 && !NetUtils.validateIcmpCode(icmpCode.longValue())) {
-                    throw new InvalidParameterValueException("Invalid icmp code; should belong to [0-15] range and can"
-                            + " be defined when icmpType belongs to [0-40] range");
-                }
-            }
-        }
-
-        //Check ofr valid action Allow/Deny
-        if (action != null) {
-            if (!("Allow".equalsIgnoreCase(action) || "Deny".equalsIgnoreCase(action))) {
-                throw new InvalidParameterValueException("Invalid action. Allowed actions are Allow and Deny");
-            }
-        }
-
-        //Check for valid number
-        if (number != null && number < 1) {
-            throw new InvalidParameterValueException("Invalid number. Number cannot be < 1");
-        }
-    }
-
-    @Override
-    public NetworkACLItem getNetworkACLItem(final long ruleId) {
-        return _networkAclMgr.getNetworkACLItem(ruleId);
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_ITEM_CREATE, eventDescription = "Applying Network ACL Item", async = true)
-    public boolean applyNetworkACL(final long aclId) throws ResourceUnavailableException {
-        return _networkAclMgr.applyNetworkACL(aclId);
-    }
-
-    @Override
-    public Pair<List<? extends NetworkACLItem>, Integer> listNetworkACLItems(final ListNetworkACLsCmd cmd) {
-        final Long networkId = cmd.getNetworkId();
-        final Long id = cmd.getId();
-        Long aclId = cmd.getAclId();
-        final String trafficType = cmd.getTrafficType();
-        final String protocol = cmd.getProtocol();
-        final String action = cmd.getAction();
-        final Map<String, String> tags = cmd.getTags();
-        final Account caller = CallContext.current().getCallingAccount();
-
-        final Filter filter = new Filter(NetworkACLItemVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal());
-        final SearchBuilder<NetworkACLItemVO> sb = _networkACLItemDao.createSearchBuilder();
-
-        sb.and("id", sb.entity().getId(), Op.EQ);
-        sb.and("aclId", sb.entity().getAclId(), Op.EQ);
-        sb.and("trafficType", sb.entity().getTrafficType(), Op.EQ);
-        sb.and("protocol", sb.entity().getProtocol(), Op.EQ);
-        sb.and("action", sb.entity().getAction(), Op.EQ);
-
-        if (tags != null && !tags.isEmpty()) {
-            final SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
-            for (int count = 0; count < tags.size(); count++) {
-                tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), Op.EQ);
-                tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), Op.EQ);
-                tagSearch.cp();
-            }
-            tagSearch.and("resourceType", tagSearch.entity().getResourceType(), Op.EQ);
-            sb.groupBy(sb.entity().getId());
-            sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
-        }
-
-        if (aclId == null) {
-            //Join with network_acl table when aclId is not specified to list acl_items within permitted VPCs
-            final SearchBuilder<NetworkACLVO> vpcSearch = _networkACLDao.createSearchBuilder();
-            vpcSearch.and("vpcId", vpcSearch.entity().getVpcId(), Op.IN);
-            sb.join("vpcSearch", vpcSearch, sb.entity().getAclId(), vpcSearch.entity().getId(), JoinBuilder.JoinType.INNER);
-        }
-
-        final SearchCriteria<NetworkACLItemVO> sc = sb.create();
-
-        if (id != null) {
-            sc.setParameters("id", id);
-        }
-
-        if (networkId != null) {
-            final Network network = _networkDao.findById(networkId);
-            aclId = network.getNetworkACLId();
-            if( aclId == null){
-                // No aclId associated with the network.
-                //Return empty list
-                return new Pair(new ArrayList<NetworkACLItem>(), 0);
-            }
-        }
-
-        if (trafficType != null) {
-            sc.setParameters("trafficType", trafficType);
-        }
-
-        if (aclId != null) {
-            // Get VPC and check access
-            final NetworkACL acl = _networkACLDao.findById(aclId);
-            if (acl.getVpcId() != 0) {
-                final Vpc vpc = _vpcDao.findById(acl.getVpcId());
-                if (vpc == null) {
-                    throw new InvalidParameterValueException("Unable to find VPC associated with acl");
-                }
-                _accountMgr.checkAccess(caller, null, true, vpc);
-            }
-            sc.setParameters("aclId", aclId);
-        } else {
-            //ToDo: Add accountId to network_acl_item table for permission check
-
-
-            // aclId is not specified
-            // List permitted VPCs and filter aclItems
-            final List<Long> permittedAccounts = new ArrayList<Long>();
-            Long domainId = cmd.getDomainId();
-            boolean isRecursive = cmd.isRecursive();
-            final String accountName = cmd.getAccountName();
-            final Long projectId = cmd.getProjectId();
-            final boolean listAll = cmd.listAll();
-            final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
-                    ListProjectResourcesCriteria>(domainId, isRecursive, null);
-            _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject,
-                    listAll, false);
-            domainId = domainIdRecursiveListProject.first();
-            isRecursive = domainIdRecursiveListProject.second();
-            final ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
-            final SearchBuilder<VpcVO> sbVpc = _vpcDao.createSearchBuilder();
-            _accountMgr.buildACLSearchBuilder(sbVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
-            final SearchCriteria<VpcVO> scVpc = sbVpc.create();
-            _accountMgr.buildACLSearchCriteria(scVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
-            final List<VpcVO> vpcs = _vpcDao.search(scVpc, null);
-            final List<Long> vpcIds = new ArrayList<Long>();
-            for (final VpcVO vpc : vpcs) {
-                vpcIds.add(vpc.getId());
-            }
-            //Add vpc_id 0 to list acl_items in default ACL
-            vpcIds.add(0L);
-            sc.setJoinParameters("vpcSearch", "vpcId", vpcIds.toArray());
-        }
-
-        if (protocol != null) {
-            sc.setParameters("protocol", protocol);
-        }
-
-        if (action != null) {
-            sc.setParameters("action", action);
-        }
-
-        if (tags != null && !tags.isEmpty()) {
-            int count = 0;
-            sc.setJoinParameters("tagSearch", "resourceType", ResourceObjectType.NetworkACL.toString());
-            for (final String key : tags.keySet()) {
-                sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key);
-                sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key));
-                count++;
-            }
-        }
-
-        final Pair<List<NetworkACLItemVO>, Integer> result = _networkACLItemDao.searchAndCount(sc, filter);
-        final List<NetworkACLItemVO> aclItemVOs = result.first();
-        for (final NetworkACLItemVO item: aclItemVOs) {
-            _networkACLItemDao.loadCidrs(item);
-        }
-        return new Pair<List<? extends NetworkACLItem>, Integer>(aclItemVOs, result.second());
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_ITEM_DELETE, eventDescription = "Deleting Network ACL Item", async = true)
-    public boolean revokeNetworkACLItem(final long ruleId) {
-        final NetworkACLItemVO aclItem = _networkACLItemDao.findById(ruleId);
-        if(aclItem != null){
-            final NetworkACL acl = _networkAclMgr.getNetworkACL(aclItem.getAclId());
-
-            final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-
-            if(aclItem.getAclId() == NetworkACL.DEFAULT_ALLOW || aclItem.getAclId() == NetworkACL.DEFAULT_DENY){
-                throw new InvalidParameterValueException("ACL Items in default ACL cannot be deleted");
-            }
-
-            final Account caller = CallContext.current().getCallingAccount();
-
-            _accountMgr.checkAccess(caller, null, true, vpc);
-
-        }
-        return _networkAclMgr.revokeNetworkACLItem(ruleId);
-    }
-
-    @Override
-    public NetworkACLItem updateNetworkACLItem(final Long id, final String protocol, final List<String> sourceCidrList, final NetworkACLItem.TrafficType trafficType, final String action,
-            final Integer number, final Integer sourcePortStart, final Integer sourcePortEnd, final Integer icmpCode, final Integer icmpType, final String newUUID, final Boolean forDisplay) throws ResourceUnavailableException {
-        final NetworkACLItemVO aclItem = _networkACLItemDao.findById(id);
-        if (aclItem == null) {
-            throw new InvalidParameterValueException("Unable to find ACL Item cannot be found");
-        }
-
-        if (aclItem.getAclId() == NetworkACL.DEFAULT_ALLOW || aclItem.getAclId() == NetworkACL.DEFAULT_DENY) {
-            throw new InvalidParameterValueException("Default ACL Items cannot be updated");
-        }
-
-        final NetworkACL acl = _networkAclMgr.getNetworkACL(aclItem.getAclId());
-
-        final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-
-        final Account caller = CallContext.current().getCallingAccount();
-
-        _accountMgr.checkAccess(caller, null, true, vpc);
-
-        if (number != null) {
-            //Check if ACL Item with specified number already exists
-            final NetworkACLItemVO aclNumber = _networkACLItemDao.findByAclAndNumber(acl.getId(), number);
-            if (aclNumber != null && aclNumber.getId() != id) {
-                throw new InvalidParameterValueException("ACL item with number " + number + " already exists in ACL: " + acl.getUuid());
-            }
-        }
-
-        validateNetworkACLItem(sourcePortStart == null ? aclItem.getSourcePortStart() : sourcePortStart, sourcePortEnd == null ? aclItem.getSourcePortEnd()
-                : sourcePortEnd, sourceCidrList, protocol, icmpCode, icmpType == null ? aclItem.getIcmpType() : icmpType, action, number);
-
-        return _networkAclMgr.updateNetworkACLItem(id, protocol, sourceCidrList, trafficType, action, number, sourcePortStart, sourcePortEnd, icmpCode, icmpType, newUUID, forDisplay);
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_UPDATE, eventDescription = "updating network acl", async = true)
-    public NetworkACL updateNetworkACL(final Long id, final String customId, final Boolean forDisplay) {
-        final NetworkACLVO acl = _networkACLDao.findById(id);
-        final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
-        final Account caller = CallContext.current().getCallingAccount();
-        _accountMgr.checkAccess(caller, null, true, vpc);
-
-        if (customId != null) {
-            acl.setUuid(customId);
-        }
-
-        if (forDisplay != null) {
-            acl.setDisplay(forDisplay);
-        }
-
-        _networkACLDao.update(id, acl);
-        return _networkACLDao.findById(id);
-    }
-
-}
\ No newline at end of file
diff --git a/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java
deleted file mode 100644
index 254dc18..0000000
--- a/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
-import com.cloud.serializer.Param;
-
-public class AssociateLunCmdResponse extends BaseResponse {
-
-    @SerializedName(ApiConstants.ID)
-    @Param(description = "the LUN id")
-    private String lun;
-
-    @SerializedName(ApiConstants.IP_ADDRESS)
-    @Param(description = "the IP address of ")
-    private String ipAddress;
-
-    @SerializedName(ApiConstants.TARGET_IQN)
-    @Param(description = "the target IQN")
-    private String targetIQN;
-
-    public String getLun() {
-        return lun;
-    }
-
-    public String getIpAddress() {
-        return ipAddress;
-    }
-
-    public String getTargetIQN() {
-        return targetIQN;
-    }
-
-    public void setLun(String lun) {
-        this.lun = lun;
-    }
-
-    public void setIpAddress(String ipAddress) {
-        this.ipAddress = ipAddress;
-    }
-
-    public void setTargetIQN(String targetIQN) {
-        this.targetIQN = targetIQN;
-    }
-
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java
deleted file mode 100644
index 06be87b..0000000
--- a/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
-import com.cloud.serializer.Param;
-
-public class CreateLunCmdResponse extends BaseResponse {
-
-    @SerializedName(ApiConstants.PATH)
-    @Param(description = "pool path")
-    private String path;
-
-    @SerializedName(ApiConstants.IQN)
-    @Param(description = "iqn")
-    private String iqn;
-
-    @SerializedName(ApiConstants.IP_ADDRESS)
-    @Param(description = "ip address")
-    private String ipAddress;
-
-    public String getPath() {
-        return path;
-    }
-
-    public String getIqn() {
-        return iqn;
-    }
-
-    public String getIpAddress() {
-        return ipAddress;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    public void setIqn(String iqn) {
-        this.iqn = iqn;
-    }
-
-    public void setIpAddress(String ipAddress) {
-        this.ipAddress = ipAddress;
-    }
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java
deleted file mode 100644
index f01eb43..0000000
--- a/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class CreateVolumeOnFilerCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java
deleted file mode 100644
index cf2e5ea..0000000
--- a/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class CreateVolumePoolCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java
deleted file mode 100644
index be9d03c..0000000
--- a/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class DeleteLUNCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java
deleted file mode 100644
index 40083ec..0000000
--- a/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class DeleteVolumeOnFilerCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java
deleted file mode 100644
index d3a0875..0000000
--- a/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class DeleteVolumePoolCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java
deleted file mode 100644
index e88fae0..0000000
--- a/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class DissociateLunCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java
deleted file mode 100644
index 480d5cc..0000000
--- a/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
-import com.cloud.serializer.Param;
-
-public class ListLunsCmdResponse extends BaseResponse {
-    @SerializedName(ApiConstants.ID)
-    @Param(description = "lun id")
-    private Long id;
-
-    @SerializedName(ApiConstants.IQN)
-    @Param(description = "lun iqn")
-    private String iqn;
-
-    @SerializedName(ApiConstants.NAME)
-    @Param(description = "lun name")
-    private String name;
-
-    @SerializedName(ApiConstants.VOLUME_ID)
-    @Param(description = "volume id")
-    private Long volumeId;
-
-    public Long getId() {
-        return id;
-    }
-
-    public String getIqn() {
-        return iqn;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public Long getVolumeId() {
-        return volumeId;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public void setIqn(String iqn) {
-        this.iqn = iqn;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setVolumeId(Long id) {
-        this.volumeId = id;
-    }
-}
\ No newline at end of file
diff --git a/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java
deleted file mode 100644
index 5167260..0000000
--- a/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
-import com.cloud.serializer.Param;
-
-public class ListVolumePoolsCmdResponse extends BaseResponse {
-    @SerializedName(ApiConstants.ID)
-    @Param(description = "pool id")
-    private Long id;
-    @SerializedName(ApiConstants.NAME)
-    @Param(description = "pool name")
-    private String name;
-
-    @SerializedName(ApiConstants.ALGORITHM)
-    @Param(description = "pool algorithm")
-    private String algorithm;
-
-    public Long getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setAlgorithm(String algorithm) {
-        this.algorithm = algorithm;
-    }
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java
deleted file mode 100644
index 1a1b607..0000000
--- a/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import com.google.gson.annotations.SerializedName;
-
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
-import com.cloud.serializer.Param;
-
-public class ListVolumesOnFilerCmdResponse extends BaseResponse {
-    @SerializedName(ApiConstants.ID)
-    @Param(description = "volume id")
-    private Long id;
-
-    @SerializedName(ApiConstants.POOL_NAME)
-    @Param(description = "pool name")
-    private String poolName;
-
-    @SerializedName(ApiConstants.IP_ADDRESS)
-    @Param(description = "ip address")
-    private String ipAddress;
-
-    @SerializedName(ApiConstants.AGGREGATE_NAME)
-    @Param(description = "Aggregate name")
-    private String aggrName;
-
-    @SerializedName(ApiConstants.VOLUME_NAME)
-    @Param(description = "Volume name")
-    private String volumeName;
-
-    @SerializedName(ApiConstants.SNAPSHOT_POLICY)
-    @Param(description = "snapshot policy")
-    private String snapshotPolicy;
-
-    @SerializedName(ApiConstants.SNAPSHOT_RESERVATION)
-    @Param(description = "snapshot reservation")
-    private Integer snapshotReservation;
-
-    @SerializedName(ApiConstants.SIZE)
-    @Param(description = "volume size")
-    private String volumeSize;
-
-    public Long getId() {
-        return id;
-    }
-
-    public String getPoolName() {
-        return poolName;
-    }
-
-    public String getIpAddress() {
-        return ipAddress;
-    }
-
-    public String getAggrName() {
-        return aggrName;
-    }
-
-    public String getVolumeName() {
-        return volumeName;
-    }
-
-    public String getSnapshotPolicy() {
-        return snapshotPolicy;
-    }
-
-    public Integer getSnapshotReservation() {
-        return snapshotReservation;
-    }
-
-    public String getVolumeSize() {
-        return volumeSize;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public void setPoolName(String poolName) {
-        this.poolName = poolName;
-    }
-
-    public void setIpAddress(String ipAddress) {
-        this.ipAddress = ipAddress;
-    }
-
-    public void setAggrName(String aggrName) {
-        this.aggrName = aggrName;
-    }
-
-    public void setVolumeName(String volumeName) {
-        this.volumeName = volumeName;
-    }
-
-    public void setSnapshotPolicy(String snapshotPolicy) {
-        this.snapshotPolicy = snapshotPolicy;
-    }
-
-    public void setSnapshotReservation(Integer snapshotReservation) {
-        this.snapshotReservation = snapshotReservation;
-    }
-
-    public void setVolumeSize(String size) {
-        this.volumeSize = size;
-    }
-
-}
diff --git a/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java
deleted file mode 100644
index fa0c069..0000000
--- a/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.server.api.response.netapp;
-
-import org.apache.cloudstack.api.BaseResponse;
-
-public class ModifyVolumePoolCmdResponse extends BaseResponse {
-}
diff --git a/server/src/com/cloud/account/SecurityManager.java b/server/src/main/java/com/cloud/account/SecurityManager.java
similarity index 100%
rename from server/src/com/cloud/account/SecurityManager.java
rename to server/src/main/java/com/cloud/account/SecurityManager.java
diff --git a/server/src/com/cloud/acl/AffinityGroupAccessChecker.java b/server/src/main/java/com/cloud/acl/AffinityGroupAccessChecker.java
similarity index 100%
rename from server/src/com/cloud/acl/AffinityGroupAccessChecker.java
rename to server/src/main/java/com/cloud/acl/AffinityGroupAccessChecker.java
diff --git a/server/src/com/cloud/acl/DomainChecker.java b/server/src/main/java/com/cloud/acl/DomainChecker.java
similarity index 100%
rename from server/src/com/cloud/acl/DomainChecker.java
rename to server/src/main/java/com/cloud/acl/DomainChecker.java
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
rename to server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitRoutingAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitRoutingAllocator.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/allocator/impl/FirstFitRoutingAllocator.java
rename to server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitRoutingAllocator.java
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java
rename to server/src/main/java/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/TestingAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/TestingAllocator.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/allocator/impl/TestingAllocator.java
rename to server/src/main/java/com/cloud/agent/manager/allocator/impl/TestingAllocator.java
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java
rename to server/src/main/java/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java
diff --git a/server/src/com/cloud/agent/manager/authn/AgentAuthnException.java b/server/src/main/java/com/cloud/agent/manager/authn/AgentAuthnException.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/authn/AgentAuthnException.java
rename to server/src/main/java/com/cloud/agent/manager/authn/AgentAuthnException.java
diff --git a/server/src/com/cloud/agent/manager/authn/AgentAuthorizer.java b/server/src/main/java/com/cloud/agent/manager/authn/AgentAuthorizer.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/authn/AgentAuthorizer.java
rename to server/src/main/java/com/cloud/agent/manager/authn/AgentAuthorizer.java
diff --git a/server/src/com/cloud/agent/manager/authn/impl/BasicAgentAuthManager.java b/server/src/main/java/com/cloud/agent/manager/authn/impl/BasicAgentAuthManager.java
similarity index 100%
rename from server/src/com/cloud/agent/manager/authn/impl/BasicAgentAuthManager.java
rename to server/src/main/java/com/cloud/agent/manager/authn/impl/BasicAgentAuthManager.java
diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java
similarity index 96%
rename from server/src/com/cloud/alert/AlertManagerImpl.java
rename to server/src/main/java/com/cloud/alert/AlertManagerImpl.java
index a58a4f8..5a7a8b4 100644
--- a/server/src/com/cloud/alert/AlertManagerImpl.java
+++ b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java
@@ -39,12 +39,6 @@
 import javax.mail.internet.InternetAddress;
 import javax.naming.ConfigurationException;
 
-import org.apache.log4j.Logger;
-
-import com.sun.mail.smtp.SMTPMessage;
-import com.sun.mail.smtp.SMTPSSLTransport;
-import com.sun.mail.smtp.SMTPTransport;
-
 import org.apache.cloudstack.framework.config.ConfigDepot;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.Configurable;
@@ -52,6 +46,7 @@
 import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.apache.log4j.Logger;
 
 import com.cloud.alert.dao.AlertDao;
 import com.cloud.api.ApiDBUtils;
@@ -85,10 +80,12 @@
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.db.SearchCriteria;
+import com.sun.mail.smtp.SMTPMessage;
+import com.sun.mail.smtp.SMTPSSLTransport;
+import com.sun.mail.smtp.SMTPTransport;
 
 public class AlertManagerImpl extends ManagerBase implements AlertManager, Configurable {
     private static final Logger s_logger = Logger.getLogger(AlertManagerImpl.class.getName());
-    private static final Logger s_alertsLogger = Logger.getLogger("org.apache.cloudstack.alerts");
 
     private static final long INITIAL_CAPACITY_CHECK_DELAY = 30L * 1000L; // Thirty seconds expressed in milliseconds.
 
@@ -205,8 +202,9 @@
         String capacityCheckPeriodStr = configs.get("capacity.check.period");
         if (capacityCheckPeriodStr != null) {
             _capacityCheckPeriod = Long.parseLong(capacityCheckPeriodStr);
-            if (_capacityCheckPeriod <= 0)
+            if (_capacityCheckPeriod <= 0) {
                 _capacityCheckPeriod = Long.parseLong(Config.CapacityCheckPeriod.getDefaultValue());
+            }
         }
 
         _timer = new Timer("CapacityChecker");
@@ -249,7 +247,7 @@
             if (_emailAlert != null) {
                 _emailAlert.sendAlert(alertType, dataCenterId, podId, null, subject, body);
             } else {
-                s_alertsLogger.warn("AlertType:: " + alertType + " | dataCenterId:: " + dataCenterId + " | podId:: " + podId +
+                s_logger.warn("AlertType:: " + alertType + " | dataCenterId:: " + dataCenterId + " | podId:: " + podId +
                         " | message:: " + subject + " | body:: " + body);
             }
         } catch (Exception ex) {
@@ -589,7 +587,7 @@
             alertType = AlertManager.AlertType.ALERT_TYPE_LOCAL_STORAGE;
             break;
 
-        //Pod Level
+            //Pod Level
         case Capacity.CAPACITY_TYPE_PRIVATE_IP:
             msgSubject = "System Alert: Number of unallocated private IPs is low in pod " + pod.getName() + " of availability zone " + dc.getName();
             totalStr = Double.toString(totalCapacity);
@@ -598,7 +596,7 @@
             alertType = AlertManager.AlertType.ALERT_TYPE_PRIVATE_IP;
             break;
 
-        //Zone Level
+            //Zone Level
         case Capacity.CAPACITY_TYPE_SECONDARY_STORAGE:
             msgSubject = "System Alert: Low Available Secondary Storage in availability zone " + dc.getName();
             totalStr = formatBytesToMegabytes(totalCapacity);
@@ -746,22 +744,22 @@
 
         // TODO:  make sure this handles SSL transport (useAuth is true) and regular
         public void sendAlert(AlertType alertType, long dataCenterId, Long podId, Long clusterId, String subject, String content) throws MessagingException,
-                UnsupportedEncodingException {
-            s_alertsLogger.warn("AlertType:: " + alertType + " | dataCenterId:: " + dataCenterId + " | podId:: " +
+        UnsupportedEncodingException {
+            s_logger.warn("AlertType:: " + alertType + " | dataCenterId:: " + dataCenterId + " | podId:: " +
                     podId + " | clusterId:: " + clusterId + " | message:: " + subject);
             AlertVO alert = null;
             if ((alertType != AlertManager.AlertType.ALERT_TYPE_HOST) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_USERVM) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_CONSOLE_PROXY) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_SSVM) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_STORAGE_MISC) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_MANAGMENT_NODE) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_RESOURCE_LIMIT_EXCEEDED) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_UPLOAD_FAILED) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_OOBM_AUTH_ERROR) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_HA_ACTION) &&
-                (alertType != AlertManager.AlertType.ALERT_TYPE_CA_CERT)) {
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_USERVM) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_CONSOLE_PROXY) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_SSVM) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_STORAGE_MISC) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_MANAGMENT_NODE) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_RESOURCE_LIMIT_EXCEEDED) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_UPLOAD_FAILED) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_OOBM_AUTH_ERROR) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_HA_ACTION) &&
+                    (alertType != AlertManager.AlertType.ALERT_TYPE_CA_CERT)) {
                 alert = _alertDao.getLastAlert(alertType.getType(), dataCenterId, podId, clusterId);
             }
 
@@ -770,6 +768,7 @@
                 AlertVO newAlert = new AlertVO();
                 newAlert.setType(alertType.getType());
                 newAlert.setSubject(subject);
+                newAlert.setContent(content);
                 newAlert.setClusterId(clusterId);
                 newAlert.setPodId(podId);
                 newAlert.setDataCenterId(dataCenterId);
diff --git a/server/src/com/cloud/alert/ClusterAlertAdapter.java b/server/src/main/java/com/cloud/alert/ClusterAlertAdapter.java
similarity index 100%
rename from server/src/com/cloud/alert/ClusterAlertAdapter.java
rename to server/src/main/java/com/cloud/alert/ClusterAlertAdapter.java
diff --git a/server/src/com/cloud/alert/ConsoleProxyAlertAdapter.java b/server/src/main/java/com/cloud/alert/ConsoleProxyAlertAdapter.java
similarity index 100%
rename from server/src/com/cloud/alert/ConsoleProxyAlertAdapter.java
rename to server/src/main/java/com/cloud/alert/ConsoleProxyAlertAdapter.java
diff --git a/server/src/com/cloud/alert/SecondaryStorageVmAlertAdapter.java b/server/src/main/java/com/cloud/alert/SecondaryStorageVmAlertAdapter.java
similarity index 100%
rename from server/src/com/cloud/alert/SecondaryStorageVmAlertAdapter.java
rename to server/src/main/java/com/cloud/alert/SecondaryStorageVmAlertAdapter.java
diff --git a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java b/server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java
similarity index 100%
rename from server/src/com/cloud/api/ApiAsyncJobDispatcher.java
rename to server/src/main/java/com/cloud/api/ApiAsyncJobDispatcher.java
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/main/java/com/cloud/api/ApiDBUtils.java
similarity index 100%
rename from server/src/com/cloud/api/ApiDBUtils.java
rename to server/src/main/java/com/cloud/api/ApiDBUtils.java
diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/main/java/com/cloud/api/ApiDispatcher.java
similarity index 100%
rename from server/src/com/cloud/api/ApiDispatcher.java
rename to server/src/main/java/com/cloud/api/ApiDispatcher.java
diff --git a/server/src/com/cloud/api/ApiGsonHelper.java b/server/src/main/java/com/cloud/api/ApiGsonHelper.java
similarity index 100%
rename from server/src/com/cloud/api/ApiGsonHelper.java
rename to server/src/main/java/com/cloud/api/ApiGsonHelper.java
diff --git a/server/src/com/cloud/api/ApiResponseGsonHelper.java b/server/src/main/java/com/cloud/api/ApiResponseGsonHelper.java
similarity index 100%
rename from server/src/com/cloud/api/ApiResponseGsonHelper.java
rename to server/src/main/java/com/cloud/api/ApiResponseGsonHelper.java
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
similarity index 99%
rename from server/src/com/cloud/api/ApiResponseHelper.java
rename to server/src/main/java/com/cloud/api/ApiResponseHelper.java
index c10e259..ba3d5c3 100644
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
@@ -1808,16 +1808,16 @@
     }
 
     @Override
-    public AsyncJobResponse queryJobResult(QueryAsyncJobResultCmd cmd) {
-        Account caller = CallContext.current().getCallingAccount();
+    public AsyncJobResponse queryJobResult(final QueryAsyncJobResultCmd cmd) {
+        final Account caller = CallContext.current().getCallingAccount();
 
-        AsyncJob job = _entityMgr.findById(AsyncJob.class, cmd.getId());
+        final AsyncJob job = _entityMgr.findByIdIncludingRemoved(AsyncJob.class, cmd.getId());
         if (job == null) {
             throw new InvalidParameterValueException("Unable to find a job by id " + cmd.getId());
         }
 
-        User userJobOwner = _accountMgr.getUserIncludingRemoved(job.getUserId());
-        Account jobOwner = _accountMgr.getAccount(userJobOwner.getAccountId());
+        final User userJobOwner = _accountMgr.getUserIncludingRemoved(job.getUserId());
+        final Account jobOwner = _accountMgr.getAccount(userJobOwner.getAccountId());
 
         //check permissions
         if (_accountMgr.isNormalUser(caller.getId())) {
@@ -2364,7 +2364,7 @@
             CollectionUtils.addIgnoreNull(tagResponses, tagResponse);
         }
         response.setTags(tagResponses);
-
+        response.setReason(aclItem.getReason());
         response.setObjectName("networkacl");
         return response;
     }
diff --git a/server/src/com/cloud/api/ApiSerializerHelper.java b/server/src/main/java/com/cloud/api/ApiSerializerHelper.java
similarity index 100%
rename from server/src/com/cloud/api/ApiSerializerHelper.java
rename to server/src/main/java/com/cloud/api/ApiSerializerHelper.java
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/main/java/com/cloud/api/ApiServer.java
similarity index 100%
rename from server/src/com/cloud/api/ApiServer.java
rename to server/src/main/java/com/cloud/api/ApiServer.java
diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/main/java/com/cloud/api/ApiServlet.java
similarity index 100%
rename from server/src/com/cloud/api/ApiServlet.java
rename to server/src/main/java/com/cloud/api/ApiServlet.java
diff --git a/server/src/com/cloud/api/EncodedStringTypeAdapter.java b/server/src/main/java/com/cloud/api/EncodedStringTypeAdapter.java
similarity index 100%
rename from server/src/com/cloud/api/EncodedStringTypeAdapter.java
rename to server/src/main/java/com/cloud/api/EncodedStringTypeAdapter.java
diff --git a/server/src/com/cloud/api/ResponseObjectTypeAdapter.java b/server/src/main/java/com/cloud/api/ResponseObjectTypeAdapter.java
similarity index 100%
rename from server/src/com/cloud/api/ResponseObjectTypeAdapter.java
rename to server/src/main/java/com/cloud/api/ResponseObjectTypeAdapter.java
diff --git a/server/src/com/cloud/api/SerializationContext.java b/server/src/main/java/com/cloud/api/SerializationContext.java
similarity index 100%
rename from server/src/com/cloud/api/SerializationContext.java
rename to server/src/main/java/com/cloud/api/SerializationContext.java
diff --git a/server/src/com/cloud/api/StringMapTypeAdapter.java b/server/src/main/java/com/cloud/api/StringMapTypeAdapter.java
similarity index 100%
rename from server/src/com/cloud/api/StringMapTypeAdapter.java
rename to server/src/main/java/com/cloud/api/StringMapTypeAdapter.java
diff --git a/server/src/com/cloud/api/auth/APIAuthenticationManagerImpl.java b/server/src/main/java/com/cloud/api/auth/APIAuthenticationManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/api/auth/APIAuthenticationManagerImpl.java
rename to server/src/main/java/com/cloud/api/auth/APIAuthenticationManagerImpl.java
diff --git a/server/src/com/cloud/api/auth/DefaultLoginAPIAuthenticatorCmd.java b/server/src/main/java/com/cloud/api/auth/DefaultLoginAPIAuthenticatorCmd.java
similarity index 100%
rename from server/src/com/cloud/api/auth/DefaultLoginAPIAuthenticatorCmd.java
rename to server/src/main/java/com/cloud/api/auth/DefaultLoginAPIAuthenticatorCmd.java
diff --git a/server/src/com/cloud/api/auth/DefaultLogoutAPIAuthenticatorCmd.java b/server/src/main/java/com/cloud/api/auth/DefaultLogoutAPIAuthenticatorCmd.java
similarity index 100%
rename from server/src/com/cloud/api/auth/DefaultLogoutAPIAuthenticatorCmd.java
rename to server/src/main/java/com/cloud/api/auth/DefaultLogoutAPIAuthenticatorCmd.java
diff --git a/server/src/com/cloud/api/dispatch/CommandCreationWorker.java b/server/src/main/java/com/cloud/api/dispatch/CommandCreationWorker.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/CommandCreationWorker.java
rename to server/src/main/java/com/cloud/api/dispatch/CommandCreationWorker.java
diff --git a/server/src/com/cloud/api/dispatch/DispatchChain.java b/server/src/main/java/com/cloud/api/dispatch/DispatchChain.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/DispatchChain.java
rename to server/src/main/java/com/cloud/api/dispatch/DispatchChain.java
diff --git a/server/src/com/cloud/api/dispatch/DispatchChainFactory.java b/server/src/main/java/com/cloud/api/dispatch/DispatchChainFactory.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/DispatchChainFactory.java
rename to server/src/main/java/com/cloud/api/dispatch/DispatchChainFactory.java
diff --git a/server/src/com/cloud/api/dispatch/DispatchTask.java b/server/src/main/java/com/cloud/api/dispatch/DispatchTask.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/DispatchTask.java
rename to server/src/main/java/com/cloud/api/dispatch/DispatchTask.java
diff --git a/server/src/com/cloud/api/dispatch/DispatchWorker.java b/server/src/main/java/com/cloud/api/dispatch/DispatchWorker.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/DispatchWorker.java
rename to server/src/main/java/com/cloud/api/dispatch/DispatchWorker.java
diff --git a/server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java b/server/src/main/java/com/cloud/api/dispatch/ParamGenericValidationWorker.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java
rename to server/src/main/java/com/cloud/api/dispatch/ParamGenericValidationWorker.java
diff --git a/server/src/com/cloud/api/dispatch/ParamProcessWorker.java b/server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java
similarity index 98%
rename from server/src/com/cloud/api/dispatch/ParamProcessWorker.java
rename to server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java
index feefaab..f030209 100644
--- a/server/src/com/cloud/api/dispatch/ParamProcessWorker.java
+++ b/server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java
@@ -258,13 +258,11 @@
                 }
 
             } catch (final IllegalArgumentException e) {
-                s_logger.error("Error initializing command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible.");
                 throw new CloudRuntimeException("Internal error initializing parameters for command " + cmd.getCommandName() + " [field " + field.getName() +
-                        " is not accessible]");
+                        " is not accessible]", e);
             } catch (final IllegalAccessException e) {
-                s_logger.error("Error initializing command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible.");
                 throw new CloudRuntimeException("Internal error initializing parameters for command " + cmd.getCommandName() + " [field " + field.getName() +
-                        " is not accessible]");
+                        " is not accessible]", e);
             }
 
         }
diff --git a/server/src/com/cloud/api/dispatch/ParamUnpackWorker.java b/server/src/main/java/com/cloud/api/dispatch/ParamUnpackWorker.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/ParamUnpackWorker.java
rename to server/src/main/java/com/cloud/api/dispatch/ParamUnpackWorker.java
diff --git a/server/src/com/cloud/api/dispatch/SpecificCmdValidationWorker.java b/server/src/main/java/com/cloud/api/dispatch/SpecificCmdValidationWorker.java
similarity index 100%
rename from server/src/com/cloud/api/dispatch/SpecificCmdValidationWorker.java
rename to server/src/main/java/com/cloud/api/dispatch/SpecificCmdValidationWorker.java
diff --git a/server/src/com/cloud/api/doc/Alert.java b/server/src/main/java/com/cloud/api/doc/Alert.java
similarity index 100%
rename from server/src/com/cloud/api/doc/Alert.java
rename to server/src/main/java/com/cloud/api/doc/Alert.java
diff --git a/server/src/com/cloud/api/doc/ApiXmlDocReader.java b/server/src/main/java/com/cloud/api/doc/ApiXmlDocReader.java
similarity index 100%
rename from server/src/com/cloud/api/doc/ApiXmlDocReader.java
rename to server/src/main/java/com/cloud/api/doc/ApiXmlDocReader.java
diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/main/java/com/cloud/api/doc/ApiXmlDocWriter.java
similarity index 98%
rename from server/src/com/cloud/api/doc/ApiXmlDocWriter.java
rename to server/src/main/java/com/cloud/api/doc/ApiXmlDocWriter.java
index 9246edd..916c78f 100644
--- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
+++ b/server/src/main/java/com/cloud/api/doc/ApiXmlDocWriter.java
@@ -91,7 +91,7 @@
     public static void main(String[] args) {
         Set<Class<?>> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[] {"org.apache.cloudstack.api", "com.cloud.api",
                 "com.cloud.api.commands", "com.globo.globodns.cloudstack.api", "org.apache.cloudstack.network.opendaylight.api",
-                "com.cloud.api.commands.netapp", "org.apache.cloudstack.api.command.admin.zone", "org.apache.cloudstack.network.contrail.api.command"});
+                "org.apache.cloudstack.api.command.admin.zone", "org.apache.cloudstack.network.contrail.api.command"});
 
         for (Class<?> cmdClass : cmdClasses) {
             if(cmdClass.getAnnotation(APICommand.class)==null){
diff --git a/server/src/com/cloud/api/doc/Argument.java b/server/src/main/java/com/cloud/api/doc/Argument.java
similarity index 100%
rename from server/src/com/cloud/api/doc/Argument.java
rename to server/src/main/java/com/cloud/api/doc/Argument.java
diff --git a/server/src/com/cloud/api/doc/Command.java b/server/src/main/java/com/cloud/api/doc/Command.java
similarity index 100%
rename from server/src/com/cloud/api/doc/Command.java
rename to server/src/main/java/com/cloud/api/doc/Command.java
diff --git a/server/src/com/cloud/api/query/MutualExclusiveIdsManagerBase.java b/server/src/main/java/com/cloud/api/query/MutualExclusiveIdsManagerBase.java
similarity index 100%
rename from server/src/com/cloud/api/query/MutualExclusiveIdsManagerBase.java
rename to server/src/main/java/com/cloud/api/query/MutualExclusiveIdsManagerBase.java
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/QueryManagerImpl.java
rename to server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/main/java/com/cloud/api/query/ViewResponseHelper.java
similarity index 100%
rename from server/src/com/cloud/api/query/ViewResponseHelper.java
rename to server/src/main/java/com/cloud/api/query/ViewResponseHelper.java
diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/AccountJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/AccountJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/AccountJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/AffinityGroupJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/AffinityGroupJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/AffinityGroupJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/AffinityGroupJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/AffinityGroupJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/AffinityGroupJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/AffinityGroupJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/AffinityGroupJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/AsyncJobJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/AsyncJobJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java
similarity index 89%
rename from server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java
index fefc896..bd11015 100644
--- a/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java
@@ -50,12 +50,13 @@
     }
 
     @Override
-    public AsyncJobResponse newAsyncJobResponse(AsyncJobJoinVO job) {
-        AsyncJobResponse jobResponse = new AsyncJobResponse();
+    public AsyncJobResponse newAsyncJobResponse(final AsyncJobJoinVO job) {
+        final AsyncJobResponse jobResponse = new AsyncJobResponse();
         jobResponse.setAccountId(job.getAccountUuid());
         jobResponse.setUserId(job.getUserUuid());
         jobResponse.setCmd(job.getCmd());
         jobResponse.setCreated(job.getCreated());
+        jobResponse.setRemoved(job.getRemoved());
         jobResponse.setJobId(job.getUuid());
         jobResponse.setJobStatus(job.getStatus());
         jobResponse.setJobProcStatus(job.getProcessStatus());
@@ -68,15 +69,15 @@
         }
         jobResponse.setJobResultCode(job.getResultCode());
 
-        boolean savedValue = SerializationContext.current().getUuidTranslation();
+        final boolean savedValue = SerializationContext.current().getUuidTranslation();
         SerializationContext.current().setUuidTranslation(false);
 
-        Object resultObject = ApiSerializerHelper.fromSerializedString(job.getResult());
+        final Object resultObject = ApiSerializerHelper.fromSerializedString(job.getResult());
         jobResponse.setJobResult((ResponseObject)resultObject);
         SerializationContext.current().setUuidTranslation(savedValue);
 
         if (resultObject != null) {
-            Class<?> clz = resultObject.getClass();
+            final Class<?> clz = resultObject.getClass();
             if (clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) {
                 jobResponse.setJobResultType("text");
             } else {
diff --git a/server/src/com/cloud/api/query/dao/DataCenterJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/DataCenterJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DataCenterJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/DataCenterJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/DiskOfferingJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DiskOfferingJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/DomainJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/DomainJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DomainJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/DomainJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/DomainJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DomainJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/DomainRouterJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/DomainRouterJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/DomainRouterJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/DomainRouterJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
similarity index 97%
rename from server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
index ec88033..c67611a 100644
--- a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
@@ -21,16 +21,17 @@
 
 import javax.inject.Inject;
 
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.api.response.DomainRouterResponse;
 import org.apache.cloudstack.api.response.NicResponse;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
+import org.apache.cloudstack.utils.CloudStackVersion;
 
 import com.cloud.api.ApiResponseHelper;
 import com.cloud.api.query.vo.DomainRouterJoinVO;
-import com.cloud.maint.Version;
 import com.cloud.network.Networks.TrafficType;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
@@ -80,9 +81,9 @@
             routerResponse.setRedundantState(router.getRedundantState().toString());
         }
         if (router.getTemplateVersion() != null) {
-            String routerVersion = Version.trimRouterVersion(router.getTemplateVersion());
+            String routerVersion = CloudStackVersion.trimRouterVersion(router.getTemplateVersion());
             routerResponse.setVersion(routerVersion);
-            routerResponse.setRequiresUpgrade((Version.compare(routerVersion, NetworkOrchestrationService.MinVRVersion.valueIn(router.getDataCenterId())) < 0));
+            routerResponse.setRequiresUpgrade((CloudStackVersion.compare(routerVersion, NetworkOrchestrationService.MinVRVersion.valueIn(router.getDataCenterId())) < 0));
         } else {
             routerResponse.setVersion("UNKNOWN");
             routerResponse.setRequiresUpgrade(true);
diff --git a/server/src/com/cloud/api/query/dao/GenericDaoBaseWithTagInformation.java b/server/src/main/java/com/cloud/api/query/dao/GenericDaoBaseWithTagInformation.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/GenericDaoBaseWithTagInformation.java
rename to server/src/main/java/com/cloud/api/query/dao/GenericDaoBaseWithTagInformation.java
diff --git a/server/src/com/cloud/api/query/dao/HostJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/HostJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/HostJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/HostTagDao.java b/server/src/main/java/com/cloud/api/query/dao/HostTagDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/HostTagDao.java
rename to server/src/main/java/com/cloud/api/query/dao/HostTagDao.java
diff --git a/server/src/com/cloud/api/query/dao/HostTagDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostTagDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/HostTagDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/HostTagDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/ImageStoreJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ImageStoreJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ImageStoreJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/ImageStoreJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/ImageStoreJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/InstanceGroupJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/InstanceGroupJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ProjectAccountJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/ProjectAccountJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ProjectInvitationJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ProjectInvitationJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/ProjectInvitationJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/ProjectJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ProjectJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ProjectJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/ProjectJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ProjectJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/ProjectJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ResourceTagJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/ResourceTagJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/SecurityGroupJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/SecurityGroupJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/SecurityGroupJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ServiceOfferingJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/StoragePoolJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/StoragePoolJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/StoragePoolJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/TemplateJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/TemplateJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/TemplateJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/UserAccountJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/UserAccountJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/UserAccountJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/UserAccountJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/UserVmJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/UserVmJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
similarity index 99%
rename from server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index f0a0a56..00ec61a 100644
--- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -196,7 +196,7 @@
         userVmResponse.setPublicIpId(userVm.getPublicIpUuid());
         userVmResponse.setPublicIp(userVm.getPublicIpAddress());
         userVmResponse.setKeyPairName(userVm.getKeypairName());
-        userVmResponse.setOsTypeId(userVm.getGuestOsId());
+        userVmResponse.setOsTypeId(userVm.getGuestOsUuid());
 
         if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) {
             // stats calculation
diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/VolumeJoinDao.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/VolumeJoinDao.java
rename to server/src/main/java/com/cloud/api/query/dao/VolumeJoinDao.java
diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
rename to server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
diff --git a/server/src/com/cloud/api/query/vo/AccountJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/AccountJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/AccountJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/AccountJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/AffinityGroupJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/AffinityGroupJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/AffinityGroupJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/AffinityGroupJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/AsyncJobJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/AsyncJobJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/AsyncJobJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/AsyncJobJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/BaseViewVO.java b/server/src/main/java/com/cloud/api/query/vo/BaseViewVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/BaseViewVO.java
rename to server/src/main/java/com/cloud/api/query/vo/BaseViewVO.java
diff --git a/server/src/com/cloud/api/query/vo/BaseViewWithTagInformationVO.java b/server/src/main/java/com/cloud/api/query/vo/BaseViewWithTagInformationVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/BaseViewWithTagInformationVO.java
rename to server/src/main/java/com/cloud/api/query/vo/BaseViewWithTagInformationVO.java
diff --git a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java b/server/src/main/java/com/cloud/api/query/vo/ControlledViewEntity.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ControlledViewEntity.java
rename to server/src/main/java/com/cloud/api/query/vo/ControlledViewEntity.java
diff --git a/server/src/com/cloud/api/query/vo/DataCenterJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/DataCenterJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/DataCenterJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/DataCenterJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/DiskOfferingJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/DiskOfferingJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/DiskOfferingJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/DiskOfferingJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/DomainJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/DomainJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/DomainJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/DomainJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/DomainRouterJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/DomainRouterJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/EventJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/EventJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/EventJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/EventJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/HostJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/HostJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/HostJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/HostJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/HostTagVO.java b/server/src/main/java/com/cloud/api/query/vo/HostTagVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/HostTagVO.java
rename to server/src/main/java/com/cloud/api/query/vo/HostTagVO.java
diff --git a/server/src/com/cloud/api/query/vo/ImageStoreJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/ImageStoreJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ImageStoreJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/ImageStoreJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/InstanceGroupJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/InstanceGroupJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/ProjectAccountJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/ProjectAccountJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/ProjectInvitationJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/ProjectInvitationJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/ProjectJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ProjectJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/ProjectJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/ResourceTagJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/ResourceTagJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/SecurityGroupJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/SecurityGroupJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/ServiceOfferingJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/TemplateJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/TemplateJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/UserAccountJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/UserAccountJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/UserAccountJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/UserVmJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
diff --git a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java
similarity index 100%
rename from server/src/com/cloud/api/query/vo/VolumeJoinVO.java
rename to server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java
diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java
similarity index 97%
rename from server/src/com/cloud/api/response/ApiResponseSerializer.java
rename to server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java
index 2b9717d..c72f957 100644
--- a/server/src/com/cloud/api/response/ApiResponseSerializer.java
+++ b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java
@@ -131,12 +131,8 @@
                     sb.append("}");
                     log.append("}");
                 }
-            } else if (result instanceof SuccessResponse) {
-                sb.append("{\"success\":\"").append(((SuccessResponse)result).getSuccess()).append("\"}");
-                log.append("{\"success\":\"").append(((SuccessResponse)result).getSuccess()).append("\"}");
-            } else if (result instanceof ExceptionResponse) {
-                String jsonErrorText = responseBuilder.toJson(result);
-                jsonErrorText = unescape(jsonErrorText);
+            } else if (result instanceof SuccessResponse || result instanceof ExceptionResponse) {
+                final String jsonErrorText = unescape(responseBuilder.toJson(result));
                 sb.append(jsonErrorText);
                 log.append(jsonErrorText);
             } else {
diff --git a/server/src/com/cloud/api/response/EmptyFieldExclusionStrategy.java b/server/src/main/java/com/cloud/api/response/EmptyFieldExclusionStrategy.java
similarity index 100%
rename from server/src/com/cloud/api/response/EmptyFieldExclusionStrategy.java
rename to server/src/main/java/com/cloud/api/response/EmptyFieldExclusionStrategy.java
diff --git a/server/src/com/cloud/api/response/SecurityGroupResultObject.java b/server/src/main/java/com/cloud/api/response/SecurityGroupResultObject.java
similarity index 100%
rename from server/src/com/cloud/api/response/SecurityGroupResultObject.java
rename to server/src/main/java/com/cloud/api/response/SecurityGroupResultObject.java
diff --git a/server/src/com/cloud/api/response/SecurityGroupRuleResultObject.java b/server/src/main/java/com/cloud/api/response/SecurityGroupRuleResultObject.java
similarity index 100%
rename from server/src/com/cloud/api/response/SecurityGroupRuleResultObject.java
rename to server/src/main/java/com/cloud/api/response/SecurityGroupRuleResultObject.java
diff --git a/server/src/com/cloud/async/AsyncJobResult.java b/server/src/main/java/com/cloud/async/AsyncJobResult.java
similarity index 100%
rename from server/src/com/cloud/async/AsyncJobResult.java
rename to server/src/main/java/com/cloud/async/AsyncJobResult.java
diff --git a/server/src/com/cloud/capacity/CapacityManagerImpl.java b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/capacity/CapacityManagerImpl.java
rename to server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java
diff --git a/server/src/com/cloud/capacity/ComputeCapacityListener.java b/server/src/main/java/com/cloud/capacity/ComputeCapacityListener.java
similarity index 100%
rename from server/src/com/cloud/capacity/ComputeCapacityListener.java
rename to server/src/main/java/com/cloud/capacity/ComputeCapacityListener.java
diff --git a/server/src/com/cloud/capacity/StorageCapacityListener.java b/server/src/main/java/com/cloud/capacity/StorageCapacityListener.java
similarity index 100%
rename from server/src/com/cloud/capacity/StorageCapacityListener.java
rename to server/src/main/java/com/cloud/capacity/StorageCapacityListener.java
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/main/java/com/cloud/configuration/Config.java
similarity index 100%
rename from server/src/com/cloud/configuration/Config.java
rename to server/src/main/java/com/cloud/configuration/Config.java
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/configuration/ConfigurationManagerImpl.java
rename to server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index 80642f5..2bff6f1 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -2255,7 +2255,7 @@
             throw new InvalidParameterValueException("Please specify a valid domain id");
         }
 
-        final Boolean offerHA = cmd.getOfferHa();
+        final Boolean offerHA = cmd.isOfferHa();
 
         boolean localStorageRequired = false;
         final String storageType = cmd.getStorageType();
@@ -2270,8 +2270,8 @@
             }
         }
 
-        final Boolean limitCpuUse = cmd.GetLimitCpuUse();
-        final Boolean volatileVm = cmd.getVolatileVm();
+        final Boolean limitCpuUse = cmd.isLimitCpuUse();
+        final Boolean volatileVm = cmd.isVolatileVm();
 
         final String vmTypeString = cmd.getSystemVmType();
         VirtualMachine.Type vmType = null;
@@ -2279,7 +2279,7 @@
 
         Boolean isCustomizedIops;
 
-        if (cmd.getIsSystem()) {
+        if (cmd.isSystem()) {
             if (vmTypeString == null || VirtualMachine.Type.DomainRouter.toString().toLowerCase().equals(vmTypeString)) {
                 vmType = VirtualMachine.Type.DomainRouter;
                 allowNetworkRate = true;
@@ -2328,7 +2328,7 @@
             }
         }
 
-        return createServiceOffering(userId, cmd.getIsSystem(), vmType, cmd.getServiceOfferingName(), cpuNumber, memory, cpuSpeed, cmd.getDisplayText(),
+        return createServiceOffering(userId, cmd.isSystem(), vmType, cmd.getServiceOfferingName(), cpuNumber, memory, cpuSpeed, cmd.getDisplayText(),
                 cmd.getProvisioningType(), localStorageRequired, offerHA, limitCpuUse, volatileVm, cmd.getTags(), cmd.getDomainId(), cmd.getHostTag(),
                 cmd.getNetworkRate(), cmd.getDeploymentPlanner(), cmd.getDetails(), isCustomizedIops, cmd.getMinIops(), cmd.getMaxIops(),
                 cmd.getBytesReadRate(), cmd.getBytesWriteRate(), cmd.getIopsReadRate(), cmd.getIopsWriteRate(), cmd.getHypervisorSnapshotReserve());
@@ -4786,7 +4786,7 @@
             }
             if(vpcOff && nsOff) {
                 if(!(spDescription.equalsIgnoreCase("A NetScalerVPX is dedicated per network.") || spDescription.contains("dedicated NetScaler"))) {
-                    throw new InvalidParameterValueException("Only NetScaler Service Pacakge with Dedicated Device Mode is Supported in VPC Type Guest Network");
+                    throw new InvalidParameterValueException("Only NetScaler Service Package with Dedicated Device Mode is Supported in VPC Type Guest Network");
                 }
             }
         }
diff --git a/server/src/com/cloud/configuration/ZoneConfig.java b/server/src/main/java/com/cloud/configuration/ZoneConfig.java
similarity index 100%
rename from server/src/com/cloud/configuration/ZoneConfig.java
rename to server/src/main/java/com/cloud/configuration/ZoneConfig.java
diff --git a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
rename to server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
diff --git a/server/src/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java
rename to server/src/main/java/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java
diff --git a/server/src/com/cloud/consoleproxy/AgentHook.java b/server/src/main/java/com/cloud/consoleproxy/AgentHook.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/AgentHook.java
rename to server/src/main/java/com/cloud/consoleproxy/AgentHook.java
diff --git a/server/src/com/cloud/consoleproxy/AgentHookBase.java b/server/src/main/java/com/cloud/consoleproxy/AgentHookBase.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/AgentHookBase.java
rename to server/src/main/java/com/cloud/consoleproxy/AgentHookBase.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyAlertEventArgs.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAlertEventArgs.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyAlertEventArgs.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAlertEventArgs.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyListener.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyListener.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyListener.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyListener.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagementState.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagementState.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyManagementState.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagementState.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyManager.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyService.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyService.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/ConsoleProxyService.java
rename to server/src/main/java/com/cloud/consoleproxy/ConsoleProxyService.java
diff --git a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/StaticConsoleProxyManager.java
similarity index 100%
rename from server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java
rename to server/src/main/java/com/cloud/consoleproxy/StaticConsoleProxyManager.java
diff --git a/server/src/com/cloud/dc/DedicatedResourceVO.java b/server/src/main/java/com/cloud/dc/DedicatedResourceVO.java
similarity index 100%
rename from server/src/com/cloud/dc/DedicatedResourceVO.java
rename to server/src/main/java/com/cloud/dc/DedicatedResourceVO.java
diff --git a/server/src/com/cloud/dc/dao/DedicatedResourceDao.java b/server/src/main/java/com/cloud/dc/dao/DedicatedResourceDao.java
similarity index 100%
rename from server/src/com/cloud/dc/dao/DedicatedResourceDao.java
rename to server/src/main/java/com/cloud/dc/dao/DedicatedResourceDao.java
diff --git a/server/src/com/cloud/dc/dao/DedicatedResourceDaoImpl.java b/server/src/main/java/com/cloud/dc/dao/DedicatedResourceDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/dc/dao/DedicatedResourceDaoImpl.java
rename to server/src/main/java/com/cloud/dc/dao/DedicatedResourceDaoImpl.java
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
rename to server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/main/java/com/cloud/deploy/FirstFitPlanner.java
similarity index 100%
rename from server/src/com/cloud/deploy/FirstFitPlanner.java
rename to server/src/main/java/com/cloud/deploy/FirstFitPlanner.java
diff --git a/server/src/com/cloud/deploy/PlannerHostReservationVO.java b/server/src/main/java/com/cloud/deploy/PlannerHostReservationVO.java
similarity index 100%
rename from server/src/com/cloud/deploy/PlannerHostReservationVO.java
rename to server/src/main/java/com/cloud/deploy/PlannerHostReservationVO.java
diff --git a/server/src/com/cloud/deploy/dao/PlannerHostReservationDao.java b/server/src/main/java/com/cloud/deploy/dao/PlannerHostReservationDao.java
similarity index 100%
rename from server/src/com/cloud/deploy/dao/PlannerHostReservationDao.java
rename to server/src/main/java/com/cloud/deploy/dao/PlannerHostReservationDao.java
diff --git a/server/src/com/cloud/deploy/dao/PlannerHostReservationDaoImpl.java b/server/src/main/java/com/cloud/deploy/dao/PlannerHostReservationDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/deploy/dao/PlannerHostReservationDaoImpl.java
rename to server/src/main/java/com/cloud/deploy/dao/PlannerHostReservationDaoImpl.java
diff --git a/server/src/com/cloud/event/ActionEventInterceptor.java b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java
similarity index 100%
rename from server/src/com/cloud/event/ActionEventInterceptor.java
rename to server/src/main/java/com/cloud/event/ActionEventInterceptor.java
diff --git a/server/src/com/cloud/event/ActionEventUtils.java b/server/src/main/java/com/cloud/event/ActionEventUtils.java
similarity index 100%
rename from server/src/com/cloud/event/ActionEventUtils.java
rename to server/src/main/java/com/cloud/event/ActionEventUtils.java
diff --git a/server/src/com/cloud/event/AlertGenerator.java b/server/src/main/java/com/cloud/event/AlertGenerator.java
similarity index 100%
rename from server/src/com/cloud/event/AlertGenerator.java
rename to server/src/main/java/com/cloud/event/AlertGenerator.java
diff --git a/server/src/com/cloud/event/dao/EventJoinDao.java b/server/src/main/java/com/cloud/event/dao/EventJoinDao.java
similarity index 100%
rename from server/src/com/cloud/event/dao/EventJoinDao.java
rename to server/src/main/java/com/cloud/event/dao/EventJoinDao.java
diff --git a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/event/dao/EventJoinDaoImpl.java
rename to server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java
diff --git a/server/src/com/cloud/ha/AbstractInvestigatorImpl.java b/server/src/main/java/com/cloud/ha/AbstractInvestigatorImpl.java
similarity index 100%
rename from server/src/com/cloud/ha/AbstractInvestigatorImpl.java
rename to server/src/main/java/com/cloud/ha/AbstractInvestigatorImpl.java
diff --git a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java b/server/src/main/java/com/cloud/ha/CheckOnAgentInvestigator.java
similarity index 100%
rename from server/src/com/cloud/ha/CheckOnAgentInvestigator.java
rename to server/src/main/java/com/cloud/ha/CheckOnAgentInvestigator.java
diff --git a/server/src/com/cloud/ha/HaWorkVO.java b/server/src/main/java/com/cloud/ha/HaWorkVO.java
similarity index 100%
rename from server/src/com/cloud/ha/HaWorkVO.java
rename to server/src/main/java/com/cloud/ha/HaWorkVO.java
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerExtImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerExtImpl.java
similarity index 100%
rename from server/src/com/cloud/ha/HighAvailabilityManagerExtImpl.java
rename to server/src/main/java/com/cloud/ha/HighAvailabilityManagerExtImpl.java
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
rename to server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java
diff --git a/server/src/com/cloud/ha/KVMFencer.java b/server/src/main/java/com/cloud/ha/KVMFencer.java
similarity index 97%
rename from server/src/com/cloud/ha/KVMFencer.java
rename to server/src/main/java/com/cloud/ha/KVMFencer.java
index 3f06872..e102bc2 100644
--- a/server/src/com/cloud/ha/KVMFencer.java
+++ b/server/src/main/java/com/cloud/ha/KVMFencer.java
@@ -99,10 +99,10 @@
                 try {
                     answer = (FenceAnswer)_agentMgr.send(h.getId(), fence);
                 } catch (AgentUnavailableException e) {
-                    s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable");
+                    s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable", e);
                     continue;
                 } catch (OperationTimedoutException e) {
-                    s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable");
+                    s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable", e);
                     continue;
                 }
                 if (answer != null && answer.getResult()) {
diff --git a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java b/server/src/main/java/com/cloud/ha/ManagementIPSystemVMInvestigator.java
similarity index 100%
rename from server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java
rename to server/src/main/java/com/cloud/ha/ManagementIPSystemVMInvestigator.java
diff --git a/server/src/com/cloud/ha/RecreatableFencer.java b/server/src/main/java/com/cloud/ha/RecreatableFencer.java
similarity index 100%
rename from server/src/com/cloud/ha/RecreatableFencer.java
rename to server/src/main/java/com/cloud/ha/RecreatableFencer.java
diff --git a/server/src/com/cloud/ha/UserVmDomRInvestigator.java b/server/src/main/java/com/cloud/ha/UserVmDomRInvestigator.java
similarity index 100%
rename from server/src/com/cloud/ha/UserVmDomRInvestigator.java
rename to server/src/main/java/com/cloud/ha/UserVmDomRInvestigator.java
diff --git a/server/src/com/cloud/ha/XenServerInvestigator.java b/server/src/main/java/com/cloud/ha/XenServerInvestigator.java
similarity index 100%
rename from server/src/com/cloud/ha/XenServerInvestigator.java
rename to server/src/main/java/com/cloud/ha/XenServerInvestigator.java
diff --git a/server/src/com/cloud/ha/dao/HighAvailabilityDao.java b/server/src/main/java/com/cloud/ha/dao/HighAvailabilityDao.java
similarity index 100%
rename from server/src/com/cloud/ha/dao/HighAvailabilityDao.java
rename to server/src/main/java/com/cloud/ha/dao/HighAvailabilityDao.java
diff --git a/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java b/server/src/main/java/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
rename to server/src/main/java/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
diff --git a/server/src/main/java/com/cloud/hypervisor/CloudZonesStartupProcessor.java b/server/src/main/java/com/cloud/hypervisor/CloudZonesStartupProcessor.java
new file mode 100644
index 0000000..8d674a5
--- /dev/null
+++ b/server/src/main/java/com/cloud/hypervisor/CloudZonesStartupProcessor.java
@@ -0,0 +1,192 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.hypervisor;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.StartupCommandProcessor;
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.agent.api.StartupStorageCommand;
+import com.cloud.agent.manager.authn.AgentAuthnException;
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.HostPodVO;
+import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.dc.dao.HostPodDao;
+import com.cloud.host.Host;
+import com.cloud.host.HostVO;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.utils.component.AdapterBase;
+import com.cloud.utils.net.MacAddress;
+import com.cloud.utils.net.NetUtils;
+
+/**
+ * Creates a host record and supporting records such as pod and ip address
+ *
+ */
+@Component
+public class CloudZonesStartupProcessor extends AdapterBase implements StartupCommandProcessor {
+    private static final Logger s_logger = Logger.getLogger(CloudZonesStartupProcessor.class);
+    @Inject
+    private DataCenterDao _zoneDao = null;
+    @Inject
+    private HostPodDao _podDao = null;
+    @Inject
+    private AgentManager _agentManager = null;
+
+    private long _nodeId = -1;
+
+    @Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+        _agentManager.registerForInitialConnects(this, false);
+        if (_nodeId == -1) {
+            // FIXME: We really should not do this like this. It should be done
+            // at config time and is stored as a config variable.
+            _nodeId = MacAddress.getMacAddress().toLong();
+        }
+        return true;
+    }
+
+    @Override
+    public boolean processInitialConnect(StartupCommand[] cmd) {
+        StartupCommand startup = cmd[0];
+        return startup instanceof StartupRoutingCommand || startup instanceof StartupStorageCommand;
+    }
+
+    private boolean checkCIDR(Host.Type type, HostPodVO pod, String serverPrivateIP, String serverPrivateNetmask) {
+        if (serverPrivateIP == null) {
+            return true;
+        }
+        // Get the CIDR address and CIDR size
+        String cidrAddress = pod.getCidrAddress();
+        long cidrSize = pod.getCidrSize();
+
+        // If the server's private IP address is not in the same subnet as the
+        // pod's CIDR, return false
+        String cidrSubnet = NetUtils.getCidrSubNet(cidrAddress, cidrSize);
+        String serverSubnet = NetUtils.getSubNet(serverPrivateIP, serverPrivateNetmask);
+        if (!cidrSubnet.equals(serverSubnet)) {
+            return false;
+        }
+        return true;
+    }
+
+    private void updatePodNetmaskIfNeeded(HostPodVO pod, String agentNetmask) {
+        // If the server's private netmask is less inclusive than the pod's CIDR
+        // netmask, update cidrSize of the default POD
+        //(reason: we are maintaining pods only for internal accounting.)
+        long cidrSize = pod.getCidrSize();
+        String cidrNetmask = NetUtils.getCidrSubNet("255.255.255.255", cidrSize);
+        long cidrNetmaskNumeric = NetUtils.ip2Long(cidrNetmask);
+        long serverNetmaskNumeric = NetUtils.ip2Long(agentNetmask);//
+        if (serverNetmaskNumeric > cidrNetmaskNumeric) {
+            //update pod's cidrsize
+            int newCidrSize = new Long(NetUtils.getCidrSize(agentNetmask)).intValue();
+            pod.setCidrSize(newCidrSize);
+            _podDao.update(pod.getId(), pod);
+        }
+    }
+
+    protected void updateSecondaryHost(final HostVO host, final StartupStorageCommand startup, final Host.Type type) throws AgentAuthnException {
+
+        String zoneToken = startup.getDataCenter();
+        if (zoneToken == null) {
+            s_logger.warn("No Zone Token passed in, cannot not find zone for the agent");
+            throw new AgentAuthnException("No Zone Token passed in, cannot not find zone for agent");
+        }
+
+        DataCenterVO zone = _zoneDao.findByToken(zoneToken);
+        if (zone == null) {
+            zone = _zoneDao.findByName(zoneToken);
+            if (zone == null) {
+                try {
+                    long zoneId = Long.parseLong(zoneToken);
+                    zone = _zoneDao.findById(zoneId);
+                    if (zone == null) {
+                        throw new AgentAuthnException("Could not find zone for agent with token " + zoneToken);
+                    }
+                } catch (NumberFormatException nfe) {
+                    throw new AgentAuthnException("Could not find zone for agent with token " + zoneToken);
+                }
+            }
+        }
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Successfully loaded the DataCenter from the zone token passed in ");
+        }
+
+        HostPodVO pod = findPod(startup, zone.getId(), Host.Type.Routing); //yes, routing
+        Long podId = null;
+        if (pod != null) {
+            s_logger.debug("Found pod " + pod.getName() + " for the secondary storage host " + startup.getName());
+            podId = pod.getId();
+        }
+        host.setDataCenterId(zone.getId());
+        host.setPodId(podId);
+        host.setClusterId(null);
+        host.setPrivateIpAddress(startup.getPrivateIpAddress());
+        host.setPrivateNetmask(startup.getPrivateNetmask());
+        host.setPrivateMacAddress(startup.getPrivateMacAddress());
+        host.setPublicIpAddress(startup.getPublicIpAddress());
+        host.setPublicMacAddress(startup.getPublicMacAddress());
+        host.setPublicNetmask(startup.getPublicNetmask());
+        host.setStorageIpAddress(startup.getStorageIpAddress());
+        host.setStorageMacAddress(startup.getStorageMacAddress());
+        host.setStorageNetmask(startup.getStorageNetmask());
+        host.setVersion(startup.getVersion());
+        host.setName(startup.getName());
+        host.setType(type);
+        host.setStorageUrl(startup.getIqn());
+        host.setLastPinged(System.currentTimeMillis() >> 10);
+        host.setCaps(null);
+        host.setCpus(null);
+        host.setTotalMemory(0);
+        host.setSpeed(null);
+        host.setParent(startup.getParent());
+        host.setTotalSize(startup.getTotalSize());
+        host.setHypervisorType(HypervisorType.None);
+        if (startup.getNfsShare() != null) {
+            host.setStorageUrl(startup.getNfsShare());
+        }
+
+    }
+
+    private HostPodVO findPod(StartupCommand startup, long zoneId, Host.Type type) {
+        HostPodVO pod = null;
+        List<HostPodVO> podsInZone = _podDao.listByDataCenterId(zoneId);
+        for (HostPodVO hostPod : podsInZone) {
+            if (checkCIDR(type, hostPod, startup.getPrivateIpAddress(), startup.getPrivateNetmask())) {
+                pod = hostPod;
+
+                //found the default POD having the same subnet.
+                updatePodNetmaskIfNeeded(pod, startup.getPrivateNetmask());
+
+                break;
+            }
+        }
+        return pod;
+
+    }
+
+}
diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/HypervisorGuruBase.java
rename to server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java
diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruManagerImpl.java b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/HypervisorGuruManagerImpl.java
rename to server/src/main/java/com/cloud/hypervisor/HypervisorGuruManagerImpl.java
diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java b/server/src/main/java/com/cloud/hypervisor/KVMGuru.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/KVMGuru.java
rename to server/src/main/java/com/cloud/hypervisor/KVMGuru.java
diff --git a/server/src/com/cloud/hypervisor/LXCGuru.java b/server/src/main/java/com/cloud/hypervisor/LXCGuru.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/LXCGuru.java
rename to server/src/main/java/com/cloud/hypervisor/LXCGuru.java
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
rename to server/src/main/java/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
rename to server/src/main/java/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
rename to server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java
similarity index 100%
rename from server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java
rename to server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java
diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManager.java b/server/src/main/java/com/cloud/metadata/ResourceMetaDataManager.java
similarity index 100%
rename from server/src/com/cloud/metadata/ResourceMetaDataManager.java
rename to server/src/main/java/com/cloud/metadata/ResourceMetaDataManager.java
diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/main/java/com/cloud/metadata/ResourceMetaDataManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
rename to server/src/main/java/com/cloud/metadata/ResourceMetaDataManagerImpl.java
diff --git a/server/src/com/cloud/network/ExternalDeviceUsageManager.java b/server/src/main/java/com/cloud/network/ExternalDeviceUsageManager.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalDeviceUsageManager.java
rename to server/src/main/java/com/cloud/network/ExternalDeviceUsageManager.java
diff --git a/server/src/com/cloud/network/ExternalDeviceUsageManagerImpl.java b/server/src/main/java/com/cloud/network/ExternalDeviceUsageManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalDeviceUsageManagerImpl.java
rename to server/src/main/java/com/cloud/network/ExternalDeviceUsageManagerImpl.java
diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManager.java b/server/src/main/java/com/cloud/network/ExternalFirewallDeviceManager.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalFirewallDeviceManager.java
rename to server/src/main/java/com/cloud/network/ExternalFirewallDeviceManager.java
diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/main/java/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
rename to server/src/main/java/com/cloud/network/ExternalFirewallDeviceManagerImpl.java
diff --git a/server/src/com/cloud/network/ExternalIpAddressAllocator.java b/server/src/main/java/com/cloud/network/ExternalIpAddressAllocator.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalIpAddressAllocator.java
rename to server/src/main/java/com/cloud/network/ExternalIpAddressAllocator.java
diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java b/server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManager.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
rename to server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManager.java
diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
rename to server/src/main/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/main/java/com/cloud/network/ExternalNetworkDeviceManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java
rename to server/src/main/java/com/cloud/network/ExternalNetworkDeviceManagerImpl.java
diff --git a/server/src/com/cloud/network/IpAddrAllocator.java b/server/src/main/java/com/cloud/network/IpAddrAllocator.java
similarity index 100%
rename from server/src/com/cloud/network/IpAddrAllocator.java
rename to server/src/main/java/com/cloud/network/IpAddrAllocator.java
diff --git a/server/src/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/IpAddressManagerImpl.java
rename to server/src/main/java/com/cloud/network/IpAddressManagerImpl.java
diff --git a/server/src/com/cloud/network/Ipv6AddressManager.java b/server/src/main/java/com/cloud/network/Ipv6AddressManager.java
similarity index 100%
rename from server/src/com/cloud/network/Ipv6AddressManager.java
rename to server/src/main/java/com/cloud/network/Ipv6AddressManager.java
diff --git a/server/src/com/cloud/network/Ipv6AddressManagerImpl.java b/server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/Ipv6AddressManagerImpl.java
rename to server/src/main/java/com/cloud/network/Ipv6AddressManagerImpl.java
diff --git a/server/src/com/cloud/network/NetworkMigrationManager.java b/server/src/main/java/com/cloud/network/NetworkMigrationManager.java
similarity index 100%
rename from server/src/com/cloud/network/NetworkMigrationManager.java
rename to server/src/main/java/com/cloud/network/NetworkMigrationManager.java
diff --git a/server/src/com/cloud/network/NetworkMigrationManagerImpl.java b/server/src/main/java/com/cloud/network/NetworkMigrationManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/NetworkMigrationManagerImpl.java
rename to server/src/main/java/com/cloud/network/NetworkMigrationManagerImpl.java
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
similarity index 99%
rename from server/src/com/cloud/network/NetworkModelImpl.java
rename to server/src/main/java/com/cloud/network/NetworkModelImpl.java
index 31cdf91..bb1a181 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
@@ -290,7 +290,7 @@
                         services.add(Service.SourceNat);
                         networkSNAT.add(ip.getAssociatedWithNetworkId());
                     } else {
-                        CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network");
+                        CloudRuntimeException ex = new CloudRuntimeException("Multiple generic source NAT IPs provided for network");
                         // see the IPAddressVO.java class.
                         IPAddressVO ipAddr = ApiDBUtils.findIpAddressById(ip.getAssociatedWithNetworkId());
                         String ipAddrUuid = ip.getAssociatedWithNetworkId().toString();
@@ -1732,7 +1732,7 @@
             }
         } catch (Exception ex) {
             if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to:" +
+                s_logger.debug("Failed to retrive the default label for guest traffic:" + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to:" +
                     ex.getMessage());
             }
         }
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
similarity index 99%
rename from server/src/com/cloud/network/NetworkServiceImpl.java
rename to server/src/main/java/com/cloud/network/NetworkServiceImpl.java
index 33a8178..f1397a1 100644
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
@@ -330,7 +330,7 @@
                         services.add(Service.SourceNat);
                         networkSNAT.add(ip.getAssociatedWithNetworkId());
                     } else {
-                        CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network");
+                        CloudRuntimeException ex = new CloudRuntimeException("Multiple generic source NAT IPs provided for network");
                         // see the IPAddressVO.java class.
                         IPAddressVO ipAddr = ApiDBUtils.findIpAddressById(ip.getAssociatedWithNetworkId());
                         String ipAddrUuid = ip.getAssociatedWithNetworkId().toString();
@@ -1427,10 +1427,10 @@
         String path = null;
         Long physicalNetworkId = cmd.getPhysicalNetworkId();
         List<String> supportedServicesStr = cmd.getSupportedServices();
-        Boolean restartRequired = cmd.getRestartRequired();
+        Boolean restartRequired = cmd.isRestartRequired();
         boolean listAll = cmd.listAll();
         boolean isRecursive = cmd.isRecursive();
-        Boolean specifyIpRanges = cmd.getSpecifyIpRanges();
+        Boolean specifyIpRanges = cmd.isSpecifyIpRanges();
         Long vpcId = cmd.getVpcId();
         Boolean canUseForDeploy = cmd.canUseForDeploy();
         Map<String, String> tags = cmd.getTags();
diff --git a/server/src/com/cloud/network/NetworkUsageManager.java b/server/src/main/java/com/cloud/network/NetworkUsageManager.java
similarity index 100%
rename from server/src/com/cloud/network/NetworkUsageManager.java
rename to server/src/main/java/com/cloud/network/NetworkUsageManager.java
diff --git a/server/src/com/cloud/network/NetworkUsageManagerImpl.java b/server/src/main/java/com/cloud/network/NetworkUsageManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/NetworkUsageManagerImpl.java
rename to server/src/main/java/com/cloud/network/NetworkUsageManagerImpl.java
diff --git a/server/src/com/cloud/network/PortProfileManagerImpl.java b/server/src/main/java/com/cloud/network/PortProfileManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/PortProfileManagerImpl.java
rename to server/src/main/java/com/cloud/network/PortProfileManagerImpl.java
diff --git a/server/src/com/cloud/network/SshKeysDistriMonitor.java b/server/src/main/java/com/cloud/network/SshKeysDistriMonitor.java
similarity index 100%
rename from server/src/com/cloud/network/SshKeysDistriMonitor.java
rename to server/src/main/java/com/cloud/network/SshKeysDistriMonitor.java
diff --git a/server/src/com/cloud/network/StorageNetworkManager.java b/server/src/main/java/com/cloud/network/StorageNetworkManager.java
similarity index 100%
rename from server/src/com/cloud/network/StorageNetworkManager.java
rename to server/src/main/java/com/cloud/network/StorageNetworkManager.java
diff --git a/server/src/com/cloud/network/StorageNetworkManagerImpl.java b/server/src/main/java/com/cloud/network/StorageNetworkManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/StorageNetworkManagerImpl.java
rename to server/src/main/java/com/cloud/network/StorageNetworkManagerImpl.java
diff --git a/server/src/com/cloud/network/as/AutoScaleManager.java b/server/src/main/java/com/cloud/network/as/AutoScaleManager.java
similarity index 100%
rename from server/src/com/cloud/network/as/AutoScaleManager.java
rename to server/src/main/java/com/cloud/network/as/AutoScaleManager.java
diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/network/as/AutoScaleManagerImpl.java
rename to server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
index 0d5da2f..78d1335 100644
--- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
@@ -1482,7 +1482,7 @@
     public void doScaleDown(final long groupId) {
         AutoScaleVmGroupVO asGroup = _autoScaleVmGroupDao.findById(groupId);
         if (asGroup == null) {
-            s_logger.error("Can not find the groupid " + groupId + " for scaling up");
+            s_logger.error("Can not find the groupid " + groupId + " for scaling down");
             return;
         }
         if (!checkConditionDown(asGroup)) {
diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/main/java/com/cloud/network/element/CloudZonesNetworkElement.java
similarity index 100%
rename from server/src/com/cloud/network/element/CloudZonesNetworkElement.java
rename to server/src/main/java/com/cloud/network/element/CloudZonesNetworkElement.java
diff --git a/server/src/com/cloud/network/element/ConfigDriveNetworkElement.java b/server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java
similarity index 100%
rename from server/src/com/cloud/network/element/ConfigDriveNetworkElement.java
rename to server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java
diff --git a/server/src/com/cloud/network/element/SecurityGroupElement.java b/server/src/main/java/com/cloud/network/element/SecurityGroupElement.java
similarity index 100%
rename from server/src/com/cloud/network/element/SecurityGroupElement.java
rename to server/src/main/java/com/cloud/network/element/SecurityGroupElement.java
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/main/java/com/cloud/network/element/VirtualRouterElement.java
similarity index 100%
rename from server/src/com/cloud/network/element/VirtualRouterElement.java
rename to server/src/main/java/com/cloud/network/element/VirtualRouterElement.java
diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/main/java/com/cloud/network/element/VpcVirtualRouterElement.java
similarity index 100%
rename from server/src/com/cloud/network/element/VpcVirtualRouterElement.java
rename to server/src/main/java/com/cloud/network/element/VpcVirtualRouterElement.java
diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/network/firewall/FirewallManagerImpl.java
rename to server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java
index cf72ff2..efab0e2 100644
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java
@@ -1003,7 +1003,7 @@
             try {
                 success = success && applyIngressFirewallRules(ipId, _accountMgr.getSystemAccount());
             } catch (ResourceUnavailableException ex) {
-                s_logger.warn("Failed to apply port forwarding rules for ip id=" + ipId);
+                s_logger.warn("Failed to apply firewall rules for ip id=" + ipId);
                 success = false;
             }
         }
diff --git a/server/src/com/cloud/network/guru/ControlNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/ControlNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/DirectNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/DirectNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/DirectNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/DirectPodBasedNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/ExternalGuestNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/GuestNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/PodBasedNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/PodBasedNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/PodBasedNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/PodBasedNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/PrivateNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/PrivateNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/PrivateNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/PublicNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/PublicNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/PublicNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/PublicNetworkGuru.java
diff --git a/server/src/com/cloud/network/guru/StorageNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/StorageNetworkGuru.java
similarity index 100%
rename from server/src/com/cloud/network/guru/StorageNetworkGuru.java
rename to server/src/main/java/com/cloud/network/guru/StorageNetworkGuru.java
diff --git a/server/src/com/cloud/network/lb/LBHealthCheckManager.java b/server/src/main/java/com/cloud/network/lb/LBHealthCheckManager.java
similarity index 100%
rename from server/src/com/cloud/network/lb/LBHealthCheckManager.java
rename to server/src/main/java/com/cloud/network/lb/LBHealthCheckManager.java
diff --git a/server/src/com/cloud/network/lb/LBHealthCheckManagerImpl.java b/server/src/main/java/com/cloud/network/lb/LBHealthCheckManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/lb/LBHealthCheckManagerImpl.java
rename to server/src/main/java/com/cloud/network/lb/LBHealthCheckManagerImpl.java
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
rename to server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
diff --git a/server/src/com/cloud/network/router/CommandSetupHelper.java b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java
similarity index 100%
rename from server/src/com/cloud/network/router/CommandSetupHelper.java
rename to server/src/main/java/com/cloud/network/router/CommandSetupHelper.java
diff --git a/server/src/com/cloud/network/router/NetworkHelper.java b/server/src/main/java/com/cloud/network/router/NetworkHelper.java
similarity index 100%
rename from server/src/com/cloud/network/router/NetworkHelper.java
rename to server/src/main/java/com/cloud/network/router/NetworkHelper.java
diff --git a/server/src/com/cloud/network/router/NetworkHelperImpl.java b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java
similarity index 99%
rename from server/src/com/cloud/network/router/NetworkHelperImpl.java
rename to server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java
index fa17e7b..5c84527 100644
--- a/server/src/com/cloud/network/router/NetworkHelperImpl.java
+++ b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java
@@ -27,12 +27,14 @@
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
+import org.apache.log4j.Logger;
+import org.cloud.network.router.deployment.RouterDeploymentDefinition;
+
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.log4j.Logger;
-import org.cloud.network.router.deployment.RouterDeploymentDefinition;
+import org.apache.cloudstack.utils.CloudStackVersion;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
@@ -61,7 +63,6 @@
 import com.cloud.host.Status;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.maint.Version;
 import com.cloud.network.IpAddressManager;
 import com.cloud.network.Network;
 import com.cloud.network.NetworkModel;
@@ -265,8 +266,8 @@
             return false;
         }
         final long dcid = router.getDataCenterId();
-        final String trimmedVersion = Version.trimRouterVersion(router.getTemplateVersion());
-        return Version.compare(trimmedVersion, NetworkOrchestrationService.MinVRVersion.valueIn(dcid)) >= 0;
+        String routerVersion = CloudStackVersion.trimRouterVersion(router.getTemplateVersion());
+        return CloudStackVersion.compare(routerVersion, NetworkOrchestrationService.MinVRVersion.valueIn(dcid)) >= 0;
     }
 
     protected DomainRouterVO start(DomainRouterVO router, final User user, final Account caller, final Map<Param, Object> params, final DeploymentPlan planToDeploy)
diff --git a/server/src/com/cloud/network/router/NicProfileHelper.java b/server/src/main/java/com/cloud/network/router/NicProfileHelper.java
similarity index 100%
rename from server/src/com/cloud/network/router/NicProfileHelper.java
rename to server/src/main/java/com/cloud/network/router/NicProfileHelper.java
diff --git a/server/src/com/cloud/network/router/NicProfileHelperImpl.java b/server/src/main/java/com/cloud/network/router/NicProfileHelperImpl.java
similarity index 100%
rename from server/src/com/cloud/network/router/NicProfileHelperImpl.java
rename to server/src/main/java/com/cloud/network/router/NicProfileHelperImpl.java
diff --git a/server/src/com/cloud/network/router/RouterControlHelper.java b/server/src/main/java/com/cloud/network/router/RouterControlHelper.java
similarity index 100%
rename from server/src/com/cloud/network/router/RouterControlHelper.java
rename to server/src/main/java/com/cloud/network/router/RouterControlHelper.java
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java
similarity index 100%
rename from server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
rename to server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
rename to server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 1985dea..63587a8 100644
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2139,6 +2139,12 @@
             }
 
             Answer answer = cmds.getAnswer("users");
+            if (answer == null) {
+                s_logger.error("Unable to start vpn: unable add users to vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: "
+                        + router.getInstanceName() + " due to null answer");
+                throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: "
+                        + router.getInstanceName() + " due to null answer", DataCenter.class, router.getDataCenterId());
+            }
             if (!answer.getResult()) {
                 s_logger.error("Unable to start vpn: unable add users to vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: "
                         + router.getInstanceName() + " due to " + answer.getDetails());
diff --git a/server/src/com/cloud/network/router/VpcNetworkHelperImpl.java b/server/src/main/java/com/cloud/network/router/VpcNetworkHelperImpl.java
similarity index 100%
rename from server/src/com/cloud/network/router/VpcNetworkHelperImpl.java
rename to server/src/main/java/com/cloud/network/router/VpcNetworkHelperImpl.java
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
similarity index 100%
rename from server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
rename to server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
similarity index 97%
rename from server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
rename to server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index d22dcba..1822b51 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -740,18 +740,20 @@
             throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId(), e);
         }
         Answer answer = cmds.getAnswer("users");
-        if (!answer.getResult()) {
+        if (answer == null || !answer.getResult()) {
+            String errorMessage = (answer == null) ? "null answer object" : answer.getDetails();
             s_logger.error("Unable to start vpn: unable add users to vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: "
-                    + router.getInstanceName() + " due to " + answer.getDetails());
+                    + router.getInstanceName() + " due to " + errorMessage);
             throw new ResourceUnavailableException("Unable to start vpn: Unable to add users to vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId()
-            + " on domR: " + router.getInstanceName() + " due to " + answer.getDetails(), DataCenter.class, router.getDataCenterId());
+            + " on domR: " + router.getInstanceName() + " due to " + errorMessage, DataCenter.class, router.getDataCenterId());
         }
         answer = cmds.getAnswer("startVpn");
-        if (!answer.getResult()) {
+        if (answer == null || !answer.getResult()) {
+            String errorMessage = (answer == null) ? "null answer object" : answer.getDetails();
             s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to "
-                    + answer.getDetails());
+                    + errorMessage);
             throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: "
-                    + router.getInstanceName() + " due to " + answer.getDetails(), DataCenter.class, router.getDataCenterId());
+                    + router.getInstanceName() + " due to " + errorMessage, DataCenter.class, router.getDataCenterId());
         }
 
         return true;
@@ -768,8 +770,8 @@
         } else if (router.getState() == State.Stopped) {
             s_logger.debug("Router " + router + " is in Stopped state, not sending deleteRemoteAccessVpn command to it");
         } else {
-            s_logger.warn("Failed to delete remote access VPN: domR " + router + " is not in right state " + router.getState());
-            throw new ResourceUnavailableException("Failed to delete remote access VPN: domR is not in right state " + router.getState(), DataCenter.class,
+            s_logger.warn("Failed to stop remote access VPN: domR " + router + " is not in right state " + router.getState());
+            throw new ResourceUnavailableException("Failed to stop remote access VPN: domR is not in right state " + router.getState(), DataCenter.class,
                     router.getDataCenterId());
         }
         return true;
diff --git a/server/src/com/cloud/network/rules/AdvancedVpnRules.java b/server/src/main/java/com/cloud/network/rules/AdvancedVpnRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/AdvancedVpnRules.java
rename to server/src/main/java/com/cloud/network/rules/AdvancedVpnRules.java
diff --git a/server/src/com/cloud/network/rules/BasicVpnRules.java b/server/src/main/java/com/cloud/network/rules/BasicVpnRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/BasicVpnRules.java
rename to server/src/main/java/com/cloud/network/rules/BasicVpnRules.java
diff --git a/server/src/com/cloud/network/rules/DhcpEntryRules.java b/server/src/main/java/com/cloud/network/rules/DhcpEntryRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/DhcpEntryRules.java
rename to server/src/main/java/com/cloud/network/rules/DhcpEntryRules.java
diff --git a/server/src/com/cloud/network/rules/DhcpPvlanRules.java b/server/src/main/java/com/cloud/network/rules/DhcpPvlanRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/DhcpPvlanRules.java
rename to server/src/main/java/com/cloud/network/rules/DhcpPvlanRules.java
diff --git a/server/src/com/cloud/network/rules/DhcpSubNetRules.java b/server/src/main/java/com/cloud/network/rules/DhcpSubNetRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/DhcpSubNetRules.java
rename to server/src/main/java/com/cloud/network/rules/DhcpSubNetRules.java
diff --git a/server/src/com/cloud/network/rules/FirewallRules.java b/server/src/main/java/com/cloud/network/rules/FirewallRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/FirewallRules.java
rename to server/src/main/java/com/cloud/network/rules/FirewallRules.java
diff --git a/server/src/com/cloud/network/rules/IpAssociationRules.java b/server/src/main/java/com/cloud/network/rules/IpAssociationRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/IpAssociationRules.java
rename to server/src/main/java/com/cloud/network/rules/IpAssociationRules.java
diff --git a/server/src/com/cloud/network/rules/LoadBalancingRules.java b/server/src/main/java/com/cloud/network/rules/LoadBalancingRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/LoadBalancingRules.java
rename to server/src/main/java/com/cloud/network/rules/LoadBalancingRules.java
diff --git a/server/src/com/cloud/network/rules/NetworkAclsRules.java b/server/src/main/java/com/cloud/network/rules/NetworkAclsRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/NetworkAclsRules.java
rename to server/src/main/java/com/cloud/network/rules/NetworkAclsRules.java
diff --git a/server/src/com/cloud/network/rules/NicPlugInOutRules.java b/server/src/main/java/com/cloud/network/rules/NicPlugInOutRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/NicPlugInOutRules.java
rename to server/src/main/java/com/cloud/network/rules/NicPlugInOutRules.java
diff --git a/server/src/com/cloud/network/rules/PasswordToRouterRules.java b/server/src/main/java/com/cloud/network/rules/PasswordToRouterRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/PasswordToRouterRules.java
rename to server/src/main/java/com/cloud/network/rules/PasswordToRouterRules.java
diff --git a/server/src/com/cloud/network/rules/PrivateGatewayRules.java b/server/src/main/java/com/cloud/network/rules/PrivateGatewayRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/PrivateGatewayRules.java
rename to server/src/main/java/com/cloud/network/rules/PrivateGatewayRules.java
diff --git a/server/src/com/cloud/network/rules/RuleApplier.java b/server/src/main/java/com/cloud/network/rules/RuleApplier.java
similarity index 100%
rename from server/src/com/cloud/network/rules/RuleApplier.java
rename to server/src/main/java/com/cloud/network/rules/RuleApplier.java
diff --git a/server/src/com/cloud/network/rules/RuleApplierWrapper.java b/server/src/main/java/com/cloud/network/rules/RuleApplierWrapper.java
similarity index 100%
rename from server/src/com/cloud/network/rules/RuleApplierWrapper.java
rename to server/src/main/java/com/cloud/network/rules/RuleApplierWrapper.java
diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/rules/RulesManagerImpl.java
rename to server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java
diff --git a/server/src/com/cloud/network/rules/SshKeyToRouterRules.java b/server/src/main/java/com/cloud/network/rules/SshKeyToRouterRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/SshKeyToRouterRules.java
rename to server/src/main/java/com/cloud/network/rules/SshKeyToRouterRules.java
diff --git a/server/src/com/cloud/network/rules/StaticNatImpl.java b/server/src/main/java/com/cloud/network/rules/StaticNatImpl.java
similarity index 100%
rename from server/src/com/cloud/network/rules/StaticNatImpl.java
rename to server/src/main/java/com/cloud/network/rules/StaticNatImpl.java
diff --git a/server/src/com/cloud/network/rules/StaticNatRules.java b/server/src/main/java/com/cloud/network/rules/StaticNatRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/StaticNatRules.java
rename to server/src/main/java/com/cloud/network/rules/StaticNatRules.java
diff --git a/server/src/com/cloud/network/rules/StaticRoutesRules.java b/server/src/main/java/com/cloud/network/rules/StaticRoutesRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/StaticRoutesRules.java
rename to server/src/main/java/com/cloud/network/rules/StaticRoutesRules.java
diff --git a/server/src/com/cloud/network/rules/UserdataPwdRules.java b/server/src/main/java/com/cloud/network/rules/UserdataPwdRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/UserdataPwdRules.java
rename to server/src/main/java/com/cloud/network/rules/UserdataPwdRules.java
diff --git a/server/src/com/cloud/network/rules/UserdataToRouterRules.java b/server/src/main/java/com/cloud/network/rules/UserdataToRouterRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/UserdataToRouterRules.java
rename to server/src/main/java/com/cloud/network/rules/UserdataToRouterRules.java
diff --git a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java b/server/src/main/java/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
similarity index 100%
rename from server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
rename to server/src/main/java/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
diff --git a/server/src/com/cloud/network/rules/VpcIpAssociationRules.java b/server/src/main/java/com/cloud/network/rules/VpcIpAssociationRules.java
similarity index 100%
rename from server/src/com/cloud/network/rules/VpcIpAssociationRules.java
rename to server/src/main/java/com/cloud/network/rules/VpcIpAssociationRules.java
diff --git a/server/src/com/cloud/network/security/LocalSecurityGroupWorkQueue.java b/server/src/main/java/com/cloud/network/security/LocalSecurityGroupWorkQueue.java
similarity index 100%
rename from server/src/com/cloud/network/security/LocalSecurityGroupWorkQueue.java
rename to server/src/main/java/com/cloud/network/security/LocalSecurityGroupWorkQueue.java
diff --git a/server/src/com/cloud/network/security/RuleUpdateLog.java b/server/src/main/java/com/cloud/network/security/RuleUpdateLog.java
similarity index 100%
rename from server/src/com/cloud/network/security/RuleUpdateLog.java
rename to server/src/main/java/com/cloud/network/security/RuleUpdateLog.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupListener.java b/server/src/main/java/com/cloud/network/security/SecurityGroupListener.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupListener.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupListener.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupManager.java b/server/src/main/java/com/cloud/network/security/SecurityGroupManager.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupManager.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupManager.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java b/server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl2.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl2.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerMBean.java b/server/src/main/java/com/cloud/network/security/SecurityGroupManagerMBean.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupManagerMBean.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupManagerMBean.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupWorkQueue.java b/server/src/main/java/com/cloud/network/security/SecurityGroupWorkQueue.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupWorkQueue.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupWorkQueue.java
diff --git a/server/src/com/cloud/network/security/SecurityGroupWorkTracker.java b/server/src/main/java/com/cloud/network/security/SecurityGroupWorkTracker.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityGroupWorkTracker.java
rename to server/src/main/java/com/cloud/network/security/SecurityGroupWorkTracker.java
diff --git a/server/src/com/cloud/network/security/SecurityManagerMBeanImpl.java b/server/src/main/java/com/cloud/network/security/SecurityManagerMBeanImpl.java
similarity index 100%
rename from server/src/com/cloud/network/security/SecurityManagerMBeanImpl.java
rename to server/src/main/java/com/cloud/network/security/SecurityManagerMBeanImpl.java
diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java
similarity index 78%
rename from server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
rename to server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java
index c64a36b..d5f31d6 100644
--- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java
@@ -21,7 +21,11 @@
 
 import javax.inject.Inject;
 
-import com.cloud.configuration.ConfigurationManager;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.framework.messagebus.MessageBus;
+import org.apache.cloudstack.framework.messagebus.PublishScope;
+import org.apache.log4j.Logger;
+
 import com.cloud.event.ActionEvent;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
@@ -37,8 +41,6 @@
 import com.cloud.network.vpc.dao.NetworkACLDao;
 import com.cloud.network.vpc.dao.VpcGatewayDao;
 import com.cloud.offering.NetworkOffering;
-import com.cloud.tags.dao.ResourceTagDao;
-import com.cloud.user.AccountManager;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.EntityManager;
@@ -47,43 +49,31 @@
 import com.cloud.utils.db.TransactionStatus;
 import com.cloud.utils.exception.CloudRuntimeException;
 
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.messagebus.MessageBus;
-import org.apache.cloudstack.framework.messagebus.PublishScope;
-import org.apache.log4j.Logger;
-
 public class NetworkACLManagerImpl extends ManagerBase implements NetworkACLManager {
     private static final Logger s_logger = Logger.getLogger(NetworkACLManagerImpl.class);
 
     @Inject
-    AccountManager _accountMgr;
+    private NetworkModel _networkMgr;
     @Inject
-    NetworkModel _networkMgr;
+    private NetworkACLDao _networkACLDao;
     @Inject
-    VpcManager _vpcMgr;
+    private NetworkACLItemDao _networkACLItemDao;
     @Inject
-    ResourceTagDao _resourceTagDao;
+    private NetworkModel _networkModel;
     @Inject
-    NetworkACLDao _networkACLDao;
+    private NetworkDao _networkDao;
     @Inject
-    NetworkACLItemDao _networkACLItemDao;
-    List<NetworkACLServiceProvider> _networkAclElements;
+    private VpcGatewayDao _vpcGatewayDao;
     @Inject
-    NetworkModel _networkModel;
+    private NetworkModel _ntwkModel;
     @Inject
-    NetworkDao _networkDao;
+    private EntityManager _entityMgr;
     @Inject
-    VpcGatewayDao _vpcGatewayDao;
+    private VpcService _vpcSvc;
     @Inject
-    NetworkModel _ntwkModel;
-    @Inject
-    ConfigurationManager _configMgr;
-    @Inject
-    EntityManager _entityMgr;
-    @Inject
-    VpcService _vpcSvc;
-    @Inject
-    MessageBus _messageBus;
+    private MessageBus _messageBus;
+
+    private List<NetworkACLServiceProvider> _networkAclElements;
 
     @Override
     public NetworkACL createNetworkACL(final String name, final String description, final long vpcId, final Boolean forDisplay) {
@@ -224,40 +214,21 @@
         return false;
     }
 
-    @Override
     @DB
+    @Override
     @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_ITEM_CREATE, eventDescription = "creating network ACL Item", create = true)
-    public NetworkACLItem createNetworkACLItem(final Integer portStart, final Integer portEnd, final String protocol, final List<String> sourceCidrList, final Integer icmpCode,
-            final Integer icmpType, final NetworkACLItem.TrafficType trafficType, final Long aclId, final String action, Integer number, final Boolean forDisplay) {
-        // If number is null, set it to currentMax + 1 (for backward compatibility)
-        if (number == null) {
-            number = _networkACLItemDao.getMaxNumberByACL(aclId) + 1;
-        }
-
-        final Integer numberFinal = number;
-        final NetworkACLItemVO newRule = Transaction.execute(new TransactionCallback<NetworkACLItemVO>() {
+    public NetworkACLItem createNetworkACLItem(NetworkACLItemVO networkACLItemVO) {
+        NetworkACLItemVO newRule = Transaction.execute(new TransactionCallback<NetworkACLItemVO>() {
             @Override
             public NetworkACLItemVO doInTransaction(final TransactionStatus status) {
-                NetworkACLItem.Action ruleAction = NetworkACLItem.Action.Allow;
-                if ("deny".equalsIgnoreCase(action)) {
-                    ruleAction = NetworkACLItem.Action.Deny;
+                NetworkACLItemVO networkACLItemVOFromDatabase = _networkACLItemDao.persist(networkACLItemVO);
+
+                if (!_networkACLItemDao.setStateToAdd(networkACLItemVOFromDatabase)) {
+                    throw new CloudRuntimeException("Unable to update the state to add for " + networkACLItemVOFromDatabase);
                 }
+                CallContext.current().setEventDetails("ACL Item Id: " + networkACLItemVOFromDatabase.getId());
 
-                NetworkACLItemVO newRule =
-                        new NetworkACLItemVO(portStart, portEnd, protocol.toLowerCase(), aclId, sourceCidrList, icmpCode, icmpType, trafficType, ruleAction, numberFinal);
-
-                if (forDisplay != null) {
-                    newRule.setDisplay(forDisplay);
-                }
-
-                newRule = _networkACLItemDao.persist(newRule);
-
-                if (!_networkACLItemDao.setStateToAdd(newRule)) {
-                    throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
-                }
-                CallContext.current().setEventDetails("ACL Item Id: " + newRule.getId());
-
-                return newRule;
+                return networkACLItemVOFromDatabase;
             }
         });
 
@@ -265,7 +236,7 @@
     }
 
     @Override
-    public NetworkACLItem getNetworkACLItem(final long ruleId) {
+    public NetworkACLItem getNetworkACLItem(long ruleId) {
         return _networkACLItemDao.findById(ruleId);
     }
 
@@ -372,7 +343,6 @@
     }
 
     private void removeRule(final NetworkACLItem rule) {
-        //remove the rule
         _networkACLItemDao.remove(rule.getId());
     }
 
@@ -384,19 +354,14 @@
     }
 
     private boolean applyACLToPrivateGw(final PrivateGateway gateway, final List<? extends NetworkACLItem> rules) throws ResourceUnavailableException {
-        List<VpcProvider> vpcElements = null;
-        vpcElements = new ArrayList<VpcProvider>();
+        List<VpcProvider> vpcElements = new ArrayList<VpcProvider>();
         vpcElements.add((VpcProvider)_ntwkModel.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()));
 
-        if (vpcElements == null) {
-            throw new CloudRuntimeException("Failed to initialize vpc elements");
-        }
-
-        try{
+        try {
             for (final VpcProvider provider : vpcElements) {
                 return provider.applyACLItemsToPrivateGw(gateway, rules);
             }
-        } catch(final Exception ex) {
+        } catch (final Exception ex) {
             s_logger.debug("Failed to apply acl to private gateway " + gateway);
         }
         return false;
@@ -412,68 +377,24 @@
         return applyACLItemsToNetwork(networkId, rules);
     }
 
+    /**
+     * Updates and applies the network ACL rule ({@link NetworkACLItemVO}).
+     * We will first try to update the ACL rule in the database using {@link NetworkACLItemDao#update(Long, NetworkACLItemVO)}. If it does not work, a {@link CloudRuntimeException} is thrown.
+     * If we manage to update the ACL rule in the database, we proceed to apply it using {@link #applyNetworkACL(long)}. If this does not work we throw a {@link CloudRuntimeException}.
+     * If all is working we return the {@link NetworkACLItemVO} given as parameter. We wil set the state of the rule to {@link com.cloud.network.vpc.NetworkACLItem.State#Add}.
+     */
     @Override
-    public NetworkACLItem updateNetworkACLItem(final Long id, final String protocol, final List<String> sourceCidrList, final NetworkACLItem.TrafficType trafficType, final String action,
-            final Integer number, final Integer sourcePortStart, final Integer sourcePortEnd, final Integer icmpCode, final Integer icmpType, final String customId, final Boolean forDisplay) throws ResourceUnavailableException {
-        final NetworkACLItemVO aclItem = _networkACLItemDao.findById(id);
-        aclItem.setState(State.Add);
+    public NetworkACLItem updateNetworkACLItem(NetworkACLItemVO networkACLItemVO) throws ResourceUnavailableException {
+        networkACLItemVO.setState(State.Add);
 
-        if (protocol != null) {
-            aclItem.setProtocol(protocol);
-        }
-
-        if (sourceCidrList != null) {
-            aclItem.setSourceCidrList(sourceCidrList);
-        }
-
-        if (trafficType != null) {
-            aclItem.setTrafficType(trafficType);
-        }
-
-        if (action != null) {
-            NetworkACLItem.Action ruleAction = NetworkACLItem.Action.Allow;
-            if ("deny".equalsIgnoreCase(action)) {
-                ruleAction = NetworkACLItem.Action.Deny;
-            }
-            aclItem.setAction(ruleAction);
-        }
-
-        if (number != null) {
-            aclItem.setNumber(number);
-        }
-
-        if (sourcePortStart != null) {
-            aclItem.setSourcePortStart(sourcePortStart);
-        }
-
-        if (sourcePortEnd != null) {
-            aclItem.setSourcePortEnd(sourcePortEnd);
-        }
-
-        if (icmpCode != null) {
-            aclItem.setIcmpCode(icmpCode);
-        }
-
-        if (icmpType != null) {
-            aclItem.setIcmpType(icmpType);
-        }
-
-        if (customId != null) {
-            aclItem.setUuid(customId);
-        }
-
-        if (forDisplay != null) {
-            aclItem.setDisplay(forDisplay);
-        }
-
-        if (_networkACLItemDao.update(id, aclItem)) {
-            if (applyNetworkACL(aclItem.getAclId())) {
-                return aclItem;
+        if (_networkACLItemDao.update(networkACLItemVO.getId(), networkACLItemVO)) {
+            if (applyNetworkACL(networkACLItemVO.getAclId())) {
+                return networkACLItemVO;
             } else {
-                throw new CloudRuntimeException("Failed to apply Network ACL Item: " + aclItem.getUuid());
+                throw new CloudRuntimeException("Failed to apply Network ACL rule: " + networkACLItemVO.getUuid());
             }
         }
-        return null;
+        throw new CloudRuntimeException(String.format("Network ACL rule [id=%s] acl rule list [id=%s] could not be updated.", networkACLItemVO.getUuid(), networkACLItemVO.getAclId()));
     }
 
     public boolean applyACLItemsToNetwork(final long networkId, final List<NetworkACLItemVO> rules) throws ResourceUnavailableException {
diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java
new file mode 100644
index 0000000..8734ec6
--- /dev/null
+++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java
@@ -0,0 +1,1151 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.vpc;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
+import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
+import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
+import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import com.cloud.event.ActionEvent;
+import com.cloud.event.EventTypes;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.Networks;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.dao.NetworkVO;
+import com.cloud.network.vpc.NetworkACLItem.Action;
+import com.cloud.network.vpc.NetworkACLItem.TrafficType;
+import com.cloud.network.vpc.dao.NetworkACLDao;
+import com.cloud.network.vpc.dao.VpcDao;
+import com.cloud.network.vpc.dao.VpcGatewayDao;
+import com.cloud.projects.Project.ListProjectResourcesCriteria;
+import com.cloud.server.ResourceTag.ResourceObjectType;
+import com.cloud.tags.ResourceTagVO;
+import com.cloud.tags.dao.ResourceTagDao;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.User;
+import com.cloud.utils.Pair;
+import com.cloud.utils.Ternary;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.EntityManager;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.utils.net.NetUtils;
+
+@Component
+public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLService {
+    private static final Logger s_logger = Logger.getLogger(NetworkACLServiceImpl.class);
+
+    @Inject
+    private AccountManager _accountMgr;
+    @Inject
+    private ResourceTagDao _resourceTagDao;
+    @Inject
+    private NetworkACLDao _networkACLDao;
+    @Inject
+    private NetworkACLItemDao _networkACLItemDao;
+    @Inject
+    private NetworkModel networkModel;
+    @Inject
+    private NetworkDao _networkDao;
+    @Inject
+    private NetworkACLManager _networkAclMgr;
+    @Inject
+    private VpcGatewayDao _vpcGatewayDao;
+    @Inject
+    private EntityManager _entityMgr;
+    @Inject
+    private VpcDao _vpcDao;
+    @Inject
+    private VpcService _vpcSvc;
+
+    private String supportedProtocolsForAclRules = "tcp,udp,icmp,all";
+
+    @Override
+    public NetworkACL createNetworkACL(final String name, final String description, final long vpcId, final Boolean forDisplay) {
+        final Account caller = CallContext.current().getCallingAccount();
+        final Vpc vpc = _entityMgr.findById(Vpc.class, vpcId);
+        if (vpc == null) {
+            throw new InvalidParameterValueException("Unable to find VPC");
+        }
+        _accountMgr.checkAccess(caller, null, true, vpc);
+        return _networkAclMgr.createNetworkACL(name, description, vpcId, forDisplay);
+    }
+
+    @Override
+    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_CREATE, eventDescription = "creating network acl list", async = true)
+    public NetworkACL getNetworkACL(final long id) {
+        return _networkAclMgr.getNetworkACL(id);
+    }
+
+    @Override
+    public Pair<List<? extends NetworkACL>, Integer> listNetworkACLs(final ListNetworkACLListsCmd cmd) {
+        final Long id = cmd.getId();
+        final String name = cmd.getName();
+        final Long networkId = cmd.getNetworkId();
+        final Long vpcId = cmd.getVpcId();
+        final String keyword = cmd.getKeyword();
+        final Boolean display = cmd.getDisplay();
+
+        final SearchBuilder<NetworkACLVO> sb = _networkACLDao.createSearchBuilder();
+        sb.and("id", sb.entity().getId(), Op.EQ);
+        sb.and("name", sb.entity().getName(), Op.EQ);
+        sb.and("vpcId", sb.entity().getVpcId(), Op.IN);
+        sb.and("display", sb.entity().isDisplay(), Op.EQ);
+
+        final Account caller = CallContext.current().getCallingAccount();
+
+        if (networkId != null) {
+            final SearchBuilder<NetworkVO> network = _networkDao.createSearchBuilder();
+            network.and("networkId", network.entity().getId(), Op.EQ);
+            sb.join("networkJoin", network, sb.entity().getId(), network.entity().getNetworkACLId(), JoinBuilder.JoinType.INNER);
+        }
+
+        SearchCriteria<NetworkACLVO> sc = sb.create();
+
+        if (keyword != null) {
+            final SearchCriteria<NetworkACLVO> ssc = _networkACLDao.createSearchCriteria();
+            ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
+            ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%");
+            sc.addAnd("name", SearchCriteria.Op.SC, ssc);
+        }
+
+        if (display != null) {
+            sc.setParameters("display", display);
+        }
+
+        if (id != null) {
+            sc.setParameters("id", id);
+        }
+
+        if (name != null) {
+            sc.setParameters("name", name);
+        }
+
+        if (vpcId != null) {
+            final Vpc vpc = _entityMgr.findById(Vpc.class, vpcId);
+            if (vpc == null) {
+                throw new InvalidParameterValueException("Unable to find VPC");
+            }
+            _accountMgr.checkAccess(caller, null, true, vpc);
+            //Include vpcId 0 to list default ACLs
+            sc.setParameters("vpcId", vpcId, 0);
+        } else {
+            //ToDo: Add accountId to network_acl table for permission check
+
+            // VpcId is not specified. Find permitted VPCs for the caller
+            // and list ACLs belonging to the permitted VPCs
+            final List<Long> permittedAccounts = new ArrayList<Long>();
+            Long domainId = cmd.getDomainId();
+            boolean isRecursive = cmd.isRecursive();
+            final String accountName = cmd.getAccountName();
+            final Long projectId = cmd.getProjectId();
+            final boolean listAll = cmd.listAll();
+            final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(domainId, isRecursive, null);
+            _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, false);
+            domainId = domainIdRecursiveListProject.first();
+            isRecursive = domainIdRecursiveListProject.second();
+            final ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
+            final SearchBuilder<VpcVO> sbVpc = _vpcDao.createSearchBuilder();
+            _accountMgr.buildACLSearchBuilder(sbVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+            final SearchCriteria<VpcVO> scVpc = sbVpc.create();
+            _accountMgr.buildACLSearchCriteria(scVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+            final List<VpcVO> vpcs = _vpcDao.search(scVpc, null);
+            final List<Long> vpcIds = new ArrayList<Long>();
+            for (final VpcVO vpc : vpcs) {
+                vpcIds.add(vpc.getId());
+            }
+            //Add vpc_id 0 to list default ACLs
+            vpcIds.add(0L);
+            sc.setParameters("vpcId", vpcIds.toArray());
+        }
+
+        if (networkId != null) {
+            sc.setJoinParameters("networkJoin", "networkId", networkId);
+        }
+
+        final Filter filter = new Filter(NetworkACLVO.class, "id", false, null, null);
+        final Pair<List<NetworkACLVO>, Integer> acls = _networkACLDao.searchAndCount(sc, filter);
+        return new Pair<List<? extends NetworkACL>, Integer>(acls.first(), acls.second());
+    }
+
+    @Override
+    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_DELETE, eventDescription = "Deleting Network ACL List", async = true)
+    public boolean deleteNetworkACL(final long id) {
+        final Account caller = CallContext.current().getCallingAccount();
+        final NetworkACL acl = _networkACLDao.findById(id);
+        if (acl == null) {
+            throw new InvalidParameterValueException("Unable to find specified ACL");
+        }
+
+        //Do not allow deletion of default ACLs
+        if (acl.getId() == NetworkACL.DEFAULT_ALLOW || acl.getId() == NetworkACL.DEFAULT_DENY) {
+            throw new InvalidParameterValueException("Default ACL cannot be removed");
+        }
+
+        final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+        if (vpc == null) {
+            throw new InvalidParameterValueException("Unable to find specified VPC associated with the ACL");
+        }
+        _accountMgr.checkAccess(caller, null, true, vpc);
+        return _networkAclMgr.deleteNetworkACL(acl);
+    }
+
+    @Override
+    public boolean replaceNetworkACLonPrivateGw(final long aclId, final long privateGatewayId) throws ResourceUnavailableException {
+        final Account caller = CallContext.current().getCallingAccount();
+        final VpcGateway gateway = _vpcGatewayDao.findById(privateGatewayId);
+        if (gateway == null) {
+            throw new InvalidParameterValueException("Unable to find specified private gateway");
+        }
+
+        final VpcGatewayVO vo = _vpcGatewayDao.findById(privateGatewayId);
+        if (vo.getState() != VpcGateway.State.Ready) {
+            throw new InvalidParameterValueException("Gateway is not in Ready state");
+        }
+
+        final NetworkACL acl = _networkACLDao.findById(aclId);
+        if (acl == null) {
+            throw new InvalidParameterValueException("Unable to find specified NetworkACL");
+        }
+
+        if (gateway.getVpcId() == null) {
+            throw new InvalidParameterValueException("Unable to find specified vpc id");
+        }
+
+        if (aclId != NetworkACL.DEFAULT_DENY && aclId != NetworkACL.DEFAULT_ALLOW) {
+            final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+            if (vpc == null) {
+                throw new InvalidParameterValueException("Unable to find Vpc associated with the NetworkACL");
+            }
+            _accountMgr.checkAccess(caller, null, true, vpc);
+            if (!gateway.getVpcId().equals(acl.getVpcId())) {
+                throw new InvalidParameterValueException("private gateway: " + privateGatewayId + " and ACL: " + aclId + " do not belong to the same VPC");
+            }
+        }
+
+        final PrivateGateway privateGateway = _vpcSvc.getVpcPrivateGateway(gateway.getId());
+        _accountMgr.checkAccess(caller, null, true, privateGateway);
+
+        return _networkAclMgr.replaceNetworkACLForPrivateGw(acl, privateGateway);
+
+    }
+
+    @Override
+    public boolean replaceNetworkACL(final long aclId, final long networkId) throws ResourceUnavailableException {
+        final Account caller = CallContext.current().getCallingAccount();
+
+        final NetworkVO network = _networkDao.findById(networkId);
+        if (network == null) {
+            throw new InvalidParameterValueException("Unable to find specified Network");
+        }
+
+        final NetworkACL acl = _networkACLDao.findById(aclId);
+        if (acl == null) {
+            throw new InvalidParameterValueException("Unable to find specified NetworkACL");
+        }
+
+        if (network.getVpcId() == null) {
+            throw new InvalidParameterValueException("Network is not part of a VPC: " + network.getUuid());
+        }
+
+        if (network.getTrafficType() != Networks.TrafficType.Guest) {
+            throw new InvalidParameterValueException("Network ACL can be created just for networks of type " + Networks.TrafficType.Guest);
+        }
+
+        if (aclId != NetworkACL.DEFAULT_DENY && aclId != NetworkACL.DEFAULT_ALLOW) {
+            //ACL is not default DENY/ALLOW
+            // ACL should be associated with a VPC
+            final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+            if (vpc == null) {
+                throw new InvalidParameterValueException("Unable to find Vpc associated with the NetworkACL");
+            }
+
+            _accountMgr.checkAccess(caller, null, true, vpc);
+            if (!network.getVpcId().equals(acl.getVpcId())) {
+                throw new InvalidParameterValueException("Network: " + networkId + " and ACL: " + aclId + " do not belong to the same VPC");
+            }
+        }
+
+        return _networkAclMgr.replaceNetworkACL(acl, network);
+    }
+
+    /**
+     * Creates and persists a network ACL rule. The network ACL rule is persisted as a {@link NetworkACLItemVO}.
+     * If no ACL list ID is informed, we will create one. To check these details, please refer to {@link #createAclListIfNeeded(CreateNetworkACLCmd)}.
+     * All of the attributes will be validated accordingly using the following methods:
+     * <ul>
+     * <li> {@link #validateAclRuleNumber(CreateNetworkACLCmd, Long, NetworkACL)} to validate the provided ACL rule number;
+     * <li> {@link #validateNetworkAclList(Long, NetworkACL)} to check if the user has access to the informed ACL list ID and respective VPC;
+     * <li> {@link #validateAndCreateNetworkAclRuleAction(String)} to validate the ACL rule action;
+     * <li> {@link #validateNetworkACLItem(NetworkACLItemVO)} to validate general configurations relating to protocol, ports, and ICMP codes and types.
+     * </ul>
+     *
+     * Moreover, if not ACL rule number is provided we generate one based on the last ACL number used. We will increment +1 in the last ACL rule number used. After all of the validation the ACL rule is persisted using the method {@link NetworkACLManagerImpl#createNetworkACLItem(NetworkACLItemVO)}.
+     */
+    @Override
+    public NetworkACLItem createNetworkACLItem(CreateNetworkACLCmd createNetworkACLCmd) {
+        Long aclId = createAclListIfNeeded(createNetworkACLCmd);
+
+        Integer sourcePortStart = createNetworkACLCmd.getSourcePortStart();
+        Integer sourcePortEnd = createNetworkACLCmd.getSourcePortEnd();
+        String protocol = createNetworkACLCmd.getProtocol();
+        List<String> sourceCidrList = createNetworkACLCmd.getSourceCidrList();
+        Integer icmpCode = createNetworkACLCmd.getIcmpCode();
+        Integer icmpType = createNetworkACLCmd.getIcmpType();
+        TrafficType trafficType = createNetworkACLCmd.getTrafficType();
+        String reason = createNetworkACLCmd.getReason();
+        String action = createNetworkACLCmd.getAction();
+
+        NetworkACL acl = _networkAclMgr.getNetworkACL(aclId);
+
+        validateNetworkAcl(acl);
+        validateAclRuleNumber(createNetworkACLCmd, acl);
+
+        NetworkACLItem.Action ruleAction = validateAndCreateNetworkAclRuleAction(action);
+        Integer number = createNetworkACLCmd.getNumber();
+        if (number == null) {
+            number = _networkACLItemDao.getMaxNumberByACL(aclId) + 1;
+        }
+        NetworkACLItemVO networkACLItemVO = new NetworkACLItemVO(sourcePortStart, sourcePortEnd, protocol, aclId, sourceCidrList, icmpCode, icmpType, trafficType, ruleAction, number, reason);
+        networkACLItemVO.setDisplay(createNetworkACLCmd.isDisplay());
+
+        validateNetworkACLItem(networkACLItemVO);
+        return _networkAclMgr.createNetworkACLItem(networkACLItemVO);
+    }
+
+    /**
+     *  We first validate the given ACL action as a string using {@link #validateNetworkAclRuleAction(String)}.
+     *  Afterwards, we convert this ACL to an object of {@link NetworkACLItem.Action}.
+     *  If the action as String matches the word 'deny' (ignoring case), we return an instance of {@link NetworkACLItem.Action#Deny}.
+     *  Otherwise, we return {@link NetworkACLItem.Action#Allow}.
+     */
+    protected NetworkACLItem.Action validateAndCreateNetworkAclRuleAction(String action) {
+        validateNetworkAclRuleAction(action);
+        NetworkACLItem.Action ruleAction = NetworkACLItem.Action.Allow;
+        if ("deny".equalsIgnoreCase(action)) {
+            ruleAction = NetworkACLItem.Action.Deny;
+        }
+        return ruleAction;
+    }
+
+    /**
+     * Validates the network ACL rule action given as a {@link String}.
+     * If the parameter is null, we do not perform any validations. Otherwise, we check if the parameter is equal to 'Allow' or 'Deny' (ignoring the case).
+     * If the parameter is an invalid action, we throw an {@link InvalidParameterValueException}.
+     */
+    protected void validateNetworkAclRuleAction(String action) {
+        if (action != null) {
+            if (!("Allow".equalsIgnoreCase(action) || "Deny".equalsIgnoreCase(action))) {
+                throw new InvalidParameterValueException(String.format("Invalid action [%s]. Permitted actions are Allow and Deny", action));
+            }
+        }
+    }
+
+    /**
+     * Validates the ACL rule number field. If the field is null, then we do not have anything to check here.
+     * If the number is not null, we perform the following checks:
+     * <ul>
+     *  <li>If number is less than one, than we throw an {@link InvalidParameterValueException};
+     *  <li>if there is already an ACL configured with the given number for the network, we also throw an {@link InvalidParameterValueException}. The check is performed using {@link NetworkACLItemDao#findByAclAndNumber(long, int)} method.
+     * </ul>
+     *
+     * At the end, if not exception is thrown, the number of the ACL rule is valid.
+     */
+    protected void validateAclRuleNumber(CreateNetworkACLCmd createNetworkAclCmd, NetworkACL acl) {
+        Integer number = createNetworkAclCmd.getNumber();
+        if (number != null) {
+            if (number < 1) {
+                throw new InvalidParameterValueException(String.format("Invalid number [%d]. Number cannot be < 1", number));
+            }
+            if (_networkACLItemDao.findByAclAndNumber(acl.getId(), createNetworkAclCmd.getNumber()) != null) {
+                throw new InvalidParameterValueException("ACL item with number " + number + " already exists in ACL: " + acl.getUuid());
+            }
+        }
+    }
+
+    /**
+     * Validates a given {@link NetworkACL}. The validations are the following:
+     * <ul>
+     *  <li>If the parameter is null, we return an  {@link InvalidParameterValueException};
+     *  <li>Default ACLs {@link NetworkACL#DEFAULT_ALLOW} and {@link NetworkACL#DEFAULT_DENY} cannot be modified. Therefore, if any of them is provided we throw a {@link InvalidParameterValueException};
+     *  <li>If the network does not have a VPC, we will throw an {@link InvalidParameterValueException}.
+     * </ul>
+     *
+     * After all validations, we check if the user has access to the given network ACL using {@link AccountManager#checkAccess(Account, org.apache.cloudstack.acl.SecurityChecker.AccessType, boolean, org.apache.cloudstack.acl.ControlledEntity...)}.
+     */
+    protected void validateNetworkAcl(NetworkACL acl) {
+        if (acl == null) {
+            throw new InvalidParameterValueException("Unable to find specified ACL.");
+        }
+
+        if (acl.getId() == NetworkACL.DEFAULT_DENY || acl.getId() == NetworkACL.DEFAULT_ALLOW) {
+            throw new InvalidParameterValueException("Default ACL cannot be modified");
+        }
+
+        Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+        if (vpc == null) {
+            throw new InvalidParameterValueException(String.format("Unable to find Vpc associated with the NetworkACL [%s]", acl.getUuid()));
+        }
+        Account caller = CallContext.current().getCallingAccount();
+        _accountMgr.checkAccess(caller, null, true, vpc);
+    }
+
+    /**
+     * This methods will simply return the ACL rule list ID if it has been provided by the parameter 'createNetworkACLCmd'.
+     * If no ACL rule List ID has been provided the method behave as follows:
+     * <ul>
+     *  <li> If it has not been provided either, we will throw an {@link InvalidParameterValueException};
+     *  <li> if the network ID has been provided, we will check if the network has a VPC; if it does not have, we will throw an {@link InvalidParameterValueException};
+     *  <ul>
+     *      <li> If the VPC already has an ACL rule list, we will return it;
+     *      <li> otherwise, we will create one using {@link #createAclListForNetworkAndReturnAclListId(CreateNetworkACLCmd, Network)} method. This behavior is a legacy thing that has been maintained so far.
+     *  </ul>
+     * </ul>
+     *
+     * @return The network ACL list ID
+     */
+    protected Long createAclListIfNeeded(CreateNetworkACLCmd createNetworkACLCmd) {
+        Long aclId = createNetworkACLCmd.getACLId();
+        if (aclId != null) {
+            return aclId;
+        }
+        if (createNetworkACLCmd.getNetworkId() == null) {
+            throw new InvalidParameterValueException("Cannot create Network ACL Item. ACL Id or network Id is required");
+        }
+        Network network = networkModel.getNetwork(createNetworkACLCmd.getNetworkId());
+        if (network.getVpcId() == null) {
+            throw new InvalidParameterValueException("Network: " + network.getUuid() + " does not belong to VPC");
+        }
+        aclId = network.getNetworkACLId();
+
+        if (aclId == null) {
+            aclId = createAclListForNetworkAndReturnAclListId(createNetworkACLCmd, network);
+        }
+        return aclId;
+    }
+
+    /**
+     * This method will created a network ACL for the provided network. This method will behave as follows:
+     * <ul>
+     *  <li> If the network offering does not support ACLs ( {@link NetworkModel#areServicesSupportedByNetworkOffering(long, com.cloud.network.Network.Service...)} ), then it throws an {@link InvalidParameterValueException};
+     *  <li> If the network does not have any VPC, it throws an {@link InvalidParameterValueException};
+     *  <li> If everything is OK so far, we try to create the ACL using {@link NetworkACLManagerImpl#createNetworkACL(String, String, long, Boolean)} method.
+     *  <ul>
+     *      <li> If the ACL is not created we throw a {@link CloudRuntimeException};
+     *      <li> otherwise, the workflow continues.
+     *  </ul>
+     *  <li> With the ACL in our hands, we try to apply it. If it does not work we throw a {@link CloudRuntimeException}.
+     * </ul>
+     *
+     * @return the Id of the network ACL that is created.
+     */
+    protected Long createAclListForNetworkAndReturnAclListId(CreateNetworkACLCmd aclItemCmd, Network network) {
+        s_logger.debug("Network " + network.getId() + " is not associated with any ACL. Creating an ACL before adding acl item");
+
+        if (!networkModel.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.NetworkACL)) {
+            throw new InvalidParameterValueException("Network Offering does not support NetworkACL service");
+        }
+
+        Vpc vpc = _entityMgr.findById(Vpc.class, network.getVpcId());
+        if (vpc == null) {
+            throw new InvalidParameterValueException("Unable to find Vpc associated with the Network");
+        }
+
+        String aclName = "VPC_" + vpc.getName() + "_Tier_" + network.getName() + "_ACL_" + network.getUuid();
+        String description = "ACL for " + aclName;
+        NetworkACL acl = _networkAclMgr.createNetworkACL(aclName, description, network.getVpcId(), aclItemCmd.isDisplay());
+        if (acl == null) {
+            throw new CloudRuntimeException("Error while create ACL before adding ACL Item for network " + network.getId());
+        }
+        s_logger.debug("Created ACL: " + aclName + " for network " + network.getId());
+        Long aclId = acl.getId();
+        //Apply acl to network
+        try {
+            if (!_networkAclMgr.replaceNetworkACL(acl, (NetworkVO)network)) {
+                throw new CloudRuntimeException("Unable to apply auto created ACL to network " + network.getId());
+            }
+            s_logger.debug("Created ACL is applied to network " + network.getId());
+        } catch (ResourceUnavailableException e) {
+            throw new CloudRuntimeException("Unable to apply auto created ACL to network " + network.getId(), e);
+        }
+        return aclId;
+    }
+
+    /**
+     *  Performs all of the validations for the {@link NetworkACLItem}.
+     *  First we validate the sources start and end ports using {@link #validateSourceStartAndEndPorts(NetworkACLItemVO)};
+     *  then, we validate the source CIDR list using {@link #validateSourceCidrList(NetworkACLItemVO)};
+     *  afterwards, it is validated the protocol entered in the {@link NetworkACLItemVO} using {@link #validateProtocol(NetworkACLItemVO)}.
+     */
+    protected void validateNetworkACLItem(NetworkACLItemVO networkACLItemVO) {
+        validateSourceStartAndEndPorts(networkACLItemVO);
+        validateSourceCidrList(networkACLItemVO);
+        validateProtocol(networkACLItemVO);
+    }
+
+    /**
+     * Validated ICMP type and code of {@link NetworkACLItemVO}. The behavior of this method is the following:
+     * <ul>
+     *  <li>If no ICMP type is provided, we do not perform validations;
+     *  <li>If the ICMP type is not '-1', we validate it using {@link NetUtils#validateIcmpType(long)};
+     *  <li>If the ICMP code is null, we do not perform validations;
+     *  <li>If the ICMP code is not '-1', we validate it using {@link NetUtils#validateIcmpCode(long)};
+     * </ul>
+     * Failing to meet the above conditions, we throw an {@link InvalidParameterValueException}.
+     */
+    protected void validateIcmpTypeAndCode(NetworkACLItemVO networkACLItemVO) {
+        Integer icmpType = networkACLItemVO.getIcmpType();
+        Integer icmpCode = networkACLItemVO.getIcmpCode();
+        if (icmpType == null) {
+            return;
+        }
+        if (icmpType.longValue() != -1 && !NetUtils.validateIcmpType(icmpType.longValue())) {
+            throw new InvalidParameterValueException(String.format("Invalid icmp type [%d]. It should belong to [0-255] range", icmpType));
+        }
+        if (icmpCode != null) {
+            if (icmpCode.longValue() != -1 && !NetUtils.validateIcmpCode(icmpCode.longValue())) {
+                throw new InvalidParameterValueException(String.format("Invalid icmp code [%d]. It should belong to [0-15] range and can be defined when icmpType belongs to [0-40] range", icmpCode));
+            }
+        }
+    }
+
+    /**
+     *   Validates the {@link NetworkACLItemVO} protocol. If the protocol is blank, we do not execute any validations. Otherwise, we perform the following checks:
+     *   <ul>
+     *      <li>If it is a numeric value, the protocol must be bigger or equal to 0 and smaller or equal to 255;
+     *      <li>if it is a {@link String}, it must be one of the following: {@link #supportedProtocolsForAclRules};
+     *   </ul>
+     *    Whenever the conditions enumerated above are not met, we throw an {@link InvalidParameterValueException}.
+     *
+     *    If the parameter passes the protocol type validations, we check the following:
+     *    <ul>
+     *      <li>If it is not an ICMP type protocol, it cannot have any value in {@link NetworkACLItemVO#getIcmpCode()} and {@link NetworkACLItemVO#getIcmpType()};
+     *      <li>If it is an ICMP type protocol, it cannot have any value in {@link NetworkACLItemVO#getSourcePortStart()} and {@link NetworkACLItemVO#getSourcePortEnd()}.
+     *    </ul>
+     *    Failing to meet the above conditions, we throw an {@link InvalidParameterValueException}.
+     *
+     *    The last check is performed via {@link #validateIcmpTypeAndCode(NetworkACLItemVO)} method.
+     */
+    protected void validateProtocol(NetworkACLItemVO networkACLItemVO) {
+        String protocol = networkACLItemVO.getProtocol();
+        if (StringUtils.isBlank(protocol)) {
+            return;
+        }
+        if (StringUtils.isNumeric(protocol)) {
+            int protoNumber = Integer.parseInt(protocol);
+            if (protoNumber < 0 || protoNumber > 255) {
+                throw new InvalidParameterValueException("Invalid protocol number: " + protoNumber);
+            }
+        } else {
+            if (!supportedProtocolsForAclRules.contains(protocol.toLowerCase())) {
+                throw new InvalidParameterValueException(String.format("Invalid protocol [%s]. Expected one of: [%s]", protocol, supportedProtocolsForAclRules));
+            }
+        }
+
+        Integer icmpCode = networkACLItemVO.getIcmpCode();
+        Integer icmpType = networkACLItemVO.getIcmpType();
+        // icmp code and icmp type can't be passed in for any other protocol rather than icmp
+        boolean isIcmpProtocol = protocol.equalsIgnoreCase(NetUtils.ICMP_PROTO);
+        if (!isIcmpProtocol && (icmpCode != null || icmpType != null)) {
+            throw new InvalidParameterValueException("Can specify icmpCode and icmpType for ICMP protocol only");
+        }
+
+        Integer sourcePortStart = networkACLItemVO.getSourcePortStart();
+        Integer sourcePortEnd = networkACLItemVO.getSourcePortEnd();
+        if (isIcmpProtocol && (sourcePortStart != null || sourcePortEnd != null)) {
+            throw new InvalidParameterValueException("Can't specify start/end port when protocol is ICMP");
+        }
+
+        validateIcmpTypeAndCode(networkACLItemVO);
+    }
+
+    /**
+     *  Validates all of the CIDRs in the {@link NetworkACLItemVO#getSourceCidrList()}.
+     *  If the list is empty we do not execute any validation. Otherwise, all of the CIDRs are validated using {@link NetUtils#isValidIp4Cidr(String)}.
+     */
+    protected void validateSourceCidrList(NetworkACLItemVO networkACLItemVO) {
+        List<String> sourceCidrList = networkACLItemVO.getSourceCidrList();
+        if (CollectionUtils.isNotEmpty(sourceCidrList)) {
+            for (String cidr : sourceCidrList) {
+                if (!NetUtils.isValidIp4Cidr(cidr)) {
+                    throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Source cidrs formatting error " + cidr);
+                }
+            }
+        }
+    }
+
+    /**
+     * Validates the source start and end ports for the given network ACL rule.
+     * If both ports (start and end) are null, we do not execute validations. Otherwise, we check the following:
+     * <ul>
+     *  <li> Check if start port is valid using {@link NetUtils#isValidPort(int)};
+     *  <li> Check if end port is valid using {@link NetUtils#isValidPort(int)};
+     *  <li> Check if start port is bigger than end port;
+     *  <li> Check if start and end ports were used with protocol 'all'
+     *  </ul>
+     *  All of the above cases will generate an {@link InvalidParameterValueException}.
+     */
+    protected void validateSourceStartAndEndPorts(NetworkACLItemVO networkACLItemVO) {
+        Integer sourcePortStart = networkACLItemVO.getSourcePortStart();
+        Integer sourcePortEnd = networkACLItemVO.getSourcePortEnd();
+        if (sourcePortStart == null && sourcePortEnd == null) {
+            return;
+        }
+
+        if (!NetUtils.isValidPort(sourcePortStart)) {
+            throw new InvalidParameterValueException("Start public port is an invalid value: " + sourcePortStart);
+        }
+
+        if (!NetUtils.isValidPort(sourcePortEnd)) {
+            throw new InvalidParameterValueException("End public port is an invalid value: " + sourcePortEnd);
+        }
+        if (sourcePortStart > sourcePortEnd) {
+            throw new InvalidParameterValueException(String.format("Start port can't be bigger than end port [startport=%d,endport=%d]", sourcePortStart, sourcePortEnd));
+        }
+        String protocol = networkACLItemVO.getProtocol();
+        if ("all".equalsIgnoreCase(protocol)) {
+            throw new InvalidParameterValueException("start port and end port must be null if protocol = 'all'");
+        }
+    }
+
+    @Override
+    public NetworkACLItem getNetworkACLItem(final long ruleId) {
+        return _networkAclMgr.getNetworkACLItem(ruleId);
+    }
+
+    @Override
+    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_ITEM_CREATE, eventDescription = "Applying Network ACL Item", async = true)
+    public boolean applyNetworkACL(final long aclId) throws ResourceUnavailableException {
+        return _networkAclMgr.applyNetworkACL(aclId);
+    }
+
+    @Override
+    public Pair<List<? extends NetworkACLItem>, Integer> listNetworkACLItems(final ListNetworkACLsCmd cmd) {
+        final Long networkId = cmd.getNetworkId();
+        final Long id = cmd.getId();
+        Long aclId = cmd.getAclId();
+        final String trafficType = cmd.getTrafficType();
+        final String protocol = cmd.getProtocol();
+        final String action = cmd.getAction();
+        final Map<String, String> tags = cmd.getTags();
+        final Account caller = CallContext.current().getCallingAccount();
+
+        final Filter filter = new Filter(NetworkACLItemVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal());
+        final SearchBuilder<NetworkACLItemVO> sb = _networkACLItemDao.createSearchBuilder();
+
+        sb.and("id", sb.entity().getId(), Op.EQ);
+        sb.and("aclId", sb.entity().getAclId(), Op.EQ);
+        sb.and("trafficType", sb.entity().getTrafficType(), Op.EQ);
+        sb.and("protocol", sb.entity().getProtocol(), Op.EQ);
+        sb.and("action", sb.entity().getAction(), Op.EQ);
+
+        if (tags != null && !tags.isEmpty()) {
+            final SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
+            for (int count = 0; count < tags.size(); count++) {
+                tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), Op.EQ);
+                tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), Op.EQ);
+                tagSearch.cp();
+            }
+            tagSearch.and("resourceType", tagSearch.entity().getResourceType(), Op.EQ);
+            sb.groupBy(sb.entity().getId());
+            sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+        }
+
+        if (aclId == null) {
+            //Join with network_acl table when aclId is not specified to list acl_items within permitted VPCs
+            final SearchBuilder<NetworkACLVO> vpcSearch = _networkACLDao.createSearchBuilder();
+            vpcSearch.and("vpcId", vpcSearch.entity().getVpcId(), Op.IN);
+            sb.join("vpcSearch", vpcSearch, sb.entity().getAclId(), vpcSearch.entity().getId(), JoinBuilder.JoinType.INNER);
+        }
+
+        final SearchCriteria<NetworkACLItemVO> sc = sb.create();
+
+        if (id != null) {
+            sc.setParameters("id", id);
+        }
+
+        if (networkId != null) {
+            final Network network = _networkDao.findById(networkId);
+            aclId = network.getNetworkACLId();
+            if (aclId == null) {
+                // No aclId associated with the network.
+                //Return empty list
+                return new Pair(new ArrayList<NetworkACLItem>(), 0);
+            }
+        }
+
+        if (trafficType != null) {
+            sc.setParameters("trafficType", trafficType);
+        }
+
+        if (aclId != null) {
+            // Get VPC and check access
+            final NetworkACL acl = _networkACLDao.findById(aclId);
+            if (acl.getVpcId() != 0) {
+                final Vpc vpc = _vpcDao.findById(acl.getVpcId());
+                if (vpc == null) {
+                    throw new InvalidParameterValueException("Unable to find VPC associated with acl");
+                }
+                _accountMgr.checkAccess(caller, null, true, vpc);
+            }
+            sc.setParameters("aclId", aclId);
+        } else {
+            //ToDo: Add accountId to network_acl_item table for permission check
+
+            // aclId is not specified
+            // List permitted VPCs and filter aclItems
+            final List<Long> permittedAccounts = new ArrayList<Long>();
+            Long domainId = cmd.getDomainId();
+            boolean isRecursive = cmd.isRecursive();
+            final String accountName = cmd.getAccountName();
+            final Long projectId = cmd.getProjectId();
+            final boolean listAll = cmd.listAll();
+            final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(domainId, isRecursive, null);
+            _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, false);
+            domainId = domainIdRecursiveListProject.first();
+            isRecursive = domainIdRecursiveListProject.second();
+            final ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
+            final SearchBuilder<VpcVO> sbVpc = _vpcDao.createSearchBuilder();
+            _accountMgr.buildACLSearchBuilder(sbVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+            final SearchCriteria<VpcVO> scVpc = sbVpc.create();
+            _accountMgr.buildACLSearchCriteria(scVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+            final List<VpcVO> vpcs = _vpcDao.search(scVpc, null);
+            final List<Long> vpcIds = new ArrayList<Long>();
+            for (final VpcVO vpc : vpcs) {
+                vpcIds.add(vpc.getId());
+            }
+            //Add vpc_id 0 to list acl_items in default ACL
+            vpcIds.add(0L);
+            sc.setJoinParameters("vpcSearch", "vpcId", vpcIds.toArray());
+        }
+
+        if (protocol != null) {
+            sc.setParameters("protocol", protocol);
+        }
+
+        if (action != null) {
+            sc.setParameters("action", action);
+        }
+
+        if (tags != null && !tags.isEmpty()) {
+            int count = 0;
+            sc.setJoinParameters("tagSearch", "resourceType", ResourceObjectType.NetworkACL.toString());
+            for (final String key : tags.keySet()) {
+                sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key);
+                sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key));
+                count++;
+            }
+        }
+
+        final Pair<List<NetworkACLItemVO>, Integer> result = _networkACLItemDao.searchAndCount(sc, filter);
+        final List<NetworkACLItemVO> aclItemVOs = result.first();
+        for (final NetworkACLItemVO item : aclItemVOs) {
+            _networkACLItemDao.loadCidrs(item);
+        }
+        return new Pair<List<? extends NetworkACLItem>, Integer>(aclItemVOs, result.second());
+    }
+
+    @Override
+    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_ITEM_DELETE, eventDescription = "Deleting Network ACL Item", async = true)
+    public boolean revokeNetworkACLItem(final long ruleId) {
+        final NetworkACLItemVO aclItem = _networkACLItemDao.findById(ruleId);
+        if (aclItem != null) {
+            final NetworkACL acl = _networkAclMgr.getNetworkACL(aclItem.getAclId());
+
+            final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+
+            if (aclItem.getAclId() == NetworkACL.DEFAULT_ALLOW || aclItem.getAclId() == NetworkACL.DEFAULT_DENY) {
+                throw new InvalidParameterValueException("ACL Items in default ACL cannot be deleted");
+            }
+
+            final Account caller = CallContext.current().getCallingAccount();
+
+            _accountMgr.checkAccess(caller, null, true, vpc);
+
+        }
+        return _networkAclMgr.revokeNetworkACLItem(ruleId);
+    }
+
+    /**
+     * Updates a network ACL with the given values found in the {@link UpdateNetworkACLItemCmd} parameter.
+     * First we will validate the network ACL rule provided in the command using {@link #validateNetworkAclRuleIdAndRetrieveIt(UpdateNetworkACLItemCmd)}.
+     * Then, we validate the ACL itself using {@link #validateNetworkAcl(NetworkACL)}. If all of the validation is ok, we do the following.
+     * <ul>
+     *  <li>Transfer new data to {@link NetworkACLItemVO} that is intended to be updated;
+     *  <li>Validate the ACL rule being updated using {@link #validateNetworkACLItem(NetworkACLItemVO)}.
+     * </ul>
+     *
+     * After the validations and updating the POJO we execute the update in the database using {@link NetworkACLManagerImpl#updateNetworkACLItem(NetworkACLItemVO)}.
+     *
+     */
+    @Override
+    public NetworkACLItem updateNetworkACLItem(UpdateNetworkACLItemCmd updateNetworkACLItemCmd) throws ResourceUnavailableException {
+        NetworkACLItemVO networkACLItemVo = validateNetworkAclRuleIdAndRetrieveIt(updateNetworkACLItemCmd);
+
+        NetworkACL acl = _networkAclMgr.getNetworkACL(networkACLItemVo.getAclId());
+        validateNetworkAcl(acl);
+
+        transferDataToNetworkAclRulePojo(updateNetworkACLItemCmd, networkACLItemVo, acl);
+        validateNetworkACLItem(networkACLItemVo);
+        return _networkAclMgr.updateNetworkACLItem(networkACLItemVo);
+    }
+
+    /**
+     *  We transfer the update information form {@link UpdateNetworkACLItemCmd} to the {@link NetworkACLItemVO} POJO passed as parameter.
+     *  There is one validation performed here, which is regarding the number of the ACL. We will check if there is already an ACL rule with that number, and if this is the case an {@link InvalidParameterValueException} is thrown.
+     *  All of the parameters in {@link UpdateNetworkACLItemCmd} that are not null will be set to their corresponding fields in {@link NetworkACLItemVO}.
+     *  If the parameter {@link UpdateNetworkACLItemCmd#isPartialUpgrade()} returns false, we will use null parameters, which will allow us to completely update the ACL rule.
+     *  However, the number and custom Uuid will never be set to null. Therefore, if it is not a partial upgrade, these values will remain the same.
+     *
+     *  We use {@link #validateAndCreateNetworkAclRuleAction(String)} when converting an action as {@link String} to its Enum corresponding value.
+     */
+    protected void transferDataToNetworkAclRulePojo(UpdateNetworkACLItemCmd updateNetworkACLItemCmd, NetworkACLItemVO networkACLItemVo, NetworkACL acl) {
+        Integer number = updateNetworkACLItemCmd.getNumber();
+        if (number != null) {
+            NetworkACLItemVO aclNumber = _networkACLItemDao.findByAclAndNumber(acl.getId(), number);
+            if (aclNumber != null && aclNumber.getId() != networkACLItemVo.getId()) {
+                throw new InvalidParameterValueException("ACL item with number " + number + " already exists in ACL: " + acl.getUuid());
+            }
+            networkACLItemVo.setNumber(number);
+        }
+        boolean isPartialUpgrade = updateNetworkACLItemCmd.isPartialUpgrade();
+
+        Integer sourcePortStart = updateNetworkACLItemCmd.getSourcePortStart();
+        if (!isPartialUpgrade || sourcePortStart != null) {
+            networkACLItemVo.setSourcePortStart(sourcePortStart);
+        }
+        Integer sourcePortEnd = updateNetworkACLItemCmd.getSourcePortEnd();
+        if (!isPartialUpgrade || sourcePortEnd != null) {
+            networkACLItemVo.setSourcePortEnd(sourcePortEnd);
+        }
+        List<String> sourceCidrList = updateNetworkACLItemCmd.getSourceCidrList();
+        if (!isPartialUpgrade || CollectionUtils.isNotEmpty(sourceCidrList)) {
+            networkACLItemVo.setSourceCidrList(sourceCidrList);
+        }
+        String protocol = updateNetworkACLItemCmd.getProtocol();
+        if (!isPartialUpgrade || StringUtils.isNotBlank(protocol)) {
+            networkACLItemVo.setProtocol(protocol);
+        }
+        Integer icmpCode = updateNetworkACLItemCmd.getIcmpCode();
+        if (!isPartialUpgrade || icmpCode != null) {
+            networkACLItemVo.setIcmpCode(icmpCode);
+        }
+        Integer icmpType = updateNetworkACLItemCmd.getIcmpType();
+        if (!isPartialUpgrade || icmpType != null) {
+            networkACLItemVo.setIcmpType(icmpType);
+        }
+        String action = updateNetworkACLItemCmd.getAction();
+        if (!isPartialUpgrade || StringUtils.isNotBlank(action)) {
+            Action aclRuleAction = validateAndCreateNetworkAclRuleAction(action);
+            networkACLItemVo.setAction(aclRuleAction);
+        }
+        TrafficType trafficType = updateNetworkACLItemCmd.getTrafficType();
+        if (!isPartialUpgrade || trafficType != null) {
+            networkACLItemVo.setTrafficType(trafficType);
+        }
+        String customId = updateNetworkACLItemCmd.getCustomId();
+        if (StringUtils.isNotBlank(customId)) {
+            networkACLItemVo.setUuid(customId);
+        }
+        boolean display = updateNetworkACLItemCmd.isDisplay();
+        if (!isPartialUpgrade || display != networkACLItemVo.isDisplay()) {
+            networkACLItemVo.setDisplay(display);
+        }
+        String reason = updateNetworkACLItemCmd.getReason();
+        if (!isPartialUpgrade || StringUtils.isNotBlank(reason)) {
+            networkACLItemVo.setReason(reason);
+        }
+    }
+
+    /**
+     * We validate the network ACL rule ID provided. If not ACL rule is found with the given Id an {@link InvalidParameterValueException} is thrown.
+     * If an ACL rule is found, we return the clone of the rule to avoid messing up with CGlib enhanced objects that might be linked to database entries.
+     */
+    protected NetworkACLItemVO validateNetworkAclRuleIdAndRetrieveIt(UpdateNetworkACLItemCmd updateNetworkACLItemCmd) {
+        Long id = updateNetworkACLItemCmd.getId();
+        NetworkACLItemVO networkACLItemVoFromDatabase = _networkACLItemDao.findById(id);
+        if (networkACLItemVoFromDatabase == null) {
+            throw new InvalidParameterValueException(String.format("Unable to find ACL rule with ID [%s]", id));
+        }
+        return networkACLItemVoFromDatabase.clone();
+    }
+
+    @Override
+    @ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_UPDATE, eventDescription = "updating network acl", async = true)
+    public NetworkACL updateNetworkACL(UpdateNetworkACLListCmd updateNetworkACLListCmd) {
+        Long id = updateNetworkACLListCmd.getId();
+        NetworkACLVO acl = _networkACLDao.findById(id);
+        Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+
+        Account caller = CallContext.current().getCallingAccount();
+        _accountMgr.checkAccess(caller, null, true, vpc);
+
+        String name = updateNetworkACLListCmd.getName();
+        if (StringUtils.isNotBlank(name)) {
+            acl.setName(name);
+        }
+        String description = updateNetworkACLListCmd.getDescription();
+        if (StringUtils.isNotBlank(description)) {
+            acl.setDescription(description);
+        }
+        String customId = updateNetworkACLListCmd.getCustomId();
+        if (StringUtils.isNotBlank(customId)) {
+            acl.setUuid(customId);
+        }
+        Boolean forDisplay = updateNetworkACLListCmd.getDisplay();
+        if (forDisplay != null) {
+            acl.setDisplay(forDisplay);
+        }
+        _networkACLDao.update(id, acl);
+        return _networkACLDao.findById(id);
+    }
+
+    @Override
+    public NetworkACLItem moveNetworkAclRuleToNewPosition(MoveNetworkAclItemCmd moveNetworkAclItemCmd) {
+        String uuidRuleBeingMoved = moveNetworkAclItemCmd.getUuidRuleBeingMoved();
+        String nextAclRuleUuid = moveNetworkAclItemCmd.getNextAclRuleUuid();
+        String previousAclRuleUuid = moveNetworkAclItemCmd.getPreviousAclRuleUuid();
+
+        if (StringUtils.isBlank(previousAclRuleUuid) && StringUtils.isBlank(nextAclRuleUuid)) {
+            throw new InvalidParameterValueException("Both previous and next ACL rule IDs cannot be blank.");
+        }
+
+        NetworkACLItemVO ruleBeingMoved = _networkACLItemDao.findByUuid(uuidRuleBeingMoved);
+        if (ruleBeingMoved == null) {
+            throw new InvalidParameterValueException(String.format("Could not find a rule with ID[%s]", uuidRuleBeingMoved));
+        }
+        NetworkACLItemVO previousRule = retrieveAndValidateAclRule(previousAclRuleUuid);
+        NetworkACLItemVO nextRule = retrieveAndValidateAclRule(nextAclRuleUuid);
+
+        validateMoveAclRulesData(ruleBeingMoved, previousRule, nextRule);
+
+        try {
+            NetworkACLVO lockedAcl = _networkACLDao.acquireInLockTable(ruleBeingMoved.getAclId());
+            List<NetworkACLItemVO> allAclRules = getAllAclRulesSortedByNumber(lockedAcl.getId());
+            validateAclConsistency(moveNetworkAclItemCmd, lockedAcl, allAclRules);
+
+            if (previousRule == null) {
+                return moveRuleToTheTop(ruleBeingMoved, allAclRules);
+            }
+            if (nextRule == null) {
+                return moveRuleToTheBottom(ruleBeingMoved, allAclRules);
+            }
+            return moveRuleBetweenAclRules(ruleBeingMoved, allAclRules, previousRule, nextRule);
+        } finally {
+            _networkACLDao.releaseFromLockTable(ruleBeingMoved.getAclId());
+        }
+    }
+
+    /**
+     * Validates the consistency of the ACL; the validation process is the following.
+     * <ul>
+     *  <li> If the ACL does not have rules yet, we do not have any validation to perform;
+     *  <li> we will check first if the user provided a consistency hash; if not, we will log a warning message informing administrators that the user is performing the call is assuming the risks of applying ACL replacement without a consistency check;
+     *  <li> if the ACL consistency hash is entered by the user, we check if it is the same as we currently have in the database. If it is different we throw an exception.
+     * </ul>
+     *
+     * If the consistency hash sent by the user is the same as the one we get with the database data we should be safe to proceed.
+     */
+    protected void validateAclConsistency(MoveNetworkAclItemCmd moveNetworkAclItemCmd, NetworkACLVO lockedAcl, List<NetworkACLItemVO> allAclRules) {
+        if (CollectionUtils.isEmpty(allAclRules)) {
+            s_logger.debug(String.format("No ACL rules for [id=%s, name=%s]. Therefore, there is no need for consistency validation.", lockedAcl.getUuid(), lockedAcl.getName()));
+            return;
+        }
+        String aclConsistencyHash = moveNetworkAclItemCmd.getAclConsistencyHash();
+        if (StringUtils.isBlank(aclConsistencyHash)) {
+            User callingUser = CallContext.current().getCallingUser();
+            Account callingAccount = CallContext.current().getCallingAccount();
+
+            s_logger.warn(String.format(
+                    "User [id=%s, name=%s] from Account [id=%s, name=%s] has not entered an ACL consistency hash to execute the replacement of an ACL rule. Therefore, she/he is assuming all of the risks of procedding without this validation.",
+                    callingUser.getUuid(), callingUser.getUsername(), callingAccount.getUuid(), callingAccount.getAccountName()));
+            return;
+        }
+        String aclRulesUuids = StringUtils.EMPTY;
+        for (NetworkACLItemVO rule : allAclRules) {
+            aclRulesUuids += rule.getUuid();
+        }
+        String md5UuidsSortedByNumber = DigestUtils.md5Hex(aclRulesUuids);
+        if (!md5UuidsSortedByNumber.equals(aclConsistencyHash)) {
+            throw new InvalidParameterValueException("It seems that the access control list in the database is not in the state that you used to apply the changed. Could you try it again?");
+        }
+    }
+
+    /**
+     * Loads all ACL rules from given network ACL list. Then, the ACL rules will be sorted according to the 'number' field in ascending order.
+     */
+    protected List<NetworkACLItemVO> getAllAclRulesSortedByNumber(long aclId) {
+        List<NetworkACLItemVO> allAclRules = _networkACLItemDao.listByACL(aclId);
+        Collections.sort(allAclRules, new Comparator<NetworkACLItemVO>() {
+            @Override
+            public int compare(NetworkACLItemVO o1, NetworkACLItemVO o2) {
+                return o1.number - o2.number;
+            }
+        });
+        return allAclRules;
+    }
+
+    /**
+     * Moves an ACL to the space between to other rules. If there is already enough room to accommodate the ACL rule being moved, we simply get the 'number' field from the previous ACL rule and add one, and then define this new value as the 'number' value for the ACL rule being moved.
+     * Otherwise, we will need to make room. This process is executed via {@link #updateAclRuleToNewPositionAndExecuteShiftIfNecessary(NetworkACLItemVO, int, List, int)}, which will create the space between ACL rules if necessary. This involves shifting ACL rules to accommodate the rule being moved.
+     */
+    protected NetworkACLItem moveRuleBetweenAclRules(NetworkACLItemVO ruleBeingMoved, List<NetworkACLItemVO> allAclRules, NetworkACLItemVO previousRule, NetworkACLItemVO nextRule) {
+        if (previousRule.getNumber() + 1 != nextRule.getNumber()) {
+            int newNumberFieldValue = previousRule.getNumber() + 1;
+            for (NetworkACLItemVO networkACLItemVO : allAclRules) {
+                if (networkACLItemVO.getNumber() == newNumberFieldValue) {
+                    throw new InvalidParameterValueException("There are some inconsistencies with the data you sent. The new position calculated already has a ACL rule on it.");
+                }
+            }
+            ruleBeingMoved.setNumber(newNumberFieldValue);
+            _networkACLItemDao.updateNumberFieldNetworkItem(ruleBeingMoved.getId(), newNumberFieldValue);
+            return _networkACLItemDao.findById(ruleBeingMoved.getId());
+        }
+        int positionToStartProcessing = 0;
+        for (int i = 0; i < allAclRules.size(); i++) {
+            if (allAclRules.get(i).getId() == previousRule.getId()) {
+                positionToStartProcessing = i + 1;
+                break;
+            }
+        }
+        return updateAclRuleToNewPositionAndExecuteShiftIfNecessary(ruleBeingMoved, previousRule.getNumber() + 1, allAclRules, positionToStartProcessing);
+    }
+
+    /**
+     *  Moves a network ACL rule to the bottom of the list. This is executed by getting the 'number' field of the last ACL rule from the ACL list, and incrementing one.
+     *  This new value is assigned to the network ACL being moved and updated in the database using {@link NetworkACLItemDao#updateNumberFieldNetworkItem(long, int)}.
+     */
+    protected NetworkACLItem moveRuleToTheBottom(NetworkACLItemVO ruleBeingMoved, List<NetworkACLItemVO> allAclRules) {
+        NetworkACLItemVO lastAclRule = allAclRules.get(allAclRules.size() - 1);
+
+        int newNumberFieldValue = lastAclRule.getNumber() + 1;
+        ruleBeingMoved.setNumber(newNumberFieldValue);
+
+        _networkACLItemDao.updateNumberFieldNetworkItem(ruleBeingMoved.getId(), newNumberFieldValue);
+        return _networkACLItemDao.findById(ruleBeingMoved.getId());
+    }
+
+    /**
+     *  Move the rule to the top of the ACL rule list. This means that the ACL rule being moved will receive the position '1'.
+     *  Also, if necessary other ACL rules will have their 'number' field updated to create room for the new top rule.
+     */
+    protected NetworkACLItem moveRuleToTheTop(NetworkACLItemVO ruleBeingMoved, List<NetworkACLItemVO> allAclRules) {
+        return updateAclRuleToNewPositionAndExecuteShiftIfNecessary(ruleBeingMoved, 1, allAclRules, 0);
+    }
+
+    /**
+     * Updates the ACL rule number executing the shift on subsequent ACL rules if necessary.
+     * For example, if we have the following ACL rules:
+     * <ul>
+     *  <li> ACL A - number 1
+     *  <li> ACL B - number 2
+     *  <li> ACL C - number 3
+     *  <li> ACL D - number 12
+     * </ul>
+     * If we move 'ACL D' to a place  between 'ACL A' and 'ACL B', this method will execute the shift needded to create the space for 'ACL D'.
+     * After applying this method, we will have the following condition.
+     * <ul>
+     *  <li> ACL A - number 1
+     *  <li> ACL D - number 2
+     *  <li> ACL B - number 3
+     *  <li> ACL C - number 4
+     * </ul>
+     */
+    protected NetworkACLItem updateAclRuleToNewPositionAndExecuteShiftIfNecessary(NetworkACLItemVO ruleBeingMoved, int newNumberFieldValue, List<NetworkACLItemVO> allAclRules,
+            int indexToStartProcessing) {
+        ruleBeingMoved.setNumber(newNumberFieldValue);
+        for (int i = indexToStartProcessing; i < allAclRules.size(); i++) {
+            NetworkACLItemVO networkACLItemVO = allAclRules.get(i);
+            if (networkACLItemVO.getId() == ruleBeingMoved.getId()) {
+                continue;
+            }
+            if (newNumberFieldValue != networkACLItemVO.getNumber()) {
+                break;
+            }
+            int newNumberFieldValueNextAclRule = newNumberFieldValue + 1;
+            updateAclRuleToNewPositionAndExecuteShiftIfNecessary(networkACLItemVO, newNumberFieldValueNextAclRule, allAclRules, i);
+        }
+        _networkACLItemDao.updateNumberFieldNetworkItem(ruleBeingMoved.getId(), newNumberFieldValue);
+        return _networkACLItemDao.findById(ruleBeingMoved.getId());
+    }
+
+    /**
+     * Searches in the database for an ACL rule by its UUID.
+     * An {@link InvalidParameterValueException} is thrown if no ACL rule is found with the given UUID.
+     */
+    protected NetworkACLItemVO retrieveAndValidateAclRule(String aclRuleUuid) {
+        if (StringUtils.isBlank(aclRuleUuid)) {
+            return null;
+        }
+        NetworkACLItemVO aclRule = _networkACLItemDao.findByUuid(aclRuleUuid);
+        if (aclRule == null) {
+            throw new InvalidParameterValueException(String.format("Could not find rule with ID [%s]", aclRuleUuid));
+        }
+        return aclRule;
+    }
+
+    /**
+     *  Validates if the data provided to move the ACL rule is supported by this implementation. The user needs to provide a valid ACL UUID, and at least one of the previous or the next ACL rule.
+     *  The validation is as follows:
+     *  <ul>
+     *      <li> If both ACL rules 'previous' and 'next' are invalid, we throw an {@link InvalidParameterValueException};
+     *      <li> informed previous and next ACL rules must have the same ACL ID as the rule being moved; otherwise, an {@link InvalidParameterValueException} is thrown;
+     *      <li> then we check if the user trying to move ACL rules has access to the VPC, where the ACL rules are being applied.
+     *  </ul>
+     */
+    protected void validateMoveAclRulesData(NetworkACLItemVO ruleBeingMoved, NetworkACLItemVO previousRule, NetworkACLItemVO nextRule) {
+        if (nextRule == null && previousRule == null) {
+            throw new InvalidParameterValueException("Both previous and next ACL rule IDs cannot be invalid.");
+        }
+        long aclId = ruleBeingMoved.getAclId();
+
+        if ((nextRule != null && nextRule.getAclId() != aclId) || (previousRule != null && previousRule.getAclId() != aclId)) {
+            throw new InvalidParameterValueException("Cannot use ACL rules from differenting ACLs. Rule being moved.");
+        }
+        NetworkACLVO acl = _networkACLDao.findById(aclId);
+        Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
+        Account caller = CallContext.current().getCallingAccount();
+        _accountMgr.checkAccess(caller, null, true, vpc);
+    }
+}
\ No newline at end of file
diff --git a/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java b/server/src/main/java/com/cloud/network/vpc/PrivateGatewayProfile.java
similarity index 100%
rename from server/src/com/cloud/network/vpc/PrivateGatewayProfile.java
rename to server/src/main/java/com/cloud/network/vpc/PrivateGatewayProfile.java
diff --git a/server/src/com/cloud/network/vpc/PrivateIpAddress.java b/server/src/main/java/com/cloud/network/vpc/PrivateIpAddress.java
similarity index 100%
rename from server/src/com/cloud/network/vpc/PrivateIpAddress.java
rename to server/src/main/java/com/cloud/network/vpc/PrivateIpAddress.java
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/vpc/VpcManagerImpl.java
rename to server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
diff --git a/server/src/com/cloud/network/vpc/VpcPrivateGatewayTransactionCallable.java b/server/src/main/java/com/cloud/network/vpc/VpcPrivateGatewayTransactionCallable.java
similarity index 100%
rename from server/src/com/cloud/network/vpc/VpcPrivateGatewayTransactionCallable.java
rename to server/src/main/java/com/cloud/network/vpc/VpcPrivateGatewayTransactionCallable.java
diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/main/java/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
rename to server/src/main/java/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java b/server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManager.java
similarity index 100%
rename from server/src/com/cloud/network/vpn/Site2SiteVpnManager.java
rename to server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManager.java
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
rename to server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
diff --git a/server/src/com/cloud/projects/ProjectManager.java b/server/src/main/java/com/cloud/projects/ProjectManager.java
similarity index 100%
rename from server/src/com/cloud/projects/ProjectManager.java
rename to server/src/main/java/com/cloud/projects/ProjectManager.java
diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/projects/ProjectManagerImpl.java
rename to server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
index a8dd225..48d6518 100644
--- a/server/src/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
@@ -479,6 +479,10 @@
                 throw new InvalidParameterValueException("Unable to find account name=" + newOwnerName + " in domain id=" + project.getDomainId());
             }
             Account currentOwnerAccount = getProjectOwner(projectId);
+            if (currentOwnerAccount == null) {
+                s_logger.error("Unable to find the current owner for the project id=" + projectId);
+                throw new InvalidParameterValueException("Unable to find the current owner for the project id=" + projectId);
+            }
             if (currentOwnerAccount.getId() != futureOwnerAccount.getId()) {
                 ProjectAccountVO futureOwner = _projectAccountDao.findByProjectIdAccountId(projectId, futureOwnerAccount.getAccountId());
                 if (futureOwner == null) {
diff --git a/server/src/com/cloud/resource/DiscovererBase.java b/server/src/main/java/com/cloud/resource/DiscovererBase.java
similarity index 100%
rename from server/src/com/cloud/resource/DiscovererBase.java
rename to server/src/main/java/com/cloud/resource/DiscovererBase.java
diff --git a/server/src/com/cloud/resource/DummyHostDiscoverer.java b/server/src/main/java/com/cloud/resource/DummyHostDiscoverer.java
similarity index 100%
rename from server/src/com/cloud/resource/DummyHostDiscoverer.java
rename to server/src/main/java/com/cloud/resource/DummyHostDiscoverer.java
diff --git a/server/src/com/cloud/resource/DummyHostServerResource.java b/server/src/main/java/com/cloud/resource/DummyHostServerResource.java
similarity index 100%
rename from server/src/com/cloud/resource/DummyHostServerResource.java
rename to server/src/main/java/com/cloud/resource/DummyHostServerResource.java
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
similarity index 98%
rename from server/src/com/cloud/resource/ResourceManagerImpl.java
rename to server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
index ba3c157..61b7ebf 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
@@ -31,10 +31,6 @@
 import javax.naming.ConfigurationException;
 
 import com.cloud.vm.dao.UserVmDetailsDao;
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd;
 import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;
@@ -51,6 +47,9 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
@@ -841,7 +840,6 @@
         }
         // Get storage pool host mappings here because they can be removed as a
         // part of handleDisconnect later
-        // TODO: find out the bad boy, what's a buggy logic!
         final List<StoragePoolHostVO> pools = _storagePoolHostDao.listByHostIdIncludingRemoved(hostId);
 
         final ResourceStateAdapter.DeleteHostAnswer answer =
@@ -1171,15 +1169,15 @@
     }
 
     @Override
-    public Host reconnectHost(final ReconnectHostCmd cmd) {
-        final Long hostId = cmd.getId();
+    public Host reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException {
+        Long hostId = cmd.getId();
 
-        final HostVO host = _hostDao.findById(hostId);
+        HostVO host = _hostDao.findById(hostId);
         if (host == null) {
             throw new InvalidParameterValueException("Host with id " + hostId.toString() + " doesn't exist");
         }
-
-        return _agentMgr.reconnect(hostId) ? host : null;
+        _agentMgr.reconnect(hostId);
+        return host;
     }
 
     @Override
@@ -2375,7 +2373,6 @@
         } else if (event == ResourceState.Event.AdminCancelMaintenance) {
             return doCancelMaintenance(hostId);
         } else if (event == ResourceState.Event.DeleteHost) {
-            /* TODO: Ask alex why we assume the last two parameters are false */
             return doDeleteHost(hostId, false, false);
         } else if (event == ResourceState.Event.Unmanaged) {
             return doUmanageHost(hostId);
@@ -2394,7 +2391,7 @@
         }
 
         if (host.getHypervisorType() == HypervisorType.KVM || host.getHypervisorType() == HypervisorType.LXC) {
-            final MaintainAnswer answer = (MaintainAnswer)_agentMgr.easySend(hostId, new MaintainCommand());
+            _agentMgr.easySend(hostId, new MaintainCommand());
         }
 
         _agentMgr.disconnectWithoutInvestigation(hostId, Event.ShutdownRequested);
@@ -2444,10 +2441,6 @@
         final List<HostVO> hosts = listAllHostsInCluster(command.getClusterId());
         for (final HostVO host : hosts) {
             try {
-                /*
-                 * FIXME: this is a buggy logic, check with alex. Shouldn't
-                 * return if propagation return non null
-                 */
                 final Boolean result = propagateResourceEvent(host.getId(), ResourceState.Event.UpdatePassword);
                 if (result != null) {
                     return result;
@@ -2503,9 +2496,7 @@
             return null;
         }
 
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Propagating agent change request event:" + event.toString() + " to agent:" + agentId);
-        }
+            s_logger.debug("Propagating resource request event:" + event.toString() + " to agent:" + agentId);
         final Command[] cmds = new Command[1];
         cmds[0] = new PropagateResourceEventCommand(agentId, event);
 
@@ -2917,11 +2908,4 @@
             return false;
         }
     }
-
-    @Override
-    public boolean start() {
-        // TODO Auto-generated method stub
-        return super.start();
-    }
-
 }
diff --git a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
similarity index 83%
rename from server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
rename to server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index c3fef57..ca9c7ec 100644
--- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@ -276,10 +276,8 @@
         long numToDecrement = (delta.length == 0) ? 1 : delta[0].longValue();
 
         if (!updateResourceCountForAccount(accountId, type, false, numToDecrement)) {
-            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_UPDATE_RESOURCE_COUNT, 0L, 0L, "Failed to decrement resource count of type " + type +
-                " for account id=" +
-                accountId, "Failed to decrement resource count of type " + type + " for account id=" + accountId +
-                "; use updateResourceCount API to recalculate/fix the problem");
+            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_UPDATE_RESOURCE_COUNT, 0L, 0L, "Failed to decrement resource count of type " + type + " for account id=" + accountId,
+                    "Failed to decrement resource count of type " + type + " for account id=" + accountId + "; use updateResourceCount API to recalculate/fix the problem");
         }
     }
 
@@ -422,13 +420,10 @@
                 long domainResourceLimit = findCorrectResourceLimitForDomain(domain, type);
                 long currentDomainResourceCount = _resourceCountDao.getResourceCount(domainId, ResourceOwnerType.Domain, type);
                 long requestedDomainResourceCount = currentDomainResourceCount + numResources;
-                String messageSuffix = " domain resource limits of Type '" + type + "'" +
-                    " for Domain Id = " + domainId +
-                    " is exceeded: Domain Resource Limit = " + domainResourceLimit +
-                    ", Current Domain Resource Amount = " + currentDomainResourceCount +
-                    ", Requested Resource Amount = " + numResources + ".";
+                String messageSuffix = " domain resource limits of Type '" + type + "'" + " for Domain Id = " + domainId + " is exceeded: Domain Resource Limit = " + domainResourceLimit
+                        + ", Current Domain Resource Amount = " + currentDomainResourceCount + ", Requested Resource Amount = " + numResources + ".";
 
-                if(s_logger.isDebugEnabled()) {
+                if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Checking if" + messageSuffix);
                 }
 
@@ -448,14 +443,11 @@
         long accountResourceLimit = findCorrectResourceLimitForAccount(account, type);
         long currentResourceCount = _resourceCountDao.getResourceCount(account.getId(), ResourceOwnerType.Account, type);
         long requestedResourceCount = currentResourceCount + numResources;
-        String messageSuffix = " amount of resources of Type = '" + type + "' for " +
-            (project == null ? "Account Name = " + account.getAccountName() : "Project Name = " + project.getName()) +
-            " in Domain Id = " + account.getDomainId() +
-            " is exceeded: Account Resource Limit = " + accountResourceLimit +
-            ", Current Account Resource Amount = " + currentResourceCount +
-            ", Requested Resource Amount = " + numResources + ".";
+        String messageSuffix = " amount of resources of Type = '" + type + "' for " + (project == null ? "Account Name = " + account.getAccountName() : "Project Name = " + project.getName())
+                + " in Domain Id = " + account.getDomainId() + " is exceeded: Account Resource Limit = " + accountResourceLimit + ", Current Account Resource Amount = " + currentResourceCount
+                + ", Requested Resource Amount = " + numResources + ".";
 
-        if(s_logger.isDebugEnabled()) {
+        if (s_logger.isDebugEnabled()) {
             s_logger.debug("Checking if" + messageSuffix);
         }
 
@@ -481,6 +473,7 @@
         return _resourceCountDao.lockRows(sc, null, true);
     }
 
+    @Override
     public long findDefaultResourceLimitForDomain(ResourceType resourceType) {
         Long resourceLimit = null;
         resourceLimit = domainResourceLimitMap.get(resourceType);
@@ -518,7 +511,7 @@
                 // check all domains in the account's domain hierarchy
                 checkDomainResourceLimit(account, projectFinal, type, numResources);
             }
-            });
+        });
     }
 
     @Override
@@ -607,11 +600,9 @@
         if (resourceType != null) {
             if (foundLimits.isEmpty()) {
                 if (isAccount) {
-                    limits.add(new ResourceLimitVO(resourceType, findCorrectResourceLimitForAccount(_accountMgr.getAccount(accountId), resourceType), accountId,
-                        ResourceOwnerType.Account));
+                    limits.add(new ResourceLimitVO(resourceType, findCorrectResourceLimitForAccount(_accountMgr.getAccount(accountId), resourceType), accountId, ResourceOwnerType.Account));
                 } else {
-                    limits.add(new ResourceLimitVO(resourceType, findCorrectResourceLimitForDomain(_domainDao.findById(domainId), resourceType), domainId,
-                        ResourceOwnerType.Domain));
+                    limits.add(new ResourceLimitVO(resourceType, findCorrectResourceLimitForDomain(_domainDao.findById(domainId), resourceType), domainId, ResourceOwnerType.Domain));
                 }
             } else {
                 limits.addAll(foundLimits);
@@ -637,8 +628,7 @@
                     if (accountLimitStr.size() < resourceTypes.length) {
                         for (ResourceType rt : resourceTypes) {
                             if (!accountLimitStr.contains(rt.toString()) && rt.supportsOwner(ResourceOwnerType.Account)) {
-                                limits.add(new ResourceLimitVO(rt, findCorrectResourceLimitForAccount(_accountMgr.getAccount(accountId), rt), accountId,
-                                    ResourceOwnerType.Account));
+                                limits.add(new ResourceLimitVO(rt, findCorrectResourceLimitForAccount(_accountMgr.getAccount(accountId), rt), accountId, ResourceOwnerType.Account));
                             }
                         }
                     }
@@ -647,8 +637,7 @@
                     if (domainLimitStr.size() < resourceTypes.length) {
                         for (ResourceType rt : resourceTypes) {
                             if (!domainLimitStr.contains(rt.toString()) && rt.supportsOwner(ResourceOwnerType.Domain)) {
-                                limits.add(new ResourceLimitVO(rt, findCorrectResourceLimitForDomain(_domainDao.findById(domainId), rt), domainId,
-                                    ResourceOwnerType.Domain));
+                                limits.add(new ResourceLimitVO(rt, findCorrectResourceLimitForDomain(_domainDao.findById(domainId), rt), domainId, ResourceOwnerType.Domain));
                             }
                         }
                     }
@@ -704,9 +693,7 @@
                 throw new InvalidParameterValueException("Only " + Resource.RESOURCE_UNLIMITED + " limit is supported for Root Admin accounts");
             }
 
-            if ((caller.getAccountId() == accountId.longValue()) &&
-                (_accountMgr.isDomainAdmin(caller.getId()) ||
-                caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)) {
+            if ((caller.getAccountId() == accountId.longValue()) && (_accountMgr.isDomainAdmin(caller.getId()) || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)) {
                 // If the admin is trying to update his own account, disallow.
                 throw new PermissionDeniedException("Unable to update resource limit for his own account " + accountId + ", permission denied");
             }
@@ -729,8 +716,7 @@
                 throw new PermissionDeniedException("Cannot update resource limit for ROOT domain " + domainId + ", permission denied");
             }
 
-            if ((caller.getDomainId() == domainId.longValue()) && caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN ||
-                caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) {
+            if ((caller.getDomainId() == domainId.longValue()) && caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) {
                 // if the admin is trying to update their own domain, disallow...
                 throw new PermissionDeniedException("Unable to update resource limit for domain " + domainId + ", permission denied");
             }
@@ -739,8 +725,8 @@
                 DomainVO parentDomain = _domainDao.findById(parentDomainId);
                 long parentMaximum = findCorrectResourceLimitForDomain(parentDomain, resourceType);
                 if ((parentMaximum >= 0) && (max.longValue() > parentMaximum)) {
-                    throw new InvalidParameterValueException("Domain " + domain.getName() + "(id: " + parentDomain.getId() + ") has maximum allowed resource limit " +
-                        parentMaximum + " for " + resourceType + ", please specify a value less that or equal to " + parentMaximum);
+                    throw new InvalidParameterValueException("Domain " + domain.getName() + "(id: " + parentDomain.getId() + ") has maximum allowed resource limit " + parentMaximum + " for "
+                            + resourceType + ", please specify a value less that or equal to " + parentMaximum);
                 }
             }
             ownerType = ResourceOwnerType.Domain;
@@ -762,8 +748,7 @@
     }
 
     @Override
-    public List<ResourceCountVO> recalculateResourceCount(Long accountId, Long domainId, Integer typeId) throws InvalidParameterValueException, CloudRuntimeException,
-        PermissionDeniedException {
+    public List<ResourceCountVO> recalculateResourceCount(Long accountId, Long domainId, Integer typeId) throws InvalidParameterValueException, CloudRuntimeException, PermissionDeniedException {
         Account callerAccount = CallContext.current().getCallingAccount();
         long count = 0;
         List<ResourceCountVO> counts = new ArrayList<ResourceCountVO>();
@@ -814,25 +799,24 @@
 
     @DB
     protected boolean updateResourceCountForAccount(final long accountId, final ResourceType type, final boolean increment, final long delta) {
-        if(s_logger.isDebugEnabled()) {
-            s_logger.debug("Updating resource Type = " + type + " count for Account = " + accountId +
-                           " Operation = " + (increment ? "increasing" : "decreasing") + " Amount = " + delta);
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Updating resource Type = " + type + " count for Account = " + accountId + " Operation = " + (increment ? "increasing" : "decreasing") + " Amount = " + delta);
         }
         try {
             return Transaction.execute(new TransactionCallback<Boolean>() {
-                    @Override
-                    public Boolean doInTransaction(TransactionStatus status) {
-                        boolean result = true;
-                        List<ResourceCountVO> rowsToUpdate = lockAccountAndOwnerDomainRows(accountId, type);
-                        for (ResourceCountVO rowToUpdate : rowsToUpdate) {
-                            if (!_resourceCountDao.updateById(rowToUpdate.getId(), increment, delta)) {
-                                s_logger.trace("Unable to update resource count for the row " + rowToUpdate);
-                                result = false;
-                            }
+                @Override
+                public Boolean doInTransaction(TransactionStatus status) {
+                    boolean result = true;
+                    List<ResourceCountVO> rowsToUpdate = lockAccountAndOwnerDomainRows(accountId, type);
+                    for (ResourceCountVO rowToUpdate : rowsToUpdate) {
+                        if (!_resourceCountDao.updateById(rowToUpdate.getId(), increment, delta)) {
+                            s_logger.trace("Unable to update resource count for the row " + rowToUpdate);
+                            result = false;
                         }
-                        return result;
                     }
-                });
+                    return result;
+                }
+            });
         } catch (Exception ex) {
             s_logger.error("Failed to update resource count for account id=" + accountId);
             return false;
@@ -842,102 +826,101 @@
     @DB
     protected long recalculateDomainResourceCount(final long domainId, final ResourceType type) {
         return Transaction.execute(new TransactionCallback<Long>() {
-                @Override
-                public Long doInTransaction(TransactionStatus status) {
-                    long newResourceCount = 0;
-                    lockDomainRows(domainId, type);
-                    ResourceCountVO domainRC = _resourceCountDao.findByOwnerAndType(domainId, ResourceOwnerType.Domain, type);
-                    long oldResourceCount = domainRC.getCount();
+            @Override
+            public Long doInTransaction(TransactionStatus status) {
+                long newResourceCount = 0;
+                lockDomainRows(domainId, type);
+                ResourceCountVO domainRC = _resourceCountDao.findByOwnerAndType(domainId, ResourceOwnerType.Domain, type);
+                long oldResourceCount = domainRC.getCount();
 
-                    List<DomainVO> domainChildren = _domainDao.findImmediateChildrenForParent(domainId);
-                    // for each child domain update the resource count
-                    if (type.supportsOwner(ResourceOwnerType.Domain)) {
+                List<DomainVO> domainChildren = _domainDao.findImmediateChildrenForParent(domainId);
+                // for each child domain update the resource count
+                if (type.supportsOwner(ResourceOwnerType.Domain)) {
 
-                        // calculate project count here
-                        if (type == ResourceType.project) {
-                            newResourceCount += _projectDao.countProjectsForDomain(domainId);
-                        }
-
-                        for (DomainVO childDomain : domainChildren) {
-                            long childDomainResourceCount = recalculateDomainResourceCount(childDomain.getId(), type);
-                            newResourceCount += childDomainResourceCount; // add the child domain count to parent domain count
-                        }
+                    // calculate project count here
+                    if (type == ResourceType.project) {
+                        newResourceCount += _projectDao.countProjectsForDomain(domainId);
                     }
 
-                    if (type.supportsOwner(ResourceOwnerType.Account)) {
-                        List<AccountVO> accounts = _accountDao.findActiveAccountsForDomain(domainId);
-                        for (AccountVO account : accounts) {
-                            long accountResourceCount = recalculateAccountResourceCount(account.getId(), type);
-                            newResourceCount += accountResourceCount; // add account's resource count to parent domain count
-                        }
+                    for (DomainVO childDomain : domainChildren) {
+                        long childDomainResourceCount = recalculateDomainResourceCount(childDomain.getId(), type);
+                        newResourceCount += childDomainResourceCount; // add the child domain count to parent domain count
                     }
-                    _resourceCountDao.setResourceCount(domainId, ResourceOwnerType.Domain, type, newResourceCount);
-
-                    if (oldResourceCount != newResourceCount) {
-                        s_logger.warn("Discrepency in the resource count has been detected " + "(original count = " + oldResourceCount +
-                                      " correct count = " + newResourceCount + ") for Type = " + type +
-                                      " for Domain ID = " + domainId + " is fixed during resource count recalculation.");
-                    }
-
-                    return newResourceCount;
                 }
-            });
+
+                if (type.supportsOwner(ResourceOwnerType.Account)) {
+                    List<AccountVO> accounts = _accountDao.findActiveAccountsForDomain(domainId);
+                    for (AccountVO account : accounts) {
+                        long accountResourceCount = recalculateAccountResourceCount(account.getId(), type);
+                        newResourceCount += accountResourceCount; // add account's resource count to parent domain count
+                    }
+                }
+                _resourceCountDao.setResourceCount(domainId, ResourceOwnerType.Domain, type, newResourceCount);
+
+                if (oldResourceCount != newResourceCount) {
+                    s_logger.warn("Discrepency in the resource count has been detected " + "(original count = " + oldResourceCount + " correct count = " + newResourceCount + ") for Type = " + type
+                            + " for Domain ID = " + domainId + " is fixed during resource count recalculation.");
+                }
+
+                return newResourceCount;
+            }
+        });
     }
 
     @DB
     protected long recalculateAccountResourceCount(final long accountId, final ResourceType type) {
         Long newCount = Transaction.execute(new TransactionCallback<Long>() {
-                @Override
-                public Long doInTransaction(TransactionStatus status) {
-                    Long newCount = null;
-                    lockAccountAndOwnerDomainRows(accountId, type);
-                    ResourceCountVO accountRC = _resourceCountDao.findByOwnerAndType(accountId, ResourceOwnerType.Account, type);
-                    long oldCount = 0;
-                    if (accountRC != null)
-                        oldCount = accountRC.getCount();
-
-                    if (type == Resource.ResourceType.user_vm) {
-                        newCount = _userVmDao.countAllocatedVMsForAccount(accountId);
-                    } else if (type == Resource.ResourceType.volume) {
-                        newCount = _volumeDao.countAllocatedVolumesForAccount(accountId);
-                        long virtualRouterCount = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId).size();
-                        newCount = newCount - virtualRouterCount; // don't count the volumes of virtual router
-                    } else if (type == Resource.ResourceType.snapshot) {
-                        newCount = _snapshotDao.countSnapshotsForAccount(accountId);
-                    } else if (type == Resource.ResourceType.public_ip) {
-                        newCount = calculatePublicIpForAccount(accountId);
-                    } else if (type == Resource.ResourceType.template) {
-                        newCount = _vmTemplateDao.countTemplatesForAccount(accountId);
-                    } else if (type == Resource.ResourceType.project) {
-                        newCount = _projectAccountDao.countByAccountIdAndRole(accountId, Role.Admin);
-                    } else if (type == Resource.ResourceType.network) {
-                        newCount = _networkDao.countNetworksUserCanCreate(accountId);
-                    } else if (type == Resource.ResourceType.vpc) {
-                        newCount = _vpcDao.countByAccountId(accountId);
-                    } else if (type == Resource.ResourceType.cpu) {
-                        newCount = countCpusForAccount(accountId);
-                    } else if (type == Resource.ResourceType.memory) {
-                        newCount = calculateMemoryForAccount(accountId);
-                    } else if (type == Resource.ResourceType.primary_storage) {
-                        List<Long> virtualRouters = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId);
-                        newCount = _volumeDao.primaryStorageUsedForAccount(accountId, virtualRouters);
-                    } else if (type == Resource.ResourceType.secondary_storage) {
-                        newCount = calculateSecondaryStorageForAccount(accountId);
-                    } else {
-                        throw new InvalidParameterValueException("Unsupported resource type " + type);
-                    }
-                    _resourceCountDao.setResourceCount(accountId, ResourceOwnerType.Account, type, (newCount == null) ? 0 : newCount.longValue());
-
-                    // No need to log message for primary and secondary storage because both are recalculating the
-                    // resource count which will not lead to any discrepancy.
-                    if (!Long.valueOf(oldCount).equals(newCount) &&
-                        (type != Resource.ResourceType.primary_storage && type != Resource.ResourceType.secondary_storage)) {
-                        s_logger.warn("Discrepency in the resource count " + "(original count=" + oldCount + " correct count = " + newCount + ") for type " + type +
-                                      " for account ID " + accountId + " is fixed during resource count recalculation.");
-                    }
-                    return newCount;
+            @Override
+            public Long doInTransaction(TransactionStatus status) {
+                Long newCount = null;
+                lockAccountAndOwnerDomainRows(accountId, type);
+                ResourceCountVO accountRC = _resourceCountDao.findByOwnerAndType(accountId, ResourceOwnerType.Account, type);
+                long oldCount = 0;
+                if (accountRC != null) {
+                    oldCount = accountRC.getCount();
                 }
-            });
+
+                if (type == Resource.ResourceType.user_vm) {
+                    newCount = _userVmDao.countAllocatedVMsForAccount(accountId);
+                } else if (type == Resource.ResourceType.volume) {
+                    newCount = _volumeDao.countAllocatedVolumesForAccount(accountId);
+                    long virtualRouterCount = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId).size();
+                    newCount = newCount - virtualRouterCount; // don't count the volumes of virtual router
+                } else if (type == Resource.ResourceType.snapshot) {
+                    newCount = _snapshotDao.countSnapshotsForAccount(accountId);
+                } else if (type == Resource.ResourceType.public_ip) {
+                    newCount = calculatePublicIpForAccount(accountId);
+                } else if (type == Resource.ResourceType.template) {
+                    newCount = _vmTemplateDao.countTemplatesForAccount(accountId);
+                } else if (type == Resource.ResourceType.project) {
+                    newCount = _projectAccountDao.countByAccountIdAndRole(accountId, Role.Admin);
+                } else if (type == Resource.ResourceType.network) {
+                    newCount = _networkDao.countNetworksUserCanCreate(accountId);
+                } else if (type == Resource.ResourceType.vpc) {
+                    newCount = _vpcDao.countByAccountId(accountId);
+                } else if (type == Resource.ResourceType.cpu) {
+                    newCount = countCpusForAccount(accountId);
+                } else if (type == Resource.ResourceType.memory) {
+                    newCount = calculateMemoryForAccount(accountId);
+                } else if (type == Resource.ResourceType.primary_storage) {
+                    List<Long> virtualRouters = _vmDao.findIdsOfAllocatedVirtualRoutersForAccount(accountId);
+                    newCount = _volumeDao.primaryStorageUsedForAccount(accountId, virtualRouters);
+                } else if (type == Resource.ResourceType.secondary_storage) {
+                    newCount = calculateSecondaryStorageForAccount(accountId);
+                } else {
+                    throw new InvalidParameterValueException("Unsupported resource type " + type);
+                }
+                _resourceCountDao.setResourceCount(accountId, ResourceOwnerType.Account, type, (newCount == null) ? 0 : newCount.longValue());
+
+                // No need to log message for primary and secondary storage because both are recalculating the
+                // resource count which will not lead to any discrepancy.
+                if (!Long.valueOf(oldCount).equals(newCount) && (type != Resource.ResourceType.primary_storage && type != Resource.ResourceType.secondary_storage)) {
+                    s_logger.warn("Discrepency in the resource count " + "(original count=" + oldCount + " correct count = " + newCount + ") for type " + type + " for account ID " + accountId
+                            + " is fixed during resource count recalculation.");
+                }
+                return newCount;
+            }
+        });
 
         return (newCount == null) ? 0 : newCount.longValue();
     }
@@ -997,7 +980,7 @@
         return _resourceCountDao.getResourceCount(account.getId(), ResourceOwnerType.Account, type);
     }
 
-    private boolean isDisplayFlagOn(Boolean displayResource){
+    private boolean isDisplayFlagOn(Boolean displayResource) {
 
         // 1. If its null assume displayResource = 1
         // 2. If its not null then send true if displayResource = 1
diff --git a/server/src/com/cloud/server/ConfigurationServer.java b/server/src/main/java/com/cloud/server/ConfigurationServer.java
similarity index 100%
rename from server/src/com/cloud/server/ConfigurationServer.java
rename to server/src/main/java/com/cloud/server/ConfigurationServer.java
diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
similarity index 99%
rename from server/src/com/cloud/server/ConfigurationServerImpl.java
rename to server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
index eb0dc90..d6f9952 100644
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
@@ -715,10 +715,10 @@
                     kStream.write(key.getBytes());
                 }
             } catch (FileNotFoundException e) {
-                s_logger.warn("Failed to write  key to " + keyfile.getAbsolutePath());
+                s_logger.warn("Failed to write  key to " + keyfile.getAbsolutePath(), e);
                 throw new CloudRuntimeException("Failed to update keypairs on disk: cannot find  key file " + keyPath);
             } catch (IOException e) {
-                s_logger.warn("Failed to write  key to " + keyfile.getAbsolutePath());
+                s_logger.warn("Failed to write  key to " + keyfile.getAbsolutePath(), e);
                 throw new CloudRuntimeException("Failed to update keypairs on disk: cannot write to  key file " + keyPath);
             }
         }
diff --git a/server/src/com/cloud/server/Criteria.java b/server/src/main/java/com/cloud/server/Criteria.java
similarity index 100%
rename from server/src/com/cloud/server/Criteria.java
rename to server/src/main/java/com/cloud/server/Criteria.java
diff --git a/server/src/com/cloud/server/LockMasterListener.java b/server/src/main/java/com/cloud/server/LockMasterListener.java
similarity index 100%
rename from server/src/com/cloud/server/LockMasterListener.java
rename to server/src/main/java/com/cloud/server/LockMasterListener.java
diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/main/java/com/cloud/server/ManagementServer.java
similarity index 100%
rename from server/src/com/cloud/server/ManagementServer.java
rename to server/src/main/java/com/cloud/server/ManagementServer.java
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
similarity index 95%
rename from server/src/com/cloud/server/ManagementServerImpl.java
rename to server/src/main/java/com/cloud/server/ManagementServerImpl.java
index 56c912d..1ccc737 100644
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -140,15 +140,15 @@
 import org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd;
 import org.apache.cloudstack.api.command.admin.offering.UpdateDiskOfferingCmd;
 import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd;
+import org.apache.cloudstack.api.command.admin.outofbandmanagement.ChangeOutOfBandManagementPasswordCmd;
+import org.apache.cloudstack.api.command.admin.outofbandmanagement.ConfigureOutOfBandManagementCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForClusterCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForHostCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForZoneCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForClusterCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForHostCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForZoneCmd;
-import org.apache.cloudstack.api.command.admin.outofbandmanagement.ConfigureOutOfBandManagementCmd;
 import org.apache.cloudstack.api.command.admin.outofbandmanagement.IssueOutOfBandManagementPowerActionCmd;
-import org.apache.cloudstack.api.command.admin.outofbandmanagement.ChangeOutOfBandManagementPasswordCmd;
 import org.apache.cloudstack.api.command.admin.pod.CreatePodCmd;
 import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
 import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;
@@ -382,6 +382,7 @@
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
+import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd;
 import org.apache.cloudstack.api.command.user.network.ReplaceNetworkACLListCmd;
 import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
 import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
@@ -417,6 +418,7 @@
 import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;
 import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd;
 import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupIngressCmd;
+import org.apache.cloudstack.api.command.user.snapshot.ArchiveSnapshotCmd;
 import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;
 import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotFromVMSnapshotCmd;
 import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd;
@@ -519,7 +521,6 @@
 import org.apache.cloudstack.config.Configuration;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.framework.config.ConfigDepot;
 import org.apache.cloudstack.framework.config.ConfigKey;
@@ -535,6 +536,8 @@
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
@@ -695,10 +698,8 @@
 public class ManagementServerImpl extends ManagerBase implements ManagementServer, Configurable {
     public static final Logger s_logger = Logger.getLogger(ManagementServerImpl.class.getName());
 
-    static final ConfigKey<Integer> vmPasswordLength = new ConfigKey<Integer>("Advanced", Integer.class, "vm.password.length", "6",
-                                                                                      "Specifies the length of a randomly generated password", false);
-    static final ConfigKey<Integer> sshKeyLength = new ConfigKey<Integer>("Advanced", Integer.class, "ssh.key.length",
-            "2048", "Specifies custom SSH key length (bit)", true, ConfigKey.Scope.Global);
+    static final ConfigKey<Integer> vmPasswordLength = new ConfigKey<Integer>("Advanced", Integer.class, "vm.password.length", "6", "Specifies the length of a randomly generated password", false);
+    static final ConfigKey<Integer> sshKeyLength = new ConfigKey<Integer>("Advanced", Integer.class, "ssh.key.length", "2048", "Specifies custom SSH key length (bit)", true, ConfigKey.Scope.Global);
     @Inject
     public AccountManager _accountMgr;
     @Inject
@@ -760,8 +761,6 @@
     @Inject
     private StorageManager _storageMgr;
     @Inject
-    private VolumeOrchestrationService _volumeMgr;
-    @Inject
     private VirtualMachineManager _itMgr;
     @Inject
     private HostPodDao _hostPodDao;
@@ -794,8 +793,6 @@
     @Inject
     private HighAvailabilityManager _haMgr;
     @Inject
-    private DataStoreManager dataStoreMgr;
-    @Inject
     private HostTagsDao _hostTagsDao;
     @Inject
     private ConfigDepot _configDepot;
@@ -809,12 +806,12 @@
     private DeploymentPlanningManager _dpMgr;
     @Inject
     private GuestOsDetailsDao _guestOsDetailsDao;
+    @Inject
+    private KeystoreManager _ksMgr;
 
     private LockMasterListener _lockMasterListener;
     private final ScheduledExecutorService _eventExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("EventChecker"));
     private final ScheduledExecutorService _alertExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AlertChecker"));
-    @Inject
-    private KeystoreManager _ksMgr;
 
     private Map<String, String> _configs;
 
@@ -1120,16 +1117,14 @@
         final Object resourceState = cmd.getResourceState();
         final Object haHosts = cmd.getHaHost();
 
-        final Pair<List<HostVO>, Integer> result = searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState,
-                haHosts, null, null);
+        final Pair<List<HostVO>, Integer> result = searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, haHosts, null,
+                null);
         return new Pair<List<? extends Host>, Integer>(result.first(), result.second());
     }
 
     @Override
-    public Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>>
-                            listHostsForMigrationOfVM(final Long vmId,
-                                                      final Long startIndex,
-                                                      final Long pageSize, final String keyword) {
+    public Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>> listHostsForMigrationOfVM(final Long vmId, final Long startIndex, final Long pageSize,
+            final String keyword) {
         final Account caller = getCaller();
         if (!_accountMgr.isRootAdmin(caller.getId())) {
             if (s_logger.isDebugEnabled()) {
@@ -1153,11 +1148,11 @@
             throw ex;
         }
 
-        if(_serviceOfferingDetailsDao.findDetail(vm.getServiceOfferingId(), GPU.Keys.pciDevice.toString()) != null) {
-            s_logger.info(" Live Migration of GPU enabled VM : " + vm.getInstanceName()+ " is not supported");
+        if (_serviceOfferingDetailsDao.findDetail(vm.getServiceOfferingId(), GPU.Keys.pciDevice.toString()) != null) {
+            s_logger.info(" Live Migration of GPU enabled VM : " + vm.getInstanceName() + " is not supported");
             // Return empty list.
-            return new Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>>(new Pair<List <? extends Host>,
-                    Integer>(new ArrayList<HostVO>(), new Integer(0)), new ArrayList<Host>(), new HashMap<Host, Boolean>());
+            return new Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>>(new Pair<List<? extends Host>, Integer>(new ArrayList<HostVO>(), new Integer(0)),
+                    new ArrayList<Host>(), new HashMap<Host, Boolean>());
         }
 
         if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM)
@@ -1218,20 +1213,20 @@
         final Map<Host, Boolean> requiresStorageMotion = new HashMap<Host, Boolean>();
         DataCenterDeployment plan = null;
         if (canMigrateWithStorage) {
-            allHostsPair = searchForServers(startIndex, pageSize, null, hostType, null, srcHost.getDataCenterId(), null, null, null, keyword, null, null,
-                    srcHost.getHypervisorType(), srcHost.getHypervisorVersion());
+            allHostsPair = searchForServers(startIndex, pageSize, null, hostType, null, srcHost.getDataCenterId(), null, null, null, keyword, null, null, srcHost.getHypervisorType(),
+                    srcHost.getHypervisorVersion());
             allHosts = allHostsPair.first();
             allHosts.remove(srcHost);
 
             for (final VolumeVO volume : volumes) {
-                final StoragePool storagePool = _poolDao.findById(volume.getPoolId());
-                final Long volClusterId = storagePool.getClusterId();
+                StoragePool storagePool = _poolDao.findById(volume.getPoolId());
+                Long volClusterId = storagePool.getClusterId();
 
-                for (final Iterator<HostVO> iterator = allHosts.iterator(); iterator.hasNext();) {
+                for (Iterator<HostVO> iterator = allHosts.iterator(); iterator.hasNext();) {
                     final Host host = iterator.next();
 
                     if (volClusterId != null) {
-                        if (!host.getClusterId().equals(volClusterId) || usesLocal) {
+                        if (storagePool.isLocal() || !host.getClusterId().equals(volClusterId) || usesLocal) {
                             if (storagePool.isManaged()) {
                                 // At the time being, we do not support storage migration of a volume from managed storage unless the managed storage
                                 // is at the zone level and the source and target storage pool is the same.
@@ -1239,8 +1234,7 @@
                                 // because we need to create a new target volume and copy the contents of the source volume into it before deleting the
                                 // source volume.
                                 iterator.remove();
-                            }
-                            else {
+                            } else {
                                 if (hasSuitablePoolsForVolume(volume, host, vmProfile)) {
                                     requiresStorageMotion.put(host, true);
                                 } else {
@@ -1248,8 +1242,7 @@
                                 }
                             }
                         }
-                    }
-                    else {
+                    } else {
                         if (storagePool.isManaged()) {
                             if (srcHost.getClusterId() != host.getClusterId()) {
                                 // If the volume's storage pool is managed and at the zone level, then we still have to perform a storage migration
@@ -1346,8 +1339,8 @@
         }
 
         // Volume must be attached to an instance for live migration.
-        final List<StoragePool> allPools = new ArrayList<StoragePool>();
-        final List<StoragePool> suitablePools = new ArrayList<StoragePool>();
+        List<? extends StoragePool> allPools = new ArrayList<StoragePool>();
+        List<? extends StoragePool> suitablePools = new ArrayList<StoragePool>();
 
         // Volume must be in Ready state to be migrated.
         if (!Volume.State.Ready.equals(volume.getState())) {
@@ -1355,11 +1348,6 @@
             return new Pair<List<? extends StoragePool>, List<? extends StoragePool>>(allPools, suitablePools);
         }
 
-        if (!_volumeMgr.volumeOnSharedStoragePool(volume)) {
-            s_logger.info("Volume " + volume + " is on local storage. It cannot be migrated to another pool.");
-            return new Pair<List<? extends StoragePool>, List<? extends StoragePool>>(allPools, suitablePools);
-        }
-
         final Long instanceId = volume.getInstanceId();
         VMInstanceVO vm = null;
         if (instanceId != null) {
@@ -1397,57 +1385,78 @@
             }
         }
 
-        // Source pool of the volume.
-        final StoragePoolVO srcVolumePool = _poolDao.findById(volume.getPoolId());
-        // Get all the pools available. Only shared pools are considered because only a volume on a shared pools
-        // can be live migrated while the virtual machine stays on the same host.
-
-        List<StoragePoolVO> storagePools;
-
-        if (srcVolumePool.getClusterId() != null) {
-            storagePools = _poolDao.findPoolsByTags(volume.getDataCenterId(), srcVolumePool.getPodId(), srcVolumePool.getClusterId(), null);
-        }
-        else {
-            storagePools = new ArrayList<>();
-        }
-
-        List<StoragePoolVO> zoneWideStoragePools = _poolDao.findZoneWideStoragePoolsByTags(volume.getDataCenterId(), null);
-
-        storagePools.addAll(zoneWideStoragePools);
-
-        storagePools.remove(srcVolumePool);
-        for (final StoragePoolVO pool : storagePools) {
-            if (pool.isShared()) {
-                allPools.add((StoragePool)dataStoreMgr.getPrimaryDataStore(pool.getId()));
-            }
-        }
-
-        // Get all the suitable pools.
-        // Exclude the current pool from the list of pools to which the volume can be migrated.
-        final ExcludeList avoid = new ExcludeList();
-        avoid.addPool(srcVolumePool.getId());
-
-        // Volume stays in the same cluster after migration.
-        final DataCenterDeployment plan = new DataCenterDeployment(volume.getDataCenterId(), srcVolumePool.getPodId(), srcVolumePool.getClusterId(), null, null, null);
-        final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm);
-
-        final DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId());
-        final DiskProfile diskProfile = new DiskProfile(volume, diskOffering, profile.getHypervisorType());
-
-        // Call the storage pool allocator to find the list of storage pools.
-        for (final StoragePoolAllocator allocator : _storagePoolAllocators) {
-            final List<StoragePool> pools = allocator.allocateToPool(diskProfile, profile, plan, avoid, StoragePoolAllocator.RETURN_UPTO_ALL);
-            if (pools != null && !pools.isEmpty()) {
-                suitablePools.addAll(pools);
-                break;
-            }
-        }
+        StoragePool srcVolumePool = _poolDao.findById(volume.getPoolId());
+        allPools = getAllStoragePoolCompatileWithVolumeSourceStoragePool(srcVolumePool);
+        allPools.remove(srcVolumePool);
+        suitablePools = findAllSuitableStoragePoolsForVm(volume, vm, srcVolumePool);
 
         return new Pair<List<? extends StoragePool>, List<? extends StoragePool>>(allPools, suitablePools);
     }
 
-    private Pair<List<HostVO>, Integer> searchForServers(final Long startIndex, final Long pageSize, final Object name, final Object type, final Object state, final Object zone, final Object pod, final Object cluster,
-            final Object id, final Object keyword, final Object resourceState, final Object haHosts, final Object hypervisorType, final Object hypervisorVersion) {
+    /**
+     * This method looks for all storage pools that are compatible with the given volume.
+     * <ul>
+     *  <li>We will look for storage systems that are zone wide.</li>
+     *  <li>We also all storage available filtering by data center, pod and cluster as the current storage pool used by the given volume.</li>
+     * </ul>
+     */
+    private List<? extends StoragePool> getAllStoragePoolCompatileWithVolumeSourceStoragePool(StoragePool srcVolumePool) {
+        List<StoragePoolVO> storagePools = new ArrayList<>();
+        List<StoragePoolVO> zoneWideStoragePools = _poolDao.findZoneWideStoragePoolsByTags(srcVolumePool.getDataCenterId(), null);
+        if (CollectionUtils.isNotEmpty(zoneWideStoragePools)) {
+            storagePools.addAll(zoneWideStoragePools);
+        }
+        List<StoragePoolVO> clusterAndLocalStoragePools = _poolDao.listBy(srcVolumePool.getDataCenterId(), srcVolumePool.getPodId(), srcVolumePool.getClusterId(), null);
+        if (CollectionUtils.isNotEmpty(clusterAndLocalStoragePools)) {
+            storagePools.addAll(clusterAndLocalStoragePools);
+        }
+        return storagePools;
+    }
+
+    /**
+     *  Looks for all suitable storage pools to allocate the given volume.
+     *  We take into account the service offering of the VM and volume to find suitable storage pools. It is also excluded from the search the current storage pool used by the volume.
+     *  We use {@link StoragePoolAllocator} to look for possible storage pools to allocate the given volume. We will look for possible local storage poosl even if the volume is using a shared storage disk offering.
+     *
+     *  Side note: the idea behind this method is to provide power for administrators of manually overriding deployments defined by CloudStack.
+     */
+    private List<StoragePool> findAllSuitableStoragePoolsForVm(final VolumeVO volume, VMInstanceVO vm, StoragePool srcVolumePool) {
+        List<StoragePool> suitablePools = new ArrayList<>();
+
+        HostVO host = _hostDao.findById(vm.getHostId());
+        if (host == null) {
+            host = _hostDao.findById(vm.getLastHostId());
+        }
+
+        ExcludeList avoid = new ExcludeList();
+        avoid.addPool(srcVolumePool.getId());
+
+        DataCenterDeployment plan = new DataCenterDeployment(volume.getDataCenterId(), srcVolumePool.getPodId(), srcVolumePool.getClusterId(), null, null, null);
+        VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm);
+
+        DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId());
+        //This is an override mechanism so we can list the possible local storage pools that a volume in a shared pool might be able to be migrated to
+        DiskProfile diskProfile = new DiskProfile(volume, diskOffering, profile.getHypervisorType());
+        diskProfile.setUseLocalStorage(true);
+
+        for (StoragePoolAllocator allocator : _storagePoolAllocators) {
+            List<StoragePool> pools = allocator.allocateToPool(diskProfile, profile, plan, avoid, StoragePoolAllocator.RETURN_UPTO_ALL);
+            if (CollectionUtils.isEmpty(pools)) {
+                continue;
+            }
+            for (StoragePool pool : pools) {
+                boolean isLocalPoolSameHostAsSourcePool = pool.isLocal() && StringUtils.equals(host.getPrivateIpAddress(), pool.getHostAddress());
+                if (isLocalPoolSameHostAsSourcePool || pool.isShared()) {
+                    suitablePools.add(pool);
+                }
+
+            }
+        }
+        return suitablePools;
+    }
+
+    private Pair<List<HostVO>, Integer> searchForServers(final Long startIndex, final Long pageSize, final Object name, final Object type, final Object state, final Object zone, final Object pod,
+            final Object cluster, final Object id, final Object keyword, final Object resourceState, final Object haHosts, final Object hypervisorType, final Object hypervisorVersion) {
         final Filter searchFilter = new Filter(HostVO.class, "id", Boolean.TRUE, startIndex, pageSize);
 
         final SearchBuilder<HostVO> sb = _hostDao.createSearchBuilder();
@@ -1580,7 +1589,7 @@
         final Long domainId = cmd.getDomainId();
         Long accountId = null;
         final Long networkId = cmd.getNetworkId();
-        final Boolean forVirtual = cmd.getForVirtualNetwork();
+        final Boolean forVirtual = cmd.isForVirtualNetwork();
         String vlanType = null;
         final Long projectId = cmd.getProjectId();
         final Long physicalNetworkId = cmd.getPhysicalNetworkId();
@@ -1815,8 +1824,8 @@
         final Boolean forVirtualNetwork = cmd.isForVirtualNetwork();
         final Boolean forLoadBalancing = cmd.isForLoadBalancing();
         final Long ipId = cmd.getId();
-        final Boolean sourceNat = cmd.getIsSourceNat();
-        final Boolean staticNat = cmd.getIsStaticNat();
+        final Boolean sourceNat = cmd.isSourceNat();
+        final Boolean staticNat = cmd.isStaticNat();
         final Long vpcId = cmd.getVpcId();
         final Boolean forDisplay = cmd.getDisplay();
         final Map<String, String> tags = cmd.getTags();
@@ -1840,10 +1849,9 @@
         if (isAllocated) {
             final Account caller = getCaller();
 
-            final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
-                    cmd.getDomainId(), cmd.isRecursive(), null);
-            _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), permittedAccounts,
-                    domainIdRecursiveListProject, cmd.listAll(), false);
+            final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(),
+                    null);
+            _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
             domainId = domainIdRecursiveListProject.first();
             isRecursive = domainIdRecursiveListProject.second();
             listProjectResourcesCriteria = domainIdRecursiveListProject.third();
@@ -1888,10 +1896,8 @@
         vlanSearch.and("vlanType", vlanSearch.entity().getVlanType(), SearchCriteria.Op.EQ);
         sb.join("vlanSearch", vlanSearch, sb.entity().getVlanId(), vlanSearch.entity().getId(), JoinBuilder.JoinType.INNER);
 
-        boolean allocatedOnly = false;
         if (isAllocated != null && isAllocated == true) {
             sb.and("allocated", sb.entity().getAllocatedTime(), SearchCriteria.Op.NNULL);
-            allocatedOnly = true;
         }
 
         VlanType vlanType = null;
@@ -2089,8 +2095,7 @@
         //by this point either osTypeId or osStdType is non-empty. Find by either of them. ID takes preference if both are specified
         if (osTypeId != null) {
             guestOs = ApiDBUtils.findGuestOSById(osTypeId);
-        }
-        else if (osStdName != null) {
+        } else if (osStdName != null) {
             guestOs = ApiDBUtils.findGuestOSByDisplayName(osStdName);
         }
 
@@ -2101,8 +2106,8 @@
         final GuestOSHypervisorVO duplicate = _guestOSHypervisorDao.findByOsIdAndHypervisorAndUserDefined(guestOs.getId(), hypervisorType.toString(), hypervisorVersion, true);
 
         if (duplicate != null) {
-            throw new InvalidParameterValueException("Mapping from hypervisor : " + hypervisorType.toString() + ", version : " + hypervisorVersion + " and guest OS : "
-                    + guestOs.getDisplayName() + " already exists!");
+            throw new InvalidParameterValueException(
+                    "Mapping from hypervisor : " + hypervisorType.toString() + ", version : " + hypervisorVersion + " and guest OS : " + guestOs.getDisplayName() + " already exists!");
         }
         final GuestOSHypervisorVO guestOsMapping = new GuestOSHypervisorVO();
         guestOsMapping.setGuestOsId(guestOs.getId());
@@ -2146,10 +2151,10 @@
         guestOsVo.setIsUserDefined(true);
         final GuestOS guestOsPersisted = _guestOSDao.persist(guestOsVo);
 
-        if(cmd.getDetails() != null && !cmd.getDetails().isEmpty()){
+        if (cmd.getDetails() != null && !cmd.getDetails().isEmpty()) {
             Map<String, String> detailsMap = cmd.getDetails();
-            for(Object key: detailsMap.keySet()){
-                _guestOsDetailsDao.addDetail(guestOsPersisted.getId(),(String) key,detailsMap.get((String) key), false);
+            for (Object key : detailsMap.keySet()) {
+                _guestOsDetailsDao.addDetail(guestOsPersisted.getId(), (String)key, detailsMap.get(key), false);
             }
         }
 
@@ -2179,10 +2184,10 @@
             throw new InvalidParameterValueException("Unable to modify system defined guest OS");
         }
 
-        if(cmd.getDetails() != null && !cmd.getDetails().isEmpty()){
+        if (cmd.getDetails() != null && !cmd.getDetails().isEmpty()) {
             Map<String, String> detailsMap = cmd.getDetails();
-            for(Object key: detailsMap.keySet()){
-                _guestOsDetailsDao.addDetail(id,(String) key,detailsMap.get((String) key), false);
+            for (Object key : detailsMap.keySet()) {
+                _guestOsDetailsDao.addDetail(id, (String)key, detailsMap.get(key), false);
             }
         }
 
@@ -2193,7 +2198,7 @@
 
         //Check if another Guest OS by same name exists
         final GuestOS duplicate = ApiDBUtils.findGuestOSByDisplayName(displayName);
-        if(duplicate != null) {
+        if (duplicate != null) {
             throw new InvalidParameterValueException("The specified Guest OS name : " + displayName + " already exists. Please specify a unique guest OS name");
         }
         final GuestOSVO guestOs = _guestOSDao.createForUpdate(id);
@@ -2329,26 +2334,6 @@
         return new Pair<String, Integer>(null, -1);
     }
 
-    private String getUpdatedDomainPath(final String oldPath, final String newName) {
-        final String[] tokenizedPath = oldPath.split("/");
-        tokenizedPath[tokenizedPath.length - 1] = newName;
-        final StringBuilder finalPath = new StringBuilder();
-        for (final String token : tokenizedPath) {
-            finalPath.append(token);
-            finalPath.append("/");
-        }
-        return finalPath.toString();
-    }
-
-    private void updateDomainChildren(final DomainVO domain, final String updatedDomainPrefix) {
-        final List<DomainVO> domainChildren = _domainDao.findAllChildren(domain.getPath(), domain.getId());
-        // for each child, update the path
-        for (final DomainVO dom : domainChildren) {
-            dom.setPath(dom.getPath().replaceFirst(domain.getPath(), updatedDomainPrefix));
-            _domainDao.update(dom.getId(), dom);
-        }
-    }
-
     @Override
     public Pair<List<? extends Alert>, Integer> searchForAlerts(final ListAlertsCmd cmd) {
         final Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal());
@@ -2483,23 +2468,23 @@
                 if (zone == null || zone.getAllocationState() == AllocationState.Disabled) {
                     return null;
                 }
-                List<CapacityVO> capacities=new ArrayList<CapacityVO>();
+                List<CapacityVO> capacities = new ArrayList<CapacityVO>();
                 capacities.add(_storageMgr.getSecondaryStorageUsedStats(null, zoneId));
-                capacities.add(_storageMgr.getStoragePoolUsedStats(null,clusterId, podId, zoneId));
+                capacities.add(_storageMgr.getStoragePoolUsedStats(null, clusterId, podId, zoneId));
                 for (CapacityVO capacity : capacities) {
                     if (capacity.getTotalCapacity() != 0) {
                         capacity.setUsedPercentage((float)capacity.getUsedCapacity() / capacity.getTotalCapacity());
                     } else {
                         capacity.setUsedPercentage(0);
                     }
-                    final SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), capacity.getUsedPercentage(),
-                            capacity.getCapacityType(), capacity.getDataCenterId(), capacity.getPodId(), capacity.getClusterId());
+                    final SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), capacity.getUsedPercentage(), capacity.getCapacityType(),
+                            capacity.getDataCenterId(), capacity.getPodId(), capacity.getClusterId());
                     list.add(summedCapacity);
                 }
             } else {
                 List<DataCenterVO> dcList = _dcDao.listEnabledZones();
                 for (DataCenterVO dc : dcList) {
-                    List<CapacityVO> capacities=new ArrayList<CapacityVO>();
+                    List<CapacityVO> capacities = new ArrayList<CapacityVO>();
                     capacities.add(_storageMgr.getSecondaryStorageUsedStats(null, dc.getId()));
                     capacities.add(_storageMgr.getStoragePoolUsedStats(null, null, null, dc.getId()));
                     for (CapacityVO capacity : capacities) {
@@ -2508,8 +2493,8 @@
                         } else {
                             capacity.setUsedPercentage(0);
                         }
-                        SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), capacity.getUsedPercentage(),
-                                capacity.getCapacityType(), capacity.getDataCenterId(), capacity.getPodId(), capacity.getClusterId());
+                        SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), capacity.getUsedPercentage(), capacity.getCapacityType(),
+                                capacity.getDataCenterId(), capacity.getPodId(), capacity.getClusterId());
                         list.add(summedCapacity);
                     }
                 }// End of for
@@ -2537,8 +2522,8 @@
         final List<CapacityVO> capacities = new ArrayList<CapacityVO>();
 
         for (final SummedCapacity summedCapacity : summedCapacities) {
-            final CapacityVO capacity = new CapacityVO(null, summedCapacity.getDataCenterId(),summedCapacity.getPodId(), summedCapacity.getClusterId(), summedCapacity.getUsedCapacity()
-                    + summedCapacity.getReservedCapacity(), summedCapacity.getTotalCapacity(), summedCapacity.getCapacityType());
+            final CapacityVO capacity = new CapacityVO(null, summedCapacity.getDataCenterId(), summedCapacity.getPodId(), summedCapacity.getClusterId(),
+                    summedCapacity.getUsedCapacity() + summedCapacity.getReservedCapacity(), summedCapacity.getTotalCapacity(), summedCapacity.getCapacityType());
             capacity.setAllocatedCapacity(summedCapacity.getAllocatedCapacity());
             capacities.add(capacity);
         }
@@ -2836,6 +2821,7 @@
         cmdList.add(CreateSnapshotCmd.class);
         cmdList.add(CreateSnapshotFromVMSnapshotCmd.class);
         cmdList.add(DeleteSnapshotCmd.class);
+        cmdList.add(ArchiveSnapshotCmd.class);
         cmdList.add(CreateSnapshotPolicyCmd.class);
         cmdList.add(UpdateSnapshotPolicyCmd.class);
         cmdList.add(DeleteSnapshotPoliciesCmd.class);
@@ -2974,6 +2960,7 @@
         cmdList.add(ListNetworkACLListsCmd.class);
         cmdList.add(ReplaceNetworkACLListCmd.class);
         cmdList.add(UpdateNetworkACLItemCmd.class);
+        cmdList.add(MoveNetworkAclItemCmd.class);
         cmdList.add(CleanVMReservationsCmd.class);
         cmdList.add(UpgradeRouterTemplateCmd.class);
         cmdList.add(UploadSslCertCmd.class);
@@ -3149,8 +3136,8 @@
         return _secStorageVmMgr.startSecStorageVm(instanceId);
     }
 
-    private SecondaryStorageVmVO stopSecondaryStorageVm(final VMInstanceVO systemVm, final boolean isForced) throws ResourceUnavailableException, OperationTimedoutException,
-    ConcurrentOperationException {
+    private SecondaryStorageVmVO stopSecondaryStorageVm(final VMInstanceVO systemVm, final boolean isForced)
+            throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException {
 
         _itMgr.advanceStop(systemVm.getUuid(), isForced);
         return _secStorageVmDao.findById(systemVm.getId());
@@ -3552,9 +3539,9 @@
         }
 
         _consoleProxyMgr.setManagementState(ConsoleProxyManagementState.ResetSuspending);
-        return "Certificate has been successfully updated, if its the server certificate we would reboot all " +
-        "running console proxy VMs and secondary storage VMs to propagate the new certificate, " +
-        "please give a few minutes for console access and storage services service to be up and working again";
+        return "Certificate has been successfully updated, if its the server certificate we would reboot all "
+        + "running console proxy VMs and secondary storage VMs to propagate the new certificate, "
+        + "please give a few minutes for console access and storage services service to be up and working again";
     }
 
     @Override
@@ -3637,8 +3624,8 @@
 
         final SSHKeyPairVO s = _sshKeyPairDao.findByName(owner.getAccountId(), owner.getDomainId(), cmd.getName());
         if (s == null) {
-            final InvalidParameterValueException ex = new InvalidParameterValueException("A key pair with name '" + cmd.getName() + "' does not exist for account "
-                    + owner.getAccountName() + " in specified domain id");
+            final InvalidParameterValueException ex = new InvalidParameterValueException(
+                    "A key pair with name '" + cmd.getName() + "' does not exist for account " + owner.getAccountName() + " in specified domain id");
             final DomainVO domain = ApiDBUtils.findDomainById(owner.getDomainId());
             String domainUuid = String.valueOf(owner.getDomainId());
             if (domain != null) {
@@ -3659,10 +3646,8 @@
         final Account caller = getCaller();
         final List<Long> permittedAccounts = new ArrayList<Long>();
 
-        final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
-                cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject,
-                cmd.listAll(), false);
+        final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
+        _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
         final Long domainId = domainIdRecursiveListProject.first();
         final Boolean isRecursive = domainIdRecursiveListProject.second();
         final ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
@@ -3799,8 +3784,8 @@
         _userVmDao.loadDetails(vm);
         final String password = vm.getDetail("Encrypted.Password");
         if (password == null || password.equals("")) {
-            final InvalidParameterValueException ex = new InvalidParameterValueException("No password for VM with specified id found. "
-                    + "If VM is created from password enabled template and SSH keypair is assigned to VM then only password can be retrieved.");
+            final InvalidParameterValueException ex = new InvalidParameterValueException(
+                    "No password for VM with specified id found. " + "If VM is created from password enabled template and SSH keypair is assigned to VM then only password can be retrieved.");
             ex.addProxyObject(vm.getUuid(), "vmId");
             throw ex;
         }
@@ -3971,8 +3956,7 @@
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VM_UPGRADE, eventDescription = "Upgrading system VM", async = true)
-    public VirtualMachine upgradeSystemVM(final ScaleSystemVMCmd cmd) throws ResourceUnavailableException, ManagementServerException, VirtualMachineMigrationException,
-    ConcurrentOperationException {
+    public VirtualMachine upgradeSystemVM(final ScaleSystemVMCmd cmd) throws ResourceUnavailableException, ManagementServerException, VirtualMachineMigrationException, ConcurrentOperationException {
 
         final VMInstanceVO vmInstance = _vmInstanceDao.findById(cmd.getId());
         if (vmInstance.getHypervisorType() == HypervisorType.XenServer && vmInstance.getState().equals(State.Running)) {
@@ -4037,7 +4021,7 @@
         String encodedPassword = null;
 
         final UserVO adminUser = _userDao.getUser(2);
-        if (adminUser  == null) {
+        if (adminUser == null) {
             final String msg = "CANNOT find admin user";
             s_logger.error(msg);
             throw new CloudRuntimeException(msg);
diff --git a/server/src/com/cloud/server/StatsCollector.java b/server/src/main/java/com/cloud/server/StatsCollector.java
similarity index 100%
rename from server/src/com/cloud/server/StatsCollector.java
rename to server/src/main/java/com/cloud/server/StatsCollector.java
diff --git a/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java b/server/src/main/java/com/cloud/server/api/response/BaremetalTemplateResponse.java
similarity index 100%
rename from server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java
rename to server/src/main/java/com/cloud/server/api/response/BaremetalTemplateResponse.java
diff --git a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java b/server/src/main/java/com/cloud/server/api/response/NwDeviceDhcpResponse.java
similarity index 100%
rename from server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java
rename to server/src/main/java/com/cloud/server/api/response/NwDeviceDhcpResponse.java
diff --git a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java b/server/src/main/java/com/cloud/server/api/response/NwDevicePxeServerResponse.java
similarity index 100%
rename from server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java
rename to server/src/main/java/com/cloud/server/api/response/NwDevicePxeServerResponse.java
diff --git a/server/src/com/cloud/server/api/response/PxePingResponse.java b/server/src/main/java/com/cloud/server/api/response/PxePingResponse.java
similarity index 100%
rename from server/src/com/cloud/server/api/response/PxePingResponse.java
rename to server/src/main/java/com/cloud/server/api/response/PxePingResponse.java
diff --git a/server/src/com/cloud/server/auth/UserAuthenticator.java b/server/src/main/java/com/cloud/server/auth/UserAuthenticator.java
similarity index 100%
rename from server/src/com/cloud/server/auth/UserAuthenticator.java
rename to server/src/main/java/com/cloud/server/auth/UserAuthenticator.java
diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java b/server/src/main/java/com/cloud/servlet/CloudStartupServlet.java
similarity index 100%
rename from server/src/com/cloud/servlet/CloudStartupServlet.java
rename to server/src/main/java/com/cloud/servlet/CloudStartupServlet.java
diff --git a/server/src/com/cloud/servlet/ConsoleProxyClientParam.java b/server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java
similarity index 100%
rename from server/src/com/cloud/servlet/ConsoleProxyClientParam.java
rename to server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java
diff --git a/server/src/com/cloud/servlet/ConsoleProxyPasswordBasedEncryptor.java b/server/src/main/java/com/cloud/servlet/ConsoleProxyPasswordBasedEncryptor.java
similarity index 100%
rename from server/src/com/cloud/servlet/ConsoleProxyPasswordBasedEncryptor.java
rename to server/src/main/java/com/cloud/servlet/ConsoleProxyPasswordBasedEncryptor.java
diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/main/java/com/cloud/servlet/ConsoleProxyServlet.java
similarity index 100%
rename from server/src/com/cloud/servlet/ConsoleProxyServlet.java
rename to server/src/main/java/com/cloud/servlet/ConsoleProxyServlet.java
diff --git a/server/src/com/cloud/storage/CreateSnapshotPayload.java b/server/src/main/java/com/cloud/storage/CreateSnapshotPayload.java
similarity index 100%
rename from server/src/com/cloud/storage/CreateSnapshotPayload.java
rename to server/src/main/java/com/cloud/storage/CreateSnapshotPayload.java
diff --git a/server/src/com/cloud/storage/ImageStoreDetailsUtil.java b/server/src/main/java/com/cloud/storage/ImageStoreDetailsUtil.java
similarity index 100%
rename from server/src/com/cloud/storage/ImageStoreDetailsUtil.java
rename to server/src/main/java/com/cloud/storage/ImageStoreDetailsUtil.java
diff --git a/server/src/com/cloud/storage/ImageStoreUploadMonitor.java b/server/src/main/java/com/cloud/storage/ImageStoreUploadMonitor.java
similarity index 100%
rename from server/src/com/cloud/storage/ImageStoreUploadMonitor.java
rename to server/src/main/java/com/cloud/storage/ImageStoreUploadMonitor.java
diff --git a/server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java b/server/src/main/java/com/cloud/storage/ImageStoreUploadMonitorImpl.java
similarity index 100%
rename from server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java
rename to server/src/main/java/com/cloud/storage/ImageStoreUploadMonitorImpl.java
diff --git a/server/src/com/cloud/storage/LocalStoragePoolListener.java b/server/src/main/java/com/cloud/storage/LocalStoragePoolListener.java
similarity index 100%
rename from server/src/com/cloud/storage/LocalStoragePoolListener.java
rename to server/src/main/java/com/cloud/storage/LocalStoragePoolListener.java
diff --git a/server/src/com/cloud/storage/OCFS2Manager.java b/server/src/main/java/com/cloud/storage/OCFS2Manager.java
similarity index 100%
rename from server/src/com/cloud/storage/OCFS2Manager.java
rename to server/src/main/java/com/cloud/storage/OCFS2Manager.java
diff --git a/server/src/com/cloud/storage/OCFS2ManagerImpl.java b/server/src/main/java/com/cloud/storage/OCFS2ManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/storage/OCFS2ManagerImpl.java
rename to server/src/main/java/com/cloud/storage/OCFS2ManagerImpl.java
diff --git a/server/src/com/cloud/storage/RegisterVolumePayload.java b/server/src/main/java/com/cloud/storage/RegisterVolumePayload.java
similarity index 100%
rename from server/src/com/cloud/storage/RegisterVolumePayload.java
rename to server/src/main/java/com/cloud/storage/RegisterVolumePayload.java
diff --git a/server/src/com/cloud/storage/ResizeVolumePayload.java b/server/src/main/java/com/cloud/storage/ResizeVolumePayload.java
similarity index 100%
rename from server/src/com/cloud/storage/ResizeVolumePayload.java
rename to server/src/main/java/com/cloud/storage/ResizeVolumePayload.java
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
similarity index 98%
rename from server/src/com/cloud/storage/StorageManagerImpl.java
rename to server/src/main/java/com/cloud/storage/StorageManagerImpl.java
index 610789f..62ec13c 100644
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
@@ -95,7 +95,6 @@
 import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
 import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -176,6 +175,7 @@
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
+import com.cloud.utils.StringUtils;
 import com.cloud.utils.UriUtils;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ManagerBase;
@@ -343,7 +343,6 @@
                 return false;
             }
         }
-
         // ok to share
         return true;
     }
@@ -467,7 +466,6 @@
 
     @Override
     public boolean configure(String name, Map<String, Object> params) {
-
         Map<String, String> configs = _configDao.getConfiguration("management-server", params);
 
         _storagePoolAcquisitionWaitSeconds = NumbersUtil.parseInt(configs.get("pool.acquisition.wait.seconds"), 1800);
@@ -595,7 +593,7 @@
             DataStoreLifeCycle lifeCycle = provider.getDataStoreLifeCycle();
             if (pool == null) {
                 Map<String, Object> params = new HashMap<String, Object>();
-                String name = (host.getName() + " Local Storage");
+                String name = createLocalStoragePoolName(host, pInfo);
                 params.put("zoneId", host.getDataCenterId());
                 params.put("clusterId", host.getClusterId());
                 params.put("podId", host.getPodId());
@@ -625,6 +623,14 @@
         return _dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Primary);
     }
 
+    /**
+     * Creates the local storage pool name.
+     * The name will follow the pattern: <hostname>-local-<firstBlockOfUuid>
+     */
+    protected String createLocalStoragePoolName(Host host, StoragePoolInfo storagePoolInformation) {
+        return String.format("%s-%s-%s", org.apache.commons.lang3.StringUtils.trim(host.getName()), "local", storagePoolInformation.getUuid().split("-")[0]);
+    }
+
     @Override
     public PrimaryDataStoreInfo createPool(CreateStoragePoolCmd cmd) throws ResourceInUseException, IllegalArgumentException, UnknownHostException, ResourceUnavailableException {
         String providerName = cmd.getStorageProviderName();
@@ -882,7 +888,6 @@
             s_logger.warn("Unable to delete storage id: " + id + " due to it is not in Maintenance state");
             throw new InvalidParameterValueException("Unable to delete storage due to it is not in Maintenance state, id: " + id);
         }
-
         Pair<Long, Long> vlms = _volsDao.getCountAndTotalByPool(id);
         if (forced) {
             if (vlms.first() > 0) {
@@ -1113,7 +1118,6 @@
                             s_logger.debug("Failed to delete snapshot: " + ssSnapshotVO.getId() + " from storage");
                         }
                     }
-
                     cleanupSecondaryStorage(recurring);
 
                     List<VolumeVO> vols = _volsDao.listVolumesToBeDestroyed(new Date(System.currentTimeMillis() - ((long)StorageCleanupDelay.value() << 10)));
@@ -1501,8 +1505,6 @@
 
     @Override
     public void onManagementNodeJoined(List<? extends ManagementServerHost> nodeList, long selfNodeId) {
-        // TODO Auto-generated method stub
-
     }
 
     @Override
@@ -1834,10 +1836,11 @@
 
         if (pool.getPoolType().supportsOverProvisioning()) {
             BigDecimal overProvFactor = getStorageOverProvisioningFactor(pool.getId());
+
             totalOverProvCapacity = overProvFactor.multiply(new BigDecimal(pool.getCapacityBytes())).longValue();
 
-            s_logger.debug("Found storage pool " + poolVO.getName() + " of type " + pool.getPoolType().toString() + " with overprovisioning factor " + overProvFactor.toString());
-            s_logger.debug("Total over provisioned capacity calculated is " + overProvFactor + " * " + pool.getCapacityBytes());
+            s_logger.debug("Found storage pool " + poolVO.getName() + " of type " + pool.getPoolType().toString() + " with over-provisioning factor " + overProvFactor.toString());
+            s_logger.debug("Total over-provisioned capacity calculated is " + overProvFactor + " * " + pool.getCapacityBytes());
         } else {
             totalOverProvCapacity = pool.getCapacityBytes();
 
@@ -1848,20 +1851,28 @@
 
         double storageAllocatedThreshold = CapacityManager.StorageAllocatedCapacityDisableThreshold.valueIn(pool.getDataCenterId());
 
-        s_logger.debug("Checking pool: " + pool.getId() + " for volume allocation " + volumes.toString() + ", maxSize : " + totalOverProvCapacity + ", totalAllocatedSize : "
-                + allocatedSizeWithTemplate + ", askingSize : " + totalAskingSize + ", allocated disable threshold: " + storageAllocatedThreshold);
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Checking pool with ID " + pool.getId() + " for volume allocation " + volumes.toString() + ", maxSize: " + totalOverProvCapacity + ", totalAllocatedSize: "
+                    + allocatedSizeWithTemplate + ", askingSize: " + totalAskingSize + ", allocated disable threshold: " + storageAllocatedThreshold);
+        }
 
         double usedPercentage = (allocatedSizeWithTemplate + totalAskingSize) / (double)(totalOverProvCapacity);
 
         if (usedPercentage > storageAllocatedThreshold) {
-            s_logger.debug("Insufficient un-allocated capacity on: " + pool.getId() + " for volume allocation: " + volumes.toString() + " since its allocated percentage: " + usedPercentage
-                    + " has crossed the allocated pool.storage.allocated.capacity.disablethreshold: " + storageAllocatedThreshold + ", skipping this pool");
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("Insufficient un-allocated capacity on the pool with ID " + pool.getId() + " for volume allocation: " + volumes.toString() + " since its allocated percentage "
+                        + usedPercentage + " has crossed the allocated pool.storage.allocated.capacity.disablethreshold " + storageAllocatedThreshold + ", skipping this pool");
+            }
+
             return false;
         }
 
         if (totalOverProvCapacity < (allocatedSizeWithTemplate + totalAskingSize)) {
-            s_logger.debug("Insufficient un-allocated capacity on: " + pool.getId() + " for volume allocation: " + volumes.toString() + ", not enough storage, maxSize : " + totalOverProvCapacity
-                    + ", totalAllocatedSize : " + allocatedSizeWithTemplate + ", askingSize : " + totalAskingSize);
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("Insufficient un-allocated capacity on the pool with ID " + pool.getId() + " for volume allocation: " + volumes.toString() + "; not enough storage, maxSize: "
+                        + totalOverProvCapacity + ", totalAllocatedSize: " + allocatedSizeWithTemplate + ", askingSize: " + totalAskingSize);
+            }
+
             return false;
         }
 
@@ -1958,19 +1969,16 @@
 
     @Override
     public Answer sendToPool(long poolId, Command cmd) throws StorageUnavailableException {
-        // TODO Auto-generated method stub
         return null;
     }
 
     @Override
     public Answer[] sendToPool(long poolId, Commands cmd) throws StorageUnavailableException {
-        // TODO Auto-generated method stub
         return null;
     }
 
     @Override
     public String getName() {
-        // TODO Auto-generated method stub
         return null;
     }
 
@@ -2030,7 +2038,7 @@
             }
         }
 
-        Map<String, Object> params = new HashMap();
+        Map<String, Object> params = new HashMap<>();
         params.put("zoneId", zoneId);
         params.put("url", url);
         params.put("name", name);
@@ -2071,7 +2079,7 @@
     }
 
     @Override
-    public ImageStore migrateToObjectStore(String name, String url, String providerName, Map details) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException {
+    public ImageStore migrateToObjectStore(String name, String url, String providerName, Map<String, String> details) throws DiscoveryException, InvalidParameterValueException {
         // check if current cloud is ready to migrate, we only support cloud with only NFS secondary storages
         List<ImageStoreVO> imgStores = _imageStoreDao.listImageStores();
         List<ImageStoreVO> nfsStores = new ArrayList<ImageStoreVO>();
diff --git a/server/src/com/cloud/storage/StoragePoolAutomation.java b/server/src/main/java/com/cloud/storage/StoragePoolAutomation.java
similarity index 100%
rename from server/src/com/cloud/storage/StoragePoolAutomation.java
rename to server/src/main/java/com/cloud/storage/StoragePoolAutomation.java
diff --git a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java b/server/src/main/java/com/cloud/storage/StoragePoolAutomationImpl.java
similarity index 100%
rename from server/src/com/cloud/storage/StoragePoolAutomationImpl.java
rename to server/src/main/java/com/cloud/storage/StoragePoolAutomationImpl.java
diff --git a/server/src/com/cloud/storage/TemplateProfile.java b/server/src/main/java/com/cloud/storage/TemplateProfile.java
similarity index 96%
rename from server/src/com/cloud/storage/TemplateProfile.java
rename to server/src/main/java/com/cloud/storage/TemplateProfile.java
index 410b519..304b652 100644
--- a/server/src/com/cloud/storage/TemplateProfile.java
+++ b/server/src/main/java/com/cloud/storage/TemplateProfile.java
@@ -164,7 +164,7 @@
         this.bits = bits;
     }
 
-    public Boolean getPasswordEnabled() {
+    public Boolean isPasswordEnabled() {
         return passwordEnabled;
     }
 
@@ -172,7 +172,7 @@
         this.passwordEnabled = enabled;
     }
 
-    public Boolean getRequiresHVM() {
+    public Boolean isRequiresHVM() {
         return requiresHvm;
     }
 
@@ -188,7 +188,7 @@
         this.url = url;
     }
 
-    public Boolean getIsPublic() {
+    public Boolean isPublic() {
         return isPublic;
     }
 
@@ -196,7 +196,7 @@
         this.isPublic = is;
     }
 
-    public Boolean getFeatured() {
+    public Boolean isFeatured() {
         return featured;
     }
 
@@ -204,7 +204,7 @@
         this.featured = featured;
     }
 
-    public Boolean getIsExtractable() {
+    public Boolean isExtractable() {
         return isExtractable;
     }
 
@@ -264,7 +264,7 @@
         this.chksum = chksum;
     }
 
-    public Boolean getBootable() {
+    public Boolean isBootable() {
         return this.bootable;
     }
 
@@ -300,7 +300,7 @@
         this.sshKeyEnbaled = enabled;
     }
 
-    public Boolean getSshKeyEnabled() {
+    public Boolean isSshKeyEnabled() {
         return this.sshKeyEnbaled;
     }
 
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
similarity index 92%
rename from server/src/com/cloud/storage/VolumeApiServiceImpl.java
rename to server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
index 5e3bf54..3fcf761 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
@@ -19,6 +19,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -69,6 +70,7 @@
 import org.apache.cloudstack.storage.command.DettachCommand;
 import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
@@ -92,7 +94,6 @@
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.configuration.Resource.ResourceType;
 import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterVO;
 import com.cloud.dc.DataCenter;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.dao.DataCenterDao;
@@ -119,7 +120,6 @@
 import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
-import com.cloud.storage.dao.VolumeDetailsDao;
 import com.cloud.storage.snapshot.SnapshotApiService;
 import com.cloud.storage.snapshot.SnapshotManager;
 import com.cloud.template.TemplateManager;
@@ -184,77 +184,75 @@
     @Inject
     private UserVmManager _userVmMgr;
     @Inject
-    VolumeOrchestrationService _volumeMgr;
+    private VolumeOrchestrationService _volumeMgr;
     @Inject
-    EntityManager _entityMgr;
+    private EntityManager _entityMgr;
     @Inject
-    AgentManager _agentMgr;
+    private AgentManager _agentMgr;
     @Inject
-    TemplateManager _tmpltMgr;
+    private TemplateManager _tmpltMgr;
     @Inject
-    SnapshotManager _snapshotMgr;
+    private SnapshotManager _snapshotMgr;
     @Inject
-    AccountManager _accountMgr;
+    private AccountManager _accountMgr;
     @Inject
-    ConfigurationManager _configMgr;
+    private ConfigurationManager _configMgr;
     @Inject
-    VolumeDao _volsDao;
+    private VolumeDao _volsDao;
     @Inject
-    VolumeDetailsDao _volDetailDao;
+    private HostDao _hostDao;
     @Inject
-    HostDao _hostDao;
+    private SnapshotDao _snapshotDao;
     @Inject
-    SnapshotDao _snapshotDao;
+    private ServiceOfferingDetailsDao _serviceOfferingDetailsDao;
     @Inject
-    ServiceOfferingDetailsDao _serviceOfferingDetailsDao;
+    private UserVmDao _userVmDao;
     @Inject
-    StoragePoolDetailsDao storagePoolDetailsDao;
+    private UserVmService _userVmService;
     @Inject
-    UserVmDao _userVmDao;
+    private VolumeDataStoreDao _volumeStoreDao;
     @Inject
-    UserVmService _userVmService;
+    private VMInstanceDao _vmInstanceDao;
     @Inject
-    VolumeDataStoreDao _volumeStoreDao;
+    private PrimaryDataStoreDao _storagePoolDao;
     @Inject
-    VMInstanceDao _vmInstanceDao;
+    private DiskOfferingDao _diskOfferingDao;
     @Inject
-    PrimaryDataStoreDao _storagePoolDao;
+    private AccountDao _accountDao;
     @Inject
-    DiskOfferingDao _diskOfferingDao;
+    private DataCenterDao _dcDao;
     @Inject
-    AccountDao _accountDao;
+    private VMTemplateDao _templateDao;
     @Inject
-    DataCenterDao _dcDao = null;
+    private ResourceLimitService _resourceLimitMgr;
     @Inject
-    VMTemplateDao _templateDao;
+    private VmDiskStatisticsDao _vmDiskStatsDao;
     @Inject
-    ResourceLimitService _resourceLimitMgr;
+    private VMSnapshotDao _vmSnapshotDao;
     @Inject
-    VmDiskStatisticsDao _vmDiskStatsDao;
+    private ConfigurationDao _configDao;
     @Inject
-    VMSnapshotDao _vmSnapshotDao;
+    private DataStoreManager dataStoreMgr;
     @Inject
-    ConfigurationDao _configDao;
+    private VolumeService volService;
     @Inject
-    DataStoreManager dataStoreMgr;
+    private VolumeDataFactory volFactory;
     @Inject
-    VolumeService volService;
+    private SnapshotApiService snapshotMgr;
     @Inject
-    VolumeDataFactory volFactory;
+    private UUIDManager _uuidMgr;
     @Inject
-    SnapshotApiService snapshotMgr;
+    private HypervisorCapabilitiesDao _hypervisorCapabilitiesDao;
     @Inject
-    UUIDManager _uuidMgr;
+    private AsyncJobManager _jobMgr;
     @Inject
-    HypervisorCapabilitiesDao _hypervisorCapabilitiesDao;
+    private VmWorkJobDao _workJobDao;
     @Inject
-    AsyncJobManager _jobMgr;
+    private ClusterDetailsDao _clusterDetailsDao;
     @Inject
-    VmWorkJobDao _workJobDao;
+    private StorageManager storageMgr;
     @Inject
-    ClusterDetailsDao _clusterDetailsDao;
-    @Inject
-    StorageManager storageMgr;
+    private StoragePoolDetailsDao storagePoolDetailsDao;
 
     protected Gson _gson;
 
@@ -488,7 +486,7 @@
                 volume.setDomainId((owner == null) ? Domain.ROOT_DOMAIN : owner.getDomainId());
                 volume.setFormat(ImageFormat.valueOf(format));
                 volume = _volsDao.persist(volume);
-                CallContext.current().setEventDetails("Volume Id: " + volume.getId());
+                CallContext.current().setEventDetails("Volume Id: " + volume.getUuid());
 
                 // Increment resource count during allocation; if actual creation fails,
                 // decrement it
@@ -531,7 +529,6 @@
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_VOLUME_CREATE, eventDescription = "creating volume", create = true)
     public VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationException {
-        // FIXME: some of the scheduled event stuff might be missing here...
         Account caller = CallContext.current().getCallingAccount();
 
         long ownerId = cmd.getEntityOwnerId();
@@ -757,7 +754,7 @@
                             Volume.class.getName(), volume.getUuid(), displayVolume);
                 }
 
-                CallContext.current().setEventDetails("Volume Id: " + volume.getId());
+                CallContext.current().setEventDetails("Volume Id: " + volume.getUuid());
 
                 // Increment resource count during allocation; if actual creation fails,
                 // decrement it
@@ -1248,7 +1245,7 @@
      * Executes the removal of the volume. If the volume is only allocated we do not try to remove it from primary and secondary storage.
      * Otherwise, after the removal in the database, we will try to remove the volume from both primary and secondary storage.
      */
-    public boolean deleteVolume(long volumeId, Account caller) {
+    public boolean deleteVolume(long volumeId, Account caller) throws ConcurrentOperationException {
         VolumeVO volume = retrieveAndValidateVolume(volumeId, caller);
         try {
             destroyVolumeIfPossible(volume);
@@ -1269,74 +1266,6 @@
     }
 
     /**
-     * Clean volumes cache entries (if they exist).
-     */
-    protected void cleanVolumesCache(VolumeVO volume) {
-        List<VolumeInfo> cacheVols = volFactory.listVolumeOnCache(volume.getId());
-        if (CollectionUtils.isEmpty(cacheVols)) {
-            return;
-        }
-        for (VolumeInfo volOnCache : cacheVols) {
-            s_logger.info("Delete volume from image cache store: " + volOnCache.getDataStore().getName());
-            volOnCache.delete();
-        }
-    }
-
-    /**
-     * We will check if the given volume is in the secondary storage. If the volume is not in the primary storage, we do nothing here.
-     * If it is, we will execute an asynchronous call to delete it there. Then, we decrement the {@link ResourceType#secondary_storage} for the account that owns the volume.
-     */
-    protected void expungeVolumesInSecondaryStorageIfNeeded(VolumeVO volume) throws InterruptedException, ExecutionException {
-        VolumeInfo volOnSecondary = volFactory.getVolume(volume.getId(), DataStoreRole.Image);
-        if (volOnSecondary != null) {
-            s_logger.info("Expunging volume " + volume.getId() + " from secondary data store");
-            AsyncCallFuture<VolumeApiResult> future2 = volService.expungeVolumeAsync(volOnSecondary);
-            future2.get();
-
-            _resourceLimitMgr.decrementResourceCount(volOnSecondary.getAccountId(), ResourceType.secondary_storage, volOnSecondary.getSize());
-        }
-    }
-
-    /**
-     * We will check if the given volume is in the primary storage. If it is, we will execute an asynchronous call to delete it there.
-     * If the volume is not in the primary storage, we do nothing here.
-     */
-    protected void expungeVolumesInPrimaryStorageIfNeeded(VolumeVO volume) throws InterruptedException, ExecutionException {
-        VolumeInfo volOnPrimary = volFactory.getVolume(volume.getId(), DataStoreRole.Primary);
-        if (volOnPrimary != null) {
-            s_logger.info("Expunging volume " + volume.getId() + " from primary data store");
-            AsyncCallFuture<VolumeApiResult> future = volService.expungeVolumeAsync(volOnPrimary);
-            future.get();
-        }
-    }
-
-    /**
-     * Destroy the volume if possible and then decrement the following resource types.
-     * <ul>
-     *  <li> {@link ResourceType#volume};
-     *  <li> {@link ResourceType#primary_storage}
-     * </ul>
-     *
-     * A volume can be destroyed if it is not in any of the following states.
-     * <ul>
-     *  <li> {@value Volume.State#Destroy};
-     *  <li> {@value Volume.State#Expunging};
-     *  <li> {@value Volume.State#Expunged}.
-     * </ul>
-     *
-     * The volume is destroyed via {@link VolumeService#destroyVolume(long)} method.
-     */
-    protected void destroyVolumeIfPossible(VolumeVO volume) {
-        if (volume.getState() != Volume.State.Destroy && volume.getState() != Volume.State.Expunging && volume.getState() != Volume.State.Expunged) {
-            volService.destroyVolume(volume.getId());
-
-            // Decrement the resource count for volumes and primary storage belonging user VM's only
-            _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.volume, volume.isDisplayVolume());
-            _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, volume.isDisplayVolume(), volume.getSize());
-        }
-    }
-
-    /**
      *  Retrieves and validates the volume for the {@link #deleteVolume(long, Account)} method. The following validation are executed.
      *  <ul>
      *      <li> if no volume is found in the database, we throw an {@link InvalidParameterValueException};
@@ -1373,6 +1302,74 @@
         return volume;
     }
 
+    /**
+     * Destroy the volume if possible and then decrement the following resource types.
+     * <ul>
+     *  <li> {@link ResourceType#volume};
+     *  <li> {@link ResourceType#primary_storage}
+     * </ul>
+     *
+     * A volume can be destroyed if it is not in any of the following states.
+     * <ul>
+     *  <li> {@value Volume.State#Destroy};
+     *  <li> {@value Volume.State#Expunging};
+     *  <li> {@value Volume.State#Expunged}.
+     * </ul>
+     *
+     * The volume is destroyed via {@link VolumeService#destroyVolume(long)} method.
+     */
+    protected void destroyVolumeIfPossible(VolumeVO volume) {
+        if (volume.getState() != Volume.State.Destroy && volume.getState() != Volume.State.Expunging && volume.getState() != Volume.State.Expunged) {
+            volService.destroyVolume(volume.getId());
+
+            // Decrement the resource count for volumes and primary storage belonging user VM's only
+            _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.volume, volume.isDisplayVolume());
+            _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, volume.isDisplayVolume(), volume.getSize());
+        }
+    }
+
+    /**
+     * We will check if the given volume is in the primary storage. If it is, we will execute an asynchronous call to delete it there.
+     * If the volume is not in the primary storage, we do nothing here.
+     */
+    protected void expungeVolumesInPrimaryStorageIfNeeded(VolumeVO volume) throws InterruptedException, ExecutionException {
+        VolumeInfo volOnPrimary = volFactory.getVolume(volume.getId(), DataStoreRole.Primary);
+        if (volOnPrimary != null) {
+            s_logger.info("Expunging volume " + volume.getId() + " from primary data store");
+            AsyncCallFuture<VolumeApiResult> future = volService.expungeVolumeAsync(volOnPrimary);
+            future.get();
+        }
+    }
+
+    /**
+     * We will check if the given volume is in the secondary storage. If the volume is not in the primary storage, we do nothing here.
+     * If it is, we will execute an asynchronous call to delete it there. Then, we decrement the {@link ResourceType#secondary_storage} for the account that owns the volume.
+     */
+    protected void expungeVolumesInSecondaryStorageIfNeeded(VolumeVO volume) throws InterruptedException, ExecutionException {
+        VolumeInfo volOnSecondary = volFactory.getVolume(volume.getId(), DataStoreRole.Image);
+        if (volOnSecondary != null) {
+            s_logger.info("Expunging volume " + volume.getId() + " from secondary data store");
+            AsyncCallFuture<VolumeApiResult> future2 = volService.expungeVolumeAsync(volOnSecondary);
+            future2.get();
+
+            _resourceLimitMgr.decrementResourceCount(volOnSecondary.getAccountId(), ResourceType.secondary_storage, volOnSecondary.getSize());
+        }
+    }
+
+    /**
+     * Clean volumes cache entries (if they exist).
+     */
+    protected void cleanVolumesCache(VolumeVO volume) {
+        List<VolumeInfo> cacheVols = volFactory.listVolumeOnCache(volume.getId());
+        if (CollectionUtils.isEmpty(cacheVols)) {
+            return;
+        }
+        for (VolumeInfo volOnCache : cacheVols) {
+            s_logger.info("Delete volume from image cache store: " + volOnCache.getDataStore().getName());
+            volOnCache.delete();
+        }
+    }
+
     protected boolean stateTransitTo(Volume vol, Volume.Event event) throws NoTransitionException {
         return _volStateMachine.transitTo(vol, event, null, _volsDao);
     }
@@ -2061,40 +2058,31 @@
             throw new InvalidParameterValueException("Cannot migrate volume " + vol + "to the destination storage pool " + destPool.getName() + " as the storage pool is in maintenance mode.");
         }
 
-        if (_volumeMgr.volumeOnSharedStoragePool(vol)) {
-            if (destPool.isLocal()) {
-                throw new InvalidParameterValueException("Migration of volume from shared to local storage pool is not supported");
-            } else {
-                // If the volume is attached to a running vm and the volume is on a shared storage pool, check
-                // to make sure that the destination storage pool is in the same cluster as the vm.
-                if (liveMigrateVolume && destPool.getClusterId() != null && srcClusterId != null) {
-                    if (!srcClusterId.equals(destPool.getClusterId())) {
-                        throw new InvalidParameterValueException("Cannot migrate a volume of a virtual machine to a storage pool in a different cluster");
-                    }
-                }
-                // In case of VMware, if ROOT volume is being cold-migrated, then ensure destination storage pool is in the same Datacenter as the VM.
-                if (vm != null && vm.getHypervisorType().equals(HypervisorType.VMware)) {
-                    if (!liveMigrateVolume && vol.volumeType.equals(Volume.Type.ROOT)) {
-                        Long hostId = vm.getHostId() != null ? vm.getHostId() : vm.getLastHostId();
-                        HostVO host = _hostDao.findById(hostId);
-                        if (host != null) {
-                            srcClusterId = host.getClusterId();
-                        }
-                        if (srcClusterId != null && destPool.getClusterId() != null && !srcClusterId.equals(destPool.getClusterId())) {
-                            String srcDcName = _clusterDetailsDao.getVmwareDcName(srcClusterId);
-                            String destDcName = _clusterDetailsDao.getVmwareDcName(destPool.getClusterId());
-                            if (srcDcName != null && destDcName != null && !srcDcName.equals(destDcName)) {
-                                throw new InvalidParameterValueException("Cannot migrate ROOT volume of a stopped VM to a storage pool in a different VMware datacenter");
-                            }
-                        }
-                        updateMissingRootDiskController(vm, vol.getChainInfo());
-                    }
-                }
+        if (liveMigrateVolume && destPool.getClusterId() != null && srcClusterId != null) {
+            if (!srcClusterId.equals(destPool.getClusterId())) {
+                throw new InvalidParameterValueException("Cannot migrate a volume of a virtual machine to a storage pool in a different cluster");
             }
-        } else {
-            throw new InvalidParameterValueException("Migration of volume from local storage pool is not supported");
         }
-
+        // In case of VMware, if ROOT volume is being cold-migrated, then ensure destination storage pool is in the same Datacenter as the VM.
+        if (vm != null && vm.getHypervisorType().equals(HypervisorType.VMware)) {
+            if (!liveMigrateVolume && vol.volumeType.equals(Volume.Type.ROOT)) {
+                Long hostId = vm.getHostId() != null ? vm.getHostId() : vm.getLastHostId();
+                HostVO host = _hostDao.findById(hostId);
+                if (host != null) {
+                    srcClusterId = host.getClusterId();
+                }
+                if (srcClusterId != null && destPool.getClusterId() != null && !srcClusterId.equals(destPool.getClusterId())) {
+                    String srcDcName = _clusterDetailsDao.getVmwareDcName(srcClusterId);
+                    String destDcName = _clusterDetailsDao.getVmwareDcName(destPool.getClusterId());
+                    if (srcDcName != null && destDcName != null && !srcDcName.equals(destDcName)) {
+                        throw new InvalidParameterValueException("Cannot migrate ROOT volume of a stopped VM to a storage pool in a different VMware datacenter");
+                    }
+                }
+                updateMissingRootDiskController(vm, vol.getChainInfo());
+            }
+        }
+        DiskOfferingVO newDiskOffering = retrieveAndValidateNewDiskOffering(cmd);
+        validateConditionsToReplaceDiskOfferingOfVolume(vol, newDiskOffering, destPool);
         if (vm != null) {
             // serialize VM operation
             AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
@@ -2104,13 +2092,13 @@
                 VmWorkJobVO placeHolder = null;
                 placeHolder = createPlaceHolderWork(vm.getId());
                 try {
-                    return orchestrateMigrateVolume(vol.getId(), destPool.getId(), liveMigrateVolume);
+                    return orchestrateMigrateVolume(vol, destPool, liveMigrateVolume, newDiskOffering);
                 } finally {
                     _workJobDao.expunge(placeHolder.getId());
                 }
 
             } else {
-                Outcome<Volume> outcome = migrateVolumeThroughJobQueue(vm.getId(), vol.getId(), destPool.getId(), liveMigrateVolume);
+                Outcome<Volume> outcome = migrateVolumeThroughJobQueue(vm, vol, destPool, liveMigrateVolume, newDiskOffering);
 
                 try {
                     outcome.get();
@@ -2139,21 +2127,145 @@
             }
         }
 
-        return orchestrateMigrateVolume(vol.getId(), destPool.getId(), liveMigrateVolume);
+        return orchestrateMigrateVolume(vol, destPool, liveMigrateVolume, newDiskOffering);
     }
 
-    private Volume orchestrateMigrateVolume(long volumeId, long destPoolId, boolean liveMigrateVolume) {
-        VolumeVO vol = _volsDao.findById(volumeId);
-        assert (vol != null);
-        StoragePool destPool = (StoragePool)dataStoreMgr.getDataStore(destPoolId, DataStoreRole.Primary);
-        assert (destPool != null);
+    /**
+     * Retrieves the new disk offering UUID that might be sent to replace the current one in the volume being migrated.
+     * If no disk offering UUID is provided we return null. Otherwise, we perform the following checks.
+     * <ul>
+     *  <li>Is the disk offering UUID entered valid? If not, an  {@link InvalidParameterValueException} is thrown;
+     *  <li>If the disk offering was already removed, we thrown an {@link InvalidParameterValueException} is thrown;
+     *  <li>We then check if the user executing the operation has access to the given disk offering.
+     * </ul>
+     *
+     * If all checks pass, we move forward returning the disk offering object.
+     */
+    private DiskOfferingVO retrieveAndValidateNewDiskOffering(MigrateVolumeCmd cmd) {
+        String newDiskOfferingUuid = cmd.getNewDiskOfferingUuid();
+        if (org.apache.commons.lang.StringUtils.isBlank(newDiskOfferingUuid)) {
+            return null;
+        }
+        DiskOfferingVO newDiskOffering = _diskOfferingDao.findByUuid(newDiskOfferingUuid);
+        if (newDiskOffering == null) {
+            throw new InvalidParameterValueException(String.format("The disk offering informed is not valid [id=%s].", newDiskOfferingUuid));
+        }
+        if (newDiskOffering.getRemoved() != null) {
+            throw new InvalidParameterValueException(String.format("We cannot assign a removed disk offering [id=%s] to a volume. ", newDiskOffering.getUuid()));
+        }
+        Account caller = CallContext.current().getCallingAccount();
+        _accountMgr.checkAccess(caller, newDiskOffering);
+        return newDiskOffering;
+    }
 
+    /**
+     * Performs the validations required for replacing the disk offering while migrating the volume of storage. If no new disk offering is provided, we do not execute any validation.
+     * If a disk offering is informed, we then proceed with the following checks.
+     * <ul>
+     *  <li>We check if the given volume is of ROOT type. We cannot change the disk offering of a ROOT volume. Therefore, we thrown an {@link InvalidParameterValueException};
+     *  <li>We the disk is being migrated to shared storage and the new disk offering is for local storage (or vice versa), we throw an {@link InvalidParameterValueException}. Bear in mind that we are validating only the new disk offering. If none is provided we can override the current disk offering. This means, placing a volume with shared disk offering in local storage and vice versa;
+     *  <li>We then proceed checking the target storage pool supports the new disk offering {@link #doesTargetStorageSupportNewDiskOffering(StoragePool, DiskOfferingVO)}.
+     * </ul>
+     *
+     * If all of the above validations pass, we check if the size of the new disk offering is different from the volume. If it is, we log a warning message.
+     */
+    protected void validateConditionsToReplaceDiskOfferingOfVolume(VolumeVO volume, DiskOfferingVO newDiskOffering, StoragePool destPool) {
+        if (newDiskOffering == null) {
+            return;
+        }
+        if ((destPool.isShared() && newDiskOffering.getUseLocalStorage()) || destPool.isLocal() && newDiskOffering.isShared()) {
+            throw new InvalidParameterValueException("You cannot move the volume to a shared storage and assing a disk offering for local storage and vice versa.");
+        }
+        if (!doesTargetStorageSupportNewDiskOffering(destPool, newDiskOffering)) {
+            throw new InvalidParameterValueException(String.format("Target Storage [id=%s] tags [%s] does not match new disk offering [id=%s] tags [%s].", destPool.getUuid(),
+                    getStoragePoolTags(destPool), newDiskOffering.getUuid(), newDiskOffering.getTags()));
+        }
+        if (volume.getSize() != newDiskOffering.getDiskSize()) {
+            DiskOfferingVO oldDiskOffering = this._diskOfferingDao.findById(volume.getDiskOfferingId());
+            s_logger.warn(String.format(
+                    "You are migrating a volume [id=%s] and changing the disk offering[from id=%s to id=%s] to reflect this migration. However, the sizes of the volume and the new disk offering are different.",
+                    volume.getUuid(), oldDiskOffering.getUuid(), newDiskOffering.getUuid()));
+        }
+        s_logger.info(String.format("Changing disk offering to [uuid=%s] while migrating volume [uuid=%s, name=%s].", newDiskOffering.getUuid(), volume.getUuid(), volume.getName()));
+    }
+
+    /**
+     *  Checks if the target storage supports the new disk offering.
+     *  This validation is consistent with the mechanism used to select a storage pool to deploy a volume when a virtual machine is deployed or when a new data disk is allocated.
+     *
+     *  The scenarios when this method returns true or false is presented in the following table.
+     *
+     *   <table border="1">
+     *      <tr>
+     *          <th>#</th><th>Disk offering tags</th><th>Storage tags</th><th>Does the storage support the disk offering?</th>
+     *      </tr>
+     *      <body>
+     *      <tr>
+     *          <td>1</td><td>A,B</td><td>A</td><td>NO</td>
+     *      </tr>
+     *      <tr>
+     *          <td>2</td><td>A,B,C</td><td>A,B,C,D,X</td><td>YES</td>
+     *      </tr>
+     *      <tr>
+     *          <td>3</td><td>A,B,C</td><td>X,Y,Z</td><td>NO</td>
+     *      </tr>
+     *      <tr>
+     *          <td>4</td><td>null</td><td>A,S,D</td><td>YES</td>
+     *      </tr>
+     *      <tr>
+     *          <td>5</td><td>A</td><td>null</td><td>NO</td>
+     *      </tr>
+     *      <tr>
+     *          <td>6</td><td>null</td><td>null</td><td>YES</td>
+     *      </tr>
+     *      </body>
+     *   </table>
+     */
+    protected boolean doesTargetStorageSupportNewDiskOffering(StoragePool destPool, DiskOfferingVO newDiskOffering) {
+        String newDiskOfferingTags = newDiskOffering.getTags();
+        return doesTargetStorageSupportDiskOffering(destPool, newDiskOfferingTags);
+    }
+
+    @Override
+    public boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, String diskOfferingTags) {
+        if (org.apache.commons.lang.StringUtils.isBlank(diskOfferingTags)) {
+            return true;
+        }
+        String storagePoolTags = getStoragePoolTags(destPool);
+        if (org.apache.commons.lang.StringUtils.isBlank(storagePoolTags)) {
+            return false;
+        }
+        String[] storageTagsAsStringArray = org.apache.commons.lang.StringUtils.split(storagePoolTags, ",");
+        String[] newDiskOfferingTagsAsStringArray = org.apache.commons.lang.StringUtils.split(diskOfferingTags, ",");
+
+        return CollectionUtils.isSubCollection(Arrays.asList(newDiskOfferingTagsAsStringArray), Arrays.asList(storageTagsAsStringArray));
+    }
+
+    /**
+     *  Retrieves the storage pool tags as a {@link String}. If the storage pool does not have tags we return a null value.
+     */
+    protected String getStoragePoolTags(StoragePool destPool) {
+        List<StoragePoolDetailVO> storagePoolDetails = storagePoolDetailsDao.listDetails(destPool.getId());
+        if (CollectionUtils.isEmpty(storagePoolDetails)) {
+            return null;
+        }
+        String storageTags = "";
+        for (StoragePoolDetailVO storagePoolDetailVO : storagePoolDetails) {
+            storageTags = storageTags + storagePoolDetailVO.getName() + ",";
+        }
+        return storageTags.substring(0, storageTags.length() - 1);
+    }
+
+    private Volume orchestrateMigrateVolume(VolumeVO volume, StoragePool destPool, boolean liveMigrateVolume, DiskOfferingVO newDiskOffering) {
         Volume newVol = null;
         try {
             if (liveMigrateVolume) {
-                newVol = liveMigrateVolume(vol, destPool);
+                newVol = liveMigrateVolume(volume, destPool);
             } else {
-                newVol = _volumeMgr.migrateVolume(vol, destPool);
+                newVol = _volumeMgr.migrateVolume(volume, destPool);
+            }
+            if (newDiskOffering != null) {
+                _volsDao.updateDiskOffering(newVol.getId(), newDiskOffering.getId());
             }
         } catch (StorageUnavailableException e) {
             s_logger.debug("Failed to migrate volume", e);
@@ -2168,7 +2280,9 @@
     @DB
     protected Volume liveMigrateVolume(Volume volume, StoragePool destPool) throws StorageUnavailableException {
         VolumeInfo vol = volFactory.getVolume(volume.getId());
-        AsyncCallFuture<VolumeApiResult> future = volService.migrateVolume(vol, (DataStore)destPool);
+
+        DataStore dataStoreTarget = dataStoreMgr.getDataStore(destPool.getId(), DataStoreRole.Primary);
+        AsyncCallFuture<VolumeApiResult> future = volService.migrateVolume(vol, dataStoreTarget);
         try {
             VolumeApiResult result = future.get();
             if (result.isFailed()) {
@@ -2554,24 +2668,6 @@
         return volume.isDisplayVolume();
     }
 
-    private String getFormatForPool(StoragePool pool) {
-        ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId());
-
-        if (cluster.getHypervisorType() == HypervisorType.XenServer) {
-            return "vhd";
-        } else if (cluster.getHypervisorType() == HypervisorType.KVM) {
-            return "qcow2";
-        } else if (cluster.getHypervisorType() == HypervisorType.Hyperv) {
-            return "vhdx";
-        } else if (cluster.getHypervisorType() == HypervisorType.VMware) {
-            return "ova";
-        } else if (cluster.getHypervisorType() == HypervisorType.Ovm) {
-            return "raw";
-        } else {
-            return null;
-        }
-    }
-
     private boolean needMoveVolume(VolumeVO existingVolume, VolumeInfo newVolume) {
         if (existingVolume == null || existingVolume.getPoolId() == null || newVolume.getPoolId() == null) {
             return false;
@@ -2875,7 +2971,6 @@
     }
 
     public class VmJobVolumeUrlOutcome extends OutcomeImpl<String> {
-
         public VmJobVolumeUrlOutcome(final AsyncJob job) {
             super(String.class, job, VmJobCheckInterval.value(), new Predicate() {
                 @Override
@@ -3070,13 +3165,10 @@
         return new VmJobVolumeUrlOutcome(workJob);
     }
 
-    public Outcome<Volume> migrateVolumeThroughJobQueue(final Long vmId, final long volumeId, final long destPoolId, final boolean liveMigrate) {
-
-        final CallContext context = CallContext.current();
-        final User callingUser = context.getCallingUser();
-        final Account callingAccount = context.getCallingAccount();
-
-        final VMInstanceVO vm = _vmInstanceDao.findById(vmId);
+    private Outcome<Volume> migrateVolumeThroughJobQueue(VMInstanceVO vm, VolumeVO vol, StoragePool destPool, boolean liveMigrateVolume, DiskOfferingVO newDiskOffering) {
+        CallContext context = CallContext.current();
+        User callingUser = context.getCallingUser();
+        Account callingAccount = context.getCallingAccount();
 
         VmWorkJobVO workJob = new VmWorkJobVO(context.getContextId());
 
@@ -3090,15 +3182,18 @@
         workJob.setVmInstanceId(vm.getId());
         workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
 
+        Long newDiskOfferingId = newDiskOffering != null ? newDiskOffering.getId() : null;
+
         // save work context info (there are some duplications)
-        VmWorkMigrateVolume workInfo = new VmWorkMigrateVolume(callingUser.getId(), callingAccount.getId(), vm.getId(), VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, destPoolId, liveMigrate);
+        VmWorkMigrateVolume workInfo = new VmWorkMigrateVolume(callingUser.getId(), callingAccount.getId(), vm.getId(), VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, vol.getId(), destPool.getId(),
+                liveMigrateVolume, newDiskOfferingId);
         workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
 
         _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
 
         AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(workJob.getId());
 
-        return new VmJobVolumeOutcome(workJob, volumeId);
+        return new VmJobVolumeOutcome(workJob, vol.getId());
     }
 
     public Outcome<Snapshot> takeVolumeSnapshotThroughJobQueue(final Long vmId, final Long volumeId, final Long policyId, final Long snapshotId, final Long accountId, final boolean quiesceVm,
@@ -3162,8 +3257,13 @@
 
     @ReflectionUse
     private Pair<JobInfo.Status, String> orchestrateMigrateVolume(VmWorkMigrateVolume work) throws Exception {
-        Volume newVol = orchestrateMigrateVolume(work.getVolumeId(), work.getDestPoolId(), work.isLiveMigrate());
-        return new Pair<JobInfo.Status, String>(JobInfo.Status.SUCCEEDED, _jobMgr.marshallResultObject(new Long(newVol.getId())));
+        VolumeVO volume = _volsDao.findById(work.getVolumeId());
+        StoragePoolVO targetStoragePool = _storagePoolDao.findById(work.getDestPoolId());
+        DiskOfferingVO newDiskOffering = _diskOfferingDao.findById(work.getNewDiskOfferingId());
+
+        Volume newVol = orchestrateMigrateVolume(volume, targetStoragePool, work.isLiveMigrate(), newDiskOffering);
+
+        return new Pair<JobInfo.Status, String>(JobInfo.Status.SUCCEEDED, _jobMgr.marshallResultObject(newVol.getId()));
     }
 
     @ReflectionUse
@@ -3197,4 +3297,4 @@
         return workJob;
     }
 
-}
+}
\ No newline at end of file
diff --git a/server/src/com/cloud/storage/download/DownloadAbandonedState.java b/server/src/main/java/com/cloud/storage/download/DownloadAbandonedState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadAbandonedState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadAbandonedState.java
diff --git a/server/src/com/cloud/storage/download/DownloadActiveState.java b/server/src/main/java/com/cloud/storage/download/DownloadActiveState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadActiveState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadActiveState.java
diff --git a/server/src/com/cloud/storage/download/DownloadCompleteState.java b/server/src/main/java/com/cloud/storage/download/DownloadCompleteState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadCompleteState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadCompleteState.java
diff --git a/server/src/com/cloud/storage/download/DownloadErrorState.java b/server/src/main/java/com/cloud/storage/download/DownloadErrorState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadErrorState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadErrorState.java
diff --git a/server/src/com/cloud/storage/download/DownloadInProgressState.java b/server/src/main/java/com/cloud/storage/download/DownloadInProgressState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadInProgressState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadInProgressState.java
diff --git a/server/src/com/cloud/storage/download/DownloadInactiveState.java b/server/src/main/java/com/cloud/storage/download/DownloadInactiveState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadInactiveState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadInactiveState.java
diff --git a/server/src/com/cloud/storage/download/DownloadListener.java b/server/src/main/java/com/cloud/storage/download/DownloadListener.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadListener.java
rename to server/src/main/java/com/cloud/storage/download/DownloadListener.java
diff --git a/server/src/com/cloud/storage/download/DownloadMonitor.java b/server/src/main/java/com/cloud/storage/download/DownloadMonitor.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadMonitor.java
rename to server/src/main/java/com/cloud/storage/download/DownloadMonitor.java
diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/main/java/com/cloud/storage/download/DownloadMonitorImpl.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadMonitorImpl.java
rename to server/src/main/java/com/cloud/storage/download/DownloadMonitorImpl.java
diff --git a/server/src/com/cloud/storage/download/DownloadState.java b/server/src/main/java/com/cloud/storage/download/DownloadState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/DownloadState.java
rename to server/src/main/java/com/cloud/storage/download/DownloadState.java
diff --git a/server/src/com/cloud/storage/download/NotDownloadedState.java b/server/src/main/java/com/cloud/storage/download/NotDownloadedState.java
similarity index 100%
rename from server/src/com/cloud/storage/download/NotDownloadedState.java
rename to server/src/main/java/com/cloud/storage/download/NotDownloadedState.java
diff --git a/server/src/com/cloud/storage/listener/SnapshotStateListener.java b/server/src/main/java/com/cloud/storage/listener/SnapshotStateListener.java
similarity index 100%
rename from server/src/com/cloud/storage/listener/SnapshotStateListener.java
rename to server/src/main/java/com/cloud/storage/listener/SnapshotStateListener.java
diff --git a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java
similarity index 100%
rename from server/src/com/cloud/storage/listener/StoragePoolMonitor.java
rename to server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java
diff --git a/server/src/com/cloud/storage/listener/StorageSyncListener.java b/server/src/main/java/com/cloud/storage/listener/StorageSyncListener.java
similarity index 100%
rename from server/src/com/cloud/storage/listener/StorageSyncListener.java
rename to server/src/main/java/com/cloud/storage/listener/StorageSyncListener.java
diff --git a/server/src/com/cloud/storage/listener/VolumeStateListener.java b/server/src/main/java/com/cloud/storage/listener/VolumeStateListener.java
similarity index 100%
rename from server/src/com/cloud/storage/listener/VolumeStateListener.java
rename to server/src/main/java/com/cloud/storage/listener/VolumeStateListener.java
diff --git a/server/src/com/cloud/storage/monitor/StorageHostMonitor.java b/server/src/main/java/com/cloud/storage/monitor/StorageHostMonitor.java
similarity index 100%
rename from server/src/com/cloud/storage/monitor/StorageHostMonitor.java
rename to server/src/main/java/com/cloud/storage/monitor/StorageHostMonitor.java
diff --git a/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java b/server/src/main/java/com/cloud/storage/resource/DummySecondaryStorageResource.java
similarity index 100%
rename from server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java
rename to server/src/main/java/com/cloud/storage/resource/DummySecondaryStorageResource.java
diff --git a/server/src/com/cloud/storage/secondary/SecStorageVmAlertEventArgs.java b/server/src/main/java/com/cloud/storage/secondary/SecStorageVmAlertEventArgs.java
similarity index 100%
rename from server/src/com/cloud/storage/secondary/SecStorageVmAlertEventArgs.java
rename to server/src/main/java/com/cloud/storage/secondary/SecStorageVmAlertEventArgs.java
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageListener.java
similarity index 100%
rename from server/src/com/cloud/storage/secondary/SecondaryStorageListener.java
rename to server/src/main/java/com/cloud/storage/secondary/SecondaryStorageListener.java
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageVmAllocator.java b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmAllocator.java
similarity index 100%
rename from server/src/com/cloud/storage/secondary/SecondaryStorageVmAllocator.java
rename to server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmAllocator.java
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageVmDefaultAllocator.java b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmDefaultAllocator.java
similarity index 100%
rename from server/src/com/cloud/storage/secondary/SecondaryStorageVmDefaultAllocator.java
rename to server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmDefaultAllocator.java
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java
similarity index 100%
rename from server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java
rename to server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManager.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManager.java
similarity index 100%
rename from server/src/com/cloud/storage/snapshot/SnapshotManager.java
rename to server/src/main/java/com/cloud/storage/snapshot/SnapshotManager.java
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java
similarity index 97%
rename from server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
rename to server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index bd49c05..2874db9 100755
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@ -382,6 +382,30 @@
     }
 
     @Override
+    public Snapshot archiveSnapshot(Long snapshotId) {
+        SnapshotInfo snapshotOnPrimary = snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Primary);
+
+        if (snapshotOnPrimary == null || !snapshotOnPrimary.getStatus().equals(ObjectInDataStoreStateMachine.State.Ready)) {
+            throw new CloudRuntimeException("Can only archive snapshots present on primary storage. " +
+                    "Cannot find snapshot " + snapshotId + " on primary storage");
+        }
+
+        SnapshotInfo snapshotOnSecondary = snapshotSrv.backupSnapshot(snapshotOnPrimary);
+        SnapshotVO snapshotVO = _snapshotDao.findById(snapshotOnSecondary.getId());
+        snapshotVO.setLocationType(Snapshot.LocationType.SECONDARY);
+        _snapshotDao.persist(snapshotVO);
+
+        try {
+            snapshotSrv.deleteSnapshot(snapshotOnPrimary);
+        } catch (Exception e) {
+            throw new CloudRuntimeException("Snapshot archived to Secondary Storage but there was an error deleting " +
+                    " the snapshot on Primary Storage. Please manually delete the primary snapshot " + snapshotId, e);
+        }
+
+        return snapshotOnSecondary;
+    }
+
+    @Override
     public Snapshot backupSnapshot(Long snapshotId) {
         SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Image);
         if (snapshot != null) {
@@ -715,7 +739,7 @@
     @Override
     public boolean deleteSnapshotDirsForAccount(long accountId) {
 
-        List<VolumeVO> volumes = _volsDao.findByAccount(accountId);
+        List<VolumeVO> volumes = _volsDao.findIncludingRemovedByAccount(accountId);
         // The above call will list only non-destroyed volumes.
         // So call this method before marking the volumes as destroyed.
         // i.e Call them before the VMs for those volumes are destroyed.
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotScheduler.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotScheduler.java
similarity index 100%
rename from server/src/com/cloud/storage/snapshot/SnapshotScheduler.java
rename to server/src/main/java/com/cloud/storage/snapshot/SnapshotScheduler.java
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
similarity index 100%
rename from server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
rename to server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
diff --git a/server/src/com/cloud/storage/upload/NotUploadedState.java b/server/src/main/java/com/cloud/storage/upload/NotUploadedState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/NotUploadedState.java
rename to server/src/main/java/com/cloud/storage/upload/NotUploadedState.java
diff --git a/server/src/com/cloud/storage/upload/UploadAbandonedState.java b/server/src/main/java/com/cloud/storage/upload/UploadAbandonedState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadAbandonedState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadAbandonedState.java
diff --git a/server/src/com/cloud/storage/upload/UploadActiveState.java b/server/src/main/java/com/cloud/storage/upload/UploadActiveState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadActiveState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadActiveState.java
diff --git a/server/src/com/cloud/storage/upload/UploadCompleteState.java b/server/src/main/java/com/cloud/storage/upload/UploadCompleteState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadCompleteState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadCompleteState.java
diff --git a/server/src/com/cloud/storage/upload/UploadErrorState.java b/server/src/main/java/com/cloud/storage/upload/UploadErrorState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadErrorState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadErrorState.java
diff --git a/server/src/com/cloud/storage/upload/UploadInProgressState.java b/server/src/main/java/com/cloud/storage/upload/UploadInProgressState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadInProgressState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadInProgressState.java
diff --git a/server/src/com/cloud/storage/upload/UploadInactiveState.java b/server/src/main/java/com/cloud/storage/upload/UploadInactiveState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadInactiveState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadInactiveState.java
diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/main/java/com/cloud/storage/upload/UploadListener.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadListener.java
rename to server/src/main/java/com/cloud/storage/upload/UploadListener.java
diff --git a/server/src/com/cloud/storage/upload/UploadMonitor.java b/server/src/main/java/com/cloud/storage/upload/UploadMonitor.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadMonitor.java
rename to server/src/main/java/com/cloud/storage/upload/UploadMonitor.java
diff --git a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java b/server/src/main/java/com/cloud/storage/upload/UploadMonitorImpl.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadMonitorImpl.java
rename to server/src/main/java/com/cloud/storage/upload/UploadMonitorImpl.java
diff --git a/server/src/com/cloud/storage/upload/UploadState.java b/server/src/main/java/com/cloud/storage/upload/UploadState.java
similarity index 100%
rename from server/src/com/cloud/storage/upload/UploadState.java
rename to server/src/main/java/com/cloud/storage/upload/UploadState.java
diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/main/java/com/cloud/tags/TaggedResourceManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/tags/TaggedResourceManagerImpl.java
rename to server/src/main/java/com/cloud/tags/TaggedResourceManagerImpl.java
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
similarity index 100%
rename from server/src/com/cloud/template/HypervisorTemplateAdapter.java
rename to server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
diff --git a/server/src/com/cloud/template/TemplateAdapter.java b/server/src/main/java/com/cloud/template/TemplateAdapter.java
similarity index 100%
rename from server/src/com/cloud/template/TemplateAdapter.java
rename to server/src/main/java/com/cloud/template/TemplateAdapter.java
diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
similarity index 97%
rename from server/src/com/cloud/template/TemplateAdapterBase.java
rename to server/src/main/java/com/cloud/template/TemplateAdapterBase.java
index e7f21b1..ebb73da 100644
--- a/server/src/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
@@ -339,10 +339,10 @@
     protected VMTemplateVO persistTemplate(TemplateProfile profile, VirtualMachineTemplate.State initialState) {
         List<Long> zoneIdList = profile.getZoneIdList();
         VMTemplateVO template =
-            new VMTemplateVO(profile.getTemplateId(), profile.getName(), profile.getFormat(), profile.getIsPublic(), profile.getFeatured(), profile.getIsExtractable(),
-                profile.getTemplateType(), profile.getUrl(), profile.getRequiresHVM(), profile.getBits(), profile.getAccountId(), profile.getCheckSum(),
-                profile.getDisplayText(), profile.getPasswordEnabled(), profile.getGuestOsId(), profile.getBootable(), profile.getHypervisorType(),
-                profile.getTemplateTag(), profile.getDetails(), profile.getSshKeyEnabled(), profile.IsDynamicallyScalable(), profile.isDirectDownload());
+            new VMTemplateVO(profile.getTemplateId(), profile.getName(), profile.getFormat(), profile.isPublic(), profile.isFeatured(), profile.isExtractable(),
+                profile.getTemplateType(), profile.getUrl(), profile.isRequiresHVM(), profile.getBits(), profile.getAccountId(), profile.getCheckSum(),
+                profile.getDisplayText(), profile.isPasswordEnabled(), profile.getGuestOsId(), profile.isBootable(), profile.getHypervisorType(),
+                profile.getTemplateTag(), profile.getDetails(), profile.isSshKeyEnabled(), profile.IsDynamicallyScalable(), profile.isDirectDownload());
         template.setState(initialState);
 
         if (profile.isDirectDownload()) {
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/template/TemplateManagerImpl.java
rename to server/src/main/java/com/cloud/template/TemplateManagerImpl.java
index 42bdd72..7076a66 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
@@ -1128,7 +1128,7 @@
         if (isoId == null) {
             throw new InvalidParameterValueException("The specified VM has no ISO attached to it.");
         }
-        CallContext.current().setEventDetails("Vm Id: " + vmId + " ISO Id: " + isoId);
+        CallContext.current().setEventDetails("Vm Id: " + userVM.getUuid() + " ISO Id: " + isoId);
 
         State vmState = userVM.getState();
         if (vmState != State.Running && vmState != State.Stopped) {
@@ -1232,7 +1232,10 @@
 
         // prepare ISO ready to mount on hypervisor resource level
         TemplateInfo tmplt = prepareIso(isoId, vm.getDataCenterId(), vm.getHostId(), null);
-
+        if (tmplt == null) {
+            s_logger.error("Failed to prepare ISO ready to mount on hypervisor resource level");
+            throw new CloudRuntimeException("Failed to prepare ISO ready to mount on hypervisor resource level");
+        }
         String vmName = vm.getInstanceName();
 
         HostVO host = _hostDao.findById(vm.getHostId());
diff --git a/server/src/com/cloud/test/DatabaseConfig.java b/server/src/main/java/com/cloud/test/DatabaseConfig.java
similarity index 100%
rename from server/src/com/cloud/test/DatabaseConfig.java
rename to server/src/main/java/com/cloud/test/DatabaseConfig.java
diff --git a/server/src/com/cloud/test/IPRangeConfig.java b/server/src/main/java/com/cloud/test/IPRangeConfig.java
similarity index 100%
rename from server/src/com/cloud/test/IPRangeConfig.java
rename to server/src/main/java/com/cloud/test/IPRangeConfig.java
diff --git a/server/src/com/cloud/test/PodZoneConfig.java b/server/src/main/java/com/cloud/test/PodZoneConfig.java
similarity index 99%
rename from server/src/com/cloud/test/PodZoneConfig.java
rename to server/src/main/java/com/cloud/test/PodZoneConfig.java
index c55178f..ee017d5 100644
--- a/server/src/com/cloud/test/PodZoneConfig.java
+++ b/server/src/main/java/com/cloud/test/PodZoneConfig.java
@@ -61,7 +61,7 @@
         DatabaseConfig.saveSQL(sql, "Failed to save pod due to exception. Please contact Cloud Support.");
 
         if (printOutput)
-            System.out.println("Successfuly saved pod.");
+            System.out.println("Successfully saved pod.");
     }
 
     public void checkAllPodCidrSubnets() {
@@ -485,7 +485,7 @@
     public void saveVlan(long zoneId, Long podId, String vlanId, String vlanGateway, String vlanNetmask, String vlanType, String ipRange, long networkId,
         long physicalNetworkId) {
         String sql =
-            "INSERT INTO `cloud`.`vlan` (vlan_id, vlan_gateway, vlan_netmask, data_center_id, vlan_type, description, network_id, physical_network_id) " + "VALUES ('" +
+            "INSERT INTO `cloud`.`vlan` (vlan_id, vlan_gateway, vlan_netmask, data_center_id, vlan_type, ip4_range, network_id, physical_network_id) " + "VALUES ('" +
                 vlanId + "','" + vlanGateway + "','" + vlanNetmask + "','" + zoneId + "','" + vlanType + "','" + ipRange + "','" + networkId + "','" + physicalNetworkId +
                 "')";
         DatabaseConfig.saveSQL(sql, "Failed to save vlan due to exception. Please contact Cloud Support.");
diff --git a/server/src/com/cloud/test/TestAppender.java b/server/src/main/java/com/cloud/test/TestAppender.java
similarity index 100%
rename from server/src/com/cloud/test/TestAppender.java
rename to server/src/main/java/com/cloud/test/TestAppender.java
diff --git a/server/src/com/cloud/usage/UsageServiceImpl.java b/server/src/main/java/com/cloud/usage/UsageServiceImpl.java
similarity index 100%
rename from server/src/com/cloud/usage/UsageServiceImpl.java
rename to server/src/main/java/com/cloud/usage/UsageServiceImpl.java
diff --git a/server/src/com/cloud/user/AccountManager.java b/server/src/main/java/com/cloud/user/AccountManager.java
similarity index 72%
rename from server/src/com/cloud/user/AccountManager.java
rename to server/src/main/java/com/cloud/user/AccountManager.java
index e708b04..de6dcca 100644
--- a/server/src/com/cloud/user/AccountManager.java
+++ b/server/src/main/java/com/cloud/user/AccountManager.java
@@ -16,15 +16,17 @@
 // under the License.
 package com.cloud.user;
 
+import java.net.InetAddress;
 import java.util.List;
 import java.util.Map;
-import java.net.InetAddress;
 
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
 import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;
 import org.apache.cloudstack.api.command.admin.user.MoveUserCmd;
 import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
+import org.apache.cloudstack.framework.config.ConfigKey;
+import org.apache.cloudstack.framework.config.Configurable;
 
 import com.cloud.api.query.vo.ControlledViewEntity;
 import com.cloud.exception.ConcurrentOperationException;
@@ -34,17 +36,14 @@
 import com.cloud.utils.Ternary;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
-import org.apache.cloudstack.framework.config.ConfigKey;
-import org.apache.cloudstack.framework.config.Configurable;
 
 /**
  * AccountManager includes logic that deals with accounts, domains, and users.
  *
  */
-public interface AccountManager extends AccountService, Configurable{
+public interface AccountManager extends AccountService, Configurable {
     /**
      * Disables an account by accountId
-     * @param accountId
      * @return true if disable was successful, false otherwise
      */
     boolean disableAccount(long accountId) throws ConcurrentOperationException, ResourceUnavailableException;
@@ -57,24 +56,23 @@
 
     /**
      * Logs out a user
-     * @param userId
      */
     void logoutUser(long userId);
 
     /**
-      * Authenticates a user when s/he logs in.
-      *
-      * @param username
-      *            required username for authentication
-      * @param password
-      *            password to use for authentication, can be null for single sign-on case
-      * @param domainId
-      *            id of domain where user with username resides
-      * @param requestParameters
-      *            the request parameters of the login request, which should contain timestamp of when the request signature is
-      *            made, and the signature itself in the single sign-on case
-      * @return a user object, null if the user failed to authenticate
-      */
+     * Authenticates a user when s/he logs in.
+     *
+     * @param username
+     *            required username for authentication
+     * @param password
+     *            password to use for authentication, can be null for single sign-on case
+     * @param domainId
+     *            id of domain where user with username resides
+     * @param requestParameters
+     *            the request parameters of the login request, which should contain timestamp of when the request signature is
+     *            made, and the signature itself in the single sign-on case
+     * @return a user object, null if the user failed to authenticate
+     */
     UserAccount authenticateUser(String username, String password, Long domainId, InetAddress loginIpAddress, Map<String, Object[]> requestParameters);
 
     /**
@@ -88,23 +86,20 @@
 
     boolean enableAccount(long accountId);
 
+    void buildACLSearchBuilder(SearchBuilder<? extends ControlledEntity> sb, Long domainId, boolean isRecursive, List<Long> permittedAccounts,
+            ListProjectResourcesCriteria listProjectResourcesCriteria);
 
-    void buildACLSearchBuilder(SearchBuilder<? extends ControlledEntity> sb, Long domainId,
-            boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
+    void buildACLViewSearchBuilder(SearchBuilder<? extends ControlledViewEntity> sb, Long domainId, boolean isRecursive, List<Long> permittedAccounts,
+            ListProjectResourcesCriteria listProjectResourcesCriteria);
 
-    void buildACLViewSearchBuilder(SearchBuilder<? extends ControlledViewEntity> sb, Long domainId,
-            boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
+    void buildACLSearchCriteria(SearchCriteria<? extends ControlledEntity> sc, Long domainId, boolean isRecursive, List<Long> permittedAccounts,
+            ListProjectResourcesCriteria listProjectResourcesCriteria);
 
-    void buildACLSearchCriteria(SearchCriteria<? extends ControlledEntity> sc,
-            Long domainId, boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
+    void buildACLSearchParameters(Account caller, Long id, String accountName, Long projectId, List<Long> permittedAccounts,
+            Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject, boolean listAll, boolean forProjectInvitation);
 
-    void buildACLSearchParameters(Account caller, Long id,
-            String accountName, Long projectId, List<Long> permittedAccounts, Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject, boolean listAll,
-            boolean forProjectInvitation);
-
-    void buildACLViewSearchCriteria(SearchCriteria<? extends ControlledViewEntity> sc,
-            Long domainId, boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
-
+    void buildACLViewSearchCriteria(SearchCriteria<? extends ControlledViewEntity> sc, Long domainId, boolean isRecursive, List<Long> permittedAccounts,
+            ListProjectResourcesCriteria listProjectResourcesCriteria);
 
     /**
      * Deletes a user by userId
@@ -127,10 +122,6 @@
 
     /**
      * Disables an account by accountName and domainId
-     *
-     * @param accountName
-     * @param domainId
-     * @param accountId
      * @param disabled
      *            account if success
      * @return true if disable was successful, false otherwise
@@ -142,33 +133,21 @@
      *
      * @param accountName
      *            - the enableAccount command defining the accountId to be deleted.
-     * @param domainId
-     *            TODO
-     * @param accountId
-     * @return account object
      */
     Account enableAccount(String accountName, Long domainId, Long accountId);
 
     /**
      * Deletes user by Id
-     * @param deleteUserCmd
-     * @return
      */
     boolean deleteUser(DeleteUserCmd deleteUserCmd);
 
     /**
      * moves a user to another account within the same domain
-     * @param moveUserCmd
      * @return true if the user was successfully moved
      */
     boolean moveUser(MoveUserCmd moveUserCmd);
 
-    /**
-     * Update a user by userId
-     *
-     * @param cmd
-     * @return UserAccount object
-     */
+    @Override
     UserAccount updateUser(UpdateUserCmd cmd);
 
     /**
@@ -196,10 +175,6 @@
      *
      * @param accountName
      *            - the LockAccount command defining the accountId to be locked.
-     * @param domainId
-     *            TODO
-     * @param accountId
-     * @return account object
      */
     Account lockAccount(String accountName, Long domainId, Long accountId);
 
@@ -208,13 +183,8 @@
     public static final String MESSAGE_ADD_ACCOUNT_EVENT = "Message.AddAccount.Event";
 
     public static final String MESSAGE_REMOVE_ACCOUNT_EVENT = "Message.RemoveAccount.Event";
-    public static final ConfigKey<Boolean> UseSecretKeyInResponse = new ConfigKey<Boolean>(
-            "Advanced",
-            Boolean.class,
-            "use.secret.key.in.response",
-            "false",
-            "This parameter allows the users to enable or disable of showing secret key as a part of response for various APIs. By default it is set to false.",
-            true);
+    public static final ConfigKey<Boolean> UseSecretKeyInResponse = new ConfigKey<Boolean>("Advanced", Boolean.class, "use.secret.key.in.response", "false",
+            "This parameter allows the users to enable or disable of showing secret key as a part of response for various APIs. By default it is set to false.", true);
 
     boolean moveUser(long id, Long domainId, long accountId);
 }
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java
similarity index 88%
rename from server/src/com/cloud/user/AccountManagerImpl.java
rename to server/src/main/java/com/cloud/user/AccountManagerImpl.java
index 9129976..6025818 100644
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java
@@ -23,7 +23,6 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -38,10 +37,6 @@
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.acl.QuerySelector;
 import org.apache.cloudstack.acl.RoleType;
@@ -55,6 +50,7 @@
 import org.apache.cloudstack.api.command.admin.user.MoveUserCmd;
 import org.apache.cloudstack.api.command.admin.user.RegisterCmd;
 import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
+import org.apache.cloudstack.config.ApiServiceConfiguration;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.cloudstack.framework.config.ConfigKey;
@@ -64,6 +60,11 @@
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 import org.apache.cloudstack.region.gslb.GlobalLoadBalancerRuleDao;
 import org.apache.cloudstack.utils.baremetal.BaremetalUtils;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.Logger;
 
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.query.vo.ControlledViewEntity;
@@ -122,13 +123,13 @@
 import com.cloud.projects.ProjectVO;
 import com.cloud.projects.dao.ProjectAccountDao;
 import com.cloud.projects.dao.ProjectDao;
+import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.server.auth.UserAuthenticator;
 import com.cloud.server.auth.UserAuthenticator.ActionOnFailedAuthentication;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeApiService;
 import com.cloud.storage.VolumeVO;
-import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.snapshot.SnapshotManager;
@@ -172,8 +173,6 @@
 import com.cloud.vm.snapshot.VMSnapshotManager;
 import com.cloud.vm.snapshot.VMSnapshotVO;
 import com.cloud.vm.snapshot.dao.VMSnapshotDao;
-import org.apache.cloudstack.config.ApiServiceConfiguration;
-
 
 public class AccountManagerImpl extends ManagerBase implements AccountManager, Manager {
     public static final Logger s_logger = Logger.getLogger(AccountManagerImpl.class);
@@ -181,9 +180,7 @@
     @Inject
     private AccountDao _accountDao;
     @Inject
-    private AccountManager _accountMgr;
-    @Inject
-    ConfigurationDao _configDao;
+    private ConfigurationDao _configDao;
     @Inject
     private ResourceCountDao _resourceCountDao;
     @Inject
@@ -205,10 +202,6 @@
     @Inject
     private VMInstanceDao _vmDao;
     @Inject
-    protected SnapshotDao _snapshotDao;
-    @Inject
-    protected VMTemplateDao _vmTemplateDao;
-    @Inject
     private SecurityGroupManager _networkGroupMgr;
     @Inject
     private NetworkOrchestrationService _networkMgr;
@@ -251,11 +244,11 @@
     @Inject
     private VpcManager _vpcMgr;
     @Inject
-    Site2SiteVpnManager _vpnMgr;
+    private Site2SiteVpnManager _vpnMgr;
     @Inject
     private AutoScaleManager _autoscaleMgr;
     @Inject
-    VolumeApiService volumeService;
+    private VolumeApiService volumeService;
     @Inject
     private AffinityGroupDao _affinityGroupDao;
     @Inject
@@ -273,29 +266,29 @@
     @Inject
     private SSHKeyPairDao _sshKeyPairDao;
 
-    List<QuerySelector> _querySelectors;
+    private List<QuerySelector> _querySelectors;
 
     @Inject
-    MessageBus _messageBus;
+    private MessageBus _messageBus;
 
     @Inject
-    public com.cloud.region.ha.GlobalLoadBalancingRulesService _gslbService;
+    private GlobalLoadBalancingRulesService _gslbService;
 
     private List<UserAuthenticator> _userAuthenticators;
-    List<UserAuthenticator> _userPasswordEncoders;
+    protected List<UserAuthenticator> _userPasswordEncoders;
 
     @Inject
-    protected IpAddressManager _ipAddrMgr;
+    private IpAddressManager _ipAddrMgr;
 
     private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AccountChecker"));
 
-    int _allowedLoginAttempts;
+    private int _allowedLoginAttempts;
 
-    UserVO _systemUser;
-    AccountVO _systemAccount;
+    private UserVO _systemUser;
+    private AccountVO _systemAccount;
 
-    List<SecurityChecker> _securityCheckers;
-    int _cleanupInterval;
+    private List<SecurityChecker> _securityCheckers;
+    private int _cleanupInterval;
 
     public List<UserAuthenticator> getUserAuthenticators() {
         return _userAuthenticators;
@@ -494,8 +487,6 @@
                 return;
             }
         }
-
-        assert false : "How can all of the security checkers pass on checking this caller?";
         throw new PermissionDeniedException("There's no way to confirm " + caller + " has access to " + domain);
     }
 
@@ -540,8 +531,8 @@
                 Account account = ApiDBUtils.findAccountById(entity.getAccountId());
                 domainId = account != null ? account.getDomainId() : -1;
             }
-            if (entity.getAccountId() != -1 && domainId != -1 && !(entity instanceof VirtualMachineTemplate)
-                    && !(entity instanceof Network && accessType != null && accessType == AccessType.UseEntry) && !(entity instanceof AffinityGroup)) {
+            if (entity.getAccountId() != -1 && domainId != -1 && !(entity instanceof VirtualMachineTemplate) && !(entity instanceof Network && accessType != null && accessType == AccessType.UseEntry)
+                    && !(entity instanceof AffinityGroup)) {
                 List<ControlledEntity> toBeChecked = domains.get(entity.getDomainId());
                 // for templates, we don't have to do cross domains check
                 if (toBeChecked == null) {
@@ -563,7 +554,7 @@
 
             if (!granted) {
                 assert false : "How can all of the security checkers pass on checking this check: " + entity;
-                throw new PermissionDeniedException("There's no way to confirm " + caller + " has access to " + entity);
+            throw new PermissionDeniedException("There's no way to confirm " + caller + " has access to " + entity);
             }
         }
 
@@ -590,26 +581,27 @@
     public Long checkAccessAndSpecifyAuthority(Account caller, Long zoneId) {
         // We just care for resource domain admin for now. He should be permitted to see only his zone.
         if (isResourceDomainAdmin(caller.getAccountId())) {
-            if (zoneId == null)
+            if (zoneId == null) {
                 return getZoneIdForAccount(caller);
-            else if (zoneId.compareTo(getZoneIdForAccount(caller)) != 0)
+            } else if (zoneId.compareTo(getZoneIdForAccount(caller)) != 0) {
                 throw new PermissionDeniedException("Caller " + caller + "is not allowed to access the zone " + zoneId);
-            else
+            } else {
                 return zoneId;
-        }
-
-        else
+            }
+        } else {
             return zoneId;
+        }
     }
 
     private Long getZoneIdForAccount(Account account) {
 
         // Currently just for resource domain admin
         List<DataCenterVO> dcList = _dcDao.findZonesByDomainId(account.getDomainId());
-        if (dcList != null && dcList.size() != 0)
+        if (dcList != null && dcList.size() != 0) {
             return dcList.get(0).getId();
-        else
+        } else {
             throw new CloudRuntimeException("Failed to find any private zone for Resource domain admin.");
+        }
 
     }
 
@@ -1011,13 +1003,12 @@
 
     @Override
     @ActionEvents({@ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_CREATE, eventDescription = "creating Account"),
-            @ActionEvent(eventType = EventTypes.EVENT_USER_CREATE, eventDescription = "creating User")})
-    public UserAccount createUserAccount(final String userName, final String password, final String firstName, final String lastName, final String email, final String timezone,
-            String accountName, final short accountType, final Long roleId, Long domainId, final String networkDomain, final Map<String, String> details, String accountUUID,
-            final String userUUID) {
+        @ActionEvent(eventType = EventTypes.EVENT_USER_CREATE, eventDescription = "creating User")})
+    public UserAccount createUserAccount(final String userName, final String password, final String firstName, final String lastName, final String email, final String timezone, String accountName,
+            final short accountType, final Long roleId, Long domainId, final String networkDomain, final Map<String, String> details, String accountUUID, final String userUUID) {
 
-        return createUserAccount(userName, password, firstName, lastName, email, timezone, accountName, accountType, roleId, domainId, networkDomain, details, accountUUID,
-                userUUID, User.Source.UNKNOWN);
+        return createUserAccount(userName, password, firstName, lastName, email, timezone, accountName, accountType, roleId, domainId, networkDomain, details, accountUUID, userUUID,
+                User.Source.UNKNOWN);
     }
 
     // ///////////////////////////////////////////////////
@@ -1027,10 +1018,10 @@
     @Override
     @DB
     @ActionEvents({@ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_CREATE, eventDescription = "creating Account"),
-            @ActionEvent(eventType = EventTypes.EVENT_USER_CREATE, eventDescription = "creating User")})
-    public UserAccount createUserAccount(final String userName, final String password, final String firstName, final String lastName, final String email, final String timezone,
-            String accountName, final short accountType, final Long roleId, Long domainId, final String networkDomain, final Map<String, String> details, String accountUUID,
-            final String userUUID, final User.Source source) {
+        @ActionEvent(eventType = EventTypes.EVENT_USER_CREATE, eventDescription = "creating User")})
+    public UserAccount createUserAccount(final String userName, final String password, final String firstName, final String lastName, final String email, final String timezone, String accountName,
+            final short accountType, final Long roleId, Long domainId, final String networkDomain, final Map<String, String> details, String accountUUID, final String userUUID,
+            final User.Source source) {
 
         if (accountName == null) {
             accountName = userName;
@@ -1058,7 +1049,7 @@
         }
 
         // Check permissions
-        checkAccess(CallContext.current().getCallingAccount(), domain);
+        checkAccess(getCurrentCallingAccount(), domain);
 
         if (!_userAccountDao.validateUsernameInDomain(userName, domainId)) {
             throw new InvalidParameterValueException("The user " + userName + " already exists in domain " + domainId);
@@ -1132,7 +1123,7 @@
             throw new CloudRuntimeException("The user cannot be created as domain " + domain.getName() + " is being deleted");
         }
 
-        checkAccess(CallContext.current().getCallingAccount(), domain);
+        checkAccess(getCurrentCallingAccount(), domain);
 
         Account account = _accountDao.findEnabledAccount(accountName, domainId);
         if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
@@ -1153,157 +1144,246 @@
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_USER_CREATE, eventDescription = "creating User")
-    public UserVO createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId,
-            String userUUID) {
+    public UserVO createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID) {
 
         return createUser(userName, password, firstName, lastName, email, timeZone, accountName, domainId, userUUID, User.Source.UNKNOWN);
     }
 
     @Override
-    @ActionEvent(eventType = EventTypes.EVENT_USER_UPDATE, eventDescription = "updating User")
-    public UserAccount updateUser(Long userId, String firstName, String lastName, String email, String userName, String password, String apiKey, String secretKey,
-            String timeZone) {
-        // Input validation
-        UserVO user = _userDao.getUser(userId);
+    @ActionEvent(eventType = EventTypes.EVENT_USER_UPDATE, eventDescription = "Updating User")
+    public UserAccount updateUser(UpdateUserCmd updateUserCmd) {
+        UserVO user = retrieveAndValidateUser(updateUserCmd);
+        s_logger.debug("Updating user with Id: " + user.getUuid());
 
-        if (user == null) {
-            throw new InvalidParameterValueException("unable to find user by id");
+        validateAndUpdatApiAndSecretKeyIfNeeded(updateUserCmd, user);
+        Account account = retrieveAndValidateAccount(user);
+
+        validateAndUpdateFirstNameIfNeeded(updateUserCmd, user);
+        validateAndUpdateLastNameIfNeeded(updateUserCmd, user);
+        validateAndUpdateUsernameIfNeeded(updateUserCmd, user, account);
+
+        validateUserPasswordAndUpdateIfNeeded(updateUserCmd.getPassword(), user, updateUserCmd.getCurrentPassword());
+        String email = updateUserCmd.getEmail();
+        if (StringUtils.isNotBlank(email)) {
+            user.setEmail(email);
         }
-
-        if ((apiKey == null && secretKey != null) || (apiKey != null && secretKey == null)) {
-            throw new InvalidParameterValueException("Please provide an userApiKey/userSecretKey pair");
+        String timezone = updateUserCmd.getTimezone();
+        if (StringUtils.isNotBlank(timezone)) {
+            user.setTimezone(timezone);
         }
+        _userDao.update(user.getId(), user);
+        return _userAccountDao.findById(user.getId());
+    }
 
-        // If the account is an admin type, return an error. We do not allow this
-        Account account = _accountDao.findById(user.getAccountId());
-        if (account == null) {
-            throw new InvalidParameterValueException("unable to find user account " + user.getAccountId());
+    /**
+     * Updates the password in the user POJO if needed. If no password is provided, then the password is not updated.
+     * The following validations are executed if 'password' is not null. Admins (root admins or domain admins) can execute password updates without entering the current password.
+     * <ul>
+     *  <li> If 'password' is blank, we throw an {@link InvalidParameterValueException};
+     *  <li> If 'current password' is not provided and user is not an Admin, we throw an {@link InvalidParameterValueException};
+     *  <li> If a normal user is calling this method, we use {@link #validateCurrentPassword(UserVO, String)} to check if the provided old password matches the database one;
+     * </ul>
+     *
+     * If all checks pass, we encode the given password with the most preferable password mechanism given in {@link #_userPasswordEncoders}.
+     */
+    protected void validateUserPasswordAndUpdateIfNeeded(String newPassword, UserVO user, String currentPassword) {
+        if (newPassword == null) {
+            s_logger.trace("No new password to update for user: " + user.getUuid());
+            return;
         }
-
-        // don't allow updating project account
-        if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
-            throw new InvalidParameterValueException("unable to find user by id");
+        if (StringUtils.isBlank(newPassword)) {
+            throw new InvalidParameterValueException("Password cannot be empty or blank.");
         }
-
-        // don't allow updating system account
-        if (account.getId() == Account.ACCOUNT_ID_SYSTEM) {
-            throw new PermissionDeniedException("user id : " + userId + " is system account, update is not allowed");
+        Account callingAccount = getCurrentCallingAccount();
+        boolean isRootAdminExecutingPasswordUpdate = callingAccount.getId() == Account.ACCOUNT_ID_SYSTEM || isRootAdmin(callingAccount.getId());
+        boolean isDomainAdmin = isDomainAdmin(callingAccount.getId());
+        boolean isAdmin = isDomainAdmin || isRootAdminExecutingPasswordUpdate;
+        if (isAdmin) {
+            s_logger.trace(String.format("Admin account [uuid=%s] executing password update for user [%s] ", callingAccount.getUuid(), user.getUuid()));
         }
+        if (!isAdmin && StringUtils.isBlank(currentPassword)) {
+            throw new InvalidParameterValueException("To set a new password the current password must be provided.");
+        }
+        if (CollectionUtils.isEmpty(_userPasswordEncoders)) {
+            throw new CloudRuntimeException("No user authenticators configured!");
+        }
+        if (!isAdmin) {
+            validateCurrentPassword(user, currentPassword);
+        }
+        UserAuthenticator userAuthenticator = _userPasswordEncoders.get(0);
+        String newPasswordEncoded = userAuthenticator.encode(newPassword);
+        user.setPassword(newPasswordEncoded);
+    }
 
-        checkAccess(CallContext.current().getCallingAccount(), AccessType.OperateEntry, true, account);
-
-        if (firstName != null) {
-            if (firstName.isEmpty()) {
-                throw new InvalidParameterValueException("Firstname is empty");
+    /**
+     * Iterates over all configured user authenticators and tries to authenticate the user using the current password.
+     * If the user is authenticated with success, we have nothing else to do here; otherwise, an {@link InvalidParameterValueException} is thrown.
+     */
+    protected void validateCurrentPassword(UserVO user, String currentPassword) {
+        AccountVO userAccount = _accountDao.findById(user.getAccountId());
+        boolean currentPasswordMatchesDataBasePassword = false;
+        for (UserAuthenticator userAuthenticator : _userPasswordEncoders) {
+            Pair<Boolean, ActionOnFailedAuthentication> authenticationResult = userAuthenticator.authenticate(user.getUsername(), currentPassword, userAccount.getDomainId(), null);
+            if (authenticationResult == null) {
+                s_logger.trace(String.format("Authenticator [%s] is returning null for the authenticate mehtod.", userAuthenticator.getClass()));
+                continue;
             }
-
-            user.setFirstname(firstName);
+            if (BooleanUtils.toBoolean(authenticationResult.first())) {
+                s_logger.debug(String.format("User [id=%s] re-authenticated [authenticator=%s] during password update.", user.getUuid(), userAuthenticator.getName()));
+                currentPasswordMatchesDataBasePassword = true;
+                break;
+            }
         }
+        if (!currentPasswordMatchesDataBasePassword) {
+            throw new InvalidParameterValueException("Current password is incorrect.");
+        }
+    }
+
+    /**
+     * Validates the user 'username' if provided. The 'username' cannot be blank (when provided).
+     * <ul>
+     *  <li> If the 'username' is not provided, we do not update it (setting to null) in the User POJO.
+     *  <li> If the 'username' is blank, we throw an {@link InvalidParameterValueException}.
+     *  <li> The username must be unique in each domain. Therefore, if there is already another user with the same username, an {@link InvalidParameterValueException} is thrown.
+     * </ul>
+     */
+    protected void validateAndUpdateUsernameIfNeeded(UpdateUserCmd updateUserCmd, UserVO user, Account account) {
+        String userName = updateUserCmd.getUsername();
+        if (userName == null) {
+            return;
+        }
+        if (StringUtils.isBlank(userName)) {
+            throw new InvalidParameterValueException("Username cannot be empty.");
+        }
+        List<UserVO> duplicatedUsers = _userDao.findUsersByName(userName);
+        for (UserVO duplicatedUser : duplicatedUsers) {
+            if (duplicatedUser.getId() == user.getId()) {
+                continue;
+            }
+            Account duplicatedUserAccountWithUserThatHasTheSameUserName = _accountDao.findById(duplicatedUser.getAccountId());
+            if (duplicatedUserAccountWithUserThatHasTheSameUserName.getDomainId() == account.getDomainId()) {
+                DomainVO domain = _domainDao.findById(duplicatedUserAccountWithUserThatHasTheSameUserName.getDomainId());
+                throw new InvalidParameterValueException(String.format("Username [%s] already exists in domain [id=%s,name=%s]", duplicatedUser.getUsername(), domain.getUuid(), domain.getName()));
+            }
+        }
+        user.setUsername(userName);
+    }
+
+    /**
+     * Validates the user 'lastName' if provided. The 'lastName' cannot be blank (when provided).
+     * <ul>
+     *  <li> If the 'lastName' is not provided, we do not update it (setting to null) in the User POJO.
+     *  <li> If the 'lastName' is blank, we throw an {@link InvalidParameterValueException}.
+     * </ul>
+     */
+    protected void validateAndUpdateLastNameIfNeeded(UpdateUserCmd updateUserCmd, UserVO user) {
+        String lastName = updateUserCmd.getLastname();
         if (lastName != null) {
-            if (lastName.isEmpty()) {
-                throw new InvalidParameterValueException("Lastname is empty");
+            if (StringUtils.isBlank(lastName)) {
+                throw new InvalidParameterValueException("Lastname cannot be empty.");
             }
 
             user.setLastname(lastName);
         }
-        if (userName != null) {
-            if (userName.isEmpty()) {
-                throw new InvalidParameterValueException("Username is empty");
-            }
-
-            // don't allow to have same user names in the same domain
-            List<UserVO> duplicatedUsers = _userDao.findUsersByName(userName);
-            for (UserVO duplicatedUser : duplicatedUsers) {
-                if (duplicatedUser.getId() != user.getId()) {
-                    Account duplicatedUserAccount = _accountDao.findById(duplicatedUser.getAccountId());
-                    if (duplicatedUserAccount.getDomainId() == account.getDomainId()) {
-                        throw new InvalidParameterValueException("User with name " + userName + " already exists in domain " + duplicatedUserAccount.getDomainId());
-                    }
-                }
-            }
-
-            user.setUsername(userName);
-        }
-
-        if (password != null) {
-            if (password.isEmpty()) {
-                throw new InvalidParameterValueException("Password cannot be empty");
-            }
-            String encodedPassword = null;
-            for (Iterator<UserAuthenticator> en = _userPasswordEncoders.iterator(); en.hasNext();) {
-                UserAuthenticator authenticator = en.next();
-                encodedPassword = authenticator.encode(password);
-                if (encodedPassword != null) {
-                    break;
-                }
-            }
-            if (encodedPassword == null) {
-                throw new CloudRuntimeException("Failed to encode password");
-            }
-            user.setPassword(encodedPassword);
-        }
-        if (email != null) {
-            user.setEmail(email);
-        }
-        if (timeZone != null) {
-            user.setTimezone(timeZone);
-        }
-        if (apiKey != null) {
-            user.setApiKey(apiKey);
-        }
-        if (secretKey != null) {
-            user.setSecretKey(secretKey);
-        }
-
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("updating user with id: " + userId);
-        }
-        try {
-            // check if the apiKey and secretKey are globally unique
-            if (apiKey != null && secretKey != null) {
-                Pair<User, Account> apiKeyOwner = _accountDao.findUserAccountByApiKey(apiKey);
-
-                if (apiKeyOwner != null) {
-                    User usr = apiKeyOwner.first();
-                    if (usr.getId() != userId) {
-                        throw new InvalidParameterValueException("The api key:" + apiKey + " exists in the system for user id:" + userId + " ,please provide a unique key");
-                    } else {
-                        // allow the updation to take place
-                    }
-                }
-            }
-
-            _userDao.update(userId, user);
-        } catch (Throwable th) {
-            s_logger.error("error updating user", th);
-            throw new CloudRuntimeException("Unable to update user " + userId);
-        }
-
-        CallContext.current().putContextParameter(User.class, user.getUuid());
-
-        return _userAccountDao.findById(userId);
     }
 
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_USER_UPDATE, eventDescription = "updating User")
-    public UserAccount updateUser(UpdateUserCmd cmd) {
-        Long id = cmd.getId();
-        String apiKey = cmd.getApiKey();
-        String firstName = cmd.getFirstname();
-        String email = cmd.getEmail();
-        String lastName = cmd.getLastname();
-        String password = cmd.getPassword();
-        String secretKey = cmd.getSecretKey();
-        String timeZone = cmd.getTimezone();
-        String userName = cmd.getUsername();
+    /**
+     * Validates the user 'firstName' if provided. The 'firstName' cannot be blank (when provided).
+     * <ul>
+     *  <li> If the 'firstName' is not provided, we do not update it (setting to null) in the User POJO.
+     *  <li> If the 'firstName' is blank, we throw an {@link InvalidParameterValueException}.
+     * </ul>
+     */
+    protected void validateAndUpdateFirstNameIfNeeded(UpdateUserCmd updateUserCmd, UserVO user) {
+        String firstName = updateUserCmd.getFirstname();
+        if (firstName != null) {
+            if (StringUtils.isBlank(firstName)) {
+                throw new InvalidParameterValueException("Firstname cannot be empty.");
+            }
+            user.setFirstname(firstName);
+        }
+    }
 
-        return updateUser(id, firstName, lastName, email, userName, password, apiKey, secretKey, timeZone);
+    /**
+     * Searches an account for the given users. Then, we validate it as follows:
+     * <ul>
+     *  <li>If no account is found for the given user, we throw a {@link CloudRuntimeException}. There must be something wrong in the database for this case.
+     *  <li>If the account is of {@link Account#ACCOUNT_TYPE_PROJECT}, we throw an {@link InvalidParameterValueException}.
+     *  <li>If the account is of {@link Account#ACCOUNT_ID_SYSTEM}, we throw an {@link InvalidParameterValueException}.
+     * </ul>
+     *
+     * Afterwards, we check if the logged user has access to the user being updated via {@link #checkAccess(Account, AccessType, boolean, ControlledEntity...)}
+     */
+    protected Account retrieveAndValidateAccount(UserVO user) {
+        Account account = _accountDao.findById(user.getAccountId());
+        if (account == null) {
+            throw new CloudRuntimeException("Unable to find user account with ID: " + user.getAccountId());
+        }
+        if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
+            throw new InvalidParameterValueException("Unable to find user with ID: " + user.getUuid());
+        }
+        if (account.getId() == Account.ACCOUNT_ID_SYSTEM) {
+            throw new PermissionDeniedException("user UUID : " + user.getUuid() + " is a system account; update is not allowed.");
+        }
+        checkAccess(getCurrentCallingAccount(), AccessType.OperateEntry, true, account);
+        return account;
+    }
+
+    /**
+     * Returns the calling account using the method {@link CallContext#getCallingAccount()}.
+     * We are introducing this method to avoid using 'PowerMockRunner' in unit tests. Then, we can mock the calls to this method, which facilitates the development of test cases.
+     */
+    protected Account getCurrentCallingAccount() {
+        return CallContext.current().getCallingAccount();
+    }
+
+    /**
+     * Validates user API and Secret keys. If a new pair of keys is provided, we update them in the user POJO.
+     * <ul>
+     * <li>When updating the keys, it must be provided a pair (API and Secret keys); otherwise, an {@link InvalidParameterValueException} is thrown.
+     * <li>If a pair of keys is provided, we validate to see if there is an user already using the provided API key. If there is someone else using, we throw an {@link InvalidParameterValueException} because two users cannot have the same API key.
+     * </ul>
+     */
+    protected void validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmd updateUserCmd, UserVO user) {
+        String apiKey = updateUserCmd.getApiKey();
+        String secretKey = updateUserCmd.getSecretKey();
+
+        boolean isApiKeyBlank = StringUtils.isBlank(apiKey);
+        boolean isSecretKeyBlank = StringUtils.isBlank(secretKey);
+        if (isApiKeyBlank ^ isSecretKeyBlank) {
+            throw new InvalidParameterValueException("Please provide a userApiKey/userSecretKey pair");
+        }
+        if (isApiKeyBlank && isSecretKeyBlank) {
+            return;
+        }
+        Pair<User, Account> apiKeyOwner = _accountDao.findUserAccountByApiKey(apiKey);
+        if (apiKeyOwner != null) {
+            User userThatHasTheProvidedApiKey = apiKeyOwner.first();
+            if (userThatHasTheProvidedApiKey.getId() != user.getId()) {
+                throw new InvalidParameterValueException(String.format("The API key [%s] already exists in the system. Please provide a unique key.", apiKey));
+            }
+        }
+        user.setApiKey(apiKey);
+        user.setSecretKey(secretKey);
+    }
+
+    /**
+     * Searches for a user with the given userId. If no user is found we throw an {@link InvalidParameterValueException}.
+     */
+    protected UserVO retrieveAndValidateUser(UpdateUserCmd updateUserCmd) {
+        Long userId = updateUserCmd.getId();
+
+        UserVO user = _userDao.getUser(userId);
+        if (user == null) {
+            throw new InvalidParameterValueException("Unable to find user with id: " + userId);
+        }
+        return user;
     }
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_USER_DISABLE, eventDescription = "disabling User", async = true)
     public UserAccount disableUser(long userId) {
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
 
         // Check if user exists in the system
         User user = _userDao.findById(userId);
@@ -1345,7 +1425,7 @@
     @ActionEvent(eventType = EventTypes.EVENT_USER_ENABLE, eventDescription = "enabling User")
     public UserAccount enableUser(final long userId) {
 
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
 
         // Check if user exists in the system
         final User user = _userDao.findById(userId);
@@ -1396,7 +1476,7 @@
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_USER_LOCK, eventDescription = "locking User")
     public UserAccount lockUser(long userId) {
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
 
         // Check if user with id exists in the system
         User user = _userDao.findById(userId);
@@ -1462,7 +1542,6 @@
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_DELETE, eventDescription = "deleting account", async = true)
-    // This method deletes the account
     public boolean deleteUserAccount(long accountId) {
 
         CallContext ctx = CallContext.current();
@@ -1528,7 +1607,7 @@
         }
 
         // Check if user performing the action is allowed to modify this account
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
         checkAccess(caller, AccessType.OperateEntry, true, account);
 
         boolean success = enableAccount(account.getId());
@@ -1545,7 +1624,7 @@
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_DISABLE, eventDescription = "locking account", async = true)
     public AccountVO lockAccount(String accountName, Long domainId, Long accountId) {
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
 
         Account account = null;
         if (accountId != null) {
@@ -1575,7 +1654,7 @@
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_DISABLE, eventDescription = "disabling account", async = true)
     public AccountVO disableAccount(String accountName, Long domainId, Long accountId) throws ConcurrentOperationException, ResourceUnavailableException {
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
 
         Account account = null;
         if (accountId != null) {
@@ -1633,16 +1712,11 @@
         }
 
         // Check if user performing the action is allowed to modify this account
-        checkAccess(CallContext.current().getCallingAccount(), _domainMgr.getDomain(account.getDomainId()));
+        checkAccess(getCurrentCallingAccount(), _domainMgr.getDomain(account.getDomainId()));
 
         // check if the given account name is unique in this domain for updating
         Account duplicateAcccount = _accountDao.findActiveAccount(newAccountName, domainId);
-        if (duplicateAcccount != null && duplicateAcccount.getId() != account.getId()) {// allow
-                                                                                        // same
-                                                                                        // account
-                                                                                        // to
-                                                                                        // update
-                                                                                        // itself
+        if (duplicateAcccount != null && duplicateAcccount.getId() != account.getId()) {
             throw new InvalidParameterValueException(
                     "There already exists an account with the name:" + newAccountName + " in the domain:" + domainId + " with existing account id:" + duplicateAcccount.getId());
         }
@@ -1700,6 +1774,7 @@
         return _userDao.remove(deleteUserCmd.getId());
     }
 
+    @Override
     @ActionEvent(eventType = EventTypes.EVENT_USER_MOVE, eventDescription = "moving User to a new account")
     public boolean moveUser(MoveUserCmd cmd) {
         final Long id = cmd.getId();
@@ -1713,17 +1788,18 @@
         return moveUser(user, newAccountId);
     }
 
+    @Override
     public boolean moveUser(long id, Long domainId, long accountId) {
         UserVO user = getValidUserVO(id);
         Account oldAccount = _accountDao.findById(user.getAccountId());
         checkAccountAndAccess(user, oldAccount);
         Account newAccount = _accountDao.findById(accountId);
         checkIfNotMovingAcrossDomains(domainId, newAccount);
-        return moveUser(user , accountId);
+        return moveUser(user, accountId);
     }
 
     private boolean moveUser(UserVO user, long newAccountId) {
-        if(newAccountId == user.getAccountId()) {
+        if (newAccountId == user.getAccountId()) {
             // could do a not silent fail but the objective of the user is reached
             return true; // no need to create a new user object for this user
         }
@@ -1736,7 +1812,7 @@
                 user.setUuid(UUID.randomUUID().toString());
                 user.setApiKey(null);
                 user.setSecretKey(null);
-                _userDao.update(user.getId(),user);
+                _userDao.update(user.getId(), user);
                 newUser.setAccountId(newAccountId);
                 boolean success = _userDao.remove(user.getId());
                 UserVO persisted = _userDao.persist(newUser);
@@ -1748,7 +1824,7 @@
     private long getNewAccountId(long domainId, String accountName, Long accountId) {
         Account newAccount = null;
         if (StringUtils.isNotBlank(accountName)) {
-            if(s_logger.isDebugEnabled()) {
+            if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Getting id for account by name '" + accountName + "' in domain " + domainId);
             }
             newAccount = _accountDao.findEnabledAccount(accountName, domainId);
@@ -1765,7 +1841,7 @@
     }
 
     private void checkIfNotMovingAcrossDomains(long domainId, Account newAccount) {
-        if(newAccount.getDomainId() != domainId) {
+        if (newAccount.getDomainId() != domainId) {
             // not in scope
             throw new InvalidParameterValueException("moving a user from an account in one domain to an account in annother domain is not supported!");
         }
@@ -1777,7 +1853,7 @@
             throw new InvalidParameterValueException("Project users cannot be deleted or moved.");
         }
 
-        checkAccess(CallContext.current().getCallingAccount(), AccessType.OperateEntry, true, account);
+        checkAccess(getCurrentCallingAccount(), AccessType.OperateEntry, true, account);
         CallContext.current().putContextParameter(User.class, user.getUuid());
     }
 
@@ -1997,8 +2073,8 @@
 
     @Override
     @DB
-    public AccountVO createAccount(final String accountName, final short accountType, final Long roleId, final Long domainId, final String networkDomain,
-            final Map<String, String> details, final String uuid) {
+    public AccountVO createAccount(final String accountName, final short accountType, final Long roleId, final Long domainId, final String networkDomain, final Map<String, String> details,
+            final String uuid) {
         // Validate domain
         Domain domain = _domainMgr.getDomain(domainId);
         if (domain == null) {
@@ -2066,8 +2142,7 @@
         });
     }
 
-    protected UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String userUUID,
-            User.Source source) {
+    protected UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String userUUID, User.Source source) {
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Creating user: " + userName + ", accountId: " + accountId + " timezone:" + timezone);
         }
@@ -2100,8 +2175,7 @@
     }
 
     @Override
-    public UserAccount authenticateUser(final String username, final String password, final Long domainId, final InetAddress loginIpAddress, final Map<String, Object[]>
-            requestParameters) {
+    public UserAccount authenticateUser(final String username, final String password, final Long domainId, final InetAddress loginIpAddress, final Map<String, Object[]> requestParameters) {
         UserAccount user = null;
         if (password != null && !password.isEmpty()) {
             user = getUserAccount(username, password, domainId, requestParameters);
@@ -2212,11 +2286,11 @@
             }
 
             // We authenticated successfully by now, let's check if we are allowed to login from the ip address the reqest comes from
-            final Account account = _accountMgr.getAccount(user.getAccountId());
+            final Account account = getAccount(user.getAccountId());
             final DomainVO domain = (DomainVO) _domainMgr.getDomain(account.getDomainId());
 
             // Get the CIDRs from where this account is allowed to make calls
-            final String accessAllowedCidrs = ApiServiceConfiguration.ApiAllowedSourceCidrList.valueIn(account.getId()).replaceAll("\\s","");
+            final String accessAllowedCidrs = ApiServiceConfiguration.ApiAllowedSourceCidrList.valueIn(account.getId()).replaceAll("\\s", "");
             final Boolean ApiSourceCidrChecksEnabled = ApiServiceConfiguration.ApiSourceCidrChecksEnabled.value();
 
             if (ApiSourceCidrChecksEnabled) {
@@ -2224,10 +2298,9 @@
 
                 // Block when is not in the list of allowed IPs
                 if (!NetUtils.isIpInCidrList(loginIpAddress, accessAllowedCidrs.split(","))) {
-                    s_logger.warn("Request by account '" + account.toString() + "' was denied since " + loginIpAddress.toString().replaceAll("/","")
-                            + " does not match " + accessAllowedCidrs);
+                    s_logger.warn("Request by account '" + account.toString() + "' was denied since " + loginIpAddress.toString().replaceAll("/", "") + " does not match " + accessAllowedCidrs);
                     throw new CloudAuthenticationException("Failed to authenticate user '" + username + "' in domain '" + domain.getPath() + "' from ip "
-                            + loginIpAddress.toString().replaceAll("/","") + "; please provide valid credentials");
+                            + loginIpAddress.toString().replaceAll("/", "") + "; please provide valid credentials");
                 }
             }
 
@@ -2236,8 +2309,7 @@
                 s_logger.debug("User: " + username + " in domain " + domainId + " has successfully logged in");
             }
 
-            ActionEventUtils.onActionEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN,
-                    "user has logged in from IP Address " + loginIpAddress);
+            ActionEventUtils.onActionEvent(user.getId(), user.getAccountId(), user.getDomainId(), EventTypes.EVENT_USER_LOGIN, "user has logged in from IP Address " + loginIpAddress);
 
             return user;
         } else {
@@ -2287,12 +2359,12 @@
                 if (s_logger.isInfoEnabled()) {
                     s_logger.info("User " + username + " in domain " + domainName + " is disabled/locked (or account is disabled/locked)");
                 }
-                throw new CloudAuthenticationException(
-                        "User " + username + " (or their account) in domain " + domainName + " is disabled/locked. Please contact the administrator.");
+                throw new CloudAuthenticationException("User " + username + " (or their account) in domain " + domainName + " is disabled/locked. Please contact the administrator.");
             }
             // Whenever the user is able to log in successfully, reset the login attempts to zero
-            if (!isInternalAccount(userAccount.getId()))
+            if (!isInternalAccount(userAccount.getId())) {
                 updateLoginAttempts(userAccount.getId(), 0, false);
+            }
 
             return userAccount;
         } else {
@@ -2353,7 +2425,7 @@
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_REGISTER_FOR_SECRET_API_KEY, eventDescription = "register for the developer API keys")
     public String[] createApiKeyAndSecretKey(RegisterCmd cmd) {
-        Account caller = CallContext.current().getCallingAccount();
+        Account caller = getCurrentCallingAccount();
         final Long userId = cmd.getId();
 
         User user = getUserIncludingRemoved(userId);
@@ -2670,8 +2742,9 @@
 
     @Override
     public List<String> listAclGroupsByAccount(Long accountId) {
-        if (_querySelectors == null || _querySelectors.size() == 0)
+        if (_querySelectors == null || _querySelectors.size() == 0) {
             return new ArrayList<String>();
+        }
 
         QuerySelector qs = _querySelectors.get(0);
         return qs.listAclGroupsByAccount(accountId);
@@ -2694,8 +2767,7 @@
                 if (!enabledOnly || account.getState() == Account.State.enabled) {
                     return account.getId();
                 } else {
-                    throw new PermissionDeniedException(
-                            "Can't add resources to the account id=" + account.getId() + " in state=" + account.getState() + " as it's no longer active");
+                    throw new PermissionDeniedException("Can't add resources to the account id=" + account.getId() + " in state=" + account.getState() + " as it's no longer active");
                 }
             } else {
                 // idList is not used anywhere, so removed it now
@@ -2780,4 +2852,4 @@
     public ConfigKey<?>[] getConfigKeys() {
         return new ConfigKey<?>[] {UseSecretKeyInResponse};
     }
-}
+}
\ No newline at end of file
diff --git a/server/src/com/cloud/user/DomainManager.java b/server/src/main/java/com/cloud/user/DomainManager.java
similarity index 100%
rename from server/src/com/cloud/user/DomainManager.java
rename to server/src/main/java/com/cloud/user/DomainManager.java
diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/main/java/com/cloud/user/DomainManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/user/DomainManagerImpl.java
rename to server/src/main/java/com/cloud/user/DomainManagerImpl.java
diff --git a/server/src/com/cloud/uuididentity/UUIDManagerImpl.java b/server/src/main/java/com/cloud/uuididentity/UUIDManagerImpl.java
similarity index 88%
rename from server/src/com/cloud/uuididentity/UUIDManagerImpl.java
rename to server/src/main/java/com/cloud/uuididentity/UUIDManagerImpl.java
index 5a6275f..8f3e9a1 100644
--- a/server/src/com/cloud/uuididentity/UUIDManagerImpl.java
+++ b/server/src/main/java/com/cloud/uuididentity/UUIDManagerImpl.java
@@ -20,6 +20,7 @@
 
 import javax.inject.Inject;
 
+import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.exception.InvalidParameterValueException;
@@ -111,4 +112,17 @@
         }
     }
 
+    @Override
+    public <T> String getUuid(Class<T> entityType, Long customId) {
+        if (customId == null) {
+            return null;
+        }
+        Identity identity = (Identity) this._entityMgr.findById(entityType, customId);
+        if (identity == null) {
+            throw new InvalidParameterValueException("Unable to find UUID for id " + customId);
+        }
+        return identity.getUuid();
+
+    }
+
 }
diff --git a/server/src/com/cloud/vm/SystemVmLoadScanHandler.java b/server/src/main/java/com/cloud/vm/SystemVmLoadScanHandler.java
similarity index 100%
rename from server/src/com/cloud/vm/SystemVmLoadScanHandler.java
rename to server/src/main/java/com/cloud/vm/SystemVmLoadScanHandler.java
diff --git a/server/src/com/cloud/vm/SystemVmLoadScanner.java b/server/src/main/java/com/cloud/vm/SystemVmLoadScanner.java
similarity index 100%
rename from server/src/com/cloud/vm/SystemVmLoadScanner.java
rename to server/src/main/java/com/cloud/vm/SystemVmLoadScanner.java
diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/main/java/com/cloud/vm/UserVmManager.java
similarity index 100%
rename from server/src/com/cloud/vm/UserVmManager.java
rename to server/src/main/java/com/cloud/vm/UserVmManager.java
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
similarity index 99%
rename from server/src/com/cloud/vm/UserVmManagerImpl.java
rename to server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 8e97215..47aa052 100644
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -396,7 +396,7 @@
     @Inject
     private SSHKeyPairDao _sshKeyPairDao;
     @Inject
-    private UserVmDetailsDao _vmDetailsDao;
+    private UserVmDetailsDao userVmDetailsDao;
     @Inject
     private HypervisorCapabilitiesDao _hypervisorCapabilitiesDao;
     @Inject
@@ -450,8 +450,6 @@
     @Inject
     private VolumeDataFactory volFactory;
     @Inject
-    private UserVmDetailsDao _uservmDetailsDao;
-    @Inject
     private UUIDManager _uuidMgr;
     @Inject
     private DeploymentPlanningManager _planningMgr;
@@ -1607,7 +1605,11 @@
 
         Long vmId = cmd.getId();
         Long newServiceOfferingId = cmd.getServiceOfferingId();
-        CallContext.current().setEventDetails("Vm Id: " + vmId);
+        VirtualMachine vm = (VirtualMachine) this._entityMgr.findById(VirtualMachine.class, vmId);
+        if (vm == null) {
+            throw new InvalidParameterValueException("Unable to find VM's UUID");
+        }
+        CallContext.current().setEventDetails("Vm Id: " + vm.getUuid());
 
         boolean result = upgradeVirtualMachine(vmId, newServiceOfferingId, cmd.getDetails());
         if (result) {
@@ -1838,7 +1840,7 @@
     @Override
     public void saveCustomOfferingDetails(long vmId, ServiceOffering serviceOffering) {
         //save the custom values to the database.
-        Map<String, String> details = _uservmDetailsDao.listDetailsKeyPairs(vmId);
+        Map<String, String> details = userVmDetailsDao.listDetailsKeyPairs(vmId);
         details.put(UsageEventVO.DynamicParameters.cpuNumber.name(), serviceOffering.getCpu().toString());
         details.put(UsageEventVO.DynamicParameters.cpuSpeed.name(), serviceOffering.getSpeed().toString());
         details.put(UsageEventVO.DynamicParameters.memory.name(), serviceOffering.getRamSize().toString());
@@ -1847,12 +1849,12 @@
             UserVmDetailVO detailVO = new UserVmDetailVO(vmId, entry.getKey(), entry.getValue(), true);
             detailList.add(detailVO);
         }
-        _uservmDetailsDao.saveDetails(detailList);
+        userVmDetailsDao.saveDetails(detailList);
     }
 
     @Override
     public void removeCustomOfferingDetails(long vmId) {
-        Map<String, String> details = _uservmDetailsDao.listDetailsKeyPairs(vmId);
+        Map<String, String> details = userVmDetailsDao.listDetailsKeyPairs(vmId);
         details.remove(UsageEventVO.DynamicParameters.cpuNumber.name());
         details.remove(UsageEventVO.DynamicParameters.cpuSpeed.name());
         details.remove(UsageEventVO.DynamicParameters.memory.name());
@@ -1861,7 +1863,7 @@
             UserVmDetailVO detailVO = new UserVmDetailVO(vmId, entry.getKey(), entry.getValue(), true);
             detailList.add(detailVO);
         }
-        _uservmDetailsDao.saveDetails(detailList);
+        userVmDetailsDao.saveDetails(detailList);
     }
 
     @Override
@@ -2396,7 +2398,7 @@
             updateDisplayVmFlag(isDisplayVm, id, vmInstance);
         }
         if (cleanupDetails){
-            _vmDetailsDao.removeDetails(id);
+            userVmDetailsDao.removeDetails(id);
         }
         else if (MapUtils.isNotEmpty(details)) {
             vmInstance.setDetails(details);
@@ -3794,7 +3796,7 @@
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Successfully allocated DB entry for " + vm);
                 }
-                CallContext.current().setEventDetails("Vm Id: " + vm.getId());
+                CallContext.current().setEventDetails("Vm Id: " + vm.getUuid());
 
                 if (!offering.isDynamic()) {
                     UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(), vm.getHostName(), offering.getId(), template.getId(),
@@ -4101,7 +4103,7 @@
     @Override
     public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) {
         UserVmVO vm = _vmDao.findById(profile.getId());
-        Map<String, String> details = _vmDetailsDao.listDetailsKeyPairs(vm.getId());
+        Map<String, String> details = userVmDetailsDao.listDetailsKeyPairs(vm.getId());
         vm.setDetails(details);
 
 
@@ -4502,7 +4504,7 @@
                 vm.setPassword((String)vmParamPair.second().get(VirtualMachineProfile.Param.VmPassword));
                 vm.setUpdateParameters(false);
                 if (vm.getDetail("password") != null) {
-                    _vmDetailsDao.remove(_vmDetailsDao.findDetail(vm.getId(), "password").getId());
+                    userVmDetailsDao.remove(userVmDetailsDao.findDetail(vm.getId(), "password").getId());
                 }
                 _vmDao.update(vm.getId(), vm);
             }
@@ -4814,7 +4816,7 @@
         String group = cmd.getGroup();
         String userData = cmd.getUserData();
         String sshKeyPairName = cmd.getSSHKeyPairName();
-        Boolean displayVm = cmd.getDisplayVm();
+        Boolean displayVm = cmd.isDisplayVm();
         String keyboard = cmd.getKeyboard();
         Map<Long, DiskOffering> dataDiskTemplateToDiskOfferingMap = cmd.getDataDiskTemplateToDiskOfferingMap();
         if (zone.getNetworkType() == NetworkType.Basic) {
@@ -4985,17 +4987,18 @@
 
     private boolean isVMUsingLocalStorage(VMInstanceVO vm) {
         boolean usesLocalStorage = false;
-        ServiceOfferingVO svcOffering = _serviceOfferingDao.findById(vm.getId(), vm.getServiceOfferingId());
-        if (svcOffering.getUseLocalStorage()) {
-            usesLocalStorage = true;
-        } else {
-            List<VolumeVO> volumes = _volsDao.findByInstanceAndType(vm.getId(), Volume.Type.DATADISK);
-            for (VolumeVO vol : volumes) {
-                DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId());
-                if (diskOffering.getUseLocalStorage()) {
-                    usesLocalStorage = true;
-                    break;
-                }
+
+        List<VolumeVO> volumes = _volsDao.findByInstance(vm.getId());
+        for (VolumeVO vol : volumes) {
+            DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId());
+            if (diskOffering.getUseLocalStorage()) {
+                usesLocalStorage = true;
+                break;
+            }
+            StoragePoolVO storagePool = _storagePoolDao.findById(vol.getPoolId());
+            if (storagePool.isLocal()) {
+                usesLocalStorage = true;
+                break;
             }
         }
         return usesLocalStorage;
@@ -6180,7 +6183,7 @@
                             vm.setUpdateParameters(false);
                             _vmDao.loadDetails(vm);
                             if (vm.getDetail("password") != null) {
-                                _vmDetailsDao.remove(_vmDetailsDao.findDetail(vm.getId(), "password").getId());
+                                userVmDetailsDao.remove(userVmDetailsDao.findDetail(vm.getId(), "password").getId());
                             }
                             _vmDao.update(vm.getId(), vm);
                         }
@@ -6441,4 +6444,4 @@
         }
         return false;
     }
-}
+}
\ No newline at end of file
diff --git a/server/src/com/cloud/vm/UserVmStateListener.java b/server/src/main/java/com/cloud/vm/UserVmStateListener.java
similarity index 100%
rename from server/src/com/cloud/vm/UserVmStateListener.java
rename to server/src/main/java/com/cloud/vm/UserVmStateListener.java
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
rename to server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
diff --git a/server/src/com/cloud/vm/snapshot/VmWorkCreateVMSnapshot.java b/server/src/main/java/com/cloud/vm/snapshot/VmWorkCreateVMSnapshot.java
similarity index 100%
rename from server/src/com/cloud/vm/snapshot/VmWorkCreateVMSnapshot.java
rename to server/src/main/java/com/cloud/vm/snapshot/VmWorkCreateVMSnapshot.java
diff --git a/server/src/com/cloud/vm/snapshot/VmWorkDeleteAllVMSnapshots.java b/server/src/main/java/com/cloud/vm/snapshot/VmWorkDeleteAllVMSnapshots.java
similarity index 100%
rename from server/src/com/cloud/vm/snapshot/VmWorkDeleteAllVMSnapshots.java
rename to server/src/main/java/com/cloud/vm/snapshot/VmWorkDeleteAllVMSnapshots.java
diff --git a/server/src/com/cloud/vm/snapshot/VmWorkDeleteVMSnapshot.java b/server/src/main/java/com/cloud/vm/snapshot/VmWorkDeleteVMSnapshot.java
similarity index 100%
rename from server/src/com/cloud/vm/snapshot/VmWorkDeleteVMSnapshot.java
rename to server/src/main/java/com/cloud/vm/snapshot/VmWorkDeleteVMSnapshot.java
diff --git a/server/src/com/cloud/vm/snapshot/VmWorkRevertToVMSnapshot.java b/server/src/main/java/com/cloud/vm/snapshot/VmWorkRevertToVMSnapshot.java
similarity index 100%
rename from server/src/com/cloud/vm/snapshot/VmWorkRevertToVMSnapshot.java
rename to server/src/main/java/com/cloud/vm/snapshot/VmWorkRevertToVMSnapshot.java
diff --git a/server/src/org/apache/cloudstack/acl/RoleManagerImpl.java b/server/src/main/java/org/apache/cloudstack/acl/RoleManagerImpl.java
similarity index 99%
rename from server/src/org/apache/cloudstack/acl/RoleManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/acl/RoleManagerImpl.java
index 4402a1b..ae471b2 100644
--- a/server/src/org/apache/cloudstack/acl/RoleManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/acl/RoleManagerImpl.java
@@ -277,6 +277,7 @@
                 rolesIterator.remove();
             }
         }
+
     }
 
     @Override
diff --git a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java b/server/src/main/java/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
rename to server/src/main/java/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
diff --git a/server/src/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java b/server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java
rename to server/src/main/java/org/apache/cloudstack/agent/lb/IndirectAgentLBServiceImpl.java
diff --git a/server/src/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBRoundRobinAlgorithm.java b/server/src/main/java/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBRoundRobinAlgorithm.java
similarity index 100%
rename from server/src/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBRoundRobinAlgorithm.java
rename to server/src/main/java/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBRoundRobinAlgorithm.java
diff --git a/server/src/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBShuffleAlgorithm.java b/server/src/main/java/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBShuffleAlgorithm.java
similarity index 100%
rename from server/src/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBShuffleAlgorithm.java
rename to server/src/main/java/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBShuffleAlgorithm.java
diff --git a/server/src/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBStaticAlgorithm.java b/server/src/main/java/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBStaticAlgorithm.java
similarity index 100%
rename from server/src/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBStaticAlgorithm.java
rename to server/src/main/java/org/apache/cloudstack/agent/lb/algorithm/IndirectAgentLBStaticAlgorithm.java
diff --git a/server/src/org/apache/cloudstack/annotation/AnnotationManagerImpl.java b/server/src/main/java/org/apache/cloudstack/annotation/AnnotationManagerImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/annotation/AnnotationManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/annotation/AnnotationManagerImpl.java
diff --git a/server/src/org/apache/cloudstack/ca/CAManagerImpl.java b/server/src/main/java/org/apache/cloudstack/ca/CAManagerImpl.java
similarity index 91%
rename from server/src/org/apache/cloudstack/ca/CAManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/ca/CAManagerImpl.java
index 23a0379..0487735 100644
--- a/server/src/org/apache/cloudstack/ca/CAManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/ca/CAManagerImpl.java
@@ -205,18 +205,19 @@
             cmd.setAccessDetail(sshAccessDetails);
         }
         CallContext.current().setEventDetails("generating keystore and CSR for host id: " + host.getId());
-        final SetupKeystoreAnswer answer = (SetupKeystoreAnswer) agentManager.send(host.getId(), cmd);
+        final SetupKeystoreAnswer answer = (SetupKeystoreAnswer)agentManager.send(host.getId(), cmd);
         return answer.getCsr();
     }
 
     @Override
-    public boolean deployCertificate(final Host host, final Certificate certificate, final Boolean reconnect, final Map<String, String> sshAccessDetails) throws AgentUnavailableException, OperationTimedoutException {
+    public boolean deployCertificate(final Host host, final Certificate certificate, final Boolean reconnect, final Map<String, String> sshAccessDetails)
+            throws AgentUnavailableException, OperationTimedoutException {
         final SetupCertificateCommand cmd = new SetupCertificateCommand(certificate);
         if (sshAccessDetails != null && !sshAccessDetails.isEmpty()) {
             cmd.setAccessDetail(sshAccessDetails);
         }
         CallContext.current().setEventDetails("deploying certificate for host id: " + host.getId());
-        final SetupCertificateAnswer answer = (SetupCertificateAnswer) agentManager.send(host.getId(), cmd);
+        final SetupCertificateAnswer answer = (SetupCertificateAnswer)agentManager.send(host.getId(), cmd);
         if (answer.getResult()) {
             CallContext.current().setEventDetails("successfully deployed certificate for host id: " + host.getId());
         } else {
@@ -226,9 +227,12 @@
         if (answer.getResult()) {
             getActiveCertificatesMap().put(host.getPrivateIpAddress(), certificate.getClientCertificate());
             if (sshAccessDetails == null && reconnect != null && reconnect) {
-                LOG.info(String.format("Successfully setup certificate on host, reconnecting with agent with id=%d, name=%s, address=%s",
-                        host.getId(), host.getName(), host.getPublicIpAddress()));
-                return agentManager.reconnect(host.getId());
+                LOG.info(String.format("Successfully setup certificate on host, reconnecting with agent with id=%d, name=%s, address=%s", host.getId(), host.getName(), host.getPublicIpAddress()));
+                try {
+                    agentManager.reconnect(host.getId());
+                } catch (AgentUnavailableException | CloudRuntimeException e) {
+                    LOG.debug("Error when reconnecting to host: " + host.getUuid(), e);
+                }
             }
             return true;
         }
@@ -256,8 +260,7 @@
         if (host == null) {
             return;
         }
-        alertManager.sendAlert(AlertManager.AlertType.ALERT_TYPE_CA_CERT,
-                host.getDataCenterId(), host.getPodId(), subject, message);
+        alertManager.sendAlert(AlertManager.AlertType.ALERT_TYPE_CA_CERT, host.getDataCenterId(), host.getPodId(), subject, message);
     }
 
     @Override
@@ -302,7 +305,7 @@
                 }
                 final DateTime now = DateTime.now(DateTimeZone.UTC);
                 final Map<String, X509Certificate> certsMap = caManager.getActiveCertificatesMap();
-                for (final Iterator<Map.Entry<String, X509Certificate>> it = certsMap.entrySet().iterator(); it.hasNext(); ) {
+                for (final Iterator<Map.Entry<String, X509Certificate>> it = certsMap.entrySet().iterator(); it.hasNext();) {
                     final Map.Entry<String, X509Certificate> entry = it.next();
                     if (entry == null) {
                         continue;
@@ -314,37 +317,33 @@
                         continue;
                     }
                     final Host host = hostDao.findByIp(hostIp);
-                    if (host == null || host.getManagementServerId() == null ||
-                            host.getManagementServerId() != ManagementServerNode.getManagementServerId() ||
-                            host.getStatus() != Status.Up) {
-                        if (host == null ||
-                                (host.getManagementServerId() != null &&
-                                        host.getManagementServerId() != ManagementServerNode.getManagementServerId())) {
+                    if (host == null || host.getManagementServerId() == null || host.getManagementServerId() != ManagementServerNode.getManagementServerId() || host.getStatus() != Status.Up) {
+                        if (host == null || (host.getManagementServerId() != null && host.getManagementServerId() != ManagementServerNode.getManagementServerId())) {
                             it.remove();
                         }
                         continue;
                     }
 
-                    final String hostDescription = String.format("host id=%d, uuid=%s, name=%s, ip=%s, zone id=%d",
-                            host.getId(), host.getUuid(), host.getName(), hostIp, host.getDataCenterId());
+                    final String hostDescription = String.format("host id=%d, uuid=%s, name=%s, ip=%s, zone id=%d", host.getId(), host.getUuid(), host.getName(), hostIp, host.getDataCenterId());
 
                     try {
                         certificate.checkValidity(now.plusDays(CertExpiryAlertPeriod.valueIn(host.getClusterId())).toDate());
                     } catch (final CertificateExpiredException | CertificateNotYetValidException e) {
-                        LOG.warn("Certificate is going to expire for " + hostDescription);
+                        LOG.warn("Certificate is going to expire for " + hostDescription, e);
                         if (AutomaticCertRenewal.valueIn(host.getClusterId())) {
                             try {
-                                LOG.debug("Attempting certificate auto-renewal for " + hostDescription);
+                                LOG.debug("Attempting certificate auto-renewal for " + hostDescription, e);
                                 boolean result = caManager.provisionCertificate(host, false, null);
                                 if (result) {
-                                    LOG.debug("Succeeded in auto-renewing certificate for " + hostDescription);
+                                    LOG.debug("Succeeded in auto-renewing certificate for " + hostDescription, e);
                                 } else {
-                                    LOG.debug("Failed in auto-renewing certificate for " + hostDescription);
+                                    LOG.debug("Failed in auto-renewing certificate for " + hostDescription, e);
                                 }
                             } catch (final Throwable ex) {
                                 LOG.warn("Failed to auto-renew certificate for " + hostDescription + ", with error=", ex);
                                 caManager.sendAlert(host, "Certificate auto-renewal failed for " + hostDescription,
-                                        String.format("Certificate is going to expire for %s. Auto-renewal failed to renew the certificate, please renew it manually. It is not valid after %s.", hostDescription, certificate.getNotAfter()));
+                                        String.format("Certificate is going to expire for %s. Auto-renewal failed to renew the certificate, please renew it manually. It is not valid after %s.",
+                                                hostDescription, certificate.getNotAfter()));
                             }
                         } else {
                             if (alertMap.containsKey(hostIp)) {
@@ -354,8 +353,7 @@
                                 }
                             }
                             caManager.sendAlert(host, "Certificate expiring soon for " + hostDescription,
-                                    String.format("Certificate is going to expire for %s. Please renew it, it is not valid after %s.",
-                                            hostDescription, certificate.getNotAfter()));
+                                    String.format("Certificate is going to expire for %s. Please renew it, it is not valid after %s.", hostDescription, certificate.getNotAfter()));
                             alertMap.put(hostIp, new Date());
                         }
                     }
@@ -426,14 +424,6 @@
 
     @Override
     public ConfigKey<?>[] getConfigKeys() {
-        return new ConfigKey<?>[]{
-                CAProviderPlugin,
-                CertKeySize,
-                CertSignatureAlgorithm,
-                CertValidityPeriod,
-                AutomaticCertRenewal,
-                CABackgroundJobDelay,
-                CertExpiryAlertPeriod
-        };
+        return new ConfigKey<?>[] {CAProviderPlugin, CertKeySize, CertSignatureAlgorithm, CertValidityPeriod, AutomaticCertRenewal, CABackgroundJobDelay, CertExpiryAlertPeriod};
     }
 }
diff --git a/server/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsServiceImpl.java b/server/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsServiceImpl.java
new file mode 100644
index 0000000..a06b5bb
--- /dev/null
+++ b/server/src/main/java/org/apache/cloudstack/diagnostics/DiagnosticsServiceImpl.java
@@ -0,0 +1,131 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.diagnostics;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.routing.NetworkElementCommand;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.component.PluggableService;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachineManager;
+import com.cloud.vm.dao.VMInstanceDao;
+import com.google.common.base.Strings;
+import org.apache.cloudstack.api.command.admin.diagnostics.RunDiagnosticsCmd;
+import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.log4j.Logger;
+
+import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+public class DiagnosticsServiceImpl extends ManagerBase implements PluggableService, DiagnosticsService {
+    private static final Logger LOGGER = Logger.getLogger(DiagnosticsServiceImpl.class);
+
+    @Inject
+    private AgentManager agentManager;
+    @Inject
+    private VMInstanceDao instanceDao;
+    @Inject
+    private VirtualMachineManager vmManager;
+    @Inject
+    private NetworkOrchestrationService networkManager;
+
+    @Override
+    public Map<String, String> runDiagnosticsCommand(final RunDiagnosticsCmd cmd) {
+        final Long vmId = cmd.getId();
+        final String cmdType = cmd.getType().getValue();
+        final String ipAddress = cmd.getAddress();
+        final String optionalArguments = cmd.getOptionalArguments();
+        final VMInstanceVO vmInstance = instanceDao.findByIdTypes(vmId, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.DomainRouter, VirtualMachine.Type.SecondaryStorageVm);
+
+        if (vmInstance == null) {
+            throw new InvalidParameterValueException("Unable to find a system vm with id " + vmId);
+        }
+        final Long hostId = vmInstance.getHostId();
+
+        if (hostId == null) {
+            throw new CloudRuntimeException("Unable to find host for virtual machine instance: " + vmInstance.getInstanceName());
+        }
+
+        final String shellCmd = prepareShellCmd(cmdType, ipAddress, optionalArguments);
+
+        if (Strings.isNullOrEmpty(shellCmd)) {
+            throw new IllegalArgumentException("Optional parameters contain unwanted characters: " + optionalArguments);
+        }
+
+        final Hypervisor.HypervisorType hypervisorType = vmInstance.getHypervisorType();
+
+        final DiagnosticsCommand command = new DiagnosticsCommand(shellCmd, vmManager.getExecuteInSequence(hypervisorType));
+        final Map<String, String> accessDetails = networkManager.getSystemVMAccessDetails(vmInstance);
+
+        if (Strings.isNullOrEmpty(accessDetails.get(NetworkElementCommand.ROUTER_IP))) {
+            throw new CloudRuntimeException("Unable to set system vm ControlIP for system vm with ID: " + vmId);
+        }
+
+        command.setAccessDetail(accessDetails);
+
+        Map<String, String> detailsMap;
+
+        final Answer answer = agentManager.easySend(hostId, command);
+
+        if (answer != null && (answer instanceof DiagnosticsAnswer)) {
+            detailsMap = ((DiagnosticsAnswer) answer).getExecutionDetails();
+            return detailsMap;
+        } else {
+            throw new CloudRuntimeException("Failed to execute diagnostics command on remote host: " + answer.getDetails());
+        }
+    }
+
+    protected boolean hasValidChars(String optionalArgs) {
+        if (Strings.isNullOrEmpty(optionalArgs)) {
+            return true;
+        } else {
+            final String regex = "^[\\w\\-\\s.]+$";
+            final Pattern pattern = Pattern.compile(regex);
+            return pattern.matcher(optionalArgs).find();
+        }
+
+    }
+
+    protected String prepareShellCmd(String cmdType, String ipAddress, String optionalParams) {
+        final String CMD_TEMPLATE = String.format("%s %s", cmdType, ipAddress);
+        if (Strings.isNullOrEmpty(optionalParams)) {
+            return CMD_TEMPLATE;
+        } else {
+            if (hasValidChars(optionalParams)) {
+                return String.format("%s %s", CMD_TEMPLATE, optionalParams);
+            } else {
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Class<?>> getCommands() {
+        List<Class<?>> cmdList = new ArrayList<>();
+        cmdList.add(RunDiagnosticsCmd.class);
+        return cmdList;
+    }
+}
\ No newline at end of file
diff --git a/server/src/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java b/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java
old mode 100755
new mode 100644
similarity index 100%
rename from server/src/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java
diff --git a/server/src/org/apache/cloudstack/ha/HAManager.java b/server/src/main/java/org/apache/cloudstack/ha/HAManager.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/HAManager.java
rename to server/src/main/java/org/apache/cloudstack/ha/HAManager.java
diff --git a/server/src/org/apache/cloudstack/ha/HAManagerImpl.java b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/HAManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java
diff --git a/server/src/org/apache/cloudstack/ha/HAResourceCounter.java b/server/src/main/java/org/apache/cloudstack/ha/HAResourceCounter.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/HAResourceCounter.java
rename to server/src/main/java/org/apache/cloudstack/ha/HAResourceCounter.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/ActivityCheckerInterface.java b/server/src/main/java/org/apache/cloudstack/ha/provider/ActivityCheckerInterface.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/ActivityCheckerInterface.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/ActivityCheckerInterface.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/HACheckerException.java b/server/src/main/java/org/apache/cloudstack/ha/provider/HACheckerException.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/HACheckerException.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/HACheckerException.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/HAFenceException.java b/server/src/main/java/org/apache/cloudstack/ha/provider/HAFenceException.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/HAFenceException.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/HAFenceException.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/HAProvider.java b/server/src/main/java/org/apache/cloudstack/ha/provider/HAProvider.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/HAProvider.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/HAProvider.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/HARecoveryException.java b/server/src/main/java/org/apache/cloudstack/ha/provider/HARecoveryException.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/HARecoveryException.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/HARecoveryException.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/HealthCheckerInterface.java b/server/src/main/java/org/apache/cloudstack/ha/provider/HealthCheckerInterface.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/HealthCheckerInterface.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/HealthCheckerInterface.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/HostHAProvider.java b/server/src/main/java/org/apache/cloudstack/ha/provider/HostHAProvider.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/HostHAProvider.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/HostHAProvider.java
diff --git a/server/src/org/apache/cloudstack/ha/provider/host/HAAbstractHostProvider.java b/server/src/main/java/org/apache/cloudstack/ha/provider/host/HAAbstractHostProvider.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/provider/host/HAAbstractHostProvider.java
rename to server/src/main/java/org/apache/cloudstack/ha/provider/host/HAAbstractHostProvider.java
diff --git a/server/src/org/apache/cloudstack/ha/task/ActivityCheckTask.java b/server/src/main/java/org/apache/cloudstack/ha/task/ActivityCheckTask.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/task/ActivityCheckTask.java
rename to server/src/main/java/org/apache/cloudstack/ha/task/ActivityCheckTask.java
diff --git a/server/src/org/apache/cloudstack/ha/task/BaseHATask.java b/server/src/main/java/org/apache/cloudstack/ha/task/BaseHATask.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/task/BaseHATask.java
rename to server/src/main/java/org/apache/cloudstack/ha/task/BaseHATask.java
diff --git a/server/src/org/apache/cloudstack/ha/task/FenceTask.java b/server/src/main/java/org/apache/cloudstack/ha/task/FenceTask.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/task/FenceTask.java
rename to server/src/main/java/org/apache/cloudstack/ha/task/FenceTask.java
diff --git a/server/src/org/apache/cloudstack/ha/task/HealthCheckTask.java b/server/src/main/java/org/apache/cloudstack/ha/task/HealthCheckTask.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/task/HealthCheckTask.java
rename to server/src/main/java/org/apache/cloudstack/ha/task/HealthCheckTask.java
diff --git a/server/src/org/apache/cloudstack/ha/task/RecoveryTask.java b/server/src/main/java/org/apache/cloudstack/ha/task/RecoveryTask.java
similarity index 100%
rename from server/src/org/apache/cloudstack/ha/task/RecoveryTask.java
rename to server/src/main/java/org/apache/cloudstack/ha/task/RecoveryTask.java
diff --git a/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java b/server/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
diff --git a/server/src/org/apache/cloudstack/network/ssl/CertServiceImpl.java b/server/src/main/java/org/apache/cloudstack/network/ssl/CertServiceImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/ssl/CertServiceImpl.java
rename to server/src/main/java/org/apache/cloudstack/network/ssl/CertServiceImpl.java
diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java b/server/src/main/java/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java b/server/src/main/java/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
diff --git a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java b/server/src/main/java/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
diff --git a/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java b/server/src/main/java/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
diff --git a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java b/server/src/main/java/org/apache/cloudstack/network/topology/NetworkTopology.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/NetworkTopology.java
diff --git a/server/src/org/apache/cloudstack/network/topology/NetworkTopologyContext.java b/server/src/main/java/org/apache/cloudstack/network/topology/NetworkTopologyContext.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/NetworkTopologyContext.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/NetworkTopologyContext.java
diff --git a/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java b/server/src/main/java/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
similarity index 100%
rename from server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
rename to server/src/main/java/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
diff --git a/server/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java
rename to server/src/main/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceImpl.java
diff --git a/server/src/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java b/server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java
similarity index 100%
rename from server/src/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java
rename to server/src/main/java/org/apache/cloudstack/outofbandmanagement/PowerOperationTask.java
diff --git a/server/src/org/apache/cloudstack/poll/BackgroundPollManagerImpl.java b/server/src/main/java/org/apache/cloudstack/poll/BackgroundPollManagerImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/poll/BackgroundPollManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/poll/BackgroundPollManagerImpl.java
diff --git a/server/src/org/apache/cloudstack/region/RegionAccount.java b/server/src/main/java/org/apache/cloudstack/region/RegionAccount.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionAccount.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionAccount.java
diff --git a/server/src/org/apache/cloudstack/region/RegionDomain.java b/server/src/main/java/org/apache/cloudstack/region/RegionDomain.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionDomain.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionDomain.java
diff --git a/server/src/org/apache/cloudstack/region/RegionManager.java b/server/src/main/java/org/apache/cloudstack/region/RegionManager.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionManager.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionManager.java
diff --git a/server/src/org/apache/cloudstack/region/RegionManagerImpl.java b/server/src/main/java/org/apache/cloudstack/region/RegionManagerImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionManagerImpl.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionManagerImpl.java
diff --git a/server/src/org/apache/cloudstack/region/RegionServiceImpl.java b/server/src/main/java/org/apache/cloudstack/region/RegionServiceImpl.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionServiceImpl.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionServiceImpl.java
diff --git a/server/src/org/apache/cloudstack/region/RegionServiceProvider.java b/server/src/main/java/org/apache/cloudstack/region/RegionServiceProvider.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionServiceProvider.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionServiceProvider.java
diff --git a/server/src/org/apache/cloudstack/region/RegionUser.java b/server/src/main/java/org/apache/cloudstack/region/RegionUser.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionUser.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionUser.java
diff --git a/server/src/org/apache/cloudstack/region/RegionsApiUtil.java b/server/src/main/java/org/apache/cloudstack/region/RegionsApiUtil.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/RegionsApiUtil.java
rename to server/src/main/java/org/apache/cloudstack/region/RegionsApiUtil.java
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java b/server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
similarity index 98%
rename from server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
rename to server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
index 583dcfc..baa3ba0 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
@@ -650,9 +650,12 @@
             SiteLoadBalancerConfig siteLb =
                 new SiteLoadBalancerConfig(gslbLbMapVo.isRevoke(), serviceType, ip.getAddress().addr(), Integer.toString(loadBalancer.getDefaultPortStart()),
                     dataCenterId);
-
-            siteLb.setGslbProviderPublicIp(lookupGslbServiceProvider().getZoneGslbProviderPublicIp(dataCenterId, physicalNetworkId));
-            siteLb.setGslbProviderPrivateIp(lookupGslbServiceProvider().getZoneGslbProviderPrivateIp(dataCenterId, physicalNetworkId));
+            GslbServiceProvider gslbProvider = lookupGslbServiceProvider();
+            if (gslbProvider == null) {
+                throw new CloudRuntimeException("No GSLB provider is available");
+            }
+            siteLb.setGslbProviderPublicIp(gslbProvider.getZoneGslbProviderPublicIp(dataCenterId, physicalNetworkId));
+            siteLb.setGslbProviderPrivateIp(gslbProvider.getZoneGslbProviderPrivateIp(dataCenterId, physicalNetworkId));
             siteLb.setWeight(gslbLbMapVo.getWeight());
 
             zoneSiteLoadbalancerMap.put(network.getDataCenterId(), siteLb);
diff --git a/server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java b/server/src/main/java/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
similarity index 100%
rename from server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
rename to server/src/main/java/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
diff --git a/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java b/server/src/main/java/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
similarity index 100%
rename from server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
rename to server/src/main/java/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
diff --git a/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java b/server/src/main/java/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
similarity index 100%
rename from server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
rename to server/src/main/java/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
diff --git a/server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java b/server/src/main/java/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
similarity index 100%
rename from server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
rename to server/src/main/java/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
similarity index 99%
rename from server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
rename to server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index c7715a8..2f67c42 100644
--- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ b/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -298,4 +298,6 @@
     <bean id="indirectAgentLBService" class="org.apache.cloudstack.agent.lb.IndirectAgentLBServiceImpl" />
 
     <bean id="directDownloadManager" class="org.apache.cloudstack.direct.download.DirectDownloadManagerImpl" />
+
+    <bean id="DiagnosticsService" class="org.apache.cloudstack.diagnostics.DiagnosticsServiceImpl" />
 </beans>
diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-misc-context.xml b/server/src/main/resources/META-INF/cloudstack/core/spring-server-core-misc-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/core/spring-server-core-misc-context.xml
rename to server/src/main/resources/META-INF/cloudstack/core/spring-server-core-misc-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-alert-adapter-backend/module.properties b/server/src/main/resources/META-INF/cloudstack/server-alert-adapter-backend/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-alert-adapter-backend/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-alert-adapter-backend/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-alert-adapter-backend/spring-server-alert-adapter-backend-context.xml b/server/src/main/resources/META-INF/cloudstack/server-alert-adapter-backend/spring-server-alert-adapter-backend-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-alert-adapter-backend/spring-server-alert-adapter-backend-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-alert-adapter-backend/spring-server-alert-adapter-backend-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-alert-adapter-compute/module.properties b/server/src/main/resources/META-INF/cloudstack/server-alert-adapter-compute/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-alert-adapter-compute/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-alert-adapter-compute/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-alert-adapter-compute/spring-server-alert-adapter-compute-context.xml b/server/src/main/resources/META-INF/cloudstack/server-alert-adapter-compute/spring-server-alert-adapter-compute-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-alert-adapter-compute/spring-server-alert-adapter-compute-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-alert-adapter-compute/spring-server-alert-adapter-compute-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-alert-adapter-storage/module.properties b/server/src/main/resources/META-INF/cloudstack/server-alert-adapter-storage/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-alert-adapter-storage/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-alert-adapter-storage/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-alert-adapter-storage/spring-server-alert-adapter-storage-context.xml b/server/src/main/resources/META-INF/cloudstack/server-alert-adapter-storage/spring-server-alert-adapter-storage-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-alert-adapter-storage/spring-server-alert-adapter-storage-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-alert-adapter-storage/spring-server-alert-adapter-storage-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-allocator/module.properties b/server/src/main/resources/META-INF/cloudstack/server-allocator/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-allocator/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-allocator/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-allocator/spring-server-allocator-context.xml b/server/src/main/resources/META-INF/cloudstack/server-allocator/spring-server-allocator-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-allocator/spring-server-allocator-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-allocator/spring-server-allocator-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-api/module.properties b/server/src/main/resources/META-INF/cloudstack/server-api/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-api/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-api/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-api/spring-server-api-context.xml b/server/src/main/resources/META-INF/cloudstack/server-api/spring-server-api-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-api/spring-server-api-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-api/spring-server-api-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-compute/module.properties b/server/src/main/resources/META-INF/cloudstack/server-compute/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-compute/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-compute/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml b/server/src/main/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-discoverer/module.properties b/server/src/main/resources/META-INF/cloudstack/server-discoverer/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-discoverer/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-discoverer/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml b/server/src/main/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-fencer/module.properties b/server/src/main/resources/META-INF/cloudstack/server-fencer/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-fencer/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-fencer/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-fencer/spring-server-fencer-context.xml b/server/src/main/resources/META-INF/cloudstack/server-fencer/spring-server-fencer-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-fencer/spring-server-fencer-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-fencer/spring-server-fencer-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-investigator/module.properties b/server/src/main/resources/META-INF/cloudstack/server-investigator/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-investigator/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-investigator/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-investigator/spring-server-investigator-context.xml b/server/src/main/resources/META-INF/cloudstack/server-investigator/spring-server-investigator-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-investigator/spring-server-investigator-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-investigator/spring-server-investigator-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-network/module.properties b/server/src/main/resources/META-INF/cloudstack/server-network/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-network/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-network/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-network/spring-server-network-context.xml b/server/src/main/resources/META-INF/cloudstack/server-network/spring-server-network-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-network/spring-server-network-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-network/spring-server-network-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-planner/module.properties b/server/src/main/resources/META-INF/cloudstack/server-planner/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-planner/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-planner/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-planner/spring-server-planner-context.xml b/server/src/main/resources/META-INF/cloudstack/server-planner/spring-server-planner-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-planner/spring-server-planner-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-planner/spring-server-planner-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-storage/module.properties b/server/src/main/resources/META-INF/cloudstack/server-storage/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-storage/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-storage/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-storage/spring-server-storage-context.xml b/server/src/main/resources/META-INF/cloudstack/server-storage/spring-server-storage-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-storage/spring-server-storage-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-storage/spring-server-storage-context.xml
diff --git a/server/resources/META-INF/cloudstack/server-template-adapter/module.properties b/server/src/main/resources/META-INF/cloudstack/server-template-adapter/module.properties
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-template-adapter/module.properties
rename to server/src/main/resources/META-INF/cloudstack/server-template-adapter/module.properties
diff --git a/server/resources/META-INF/cloudstack/server-template-adapter/spring-server-template-adapter-context.xml b/server/src/main/resources/META-INF/cloudstack/server-template-adapter/spring-server-template-adapter-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/server-template-adapter/spring-server-template-adapter-context.xml
rename to server/src/main/resources/META-INF/cloudstack/server-template-adapter/spring-server-template-adapter-context.xml
diff --git a/server/resources/META-INF/cloudstack/system/spring-server-system-context.xml b/server/src/main/resources/META-INF/cloudstack/system/spring-server-system-context.xml
similarity index 100%
rename from server/resources/META-INF/cloudstack/system/spring-server-system-context.xml
rename to server/src/main/resources/META-INF/cloudstack/system/spring-server-system-context.xml
diff --git a/server/resources/com/cloud/upgrade/databaseCreatorContext.xml b/server/src/main/resources/com/cloud/upgrade/databaseCreatorContext.xml
similarity index 100%
rename from server/resources/com/cloud/upgrade/databaseCreatorContext.xml
rename to server/src/main/resources/com/cloud/upgrade/databaseCreatorContext.xml
diff --git a/server/scripts/vmops-fix-mysql-config b/server/src/main/scripts/vmops-fix-mysql-config
similarity index 100%
rename from server/scripts/vmops-fix-mysql-config
rename to server/src/main/scripts/vmops-fix-mysql-config
diff --git a/server/test/async-job-component.xml b/server/src/test/async-job-component.xml
similarity index 100%
rename from server/test/async-job-component.xml
rename to server/src/test/async-job-component.xml
diff --git a/server/test/com/cloud/alert/AlertControlsUnitTest.java b/server/src/test/java/com/cloud/alert/AlertControlsUnitTest.java
similarity index 100%
rename from server/test/com/cloud/alert/AlertControlsUnitTest.java
rename to server/src/test/java/com/cloud/alert/AlertControlsUnitTest.java
diff --git a/server/test/com/cloud/alert/MockAlertManagerImpl.java b/server/src/test/java/com/cloud/alert/MockAlertManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/alert/MockAlertManagerImpl.java
rename to server/src/test/java/com/cloud/alert/MockAlertManagerImpl.java
diff --git a/server/test/com/cloud/api/APITest.java b/server/src/test/java/com/cloud/api/APITest.java
similarity index 100%
rename from server/test/com/cloud/api/APITest.java
rename to server/src/test/java/com/cloud/api/APITest.java
diff --git a/server/test/com/cloud/api/ApiResponseHelperTest.java b/server/src/test/java/com/cloud/api/ApiResponseHelperTest.java
similarity index 100%
rename from server/test/com/cloud/api/ApiResponseHelperTest.java
rename to server/src/test/java/com/cloud/api/ApiResponseHelperTest.java
diff --git a/server/test/com/cloud/api/ApiServletTest.java b/server/src/test/java/com/cloud/api/ApiServletTest.java
similarity index 100%
rename from server/test/com/cloud/api/ApiServletTest.java
rename to server/src/test/java/com/cloud/api/ApiServletTest.java
diff --git a/server/test/com/cloud/api/ListPerfTest.java b/server/src/test/java/com/cloud/api/ListPerfTest.java
similarity index 100%
rename from server/test/com/cloud/api/ListPerfTest.java
rename to server/src/test/java/com/cloud/api/ListPerfTest.java
diff --git a/server/test/com/cloud/api/LoginResponse.java b/server/src/test/java/com/cloud/api/LoginResponse.java
similarity index 100%
rename from server/test/com/cloud/api/LoginResponse.java
rename to server/src/test/java/com/cloud/api/LoginResponse.java
diff --git a/server/test/com/cloud/api/dispatch/CommandCreationWorkerTest.java b/server/src/test/java/com/cloud/api/dispatch/CommandCreationWorkerTest.java
similarity index 100%
rename from server/test/com/cloud/api/dispatch/CommandCreationWorkerTest.java
rename to server/src/test/java/com/cloud/api/dispatch/CommandCreationWorkerTest.java
diff --git a/server/test/com/cloud/api/dispatch/DispatchChainFactoryTest.java b/server/src/test/java/com/cloud/api/dispatch/DispatchChainFactoryTest.java
similarity index 100%
rename from server/test/com/cloud/api/dispatch/DispatchChainFactoryTest.java
rename to server/src/test/java/com/cloud/api/dispatch/DispatchChainFactoryTest.java
diff --git a/server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java b/server/src/test/java/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
similarity index 100%
rename from server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
rename to server/src/test/java/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
diff --git a/server/test/com/cloud/api/dispatch/ParamProcessWorkerTest.java b/server/src/test/java/com/cloud/api/dispatch/ParamProcessWorkerTest.java
similarity index 100%
rename from server/test/com/cloud/api/dispatch/ParamProcessWorkerTest.java
rename to server/src/test/java/com/cloud/api/dispatch/ParamProcessWorkerTest.java
diff --git a/server/test/com/cloud/api/dispatch/SpecificCmdValidationWorkerTest.java b/server/src/test/java/com/cloud/api/dispatch/SpecificCmdValidationWorkerTest.java
similarity index 100%
rename from server/test/com/cloud/api/dispatch/SpecificCmdValidationWorkerTest.java
rename to server/src/test/java/com/cloud/api/dispatch/SpecificCmdValidationWorkerTest.java
diff --git a/server/test/com/cloud/api/query/MutualExclusiveIdsManagerBaseTest.java b/server/src/test/java/com/cloud/api/query/MutualExclusiveIdsManagerBaseTest.java
similarity index 100%
rename from server/test/com/cloud/api/query/MutualExclusiveIdsManagerBaseTest.java
rename to server/src/test/java/com/cloud/api/query/MutualExclusiveIdsManagerBaseTest.java
diff --git a/server/test/com/cloud/api/query/dao/GenericDaoBaseWithTagInformationBaseTest.java b/server/src/test/java/com/cloud/api/query/dao/GenericDaoBaseWithTagInformationBaseTest.java
similarity index 100%
rename from server/test/com/cloud/api/query/dao/GenericDaoBaseWithTagInformationBaseTest.java
rename to server/src/test/java/com/cloud/api/query/dao/GenericDaoBaseWithTagInformationBaseTest.java
diff --git a/server/test/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java b/server/src/test/java/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java
similarity index 100%
rename from server/test/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java
rename to server/src/test/java/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java
diff --git a/server/test/com/cloud/api/query/dao/TemplateJoinDaoImplTest.java b/server/src/test/java/com/cloud/api/query/dao/TemplateJoinDaoImplTest.java
similarity index 100%
rename from server/test/com/cloud/api/query/dao/TemplateJoinDaoImplTest.java
rename to server/src/test/java/com/cloud/api/query/dao/TemplateJoinDaoImplTest.java
diff --git a/server/test/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java b/server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java
similarity index 100%
rename from server/test/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java
rename to server/src/test/java/com/cloud/api/query/dao/UserVmJoinDaoImplTest.java
diff --git a/server/test/com/cloud/api/query/dao/VolumeJoinDaoImplTest.java b/server/src/test/java/com/cloud/api/query/dao/VolumeJoinDaoImplTest.java
similarity index 100%
rename from server/test/com/cloud/api/query/dao/VolumeJoinDaoImplTest.java
rename to server/src/test/java/com/cloud/api/query/dao/VolumeJoinDaoImplTest.java
diff --git a/server/test/com/cloud/capacity/CapacityManagerTest.java b/server/src/test/java/com/cloud/capacity/CapacityManagerTest.java
similarity index 100%
rename from server/test/com/cloud/capacity/CapacityManagerTest.java
rename to server/src/test/java/com/cloud/capacity/CapacityManagerTest.java
diff --git a/server/test/com/cloud/configuration/ConfigurationManagerTest.java b/server/src/test/java/com/cloud/configuration/ConfigurationManagerTest.java
similarity index 100%
rename from server/test/com/cloud/configuration/ConfigurationManagerTest.java
rename to server/src/test/java/com/cloud/configuration/ConfigurationManagerTest.java
diff --git a/server/test/com/cloud/configuration/ValidateIpRangeTest.java b/server/src/test/java/com/cloud/configuration/ValidateIpRangeTest.java
similarity index 100%
rename from server/test/com/cloud/configuration/ValidateIpRangeTest.java
rename to server/src/test/java/com/cloud/configuration/ValidateIpRangeTest.java
diff --git a/server/test/com/cloud/consoleproxy/ConsoleProxyManagerTest.java b/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyManagerTest.java
similarity index 100%
rename from server/test/com/cloud/consoleproxy/ConsoleProxyManagerTest.java
rename to server/src/test/java/com/cloud/consoleproxy/ConsoleProxyManagerTest.java
diff --git a/server/test/com/cloud/event/ActionEventUtilsTest.java b/server/src/test/java/com/cloud/event/ActionEventUtilsTest.java
similarity index 100%
rename from server/test/com/cloud/event/ActionEventUtilsTest.java
rename to server/src/test/java/com/cloud/event/ActionEventUtilsTest.java
diff --git a/server/test/com/cloud/event/EventControlsUnitTest.java b/server/src/test/java/com/cloud/event/EventControlsUnitTest.java
similarity index 100%
rename from server/test/com/cloud/event/EventControlsUnitTest.java
rename to server/src/test/java/com/cloud/event/EventControlsUnitTest.java
diff --git a/server/test/com/cloud/ha/HighAvailabilityManagerImplTest.java b/server/src/test/java/com/cloud/ha/HighAvailabilityManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/ha/HighAvailabilityManagerImplTest.java
rename to server/src/test/java/com/cloud/ha/HighAvailabilityManagerImplTest.java
diff --git a/server/test/com/cloud/ha/KVMFencerTest.java b/server/src/test/java/com/cloud/ha/KVMFencerTest.java
similarity index 100%
rename from server/test/com/cloud/ha/KVMFencerTest.java
rename to server/src/test/java/com/cloud/ha/KVMFencerTest.java
diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/src/test/java/com/cloud/keystore/KeystoreTest.java
similarity index 100%
rename from server/test/com/cloud/keystore/KeystoreTest.java
rename to server/src/test/java/com/cloud/keystore/KeystoreTest.java
diff --git a/server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java b/server/src/test/java/com/cloud/metadata/ResourceMetaDataManagerTest.java
similarity index 100%
rename from server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java
rename to server/src/test/java/com/cloud/metadata/ResourceMetaDataManagerTest.java
diff --git a/server/test/com/cloud/network/CreatePrivateNetworkTest.java b/server/src/test/java/com/cloud/network/CreatePrivateNetworkTest.java
similarity index 100%
rename from server/test/com/cloud/network/CreatePrivateNetworkTest.java
rename to server/src/test/java/com/cloud/network/CreatePrivateNetworkTest.java
diff --git a/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java b/server/src/test/java/com/cloud/network/DedicateGuestVlanRangesTest.java
similarity index 100%
rename from server/test/com/cloud/network/DedicateGuestVlanRangesTest.java
rename to server/src/test/java/com/cloud/network/DedicateGuestVlanRangesTest.java
diff --git a/server/test/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java b/server/src/test/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java
rename to server/src/test/java/com/cloud/network/ExternalLoadBalancerDeviceManagerImplTest.java
diff --git a/server/test/com/cloud/network/IpAddressManagerTest.java b/server/src/test/java/com/cloud/network/IpAddressManagerTest.java
similarity index 100%
rename from server/test/com/cloud/network/IpAddressManagerTest.java
rename to server/src/test/java/com/cloud/network/IpAddressManagerTest.java
diff --git a/server/test/com/cloud/network/MockFirewallManagerImpl.java b/server/src/test/java/com/cloud/network/MockFirewallManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/network/MockFirewallManagerImpl.java
rename to server/src/test/java/com/cloud/network/MockFirewallManagerImpl.java
diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/src/test/java/com/cloud/network/MockNetworkModelImpl.java
similarity index 100%
rename from server/test/com/cloud/network/MockNetworkModelImpl.java
rename to server/src/test/java/com/cloud/network/MockNetworkModelImpl.java
diff --git a/server/test/com/cloud/network/NetworkModelTest.java b/server/src/test/java/com/cloud/network/NetworkModelTest.java
similarity index 100%
rename from server/test/com/cloud/network/NetworkModelTest.java
rename to server/src/test/java/com/cloud/network/NetworkModelTest.java
diff --git a/server/test/com/cloud/network/UpdatePhysicalNetworkTest.java b/server/src/test/java/com/cloud/network/UpdatePhysicalNetworkTest.java
similarity index 100%
rename from server/test/com/cloud/network/UpdatePhysicalNetworkTest.java
rename to server/src/test/java/com/cloud/network/UpdatePhysicalNetworkTest.java
diff --git a/server/test/com/cloud/network/dao/NetworkDaoTest.java b/server/src/test/java/com/cloud/network/dao/NetworkDaoTest.java
similarity index 100%
rename from server/test/com/cloud/network/dao/NetworkDaoTest.java
rename to server/src/test/java/com/cloud/network/dao/NetworkDaoTest.java
diff --git a/server/test/com/cloud/network/element/ConfigDriveNetworkElementTest.java b/server/src/test/java/com/cloud/network/element/ConfigDriveNetworkElementTest.java
similarity index 100%
rename from server/test/com/cloud/network/element/ConfigDriveNetworkElementTest.java
rename to server/src/test/java/com/cloud/network/element/ConfigDriveNetworkElementTest.java
diff --git a/server/test/com/cloud/network/element/VirtualRouterElementTest.java b/server/src/test/java/com/cloud/network/element/VirtualRouterElementTest.java
similarity index 100%
rename from server/test/com/cloud/network/element/VirtualRouterElementTest.java
rename to server/src/test/java/com/cloud/network/element/VirtualRouterElementTest.java
diff --git a/server/test/com/cloud/network/element/VpcVirtualRouterElementTest.java b/server/src/test/java/com/cloud/network/element/VpcVirtualRouterElementTest.java
similarity index 100%
rename from server/test/com/cloud/network/element/VpcVirtualRouterElementTest.java
rename to server/src/test/java/com/cloud/network/element/VpcVirtualRouterElementTest.java
diff --git a/server/test/com/cloud/network/firewall/FirewallManagerTest.java b/server/src/test/java/com/cloud/network/firewall/FirewallManagerTest.java
similarity index 94%
rename from server/test/com/cloud/network/firewall/FirewallManagerTest.java
rename to server/src/test/java/com/cloud/network/firewall/FirewallManagerTest.java
index a0bc897..4a42a54 100644
--- a/server/test/com/cloud/network/firewall/FirewallManagerTest.java
+++ b/server/src/test/java/com/cloud/network/firewall/FirewallManagerTest.java
@@ -61,24 +61,10 @@
 import com.cloud.network.rules.FirewallRuleVO;
 import com.cloud.utils.component.ComponentContext;
 
-//@Ignore("Requires database to be set up")
 @RunWith(MockitoJUnitRunner.class)
-//@ContextConfiguration(locations = "classpath:/testContext.xml")
-//@ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml")
 public class FirewallManagerTest {
     private static final Logger s_logger = Logger.getLogger(FirewallManagerTest.class);
 
-//    @Before
-//    public void setUp() {
-//        Logger daoLogger = Logger.getLogger(GenericDaoBase.class);
-//        Logger cloudLogger = Logger.getLogger("com.cloud");
-//
-//        componentlogger.setLevel(Level.WARN);
-//        daoLogger.setLevel(Level.ERROR);
-//        cloudLogger.setLevel(Level.ERROR);
-//        s_logger.setLevel(Level.INFO);
-//        super.setUp();
-//    }
 
     @Ignore("Requires database to be set up")
     @Test
diff --git a/server/test/com/cloud/network/lb/AssignLoadBalancerTest.java b/server/src/test/java/com/cloud/network/lb/AssignLoadBalancerTest.java
similarity index 100%
rename from server/test/com/cloud/network/lb/AssignLoadBalancerTest.java
rename to server/src/test/java/com/cloud/network/lb/AssignLoadBalancerTest.java
diff --git a/server/test/com/cloud/network/lb/UpdateLoadBalancerTest.java b/server/src/test/java/com/cloud/network/lb/UpdateLoadBalancerTest.java
similarity index 100%
rename from server/test/com/cloud/network/lb/UpdateLoadBalancerTest.java
rename to server/src/test/java/com/cloud/network/lb/UpdateLoadBalancerTest.java
diff --git a/server/test/com/cloud/network/router/NetworkHelperImplTest.java b/server/src/test/java/com/cloud/network/router/NetworkHelperImplTest.java
similarity index 100%
rename from server/test/com/cloud/network/router/NetworkHelperImplTest.java
rename to server/src/test/java/com/cloud/network/router/NetworkHelperImplTest.java
diff --git a/server/test/com/cloud/network/router/RouterControlHelperTest.java b/server/src/test/java/com/cloud/network/router/RouterControlHelperTest.java
similarity index 100%
rename from server/test/com/cloud/network/router/RouterControlHelperTest.java
rename to server/src/test/java/com/cloud/network/router/RouterControlHelperTest.java
diff --git a/server/test/com/cloud/network/router/VirtualNetworkApplianceManagerImplTest.java b/server/src/test/java/com/cloud/network/router/VirtualNetworkApplianceManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/network/router/VirtualNetworkApplianceManagerImplTest.java
rename to server/src/test/java/com/cloud/network/router/VirtualNetworkApplianceManagerImplTest.java
diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/src/test/java/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
similarity index 100%
rename from server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
rename to server/src/test/java/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImplTest.java b/server/src/test/java/com/cloud/network/security/SecurityGroupManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/network/security/SecurityGroupManagerImplTest.java
rename to server/src/test/java/com/cloud/network/security/SecurityGroupManagerImplTest.java
diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java b/server/src/test/java/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
similarity index 100%
rename from server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
rename to server/src/test/java/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
diff --git a/server/test/com/cloud/network/security/SecurityGroupQueueTest.java b/server/src/test/java/com/cloud/network/security/SecurityGroupQueueTest.java
similarity index 100%
rename from server/test/com/cloud/network/security/SecurityGroupQueueTest.java
rename to server/src/test/java/com/cloud/network/security/SecurityGroupQueueTest.java
diff --git a/server/src/test/java/com/cloud/network/vpc/NetworkACLManagerImplTest.java b/server/src/test/java/com/cloud/network/vpc/NetworkACLManagerImplTest.java
new file mode 100644
index 0000000..1d7cdc1
--- /dev/null
+++ b/server/src/test/java/com/cloud/network/vpc/NetworkACLManagerImplTest.java
@@ -0,0 +1,81 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package com.cloud.network.vpc;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.vpc.NetworkACLItem.State;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@RunWith(MockitoJUnitRunner.class)
+public class NetworkACLManagerImplTest {
+
+    @Spy
+    @InjectMocks
+    private NetworkACLManagerImpl networkACLManagerImpl;
+    @Mock
+    private NetworkACLItemDao networkACLItemDaoMock;
+
+    @Test(expected = CloudRuntimeException.class)
+    public void updateNetworkACLItemTestUpdateDoesNotWork() throws ResourceUnavailableException {
+        NetworkACLItemVO networkACLItemVOMock = new NetworkACLItemVO();
+        networkACLItemVOMock.id = 1L;
+
+        Mockito.doReturn(false).when(networkACLItemDaoMock).update(1L, networkACLItemVOMock);
+
+        networkACLManagerImpl.updateNetworkACLItem(networkACLItemVOMock);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void updateNetworkACLItemTestUpdateWorksButApplyDoesNotWork() throws ResourceUnavailableException {
+        NetworkACLItemVO networkACLItemVOMock = new NetworkACLItemVO();
+        networkACLItemVOMock.id = 1L;
+        networkACLItemVOMock.aclId = 2L;
+
+        Mockito.doReturn(true).when(networkACLItemDaoMock).update(1L, networkACLItemVOMock);
+        Mockito.doReturn(false).when(networkACLManagerImpl).applyNetworkACL(2L);
+
+        networkACLManagerImpl.updateNetworkACLItem(networkACLItemVOMock);
+    }
+
+    @Test
+    public void updateNetworkACLItemTestHappyDay() throws ResourceUnavailableException {
+        NetworkACLItemVO networkACLItemVOMock = new NetworkACLItemVO();
+        networkACLItemVOMock.id = 1L;
+        networkACLItemVOMock.aclId = 2L;
+
+        Mockito.doReturn(true).when(networkACLItemDaoMock).update(1L, networkACLItemVOMock);
+        Mockito.doReturn(true).when(networkACLManagerImpl).applyNetworkACL(2L);
+
+        NetworkACLItem returnedNetworkAclItem = networkACLManagerImpl.updateNetworkACLItem(networkACLItemVOMock);
+
+        Mockito.verify(networkACLItemDaoMock).update(1L, networkACLItemVOMock);
+        Mockito.verify(networkACLManagerImpl).applyNetworkACL(2L);
+
+        Assert.assertEquals(networkACLItemVOMock, returnedNetworkAclItem);
+        Assert.assertEquals(State.Add, returnedNetworkAclItem.getState());
+    }
+}
diff --git a/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java b/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java
new file mode 100644
index 0000000..9815526
--- /dev/null
+++ b/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java
@@ -0,0 +1,1369 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package com.cloud.network.vpc;
+
+import static org.mockito.Mockito.times;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
+import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.dao.NetworkVO;
+import com.cloud.network.vpc.NetworkACLItem.Action;
+import com.cloud.network.vpc.NetworkACLItem.TrafficType;
+import com.cloud.network.vpc.dao.NetworkACLDao;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.User;
+import com.cloud.utils.db.EntityManager;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(CallContext.class)
+public class NetworkACLServiceImplTest {
+
+    @Spy
+    @InjectMocks
+    private NetworkACLServiceImpl networkAclServiceImpl = new NetworkACLServiceImpl();
+    @Mock
+    private NetworkModel networkModelMock;
+    @Mock
+    private NetworkACLManager networkAclManagerMock;
+    @Mock
+    private NetworkACLItemDao networkAclItemDaoMock;
+    @Mock
+    private EntityManager entityManagerMock;
+    @Mock
+    private AccountManager accountManagerMock;
+    @Mock
+    private NetworkACLDao networkAclDaoMock;
+
+    @Mock
+    private CreateNetworkACLCmd createNetworkAclCmdMock;
+    @Mock
+    private UpdateNetworkACLItemCmd updateNetworkACLItemCmdMock;
+    @Mock
+    private Network networkMock;
+    @Mock
+    private NetworkACLVO networkAclMock;
+    @Mock
+    private NetworkACLItemVO networkAclItemVoMock;
+    @Mock
+    private NetworkACLVO networkACLVOMock;
+    @Mock
+    private UpdateNetworkACLListCmd updateNetworkACLListCmdMock;
+
+    private Long networkAclMockId = 1L;
+    private Long networkOfferingMockId = 2L;
+    private Long networkMockVpcMockId = 3L;
+    private long networkAclListId = 1l;
+
+    @Mock
+    private MoveNetworkAclItemCmd moveNetworkAclItemCmdMock;
+    @Mock
+    private NetworkACLItemVO aclRuleBeingMovedMock;
+    private String uuidAclRuleBeingMoved = "uuidRuleBeingMoved";
+
+    @Mock
+    private NetworkACLItemVO previousAclRuleMock;
+    private String previousAclRuleUuid = "uuidPreviousAclRule";
+
+    @Mock
+    private NetworkACLItemVO nextAclRuleMock;
+    private String nextAclRuleUuid = "uuidNextAclRule";
+
+    @Mock
+    private CallContext callContextMock;
+
+    @Before
+    public void befoteTest() {
+        PowerMockito.mockStatic(CallContext.class);
+        PowerMockito.when(CallContext.current()).thenReturn(callContextMock);
+        Mockito.doReturn(Mockito.mock(User.class)).when(callContextMock).getCallingUser();
+        Mockito.doReturn(Mockito.mock(Account.class)).when(callContextMock).getCallingAccount();
+
+        Mockito.when(networkAclDaoMock.findById(networkAclListId)).thenReturn(networkACLVOMock);
+        Mockito.when(createNetworkAclCmdMock.getNetworkId()).thenReturn(1L);
+        Mockito.when(createNetworkAclCmdMock.getProtocol()).thenReturn("tcp");
+
+        Mockito.when(networkMock.getNetworkOfferingId()).thenReturn(networkOfferingMockId);
+        Mockito.when(networkMock.getVpcId()).thenReturn(networkMockVpcMockId);
+
+        Mockito.when(moveNetworkAclItemCmdMock.getUuidRuleBeingMoved()).thenReturn(uuidAclRuleBeingMoved);
+
+        Mockito.when(aclRuleBeingMovedMock.getUuid()).thenReturn(uuidAclRuleBeingMoved);
+        Mockito.when(aclRuleBeingMovedMock.getAclId()).thenReturn(networkAclMockId);
+
+        Mockito.when(previousAclRuleMock.getUuid()).thenReturn(previousAclRuleUuid);
+        Mockito.when(nextAclRuleMock.getUuid()).thenReturn(nextAclRuleUuid);
+
+        Mockito.when(networkAclMock.getVpcId()).thenReturn(networkMockVpcMockId);
+    }
+
+    @Test
+    public void createNetworkACLItemTestAclNumberNull() {
+        createNetworkACLItemTestForNumberAndExecuteTest(null);
+    }
+
+    @Test
+    public void createNetworkACLItemTestAclNumberNotNull() {
+        createNetworkACLItemTestForNumberAndExecuteTest(10);
+    }
+
+    private void createNetworkACLItemTestForNumberAndExecuteTest(Integer number) {
+        Mockito.when(createNetworkAclCmdMock.getNumber()).thenReturn(number);
+
+        Mockito.doReturn(networkAclMockId).when(networkAclServiceImpl).createAclListIfNeeded(createNetworkAclCmdMock);
+        Mockito.when(networkAclManagerMock.getNetworkACL(networkAclMockId)).thenReturn(networkAclMock);
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+        Mockito.doNothing().when(networkAclServiceImpl).validateNetworkAcl(networkAclMock);
+
+        Mockito.doReturn(Action.Allow).when(networkAclServiceImpl).validateAndCreateNetworkAclRuleAction(Mockito.anyString());
+        Mockito.when(networkAclItemDaoMock.getMaxNumberByACL(networkAclMockId)).thenReturn(5);
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateNetworkACLItem(Mockito.any(NetworkACLItemVO.class));
+        Mockito.when(networkAclManagerMock.createNetworkACLItem(Mockito.any(NetworkACLItemVO.class))).thenAnswer(new Answer<NetworkACLItemVO>() {
+            @Override
+            public NetworkACLItemVO answer(InvocationOnMock invocation) throws Throwable {
+                return (NetworkACLItemVO)invocation.getArguments()[0];
+            }
+        });
+
+        NetworkACLItem netowkrAclRuleCreated = networkAclServiceImpl.createNetworkACLItem(createNetworkAclCmdMock);
+
+        Assert.assertEquals(number == null ? 6 : number, netowkrAclRuleCreated.getNumber());
+
+        InOrder inOrder = Mockito.inOrder(networkAclManagerMock, networkAclServiceImpl, networkAclItemDaoMock);
+        inOrder.verify(networkAclServiceImpl).createAclListIfNeeded(createNetworkAclCmdMock);
+        inOrder.verify(networkAclManagerMock).getNetworkACL(networkAclMockId);
+        inOrder.verify(networkAclServiceImpl).validateNetworkAcl(networkAclMock);
+        inOrder.verify(networkAclServiceImpl).validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+        inOrder.verify(networkAclServiceImpl).validateAndCreateNetworkAclRuleAction(Mockito.anyString());
+        inOrder.verify(networkAclItemDaoMock, Mockito.times(number == null ? 1 : 0)).getMaxNumberByACL(networkAclMockId);
+        inOrder.verify(networkAclServiceImpl).validateNetworkACLItem(Mockito.any(NetworkACLItemVO.class));
+        inOrder.verify(networkAclManagerMock).createNetworkACLItem(Mockito.any(NetworkACLItemVO.class));
+    }
+
+    @Test
+    public void createAclListIfNeededTestAclRuleListIdNotNull() {
+        Long expectedAclListId = 1L;
+        Mockito.when(createNetworkAclCmdMock.getACLId()).thenReturn(expectedAclListId);
+
+        Long returnetAclListId = networkAclServiceImpl.createAclListIfNeeded(createNetworkAclCmdMock);
+
+        Assert.assertEquals(expectedAclListId, returnetAclListId);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void createAclListIfNeededTestAclRuleListIdNullAndNetworkDoesNotHaveVpc() {
+        Mockito.when(createNetworkAclCmdMock.getACLId()).thenReturn(null);
+
+        long networkId = 1L;
+        Mockito.when(createNetworkAclCmdMock.getNetworkId()).thenReturn(networkId);
+
+        Network networkMock = Mockito.mock(Network.class);
+        Mockito.when(networkMock.getVpcId()).thenReturn(null);
+
+        Mockito.doReturn(networkMock).when(networkModelMock).getNetwork(networkId);
+
+        networkAclServiceImpl.createAclListIfNeeded(createNetworkAclCmdMock);
+    }
+
+    @Test
+    public void createAclListIfNeededTestAclRuleListIdNullAndNetworkWithVpcAndNotAclListYet() {
+        Mockito.when(createNetworkAclCmdMock.getACLId()).thenReturn(null);
+
+        long networkId = 1L;
+        Mockito.when(createNetworkAclCmdMock.getNetworkId()).thenReturn(networkId);
+
+        Network networkMock = Mockito.mock(Network.class);
+        Mockito.when(networkMock.getVpcId()).thenReturn(12L);
+        Mockito.when(networkMock.getNetworkACLId()).thenReturn(null);
+
+        Mockito.doReturn(networkMock).when(networkModelMock).getNetwork(networkId);
+
+        Long expectedAclListId = 15L;
+        Mockito.doReturn(expectedAclListId).when(networkAclServiceImpl).createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+
+        Long aclIdReturned = networkAclServiceImpl.createAclListIfNeeded(createNetworkAclCmdMock);
+
+        Assert.assertEquals(expectedAclListId, aclIdReturned);
+        Mockito.verify(networkAclServiceImpl).createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+    }
+
+    @Test
+    public void createAclListIfNeededTestAclRuleListIdNullAndNetworkWithVpcAndAclListAlreadyCreated() {
+        Mockito.when(createNetworkAclCmdMock.getACLId()).thenReturn(null);
+
+        long networkId = 1L;
+        Mockito.when(createNetworkAclCmdMock.getNetworkId()).thenReturn(networkId);
+        Network networkMock = Mockito.mock(Network.class);
+        ;
+        Mockito.when(networkMock.getVpcId()).thenReturn(12L);
+        Long expectedAclListId = 15L;
+        Mockito.when(networkMock.getNetworkACLId()).thenReturn(expectedAclListId);
+
+        Mockito.doReturn(networkMock).when(networkModelMock).getNetwork(networkId);
+
+        Mockito.doReturn(16L).when(networkAclServiceImpl).createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+
+        Long aclIdReturned = networkAclServiceImpl.createAclListIfNeeded(createNetworkAclCmdMock);
+
+        Assert.assertEquals(expectedAclListId, aclIdReturned);
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void createAclListForNetworkAndReturnAclListIdTestServicesNotSupportedByNetworkOffering() {
+        Mockito.doReturn(false).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
+        networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void createAclListForNetworkAndReturnAclListIdTestServicesSupportedByNetworkOfferingButVpcNotFound() {
+        Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
+        Mockito.doReturn(null).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+
+        networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void createAclListForNetworkAndReturnAclListIdTestCreateNetworkAclReturnsNull() {
+        Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
+        Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        Mockito.doReturn(null).when(networkAclManagerMock).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
+
+        networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButNotApplied() throws ResourceUnavailableException {
+        Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
+        Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        Mockito.doReturn(Mockito.mock(NetworkACL.class)).when(networkAclManagerMock).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
+        Mockito.doReturn(false).when(networkAclManagerMock).replaceNetworkACL(Mockito.any(NetworkACL.class), Mockito.any(NetworkVO.class));
+
+        NetworkVO networkVoMock = new NetworkVO();
+        networkVoMock.setNetworkOfferingId(networkOfferingMockId);
+        networkVoMock.setVpcId(networkMockVpcMockId);
+
+        networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkVoMock);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButNotAppliedWithException() throws ResourceUnavailableException {
+        Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
+        Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        Mockito.doReturn(Mockito.mock(NetworkACL.class)).when(networkAclManagerMock).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
+
+        Mockito.doThrow(ResourceUnavailableException.class).when(networkAclManagerMock).replaceNetworkACL(Mockito.any(NetworkACL.class), Mockito.any(NetworkVO.class));
+
+        NetworkVO networkVoMock = new NetworkVO();
+        networkVoMock.setNetworkOfferingId(networkOfferingMockId);
+        networkVoMock.setVpcId(networkMockVpcMockId);
+
+        networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkVoMock);
+    }
+
+    @Test
+    public void createAclListForNetworkAndReturnAclListIdTestAclIsCreatedAndAppliedWithSuccess() throws ResourceUnavailableException {
+        Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
+        Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+
+        NetworkACL networkAclMock = Mockito.mock(NetworkACL.class);
+        Long expectedNetworkAclId = 5L;
+        Mockito.when(networkAclMock.getId()).thenReturn(expectedNetworkAclId);
+        Mockito.doReturn(networkAclMock).when(networkAclManagerMock).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
+
+        Mockito.doReturn(true).when(networkAclManagerMock).replaceNetworkACL(Mockito.any(NetworkACL.class), Mockito.any(NetworkVO.class));
+
+        NetworkVO networkVoMock = new NetworkVO();
+        networkVoMock.setNetworkOfferingId(networkOfferingMockId);
+        networkVoMock.setVpcId(networkMockVpcMockId);
+
+        Long networkAclIdReceived = networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkVoMock);
+
+        Assert.assertEquals(expectedNetworkAclId, networkAclIdReceived);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAclRuleNumberTestNumberLessThanOne() {
+        Mockito.when(createNetworkAclCmdMock.getNumber()).thenReturn(0);
+        networkAclServiceImpl.validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAclRuleNumberTestNumberNegative() {
+        Mockito.when(createNetworkAclCmdMock.getNumber()).thenReturn(-1);
+        networkAclServiceImpl.validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAclRuleNumberTestNumberInOtherAcl() {
+        Mockito.when(createNetworkAclCmdMock.getNumber()).thenReturn(1);
+        Mockito.doReturn(Mockito.mock(NetworkACLItemVO.class)).when(networkAclItemDaoMock).findByAclAndNumber(Mockito.anyLong(), Mockito.anyInt());
+
+        networkAclServiceImpl.validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+
+        Mockito.verify(networkAclItemDaoMock).findByAclAndNumber(Mockito.anyLong(), Mockito.anyInt());
+    }
+
+    @Test
+    public void validateAclRuleNumberTestHappyDay() {
+        Mockito.when(createNetworkAclCmdMock.getNumber()).thenReturn(1);
+        Mockito.doReturn(null).when(networkAclItemDaoMock).findByAclAndNumber(Mockito.anyLong(), Mockito.anyInt());
+
+        networkAclServiceImpl.validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+        Mockito.verify(networkAclItemDaoMock).findByAclAndNumber(Mockito.anyLong(), Mockito.anyInt());
+    }
+
+    @Test
+    public void validateAclRuleNumberTestNumberNull() {
+        Mockito.when(createNetworkAclCmdMock.getNumber()).thenReturn(null);
+        Mockito.doReturn(null).when(networkAclItemDaoMock).findByAclAndNumber(Mockito.anyLong(), Mockito.anyInt());
+
+        networkAclServiceImpl.validateAclRuleNumber(createNetworkAclCmdMock, networkAclMock);
+        Mockito.verify(networkAclItemDaoMock, Mockito.times(0)).findByAclAndNumber(Mockito.anyLong(), Mockito.anyInt());
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateNetworkAclTestAclNull() {
+        networkAclServiceImpl.validateNetworkAcl(null);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateNetworkAclTestAclDefaulAllow() {
+        Mockito.when(networkAclMock.getId()).thenReturn(2L);
+        networkAclServiceImpl.validateNetworkAcl(networkAclMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateNetworkAclTestAclDefaulDeny() {
+        Mockito.when(networkAclMock.getId()).thenReturn(1L);
+        networkAclServiceImpl.validateNetworkAcl(networkAclMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateNetworkAclTestAclNotDefaulWithoutVpc() {
+        Mockito.when(networkAclMock.getId()).thenReturn(3L);
+        Mockito.doReturn(null).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        ;
+
+        networkAclServiceImpl.validateNetworkAcl(networkAclMock);
+    }
+
+    @Test
+    @PrepareForTest(CallContext.class)
+    public void validateNetworkAclTestAclNotDefaulWithVpc() {
+        CallContext callContextMock = Mockito.mock(CallContext.class);
+        Mockito.doReturn(Mockito.mock(Account.class)).when(callContextMock).getCallingAccount();
+
+        PowerMockito.mockStatic(CallContext.class);
+        PowerMockito.when(CallContext.current()).thenReturn(callContextMock);
+
+        Mockito.when(networkAclMock.getId()).thenReturn(3L);
+        Mockito.when(networkAclMock.getVpcId()).thenReturn(networkMockVpcMockId);
+
+        Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        Mockito.doNothing().when(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        networkAclServiceImpl.validateNetworkAcl(networkAclMock);
+
+        Mockito.verify(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        Mockito.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        PowerMockito.verifyStatic();
+        CallContext.current();
+
+    }
+
+    @Test
+    public void validateAndCreateNetworkAclRuleActionTestActionNull() {
+        NetworkACLItem.Action receivedAction = networkAclServiceImpl.validateAndCreateNetworkAclRuleAction(null);
+
+        Assert.assertEquals(NetworkACLItem.Action.Allow, receivedAction);
+
+        Mockito.verify(networkAclServiceImpl).validateNetworkAclRuleAction(null);
+    }
+
+    @Test
+    public void validateAndCreateNetworkAclRuleActionTestActionAllow() {
+        NetworkACLItem.Action receivedAction = networkAclServiceImpl.validateAndCreateNetworkAclRuleAction("allow");
+
+        Assert.assertEquals(NetworkACLItem.Action.Allow, receivedAction);
+        Mockito.verify(networkAclServiceImpl).validateNetworkAclRuleAction("allow");
+    }
+
+    @Test
+    public void validateAndCreateNetworkAclRuleActionTestActionDeny() {
+        NetworkACLItem.Action receivedAction = networkAclServiceImpl.validateAndCreateNetworkAclRuleAction("deny");
+
+        Assert.assertEquals(NetworkACLItem.Action.Deny, receivedAction);
+        Mockito.verify(networkAclServiceImpl).validateNetworkAclRuleAction("deny");
+    }
+
+    @Test
+    public void validateNetworkAclRuleActionTestActionNull() {
+        networkAclServiceImpl.validateNetworkAclRuleAction(null);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateNetworkAclRuleActionTestInvalidAction() {
+        networkAclServiceImpl.validateNetworkAclRuleAction("Invalid");
+    }
+
+    @Test
+    public void validateNetworkAclRuleActionTestValidActions() {
+        networkAclServiceImpl.validateNetworkAclRuleAction("deny");
+        networkAclServiceImpl.validateNetworkAclRuleAction("allow");
+    }
+
+    @Test
+    public void validateNetworkACLItemTest() {
+        Mockito.doNothing().when(networkAclServiceImpl).validateSourceStartAndEndPorts(networkAclItemVoMock);
+        Mockito.doNothing().when(networkAclServiceImpl).validateSourceCidrList(networkAclItemVoMock);
+        Mockito.doNothing().when(networkAclServiceImpl).validateProtocol(networkAclItemVoMock);
+
+        networkAclServiceImpl.validateNetworkACLItem(networkAclItemVoMock);
+
+        InOrder inOrder = Mockito.inOrder(networkAclServiceImpl);
+        inOrder.verify(networkAclServiceImpl).validateSourceStartAndEndPorts(networkAclItemVoMock);
+        inOrder.verify(networkAclServiceImpl).validateSourceCidrList(networkAclItemVoMock);
+        inOrder.verify(networkAclServiceImpl).validateProtocol(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateSourceStartAndEndPortsTestBothPortsNull() {
+        networkAclServiceImpl.validateSourceStartAndEndPorts(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateSourceStartAndEndPortsTestStartPorInvalid() {
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(65536);
+
+        networkAclServiceImpl.validateSourceStartAndEndPorts(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateSourceStartAndEndPortsTestStartPorValidButEndPortInvalid() {
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(65535);
+        Mockito.when(networkAclItemVoMock.getSourcePortEnd()).thenReturn(65536);
+
+        networkAclServiceImpl.validateSourceStartAndEndPorts(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateSourceStartAndEndPortsTestStartPortBiggerThanEndPort() {
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(65535);
+        Mockito.when(networkAclItemVoMock.getSourcePortEnd()).thenReturn(2);
+
+        networkAclServiceImpl.validateSourceStartAndEndPorts(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateSourceStartAndEndPortsTestPortsWithAllProtocol() {
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(1);
+        Mockito.when(networkAclItemVoMock.getSourcePortEnd()).thenReturn(2);
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("all");
+
+        networkAclServiceImpl.validateSourceStartAndEndPorts(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateSourceStartAndEndPortsTestPortsWithTcpProtocol() {
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(1);
+        Mockito.when(networkAclItemVoMock.getSourcePortEnd()).thenReturn(2);
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("tcp");
+
+        networkAclServiceImpl.validateSourceStartAndEndPorts(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateSourceCidrListTestEmptySourceCirdList() {
+        Mockito.when(networkAclItemVoMock.getSourceCidrList()).thenReturn(new ArrayList<>());
+        networkAclServiceImpl.validateSourceCidrList(networkAclItemVoMock);
+    }
+
+    @Test(expected = ServerApiException.class)
+    public void validateSourceCidrListTestInvalidCidrs() {
+        ArrayList<String> cidrsInvalid = new ArrayList<>();
+        cidrsInvalid.add("256.0.0.0./32");
+
+        Mockito.when(networkAclItemVoMock.getSourceCidrList()).thenReturn(cidrsInvalid);
+        networkAclServiceImpl.validateSourceCidrList(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateSourceCidrListTestValidCidrs() {
+        ArrayList<String> cidrsInvalid = new ArrayList<>();
+        cidrsInvalid.add("192.168.12.0/24");
+
+        Mockito.when(networkAclItemVoMock.getSourceCidrList()).thenReturn(cidrsInvalid);
+        networkAclServiceImpl.validateSourceCidrList(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateProtocolTestProtocolIsNullOrBlank() {
+        Mockito.doNothing().when(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn(null);
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("    ");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateProtocolTestProtocolIsNumericValueLessThanZero() {
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("-1");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateProtocolTestProtocolIsNumericValueMoreThan255() {
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("256");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateProtocolTestProtocolIsNumericValidValue() {
+        Mockito.doNothing().when(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("255");
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(null);
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(null);
+
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.verify(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateProtocolTestProtocolIsStringInvalid() {
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("invalid");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateProtocolTestProtocolIsStringValid() {
+        Mockito.doNothing().when(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(null);
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(null);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("tcp");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("all");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("udp");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.verify(networkAclServiceImpl, Mockito.times(3)).validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateProtocolTestProtocolNotIcmpWithIcmpConfigurations() {
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(1);
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(1);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("tcp");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateProtocolTestProtocolNotIcmpWithSourcePorts() {
+        Mockito.doNothing().when(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(null);
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(null);
+
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(1);
+        Mockito.when(networkAclItemVoMock.getSourcePortEnd()).thenReturn(1);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("tcp");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.verify(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateProtocolTestProtocolIcmpWithIcmpConfigurations() {
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(1);
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(1);
+
+        Mockito.when(networkAclItemVoMock.getSourcePortStart()).thenReturn(null);
+        Mockito.when(networkAclItemVoMock.getSourcePortEnd()).thenReturn(null);
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+
+        Mockito.when(networkAclItemVoMock.getProtocol()).thenReturn("icmp");
+        networkAclServiceImpl.validateProtocol(networkAclItemVoMock);
+
+        Mockito.verify(networkAclServiceImpl).validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateIcmpTypeAndCodeTestIcmpTypeNull() {
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(null);
+
+        networkAclServiceImpl.validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateIcmpTypeAndCodeTestIcmpTypeInvalid() {
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(256);
+
+        networkAclServiceImpl.validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateIcmpTypeAndCodeTestIcmpTypeNegativeOne() {
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(-1);
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(null);
+
+        networkAclServiceImpl.validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateIcmpTypeAndCodeTestIcmpTypeNegativeOneAndIcmpCodeNegativeOne() {
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(-1);
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(-1);
+
+        networkAclServiceImpl.validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateIcmpTypeAndCodeTestIcmpTypeValidAndIcmpCodeInvalid() {
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(255);
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(16);
+
+        networkAclServiceImpl.validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test
+    public void validateIcmpTypeAndCodeTestIcmpTypeValidAndIcmpCodeValid() {
+        Mockito.when(networkAclItemVoMock.getIcmpType()).thenReturn(255);
+        Mockito.when(networkAclItemVoMock.getIcmpCode()).thenReturn(1);
+
+        networkAclServiceImpl.validateIcmpTypeAndCode(networkAclItemVoMock);
+    }
+
+    @Test
+    public void updateNetworkACLItemTest() throws ResourceUnavailableException {
+        Mockito.when(networkAclItemVoMock.getAclId()).thenReturn(networkAclMockId);
+        Mockito.doReturn(networkAclItemVoMock).when(networkAclServiceImpl).validateNetworkAclRuleIdAndRetrieveIt(updateNetworkACLItemCmdMock);
+        Mockito.doReturn(networkAclMock).when(networkAclManagerMock).getNetworkACL(networkAclMockId);
+        Mockito.doNothing().when(networkAclServiceImpl).validateNetworkAcl(Mockito.eq(networkAclMock));
+        Mockito.doNothing().when(networkAclServiceImpl).transferDataToNetworkAclRulePojo(Mockito.eq(updateNetworkACLItemCmdMock), Mockito.eq(networkAclItemVoMock), Mockito.eq(networkAclMock));
+        Mockito.doNothing().when(networkAclServiceImpl).validateNetworkACLItem(networkAclItemVoMock);
+        Mockito.doReturn(networkAclItemVoMock).when(networkAclManagerMock).updateNetworkACLItem(networkAclItemVoMock);
+
+        networkAclServiceImpl.updateNetworkACLItem(updateNetworkACLItemCmdMock);
+
+        InOrder inOrder = Mockito.inOrder(networkAclServiceImpl, networkAclManagerMock);
+        inOrder.verify(networkAclServiceImpl).validateNetworkAclRuleIdAndRetrieveIt(updateNetworkACLItemCmdMock);
+        inOrder.verify(networkAclManagerMock).getNetworkACL(networkAclMockId);
+        inOrder.verify(networkAclServiceImpl).validateNetworkAcl(networkAclMock);
+        inOrder.verify(networkAclServiceImpl).transferDataToNetworkAclRulePojo(Mockito.eq(updateNetworkACLItemCmdMock), Mockito.eq(networkAclItemVoMock), Mockito.eq(networkAclMock));
+        inOrder.verify(networkAclServiceImpl).validateNetworkACLItem(networkAclItemVoMock);
+        inOrder.verify(networkAclManagerMock).updateNetworkACLItem(networkAclItemVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateNetworkAclRuleIdAndRetrieveItTestNetworkAclNotFound() {
+        Mockito.doReturn(null).when(networkAclItemDaoMock).findById(Mockito.anyLong());
+
+        networkAclServiceImpl.validateNetworkAclRuleIdAndRetrieveIt(updateNetworkACLItemCmdMock);
+    }
+
+    @Test
+    public void validateNetworkAclRuleIdAndRetrieveItTestNetworkAclFound() {
+        Mockito.doReturn(networkAclItemVoMock).when(networkAclItemDaoMock).findById(Mockito.anyLong());
+
+        NetworkACLItemVO returnedNetworkAclItemVo = networkAclServiceImpl.validateNetworkAclRuleIdAndRetrieveIt(updateNetworkACLItemCmdMock);
+
+        Assert.assertNotEquals(networkAclItemVoMock, returnedNetworkAclItemVo);
+        Mockito.verify(networkAclItemVoMock).clone();
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void transferDataToNetworkAclRulePojoTestNumberOfAcltoBeUpdatedAlreadyInUse() {
+        int aclNumberToUpdate = 1;
+        Mockito.when(updateNetworkACLItemCmdMock.getNumber()).thenReturn(aclNumberToUpdate);
+        Mockito.when(networkAclMock.getId()).thenReturn(networkAclMockId);
+        Mockito.when(networkAclItemVoMock.getId()).thenReturn(100L);
+        NetworkACLItemVO otherNetworkAclItemVoMock = Mockito.mock(NetworkACLItemVO.class);
+        Mockito.when(otherNetworkAclItemVoMock.getId()).thenReturn(101L);
+        Mockito.doReturn(otherNetworkAclItemVoMock).when(networkAclItemDaoMock).findByAclAndNumber(networkAclMockId, aclNumberToUpdate);
+
+        networkAclServiceImpl.transferDataToNetworkAclRulePojo(updateNetworkACLItemCmdMock, networkAclItemVoMock, networkAclMock);
+    }
+
+    @Test
+    public void transferDataToNetworkAclRulePojoTestPartialUpgradeAllValuesNull() {
+        Mockito.when(updateNetworkACLItemCmdMock.isPartialUpgrade()).thenReturn(true);
+        Mockito.when(updateNetworkACLItemCmdMock.getNumber()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourcePortStart()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourcePortEnd()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourceCidrList()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getProtocol()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getIcmpCode()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getIcmpType()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getAction()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getTrafficType()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getCustomId()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getReason()).thenReturn(null);
+
+        Mockito.when(updateNetworkACLItemCmdMock.isDisplay()).thenReturn(false);
+        Mockito.when(networkAclItemVoMock.isDisplay()).thenReturn(false);
+
+        networkAclServiceImpl.transferDataToNetworkAclRulePojo(updateNetworkACLItemCmdMock, networkAclItemVoMock, networkAclMock);
+
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setNumber(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setSourcePortStart(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setSourcePortEnd(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setSourceCidrList(Mockito.anyListOf(String.class));
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setProtocol(Mockito.anyString());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setIcmpCode(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setIcmpType(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setAction(Mockito.any(Action.class));
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setTrafficType(Mockito.any(TrafficType.class));
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setUuid(Mockito.anyString());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setReason(Mockito.anyString());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setDisplay(Mockito.anyBoolean());
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).validateAndCreateNetworkAclRuleAction(Mockito.anyString());
+    }
+
+    @Test
+    public void transferDataToNetworkAclRulePojoTestNotPartialUpgradeAllValuesNull() {
+        Mockito.when(updateNetworkACLItemCmdMock.isPartialUpgrade()).thenReturn(false);
+
+        Mockito.when(updateNetworkACLItemCmdMock.getNumber()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourcePortStart()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourcePortEnd()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourceCidrList()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getProtocol()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getIcmpCode()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getIcmpType()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getAction()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getTrafficType()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getCustomId()).thenReturn(null);
+        Mockito.when(updateNetworkACLItemCmdMock.getReason()).thenReturn(null);
+
+        Mockito.when(updateNetworkACLItemCmdMock.isDisplay()).thenReturn(false);
+        Mockito.when(networkAclItemVoMock.isDisplay()).thenReturn(false);
+
+        networkAclServiceImpl.transferDataToNetworkAclRulePojo(updateNetworkACLItemCmdMock, networkAclItemVoMock, networkAclMock);
+
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setNumber(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setSourcePortStart(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setSourcePortEnd(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setSourceCidrList(Mockito.anyListOf(String.class));
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setProtocol(Mockito.anyString());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setIcmpCode(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setIcmpType(Mockito.anyInt());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setAction(Mockito.any(Action.class));
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setTrafficType(Mockito.any(TrafficType.class));
+        Mockito.verify(networkAclItemVoMock, Mockito.times(0)).setUuid(Mockito.anyString());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setReason(Mockito.anyString());
+        Mockito.verify(networkAclItemVoMock, Mockito.times(1)).setDisplay(Mockito.anyBoolean());
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).validateAndCreateNetworkAclRuleAction(Mockito.anyString());
+    }
+
+    @Test
+    public void transferDataToNetworkAclRulePojoTestAllValuesWithUpdateData() {
+        Mockito.when(updateNetworkACLItemCmdMock.getNumber()).thenReturn(1);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourcePortStart()).thenReturn(23);
+        Mockito.when(updateNetworkACLItemCmdMock.getSourcePortEnd()).thenReturn(24);
+
+        ArrayList<String> cidrsList = new ArrayList<>();
+        cidrsList.add("192.168.6.0/24");
+        Mockito.when(updateNetworkACLItemCmdMock.getSourceCidrList()).thenReturn(cidrsList);
+
+        Mockito.when(updateNetworkACLItemCmdMock.getProtocol()).thenReturn("all");
+        Mockito.when(updateNetworkACLItemCmdMock.getIcmpCode()).thenReturn(5);
+        Mockito.when(updateNetworkACLItemCmdMock.getIcmpType()).thenReturn(6);
+        Mockito.when(updateNetworkACLItemCmdMock.getAction()).thenReturn("deny");
+        Mockito.when(updateNetworkACLItemCmdMock.getTrafficType()).thenReturn(TrafficType.Egress);
+        Mockito.when(updateNetworkACLItemCmdMock.getCustomId()).thenReturn("customUuid");
+        Mockito.when(updateNetworkACLItemCmdMock.getReason()).thenReturn("reason");
+
+        Mockito.when(updateNetworkACLItemCmdMock.isDisplay()).thenReturn(true);
+        Mockito.when(networkAclItemVoMock.isDisplay()).thenReturn(false);
+
+        networkAclServiceImpl.transferDataToNetworkAclRulePojo(updateNetworkACLItemCmdMock, networkAclItemVoMock, networkAclMock);
+
+        Mockito.verify(networkAclItemVoMock).setNumber(1);
+        Mockito.verify(networkAclItemVoMock).setSourcePortStart(23);
+        Mockito.verify(networkAclItemVoMock).setSourcePortEnd(24);
+        Mockito.verify(networkAclItemVoMock).setSourceCidrList(cidrsList);
+        Mockito.verify(networkAclItemVoMock).setProtocol("all");
+        Mockito.verify(networkAclItemVoMock).setIcmpCode(5);
+        Mockito.verify(networkAclItemVoMock).setIcmpType(6);
+        Mockito.verify(networkAclItemVoMock).setAction(Action.Deny);
+        Mockito.verify(networkAclItemVoMock).setTrafficType(TrafficType.Egress);
+        Mockito.verify(networkAclItemVoMock).setUuid("customUuid");
+        Mockito.verify(networkAclItemVoMock).setReason("reason");
+        Mockito.verify(networkAclItemVoMock).setDisplay(true);
+        Mockito.verify(networkAclServiceImpl).validateAndCreateNetworkAclRuleAction("deny");
+    }
+
+    @Test
+    @PrepareForTest(CallContext.class)
+    public void updateNetworkACLTestParametersNotNull() {
+        String name = "name";
+        String description = "desc";
+        String customId = "customId";
+
+        Mockito.when(updateNetworkACLListCmdMock.getName()).thenReturn(name);
+        Mockito.when(updateNetworkACLListCmdMock.getDescription()).thenReturn(description);
+        Mockito.when(updateNetworkACLListCmdMock.getCustomId()).thenReturn(customId);
+        Mockito.when(updateNetworkACLListCmdMock.getId()).thenReturn(networkAclListId);
+        Mockito.when(updateNetworkACLListCmdMock.getDisplay()).thenReturn(false);
+
+        networkAclServiceImpl.updateNetworkACL(updateNetworkACLListCmdMock);
+
+        InOrder inOrder = Mockito.inOrder(networkAclDaoMock, entityManagerMock, entityManagerMock, accountManagerMock, networkACLVOMock);
+
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+        inOrder.verify(entityManagerMock).findById(Mockito.eq(Vpc.class), Mockito.anyLong());
+        inOrder.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        inOrder.verify(networkACLVOMock).setName(name);
+        inOrder.verify(networkACLVOMock).setDescription(description);
+        inOrder.verify(networkACLVOMock).setUuid(customId);
+        inOrder.verify(networkACLVOMock).setDisplay(false);
+
+        inOrder.verify(networkAclDaoMock).update(networkAclListId, networkACLVOMock);
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void moveNetworkAclRuleToNewPositionTestBothPreviousAndNextAclRuleIdsNull() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand(null, null);
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void moveNetworkAclRuleToNewPositionTestBothPreviousAndNextAclRuleIdsEmpty() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand("", "");
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void moveNetworkAclRuleToNewPositionTestBothPreviousAndNextAclRuleIdsBlank() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand("     ", "         ");
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+    }
+
+    private void configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand(String nextAclRuleUuid, String previousAclRuleUuid) {
+        Mockito.when(moveNetworkAclItemCmdMock.getNextAclRuleUuid()).thenReturn(nextAclRuleUuid);
+        Mockito.when(moveNetworkAclItemCmdMock.getPreviousAclRuleUuid()).thenReturn(previousAclRuleUuid);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void moveNetworkAclRuleToNewPositionTestAclRuleBeingMovedNotFound() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand(nextAclRuleUuid, previousAclRuleUuid);
+
+        Mockito.doReturn(null).when(networkAclItemDaoMock).findByUuid(uuidAclRuleBeingMoved);
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+    }
+
+    @Test
+    public void moveNetworkAclRuleToNewPositionTestMoveRuleToTop() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand(nextAclRuleUuid, previousAclRuleUuid);
+
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclItemDaoMock).findByUuid(uuidAclRuleBeingMoved);
+
+        Mockito.doReturn(null).when(networkAclServiceImpl).retrieveAndValidateAclRule(previousAclRuleUuid);
+        Mockito.doReturn(nextAclRuleMock).when(networkAclServiceImpl).retrieveAndValidateAclRule(nextAclRuleUuid);
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateMoveAclRulesData(aclRuleBeingMovedMock, null, nextAclRuleMock);
+
+        configureMoveMethodsToDoNothing();
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).moveRuleToTheTop(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).moveRuleToTheBottom(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).moveRuleBetweenAclRules(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class), Mockito.eq(previousAclRuleMock),
+                Mockito.eq(nextAclRuleMock));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).validateAclConsistency(Mockito.any(MoveNetworkAclItemCmd.class), Mockito.any(NetworkACLVO.class),
+                Mockito.anyListOf(NetworkACLItemVO.class));
+    }
+
+    @Test
+    public void moveNetworkAclRuleToNewPositionTestMoveRuleToBottom() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand(nextAclRuleUuid, previousAclRuleUuid);
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateMoveAclRulesData(aclRuleBeingMovedMock, previousAclRuleMock, null);
+
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclItemDaoMock).findByUuid(uuidAclRuleBeingMoved);
+
+        Mockito.doReturn(previousAclRuleMock).when(networkAclServiceImpl).retrieveAndValidateAclRule(previousAclRuleUuid);
+        Mockito.doReturn(null).when(networkAclServiceImpl).retrieveAndValidateAclRule(nextAclRuleUuid);
+
+        configureMoveMethodsToDoNothing();
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).moveRuleToTheTop(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).moveRuleToTheBottom(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).moveRuleBetweenAclRules(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class), Mockito.eq(previousAclRuleMock),
+                Mockito.eq(nextAclRuleMock));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).validateAclConsistency(Mockito.any(MoveNetworkAclItemCmd.class), Mockito.any(NetworkACLVO.class),
+                Mockito.anyListOf(NetworkACLItemVO.class));
+    }
+
+    @Test
+    public void moveNetworkAclRuleToNewPositionTestMoveBetweenAclRules() {
+        configureNextAndPreviousAclRuleUuidsForMoveAclRuleCommand(nextAclRuleUuid, previousAclRuleUuid);
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateMoveAclRulesData(aclRuleBeingMovedMock, previousAclRuleMock, nextAclRuleMock);
+
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclItemDaoMock).findByUuid(uuidAclRuleBeingMoved);
+
+        Mockito.doReturn(previousAclRuleMock).when(networkAclServiceImpl).retrieveAndValidateAclRule(previousAclRuleUuid);
+        Mockito.doReturn(nextAclRuleMock).when(networkAclServiceImpl).retrieveAndValidateAclRule(nextAclRuleUuid);
+
+        configureMoveMethodsToDoNothing();
+
+        networkAclServiceImpl.moveNetworkAclRuleToNewPosition(moveNetworkAclItemCmdMock);
+
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).moveRuleToTheTop(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).moveRuleToTheBottom(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).moveRuleBetweenAclRules(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class), Mockito.eq(previousAclRuleMock),
+                Mockito.eq(nextAclRuleMock));
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).validateAclConsistency(Mockito.any(MoveNetworkAclItemCmd.class), Mockito.any(NetworkACLVO.class),
+                Mockito.anyListOf(NetworkACLItemVO.class));
+    }
+
+    private void configureMoveMethodsToDoNothing() {
+        Mockito.doReturn(networkACLVOMock).when(networkAclDaoMock).acquireInLockTable(Mockito.anyLong());
+        Mockito.doReturn(true).when(networkAclDaoMock).releaseFromLockTable(Mockito.anyLong());
+
+        Mockito.doNothing().when(networkAclServiceImpl).validateAclConsistency(Mockito.any(MoveNetworkAclItemCmd.class), Mockito.any(NetworkACLVO.class), Mockito.anyListOf(NetworkACLItemVO.class));
+
+        Mockito.doReturn(new ArrayList<>()).when(networkAclServiceImpl).getAllAclRulesSortedByNumber(networkAclMockId);
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclServiceImpl).moveRuleToTheTop(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclServiceImpl).moveRuleToTheBottom(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class));
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclServiceImpl).moveRuleBetweenAclRules(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyListOf(NetworkACLItemVO.class),
+                Mockito.eq(previousAclRuleMock), Mockito.eq(nextAclRuleMock));
+    }
+
+    @Test
+    public void retrieveAndValidateAclRuleTestUuidNull() {
+        NetworkACLItemVO networkACLItemVOReceived = networkAclServiceImpl.retrieveAndValidateAclRule(null);
+
+        Assert.assertNull(networkACLItemVOReceived);
+    }
+
+    @Test
+    public void retrieveAndValidateAclRuleTestUuidEmpty() {
+        NetworkACLItemVO networkACLItemVOReceived = networkAclServiceImpl.retrieveAndValidateAclRule(StringUtils.EMPTY);
+
+        Assert.assertNull(networkACLItemVOReceived);
+    }
+
+    @Test
+    public void retrieveAndValidateAclRuleTestUuidBlank() {
+        NetworkACLItemVO networkACLItemVOReceived = networkAclServiceImpl.retrieveAndValidateAclRule("        ");
+
+        Assert.assertNull(networkACLItemVOReceived);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void retrieveAndValidateAclRuleTestAclRuleNotFound() {
+        Mockito.doReturn(null).when(networkAclItemDaoMock).findByUuid(nextAclRuleUuid);
+
+        networkAclServiceImpl.retrieveAndValidateAclRule(nextAclRuleUuid);
+    }
+
+    @Test
+    public void retrieveAndValidateAclRuleTestAclRuleFound() {
+        Mockito.doReturn(nextAclRuleMock).when(networkAclItemDaoMock).findByUuid(nextAclRuleUuid);
+
+        NetworkACLItemVO networkACLItemVOReceived = networkAclServiceImpl.retrieveAndValidateAclRule(nextAclRuleUuid);
+
+        Assert.assertEquals(nextAclRuleMock, networkACLItemVOReceived);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateMoveAclRulesDataTestInvalidPreviousAndNextAclRules() {
+        networkAclServiceImpl.validateMoveAclRulesData(aclRuleBeingMovedMock, null, null);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateMoveAclRulesDataTestPreviousRuleWithDifferentAclId() {
+        Mockito.when(previousAclRuleMock.getAclId()).thenReturn(99L);
+
+        networkAclServiceImpl.validateMoveAclRulesData(aclRuleBeingMovedMock, previousAclRuleMock, null);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateMoveAclRulesDataTestNextRuleWithDifferentAclId() {
+        Mockito.when(nextAclRuleMock.getAclId()).thenReturn(99L);
+
+        networkAclServiceImpl.validateMoveAclRulesData(aclRuleBeingMovedMock, null, nextAclRuleMock);
+    }
+
+    @Test
+    @PrepareForTest(CallContext.class)
+    public void updateNetworkACLTestParametersWithNullValues() {
+        Mockito.when(updateNetworkACLListCmdMock.getName()).thenReturn(null);
+        Mockito.when(updateNetworkACLListCmdMock.getDescription()).thenReturn(null);
+        Mockito.when(updateNetworkACLListCmdMock.getCustomId()).thenReturn(null);
+        Mockito.when(updateNetworkACLListCmdMock.getId()).thenReturn(networkAclListId);
+        Mockito.when(updateNetworkACLListCmdMock.getDisplay()).thenReturn(null);
+
+        networkAclServiceImpl.updateNetworkACL(updateNetworkACLListCmdMock);
+
+        InOrder inOrder = Mockito.inOrder(networkAclDaoMock, entityManagerMock, entityManagerMock, accountManagerMock, networkACLVOMock);
+
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+        inOrder.verify(entityManagerMock).findById(Mockito.eq(Vpc.class), Mockito.anyLong());
+        inOrder.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        Mockito.verify(networkACLVOMock, Mockito.times(0)).setName(null);
+        inOrder.verify(networkACLVOMock, Mockito.times(0)).setDescription(null);
+        inOrder.verify(networkACLVOMock, Mockito.times(0)).setUuid(null);
+        inOrder.verify(networkACLVOMock, Mockito.times(0)).setDisplay(false);
+
+        inOrder.verify(networkAclDaoMock).update(networkAclListId, networkACLVOMock);
+        inOrder.verify(networkAclDaoMock).findById(networkAclListId);
+    }
+
+    @Test
+    public void validateMoveAclRulesDataTestSuccesfullExecution() {
+        Mockito.when(nextAclRuleMock.getAclId()).thenReturn(networkAclMockId);
+        Mockito.when(previousAclRuleMock.getAclId()).thenReturn(networkAclMockId);
+
+        Mockito.doReturn(networkAclMock).when(networkAclDaoMock).findById(networkAclMockId);
+        Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+
+        CallContext callContextMock = Mockito.mock(CallContext.class);
+        Mockito.doReturn(Mockito.mock(Account.class)).when(callContextMock).getCallingAccount();
+
+        PowerMockito.mockStatic(CallContext.class);
+        PowerMockito.when(CallContext.current()).thenReturn(callContextMock);
+
+        Mockito.doNothing().when(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+
+        networkAclServiceImpl.validateMoveAclRulesData(aclRuleBeingMovedMock, previousAclRuleMock, nextAclRuleMock);
+
+        Mockito.verify(networkAclDaoMock).findById(networkAclMockId);
+        Mockito.verify(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
+        Mockito.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
+    }
+
+    @Test
+    public void getAllAclRulesSortedByNumberTest() {
+        List<NetworkACLItemVO> networkAclItemVos = new ArrayList<>();
+
+        NetworkACLItemVO networkACLItemVO1 = new NetworkACLItemVO();
+        networkACLItemVO1.setNumber(1);
+
+        NetworkACLItemVO networkACLItemVO2 = new NetworkACLItemVO();
+        networkACLItemVO2.setNumber(2);
+
+        NetworkACLItemVO networkACLItemVO3 = new NetworkACLItemVO();
+        networkACLItemVO3.setNumber(3);
+
+        NetworkACLItemVO networkACLItemVO4 = new NetworkACLItemVO();
+        networkACLItemVO4.setNumber(4);
+
+        networkAclItemVos.add(networkACLItemVO1);
+        networkAclItemVos.add(networkACLItemVO2);
+        networkAclItemVos.add(networkACLItemVO3);
+        networkAclItemVos.add(networkACLItemVO4);
+
+        Collections.shuffle(networkAclItemVos);
+
+        Mockito.doReturn(networkAclItemVos).when(networkAclItemDaoMock).listByACL(networkAclMockId);
+
+        List<NetworkACLItemVO> allAclRulesSortedByNumber = networkAclServiceImpl.getAllAclRulesSortedByNumber(networkAclMockId);
+
+        Assert.assertEquals(networkAclItemVos.size(), allAclRulesSortedByNumber.size());
+        Assert.assertEquals(networkACLItemVO1, networkAclItemVos.get(0));
+        Assert.assertEquals(networkACLItemVO2, networkAclItemVos.get(1));
+        Assert.assertEquals(networkACLItemVO3, networkAclItemVos.get(2));
+        Assert.assertEquals(networkACLItemVO4, networkAclItemVos.get(3));
+
+    }
+
+    @Test
+    public void moveRuleToTheTopTest() {
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclServiceImpl).updateAclRuleToNewPositionAndExecuteShiftIfNecessary(Mockito.eq(aclRuleBeingMovedMock), Mockito.anyInt(),
+                Mockito.anyListOf(NetworkACLItemVO.class), Mockito.anyInt());
+
+        networkAclServiceImpl.moveRuleToTheTop(aclRuleBeingMovedMock, new ArrayList<>());
+
+        Mockito.verify(networkAclServiceImpl).updateAclRuleToNewPositionAndExecuteShiftIfNecessary(Mockito.eq(aclRuleBeingMovedMock), Mockito.eq(1), Mockito.anyListOf(NetworkACLItemVO.class),
+                Mockito.eq(0));
+    }
+
+    @Test
+    public void moveRuleToTheBottomTest() {
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+
+        NetworkACLItemVO networkACLItemVO1 = new NetworkACLItemVO();
+        networkACLItemVO1.setNumber(100);
+
+        allAclRules.add(networkACLItemVO1);
+        Mockito.when(aclRuleBeingMovedMock.getId()).thenReturn(99l);
+
+        Mockito.doNothing().when(networkAclItemDaoMock).updateNumberFieldNetworkItem(Mockito.anyLong(), Mockito.anyInt());
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclItemDaoMock).findById(99l);
+
+        networkAclServiceImpl.moveRuleToTheBottom(aclRuleBeingMovedMock, allAclRules);
+
+        Mockito.verify(aclRuleBeingMovedMock).setNumber(101);
+        Mockito.verify(networkAclItemDaoMock).updateNumberFieldNetworkItem(99l, 101);
+        Mockito.verify(networkAclItemDaoMock).findById(99l);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void moveRuleBetweenAclRulesTestThereIsSpaceBetweenPreviousRuleAndNextRuleToAccomodateTheNewRuleWithOtherruleColliding() {
+        Mockito.when(previousAclRuleMock.getNumber()).thenReturn(10);
+        Mockito.when(nextAclRuleMock.getNumber()).thenReturn(15);
+
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+        NetworkACLItemVO networkACLItemVO1 = new NetworkACLItemVO();
+        networkACLItemVO1.setNumber(11);
+
+        allAclRules.add(previousAclRuleMock);
+        allAclRules.add(networkACLItemVO1);
+        allAclRules.add(nextAclRuleMock);
+
+        networkAclServiceImpl.moveRuleBetweenAclRules(aclRuleBeingMovedMock, allAclRules, previousAclRuleMock, nextAclRuleMock);
+    }
+
+    @Test
+    public void moveRuleBetweenAclRulesTestThereIsSpaceBetweenPreviousRuleAndNextRuleToAccomodateTheNewRule() {
+        Mockito.when(previousAclRuleMock.getNumber()).thenReturn(10);
+        Mockito.when(nextAclRuleMock.getNumber()).thenReturn(11);
+        Mockito.when(aclRuleBeingMovedMock.getNumber()).thenReturn(50);
+        Mockito.when(aclRuleBeingMovedMock.getId()).thenReturn(1l);
+
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+        NetworkACLItemVO networkACLItemVO12 = new NetworkACLItemVO();
+        networkACLItemVO12.setNumber(12);
+        NetworkACLItemVO networkACLItemVO13 = new NetworkACLItemVO();
+        networkACLItemVO13.setNumber(13);
+        NetworkACLItemVO networkACLItemVO14 = new NetworkACLItemVO();
+        networkACLItemVO14.setNumber(14);
+
+        allAclRules.add(previousAclRuleMock);
+        allAclRules.add(nextAclRuleMock);
+        allAclRules.add(networkACLItemVO12);
+        allAclRules.add(networkACLItemVO13);
+        allAclRules.add(networkACLItemVO14);
+        allAclRules.add(aclRuleBeingMovedMock);
+
+        Mockito.doNothing().when(networkAclItemDaoMock).updateNumberFieldNetworkItem(Mockito.anyLong(), Mockito.anyInt());
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclItemDaoMock).findById(1l);
+
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclServiceImpl).updateAclRuleToNewPositionAndExecuteShiftIfNecessary(Mockito.any(NetworkACLItemVO.class), Mockito.anyInt(),
+                Mockito.anyListOf(NetworkACLItemVO.class), Mockito.anyInt());
+
+        networkAclServiceImpl.moveRuleBetweenAclRules(aclRuleBeingMovedMock, allAclRules, previousAclRuleMock, nextAclRuleMock);
+
+        Mockito.verify(networkAclItemDaoMock, times(0)).updateNumberFieldNetworkItem(aclRuleBeingMovedMock.getId(), 11);
+        Mockito.verify(networkAclItemDaoMock, times(0)).findById(1l);
+        Mockito.verify(networkAclServiceImpl, Mockito.times(1)).updateAclRuleToNewPositionAndExecuteShiftIfNecessary(Mockito.any(NetworkACLItemVO.class), Mockito.eq(11),
+                Mockito.anyListOf(NetworkACLItemVO.class), Mockito.eq(1));
+    }
+
+    @Test
+    public void moveRuleBetweenAclRulesTestThereIsNoSpaceBetweenPreviousRuleAndNextRuleToAccomodateTheNewRule() {
+        Mockito.when(previousAclRuleMock.getNumber()).thenReturn(10);
+        Mockito.when(nextAclRuleMock.getNumber()).thenReturn(15);
+        Mockito.when(aclRuleBeingMovedMock.getNumber()).thenReturn(50);
+        Mockito.when(aclRuleBeingMovedMock.getId()).thenReturn(1l);
+
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+
+        allAclRules.add(previousAclRuleMock);
+        allAclRules.add(nextAclRuleMock);
+        allAclRules.add(aclRuleBeingMovedMock);
+
+        Mockito.doNothing().when(networkAclItemDaoMock).updateNumberFieldNetworkItem(Mockito.anyLong(), Mockito.anyInt());
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclItemDaoMock).findById(1l);
+
+        Mockito.doReturn(aclRuleBeingMovedMock).when(networkAclServiceImpl).updateAclRuleToNewPositionAndExecuteShiftIfNecessary(Mockito.any(NetworkACLItemVO.class), Mockito.anyInt(),
+                Mockito.anyListOf(NetworkACLItemVO.class), Mockito.anyInt());
+
+        networkAclServiceImpl.moveRuleBetweenAclRules(aclRuleBeingMovedMock, allAclRules, previousAclRuleMock, nextAclRuleMock);
+
+        Mockito.verify(networkAclItemDaoMock).updateNumberFieldNetworkItem(aclRuleBeingMovedMock.getId(), 11);
+        Mockito.verify(networkAclItemDaoMock).findById(1l);
+        Mockito.verify(networkAclServiceImpl, Mockito.times(0)).updateAclRuleToNewPositionAndExecuteShiftIfNecessary(Mockito.any(NetworkACLItemVO.class), Mockito.anyInt(),
+                Mockito.anyListOf(NetworkACLItemVO.class), Mockito.anyInt());
+    }
+
+    @Test
+    public void updateAclRuleToNewPositionAndExecuteShiftIfNecessaryTest() {
+        Mockito.when(previousAclRuleMock.getNumber()).thenReturn(10);
+
+        Mockito.when(nextAclRuleMock.getNumber()).thenReturn(11);
+        Mockito.when(nextAclRuleMock.getId()).thenReturn(50l);
+
+        Mockito.when(aclRuleBeingMovedMock.getNumber()).thenReturn(50);
+        Mockito.when(aclRuleBeingMovedMock.getId()).thenReturn(1l);
+
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+        NetworkACLItemVO networkACLItemVO12 = new NetworkACLItemVO();
+        networkACLItemVO12.setNumber(12);
+        networkACLItemVO12.id = 12;
+        NetworkACLItemVO networkACLItemVO13 = new NetworkACLItemVO();
+        networkACLItemVO13.id = 13;
+        networkACLItemVO13.setNumber(13);
+        NetworkACLItemVO networkACLItemVO14 = new NetworkACLItemVO();
+        networkACLItemVO14.setNumber(14);
+        networkACLItemVO14.id = 14;
+
+        allAclRules.add(previousAclRuleMock);
+        allAclRules.add(nextAclRuleMock);
+        allAclRules.add(networkACLItemVO12);
+        allAclRules.add(networkACLItemVO13);
+        allAclRules.add(networkACLItemVO14);
+        allAclRules.add(aclRuleBeingMovedMock);
+
+        Mockito.doNothing().when(networkAclItemDaoMock).updateNumberFieldNetworkItem(Mockito.anyLong(), Mockito.anyInt());
+        Mockito.doReturn(null).when(networkAclItemDaoMock).findById(Mockito.anyLong());
+
+        networkAclServiceImpl.updateAclRuleToNewPositionAndExecuteShiftIfNecessary(aclRuleBeingMovedMock, 11, allAclRules, 1);
+
+        Mockito.verify(aclRuleBeingMovedMock).setNumber(11);
+        Mockito.verify(nextAclRuleMock).setNumber(12);
+        Mockito.verify(networkAclItemDaoMock).updateNumberFieldNetworkItem(1l, 11);
+        Mockito.verify(networkAclItemDaoMock).updateNumberFieldNetworkItem(50l, 12);
+
+        Assert.assertEquals(13, networkACLItemVO12.getNumber());
+        Assert.assertEquals(14, networkACLItemVO13.getNumber());
+        Assert.assertEquals(15, networkACLItemVO14.getNumber());
+    }
+
+    @Test
+    public void validateAclConsistencyTestRuleListEmpty() {
+        networkAclServiceImpl.validateAclConsistency(moveNetworkAclItemCmdMock, networkACLVOMock, new ArrayList<>());
+
+        Mockito.verify(moveNetworkAclItemCmdMock, Mockito.times(0)).getAclConsistencyHash();
+    }
+
+    @Test
+    public void validateAclConsistencyTestRuleListNull() {
+        networkAclServiceImpl.validateAclConsistency(moveNetworkAclItemCmdMock, networkACLVOMock, null);
+
+        Mockito.verify(moveNetworkAclItemCmdMock, Mockito.times(0)).getAclConsistencyHash();
+    }
+
+    @Test
+    public void validateAclConsistencyTestAclConsistencyHashIsNull() {
+        Mockito.doReturn(null).when(moveNetworkAclItemCmdMock).getAclConsistencyHash();
+
+        validateAclConsistencyTestAclConsistencyHashBlank();
+    }
+
+    @Test
+    public void validateAclConsistencyTestAclConsistencyHashIsEmpty() {
+        Mockito.doReturn("").when(moveNetworkAclItemCmdMock).getAclConsistencyHash();
+
+        validateAclConsistencyTestAclConsistencyHashBlank();
+    }
+
+    @Test
+    public void validateAclConsistencyTestAclConsistencyHashIsBlank() {
+        Mockito.doReturn("            ").when(moveNetworkAclItemCmdMock).getAclConsistencyHash();
+
+        validateAclConsistencyTestAclConsistencyHashBlank();
+    }
+
+    private void validateAclConsistencyTestAclConsistencyHashBlank() {
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+        allAclRules.add(networkAclItemVoMock);
+
+        networkAclServiceImpl.validateAclConsistency(moveNetworkAclItemCmdMock, networkACLVOMock, allAclRules);
+
+        Mockito.verify(moveNetworkAclItemCmdMock, Mockito.times(1)).getAclConsistencyHash();
+        Mockito.verify(callContextMock, Mockito.times(1)).getCallingAccount();
+        Mockito.verify(callContextMock, Mockito.times(1)).getCallingUser();
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAclConsistencyTestAclConsistencyHashIsNotEqualsToDatabaseHash() {
+        Mockito.doReturn("differentHash").when(moveNetworkAclItemCmdMock).getAclConsistencyHash();
+
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+        allAclRules.add(networkAclItemVoMock);
+
+        networkAclServiceImpl.validateAclConsistency(moveNetworkAclItemCmdMock, networkACLVOMock, allAclRules);
+    }
+
+    @Test
+    public void validateAclConsistencyTest() {
+        Mockito.doReturn("eac527fe45c77232ef06d9c7eb8abd94").when(moveNetworkAclItemCmdMock).getAclConsistencyHash();
+
+        ArrayList<NetworkACLItemVO> allAclRules = new ArrayList<>();
+        allAclRules.add(networkAclItemVoMock);
+
+        Mockito.doReturn("someUuid").when(networkAclItemVoMock).getUuid();
+        networkAclServiceImpl.validateAclConsistency(moveNetworkAclItemCmdMock, networkACLVOMock, allAclRules);
+
+        Mockito.verify(moveNetworkAclItemCmdMock, Mockito.times(1)).getAclConsistencyHash();
+    }
+}
\ No newline at end of file
diff --git a/server/test/com/cloud/network/vpc/VpcManagerImplTest.java b/server/src/test/java/com/cloud/network/vpc/VpcManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/network/vpc/VpcManagerImplTest.java
rename to server/src/test/java/com/cloud/network/vpc/VpcManagerImplTest.java
diff --git a/server/test/com/cloud/projects/MockProjectManagerImpl.java b/server/src/test/java/com/cloud/projects/MockProjectManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/projects/MockProjectManagerImpl.java
rename to server/src/test/java/com/cloud/projects/MockProjectManagerImpl.java
diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java b/server/src/test/java/com/cloud/resource/MockResourceManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/resource/MockResourceManagerImpl.java
rename to server/src/test/java/com/cloud/resource/MockResourceManagerImpl.java
diff --git a/server/test/com/cloud/resourcelimit/ResourceLimitManagerImplTest.java b/server/src/test/java/com/cloud/resourcelimit/ResourceLimitManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/resourcelimit/ResourceLimitManagerImplTest.java
rename to server/src/test/java/com/cloud/resourcelimit/ResourceLimitManagerImplTest.java
diff --git a/server/test/com/cloud/server/ConfigurationServerImplTest.java b/server/src/test/java/com/cloud/server/ConfigurationServerImplTest.java
similarity index 100%
rename from server/test/com/cloud/server/ConfigurationServerImplTest.java
rename to server/src/test/java/com/cloud/server/ConfigurationServerImplTest.java
diff --git a/server/test/com/cloud/server/ManagementServerImplTest.java b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java
similarity index 100%
rename from server/test/com/cloud/server/ManagementServerImplTest.java
rename to server/src/test/java/com/cloud/server/ManagementServerImplTest.java
diff --git a/server/test/com/cloud/servlet/ConsoleProxyServletTest.java b/server/src/test/java/com/cloud/servlet/ConsoleProxyServletTest.java
similarity index 100%
rename from server/test/com/cloud/servlet/ConsoleProxyServletTest.java
rename to server/src/test/java/com/cloud/servlet/ConsoleProxyServletTest.java
diff --git a/server/test/com/cloud/snapshot/SnapshotDaoTest.java b/server/src/test/java/com/cloud/snapshot/SnapshotDaoTest.java
similarity index 100%
rename from server/test/com/cloud/snapshot/SnapshotDaoTest.java
rename to server/src/test/java/com/cloud/snapshot/SnapshotDaoTest.java
diff --git a/server/test/com/cloud/snapshot/SnapshotDaoTestConfiguration.java b/server/src/test/java/com/cloud/snapshot/SnapshotDaoTestConfiguration.java
similarity index 100%
rename from server/test/com/cloud/snapshot/SnapshotDaoTestConfiguration.java
rename to server/src/test/java/com/cloud/snapshot/SnapshotDaoTestConfiguration.java
diff --git a/server/test/com/cloud/storage/ImageStoreDetailsUtilTest.java b/server/src/test/java/com/cloud/storage/ImageStoreDetailsUtilTest.java
similarity index 100%
rename from server/test/com/cloud/storage/ImageStoreDetailsUtilTest.java
rename to server/src/test/java/com/cloud/storage/ImageStoreDetailsUtilTest.java
diff --git a/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java b/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java
new file mode 100644
index 0000000..dc79ac5
--- /dev/null
+++ b/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java
@@ -0,0 +1,61 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.storage;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.cloud.agent.api.StoragePoolInfo;
+import com.cloud.host.Host;
+
+@RunWith(MockitoJUnitRunner.class)
+public class StorageManagerImplTest {
+
+    @Spy
+    private StorageManagerImpl storageManagerImpl;
+
+    @Test
+    public void createLocalStoragePoolName() {
+        String hostMockName = "host1";
+        executeCreateLocalStoragePoolNameForHostName(hostMockName);
+    }
+
+    @Test
+    public void createLocalStoragePoolNameUsingHostNameWithSpaces() {
+        String hostMockName = "      hostNameWithSpaces      ";
+        executeCreateLocalStoragePoolNameForHostName(hostMockName);
+    }
+
+    private void executeCreateLocalStoragePoolNameForHostName(String hostMockName) {
+        String firstBlockUuid = "dsdsh665";
+
+        String expectedLocalStorageName = hostMockName.trim() + "-local-" + firstBlockUuid;
+
+        Host hostMock = Mockito.mock(Host.class);
+        StoragePoolInfo storagePoolInfoMock = Mockito.mock(StoragePoolInfo.class);
+
+        Mockito.when(hostMock.getName()).thenReturn(hostMockName);
+        Mockito.when(storagePoolInfoMock.getUuid()).thenReturn(firstBlockUuid + "-213151-df21ef333d-2d33f1");
+
+        String localStoragePoolName = storageManagerImpl.createLocalStoragePoolName(hostMock, storagePoolInfoMock);
+        Assert.assertEquals(expectedLocalStorageName, localStoragePoolName);
+    }
+}
diff --git a/server/test/com/cloud/storage/VolumeApiServiceImplTest.java b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java
similarity index 75%
rename from server/test/com/cloud/storage/VolumeApiServiceImplTest.java
rename to server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java
index 366fd22..890b1ea 100644
--- a/server/test/com/cloud/storage/VolumeApiServiceImplTest.java
+++ b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java
@@ -16,8 +16,6 @@
 // under the License.
 package com.cloud.storage;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyString;
@@ -51,6 +49,8 @@
 import org.apache.cloudstack.framework.jobs.dao.AsyncJobJoinMapDao;
 import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
@@ -61,6 +61,7 @@
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
+import org.mockito.InOrder;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -76,6 +77,8 @@
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.org.Grouping;
+import com.cloud.serializer.GsonHelper;
+import com.cloud.storage.Volume.Type;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.snapshot.SnapshotManager;
 import com.cloud.user.Account;
@@ -101,60 +104,67 @@
 
     @Spy
     @InjectMocks
-    private VolumeApiServiceImpl volumeApiServiceImpl = new VolumeApiServiceImpl();
-    @Mock
-    private VolumeDao volumeDaoMock;
+    private VolumeApiServiceImpl volumeApiServiceImpl;
     @Mock
     private SnapshotManager snapshotManagerMock;
     @Mock
     private VolumeDataStoreDao volumeDataStoreDaoMock;
     @Mock
+    private VolumeDao volumeDaoMock;
+    @Mock
     private AccountManager accountManagerMock;
     @Mock
-    private VolumeService volumeServiceMock;
-    @Mock
-    private ResourceLimitService resourceLimitServiceMock;
-    @Mock
-    private VolumeDataFactory volumeDataFactoryMock;
-
-    @Mock
     private UserVmDao userVmDaoMock;
     @Mock
     private PrimaryDataStoreDao primaryDataStoreDaoMock;
     @Mock
-    private VMSnapshotDao vmSnapshotDaoMock;
+    private VMSnapshotDao _vmSnapshotDao;
     @Mock
-    private AsyncJobManager asyncJobManagerMock;
+    private AsyncJobManager _jobMgr;
     @Mock
-    private AsyncJobJoinMapDao asyncJobJoinMapDaoMock;
+    private AsyncJobJoinMapDao _joinMapDao;
     @Mock
-    private UserVmManager userVmManagerMock;
+    private VolumeDataFactory volumeDataFactoryMock;
     @Mock
-    private VMInstanceDao vMInstanceDaoMock;
+    private VMInstanceDao _vmInstanceDao;
+    @Mock
+    private VolumeInfo volumeInfoMock;
     @Mock
     private SnapshotInfo snapshotInfoMock;
     @Mock
-    private CreateVolumeCmd createVolumeCmdMock;
+    private VolumeService volumeServiceMock;
     @Mock
-    private DataCenterDao dataCenterDaoMock;
+    private CreateVolumeCmd createVol;
     @Mock
-    private AccountDao accountDaoMock;
+    private UserVmManager userVmManager;
     @Mock
-    private HostDao hostdaoMock;
+    private DataCenterDao _dcDao;
+    @Mock
+    private ResourceLimitService resourceLimitServiceMock;
+    @Mock
+    private AccountDao _accountDao;
+    @Mock
+    private HostDao _hostDao;
+    @Mock
+    private StoragePoolDetailsDao storagePoolDetailsDao;
 
-    DetachVolumeCmd detachCmd = new DetachVolumeCmd();
-    Class<?> _detachCmdClass = detachCmd.getClass();
+    private DetachVolumeCmd detachCmd = new DetachVolumeCmd();
+    private Class<?> _detachCmdClass = detachCmd.getClass();
 
     @Mock
-    private Account accountMock;
+    private StoragePool storagePoolMock;
+    private long storagePoolMockId = 1;
+    @Mock
+    private DiskOfferingVO newDiskOfferingMock;
+
     @Mock
     private VolumeVO volumeVoMock;
     @Mock
+    private Account accountMock;
+    @Mock
     private VolumeDataStoreVO volumeDataStoreVoMock;
     @Mock
     private AsyncCallFuture<VolumeApiResult> asyncCallFutureVolumeapiResultMock;
-    @Mock
-    private VolumeInfo volumeInfoMock;
 
     private long accountMockId = 456l;
     private long volumeMockId = 12313l;
@@ -162,20 +172,26 @@
     private long volumeSizeMock = 456789921939l;
 
     @Before
-    public void setup() throws Exception {
+    public void setup() throws InterruptedException, ExecutionException {
         Mockito.doReturn(volumeMockId).when(volumeDataStoreVoMock).getVolumeId();
         Mockito.doReturn(volumeMockId).when(volumeVoMock).getId();
         Mockito.doReturn(accountMockId).when(accountMock).getId();
         Mockito.doReturn(volumeSizeMock).when(volumeVoMock).getSize();
+        Mockito.doReturn(volumeSizeMock).when(newDiskOfferingMock).getDiskSize();
+
         Mockito.doReturn(Mockito.mock(VolumeApiResult.class)).when(asyncCallFutureVolumeapiResultMock).get();
 
+        Mockito.when(storagePoolMock.getId()).thenReturn(storagePoolMockId);
+
+        volumeApiServiceImpl._gson = GsonHelper.getGsonLogger();
+
         // mock caller context
         AccountVO account = new AccountVO("admin", 1L, "networkDomain", Account.ACCOUNT_TYPE_NORMAL, "uuid");
         UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString(), User.Source.UNKNOWN);
         CallContext.register(user, account);
         // mock async context
         AsyncJobExecutionContext context = new AsyncJobExecutionContext();
-        AsyncJobExecutionContext.init(volumeApiServiceImpl._jobMgr, asyncJobJoinMapDaoMock);
+        AsyncJobExecutionContext.init(_jobMgr, _joinMapDao);
         AsyncJobVO job = new AsyncJobVO();
         context.setJob(job);
         AsyncJobExecutionContext.setCurrentExecutionContext(context);
@@ -184,50 +200,50 @@
         try {
             // volume of running vm id=1
             VolumeVO volumeOfRunningVm = new VolumeVO("root", 1L, 1L, 1L, 1L, 1L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
-            when(volumeApiServiceImpl._volsDao.findById(1L)).thenReturn(volumeOfRunningVm);
+            when(volumeDaoMock.findById(1L)).thenReturn(volumeOfRunningVm);
 
             UserVmVO runningVm = new UserVmVO(1L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
             runningVm.setState(State.Running);
             runningVm.setDataCenterId(1L);
-            when(volumeApiServiceImpl._userVmDao.findById(1L)).thenReturn(runningVm);
+            when(userVmDaoMock.findById(1L)).thenReturn(runningVm);
 
             // volume of stopped vm id=2
             VolumeVO volumeOfStoppedVm = new VolumeVO("root", 1L, 1L, 1L, 1L, 2L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
             volumeOfStoppedVm.setPoolId(1L);
-            when(volumeApiServiceImpl._volsDao.findById(2L)).thenReturn(volumeOfStoppedVm);
+            when(volumeDaoMock.findById(2L)).thenReturn(volumeOfStoppedVm);
 
             UserVmVO stoppedVm = new UserVmVO(2L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
             stoppedVm.setState(State.Stopped);
             stoppedVm.setDataCenterId(1L);
-            when(volumeApiServiceImpl._userVmDao.findById(2L)).thenReturn(stoppedVm);
+            when(userVmDaoMock.findById(2L)).thenReturn(stoppedVm);
 
             // volume of hyperV vm id=3
             UserVmVO hyperVVm = new UserVmVO(3L, "vm", "vm", 1, HypervisorType.Hyperv, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
             hyperVVm.setState(State.Stopped);
             hyperVVm.setDataCenterId(1L);
-            when(volumeApiServiceImpl._userVmDao.findById(3L)).thenReturn(hyperVVm);
+            when(userVmDaoMock.findById(3L)).thenReturn(hyperVVm);
 
             VolumeVO volumeOfStoppeHyperVVm = new VolumeVO("root", 1L, 1L, 1L, 1L, 3L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
             volumeOfStoppeHyperVVm.setPoolId(1L);
-            when(volumeApiServiceImpl._volsDao.findById(3L)).thenReturn(volumeOfStoppeHyperVVm);
+            when(volumeDaoMock.findById(3L)).thenReturn(volumeOfStoppeHyperVVm);
 
             StoragePoolVO unmanagedPool = new StoragePoolVO();
 
-            when(volumeApiServiceImpl._storagePoolDao.findById(1L)).thenReturn(unmanagedPool);
+            when(primaryDataStoreDaoMock.findById(1L)).thenReturn(unmanagedPool);
 
             // volume of managed pool id=4
             StoragePoolVO managedPool = new StoragePoolVO();
             managedPool.setManaged(true);
-            when(volumeApiServiceImpl._storagePoolDao.findById(2L)).thenReturn(managedPool);
+            when(primaryDataStoreDaoMock.findById(2L)).thenReturn(managedPool);
             VolumeVO managedPoolVolume = new VolumeVO("root", 1L, 1L, 1L, 1L, 2L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
             managedPoolVolume.setPoolId(2L);
-            when(volumeApiServiceImpl._volsDao.findById(4L)).thenReturn(managedPoolVolume);
+            when(volumeDaoMock.findById(4L)).thenReturn(managedPoolVolume);
 
             // non-root non-datadisk volume
             VolumeInfo volumeWithIncorrectVolumeType = Mockito.mock(VolumeInfo.class);
             when(volumeWithIncorrectVolumeType.getId()).thenReturn(5L);
             when(volumeWithIncorrectVolumeType.getVolumeType()).thenReturn(Volume.Type.ISO);
-            when(volumeApiServiceImpl.volFactory.getVolume(5L)).thenReturn(volumeWithIncorrectVolumeType);
+            when(volumeDataFactoryMock.getVolume(5L)).thenReturn(volumeWithIncorrectVolumeType);
 
             // correct root volume
             VolumeInfo correctRootVolume = Mockito.mock(VolumeInfo.class);
@@ -238,10 +254,10 @@
             when(correctRootVolume.getState()).thenReturn(Volume.State.Ready);
             when(correctRootVolume.getTemplateId()).thenReturn(null);
             when(correctRootVolume.getPoolId()).thenReturn(1L);
-            when(volumeApiServiceImpl.volFactory.getVolume(6L)).thenReturn(correctRootVolume);
+            when(volumeDataFactoryMock.getVolume(6L)).thenReturn(correctRootVolume);
 
             VolumeVO correctRootVolumeVO = new VolumeVO("root", 1L, 1L, 1L, 1L, 2L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
-            when(volumeApiServiceImpl._volsDao.findById(6L)).thenReturn(correctRootVolumeVO);
+            when(volumeDaoMock.findById(6L)).thenReturn(correctRootVolumeVO);
 
             // managed root volume
             VolumeInfo managedVolume = Mockito.mock(VolumeInfo.class);
@@ -250,21 +266,21 @@
             when(managedVolume.getVolumeType()).thenReturn(Volume.Type.ROOT);
             when(managedVolume.getInstanceId()).thenReturn(null);
             when(managedVolume.getPoolId()).thenReturn(2L);
-            when(volumeApiServiceImpl.volFactory.getVolume(7L)).thenReturn(managedVolume);
+            when(volumeDataFactoryMock.getVolume(7L)).thenReturn(managedVolume);
 
             VolumeVO managedVolume1 = new VolumeVO("root", 1L, 1L, 1L, 1L, 2L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
             managedVolume1.setPoolId(2L);
             managedVolume1.setDataCenterId(1L);
-            when(volumeApiServiceImpl._volsDao.findById(7L)).thenReturn(managedVolume1);
+            when(volumeDaoMock.findById(7L)).thenReturn(managedVolume1);
 
             // vm having root volume
             UserVmVO vmHavingRootVolume = new UserVmVO(4L, "vm", "vm", 1, HypervisorType.XenServer, 1L, false, false, 1L, 1L, 1, 1L, null, "vm", null);
             vmHavingRootVolume.setState(State.Stopped);
             vmHavingRootVolume.setDataCenterId(1L);
-            when(volumeApiServiceImpl._userVmDao.findById(4L)).thenReturn(vmHavingRootVolume);
+            when(userVmDaoMock.findById(4L)).thenReturn(vmHavingRootVolume);
             List<VolumeVO> vols = new ArrayList<VolumeVO>();
             vols.add(new VolumeVO());
-            when(volumeApiServiceImpl._volsDao.findByInstanceAndDeviceId(4L, 0L)).thenReturn(vols);
+            when(volumeDaoMock.findByInstanceAndDeviceId(4L, 0L)).thenReturn(vols);
 
             // volume in uploaded state
             VolumeInfo uploadedVolume = Mockito.mock(VolumeInfo.class);
@@ -274,36 +290,35 @@
             when(uploadedVolume.getInstanceId()).thenReturn(null);
             when(uploadedVolume.getPoolId()).thenReturn(1L);
             when(uploadedVolume.getState()).thenReturn(Volume.State.Uploaded);
-            when(volumeApiServiceImpl.volFactory.getVolume(8L)).thenReturn(uploadedVolume);
+            when(volumeDataFactoryMock.getVolume(8L)).thenReturn(uploadedVolume);
 
             VolumeVO upVolume = new VolumeVO("root", 1L, 1L, 1L, 1L, 2L, "root", "root", Storage.ProvisioningType.THIN, 1, null, null, "root", Volume.Type.ROOT);
             upVolume.setPoolId(1L);
             upVolume.setDataCenterId(1L);
             upVolume.setState(Volume.State.Uploaded);
-            when(volumeApiServiceImpl._volsDao.findById(8L)).thenReturn(upVolume);
+            when(volumeDaoMock.findById(8L)).thenReturn(upVolume);
 
             // helper dao methods mock
-            when(volumeApiServiceImpl._vmSnapshotDao.findByVm(any(Long.class))).thenReturn(new ArrayList<VMSnapshotVO>());
-            when(volumeApiServiceImpl._vmInstanceDao.findById(any(Long.class))).thenReturn(stoppedVm);
+            when(_vmSnapshotDao.findByVm(any(Long.class))).thenReturn(new ArrayList<VMSnapshotVO>());
+            when(_vmInstanceDao.findById(any(Long.class))).thenReturn(stoppedVm);
 
             DataCenterVO enabledZone = Mockito.mock(DataCenterVO.class);
             when(enabledZone.getAllocationState()).thenReturn(Grouping.AllocationState.Enabled);
 
-            when(volumeApiServiceImpl._dcDao.findById(anyLong())).thenReturn(enabledZone);
+            when(_dcDao.findById(anyLong())).thenReturn(enabledZone);
 
         } finally {
             txn.close("runVolumeDaoImplTest");
         }
 
         // helper methods mock
-        doNothing().when(volumeApiServiceImpl._accountMgr).checkAccess(any(Account.class), any(AccessType.class), any(Boolean.class), any(ControlledEntity.class));
-        doNothing().when(volumeApiServiceImpl._jobMgr).updateAsyncJobAttachment(any(Long.class), any(String.class), any(Long.class));
-        when(volumeApiServiceImpl._jobMgr.submitAsyncJob(any(AsyncJobVO.class), any(String.class), any(Long.class))).thenReturn(1L);
+        doNothing().when(accountManagerMock).checkAccess(any(Account.class), any(AccessType.class), any(Boolean.class), any(ControlledEntity.class));
+        doNothing().when(_jobMgr).updateAsyncJobAttachment(any(Long.class), any(String.class), any(Long.class));
+        when(_jobMgr.submitAsyncJob(any(AsyncJobVO.class), any(String.class), any(Long.class))).thenReturn(1L);
     }
 
     /**
      * TESTS FOR DETACH ROOT VOLUME, COUNT=4
-     * @throws Exception
      */
 
     @Test(expected = InvalidParameterValueException.class)
@@ -410,46 +425,47 @@
 
     @Test
     public void testNullGetVolumeNameFromCmd() {
-        when(createVolumeCmdMock.getVolumeName()).thenReturn(null);
-        Assert.assertNotNull(volumeApiServiceImpl.getVolumeNameFromCommand(createVolumeCmdMock));
+        when(createVol.getVolumeName()).thenReturn(null);
+        Assert.assertNotNull(volumeApiServiceImpl.getVolumeNameFromCommand(createVol));
     }
 
     @Test
     public void testEmptyGetVolumeNameFromCmd() {
-        when(createVolumeCmdMock.getVolumeName()).thenReturn("");
-        Assert.assertNotNull(volumeApiServiceImpl.getVolumeNameFromCommand(createVolumeCmdMock));
+        when(createVol.getVolumeName()).thenReturn("");
+        Assert.assertNotNull(volumeApiServiceImpl.getVolumeNameFromCommand(createVol));
     }
 
     @Test
     public void testBlankGetVolumeNameFromCmd() {
-        when(createVolumeCmdMock.getVolumeName()).thenReturn("   ");
-        Assert.assertNotNull(volumeApiServiceImpl.getVolumeNameFromCommand(createVolumeCmdMock));
+        when(createVol.getVolumeName()).thenReturn("   ");
+        Assert.assertNotNull(volumeApiServiceImpl.getVolumeNameFromCommand(createVol));
     }
 
     @Test
     public void testNonEmptyGetVolumeNameFromCmd() {
-        when(createVolumeCmdMock.getVolumeName()).thenReturn("abc");
-        Assert.assertSame(volumeApiServiceImpl.getVolumeNameFromCommand(createVolumeCmdMock), "abc");
+        when(createVol.getVolumeName()).thenReturn("abc");
+        Assert.assertSame(volumeApiServiceImpl.getVolumeNameFromCommand(createVol), "abc");
     }
 
     @Test
     public void testUpdateMissingRootDiskControllerWithNullChainInfo() {
         volumeApiServiceImpl.updateMissingRootDiskController(null, null);
-        verify(userVmManagerMock, times(0)).persistDeviceBusInfo(any(UserVmVO.class), anyString());
+        verify(userVmManager, times(0)).persistDeviceBusInfo(any(UserVmVO.class), anyString());
     }
 
     @Test
     public void testUpdateMissingRootDiskControllerWithValidChainInfo() {
         UserVmVO vm = userVmDaoMock.findById(1L);
-        assert vm.getType() == VirtualMachine.Type.User;
+
+        Mockito.doNothing().when(userVmManager).persistDeviceBusInfo(any(UserVmVO.class), eq("scsi"));
         volumeApiServiceImpl.updateMissingRootDiskController(vm, "{\"diskDeviceBusName\":\"scsi0:0\",\"diskChain\":[\"[somedatastore] i-3-VM-somePath/ROOT-1.vmdk\"]}");
-        verify(userVmManagerMock, times(1)).persistDeviceBusInfo(any(UserVmVO.class), eq("scsi"));
+        verify(userVmManager, times(1)).persistDeviceBusInfo(any(UserVmVO.class), eq("scsi"));
     }
 
-    @Test
     /**
      * Setting locationType for a non-managed storage should give an error
      */
+    @Test
     public void testAllocSnapshotNonManagedStorageArchive() {
         try {
             volumeApiServiceImpl.allocSnapshot(6L, 1L, "test", Snapshot.LocationType.SECONDARY);
@@ -465,13 +481,10 @@
 
     /**
      * The resource limit check for primary storage should not be skipped for Volume in 'Uploaded' state.
-     * @throws NoSuchFieldException
-     * @throws IllegalAccessException
-     * @throws ResourceAllocationException
      */
     @Test
     public void testResourceLimitCheckForUploadedVolume() throws NoSuchFieldException, IllegalAccessException, ResourceAllocationException {
-        doThrow(new ResourceAllocationException("primary storage resource limit check failed", Resource.ResourceType.primary_storage)).when(volumeApiServiceImpl._resourceLimitMgr)
+        doThrow(new ResourceAllocationException("primary storage resource limit check failed", Resource.ResourceType.primary_storage)).when(resourceLimitServiceMock)
         .checkResourceLimit(any(AccountVO.class), any(Resource.ResourceType.class), any(Long.class));
         UserVmVO vm = Mockito.mock(UserVmVO.class);
         VolumeInfo volumeToAttach = Mockito.mock(VolumeInfo.class);
@@ -483,11 +496,11 @@
         when(vm.getType()).thenReturn(VirtualMachine.Type.User);
         when(vm.getState()).thenReturn(State.Running);
         when(vm.getDataCenterId()).thenReturn(34L);
-        when(volumeApiServiceImpl._volsDao.findByInstanceAndType(anyLong(), any(Volume.Type.class))).thenReturn(new ArrayList<>(10));
-        when(volumeApiServiceImpl.volFactory.getVolume(9L)).thenReturn(volumeToAttach);
+        when(volumeDaoMock.findByInstanceAndType(anyLong(), any(Volume.Type.class))).thenReturn(new ArrayList<>(10));
+        when(volumeDataFactoryMock.getVolume(9L)).thenReturn(volumeToAttach);
         when(volumeToAttach.getState()).thenReturn(Volume.State.Uploaded);
         DataCenterVO zoneWithDisabledLocalStorage = Mockito.mock(DataCenterVO.class);
-        when(volumeApiServiceImpl._dcDao.findById(anyLong())).thenReturn(zoneWithDisabledLocalStorage);
+        when(_dcDao.findById(anyLong())).thenReturn(zoneWithDisabledLocalStorage);
         when(zoneWithDisabledLocalStorage.isLocalStorageEnabled()).thenReturn(true);
         try {
             volumeApiServiceImpl.attachVolumeToVM(2L, 9L, null);
@@ -501,6 +514,110 @@
         CallContext.unregister();
     }
 
+    @Test
+    public void getStoragePoolTagsTestStorageWithoutTags() {
+        Mockito.when(storagePoolDetailsDao.listDetails(storagePoolMockId)).thenReturn(new ArrayList<>());
+
+        String returnedStoragePoolTags = volumeApiServiceImpl.getStoragePoolTags(storagePoolMock);
+
+        Assert.assertNull(returnedStoragePoolTags);
+
+    }
+
+    @Test
+    public void getStoragePoolTagsTestStorageWithTags() {
+        ArrayList<StoragePoolDetailVO> tags = new ArrayList<>();
+        StoragePoolDetailVO tag1 = new StoragePoolDetailVO(1l, "tag1", "value", true);
+        StoragePoolDetailVO tag2 = new StoragePoolDetailVO(1l, "tag2", "value", true);
+        StoragePoolDetailVO tag3 = new StoragePoolDetailVO(1l, "tag3", "value", true);
+
+        tags.add(tag1);
+        tags.add(tag2);
+        tags.add(tag3);
+
+        Mockito.when(storagePoolDetailsDao.listDetails(storagePoolMockId)).thenReturn(tags);
+
+        String returnedStoragePoolTags = volumeApiServiceImpl.getStoragePoolTags(storagePoolMock);
+
+        Assert.assertEquals("tag1,tag2,tag3", returnedStoragePoolTags);
+    }
+
+    @Test
+    public void validateConditionsToReplaceDiskOfferingOfVolumeTestNoNewDiskOffering() {
+        volumeApiServiceImpl.validateConditionsToReplaceDiskOfferingOfVolume(volumeVoMock, null, storagePoolMock);
+
+        Mockito.verify(volumeVoMock, times(0)).getVolumeType();
+    }
+
+    @Test
+    public void validateConditionsToReplaceDiskOfferingOfVolumeTestRootVolume() {
+        Mockito.when(volumeVoMock.getVolumeType()).thenReturn(Type.ROOT);
+
+        volumeApiServiceImpl.validateConditionsToReplaceDiskOfferingOfVolume(volumeVoMock, newDiskOfferingMock, storagePoolMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateConditionsToReplaceDiskOfferingOfVolumeTestTargetPoolSharedDiskOfferingLocal() {
+        Mockito.when(volumeVoMock.getVolumeType()).thenReturn(Type.DATADISK);
+        Mockito.when(newDiskOfferingMock.getUseLocalStorage()).thenReturn(true);
+        Mockito.when(storagePoolMock.isShared()).thenReturn(true);
+
+        volumeApiServiceImpl.validateConditionsToReplaceDiskOfferingOfVolume(volumeVoMock, newDiskOfferingMock, storagePoolMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateConditionsToReplaceDiskOfferingOfVolumeTestTargetPoolLocalDiskOfferingShared() {
+        Mockito.when(volumeVoMock.getVolumeType()).thenReturn(Type.DATADISK);
+        Mockito.when(newDiskOfferingMock.isShared()).thenReturn(true);
+        Mockito.when(storagePoolMock.isLocal()).thenReturn(true);
+
+        volumeApiServiceImpl.validateConditionsToReplaceDiskOfferingOfVolume(volumeVoMock, newDiskOfferingMock, storagePoolMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateConditionsToReplaceDiskOfferingOfVolumeTestTagsDoNotMatch() {
+        Mockito.when(volumeVoMock.getVolumeType()).thenReturn(Type.DATADISK);
+
+        Mockito.when(newDiskOfferingMock.getUseLocalStorage()).thenReturn(false);
+        Mockito.when(storagePoolMock.isShared()).thenReturn(true);
+
+        Mockito.when(newDiskOfferingMock.isShared()).thenReturn(true);
+        Mockito.when(storagePoolMock.isLocal()).thenReturn(false);
+
+        Mockito.when(newDiskOfferingMock.getTags()).thenReturn("tag1");
+
+        Mockito.doReturn(null).when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        volumeApiServiceImpl.validateConditionsToReplaceDiskOfferingOfVolume(volumeVoMock, newDiskOfferingMock, storagePoolMock);
+    }
+
+    @Test
+    public void validateConditionsToReplaceDiskOfferingOfVolumeTestEverythingWorking() {
+        Mockito.when(volumeVoMock.getVolumeType()).thenReturn(Type.DATADISK);
+
+        Mockito.when(newDiskOfferingMock.getUseLocalStorage()).thenReturn(false);
+        Mockito.when(storagePoolMock.isShared()).thenReturn(true);
+
+        Mockito.when(newDiskOfferingMock.isShared()).thenReturn(true);
+        Mockito.when(storagePoolMock.isLocal()).thenReturn(false);
+
+        Mockito.when(newDiskOfferingMock.getTags()).thenReturn("tag1");
+
+        Mockito.doReturn("tag1").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        volumeApiServiceImpl.validateConditionsToReplaceDiskOfferingOfVolume(volumeVoMock, newDiskOfferingMock, storagePoolMock);
+
+        InOrder inOrder = Mockito.inOrder(volumeVoMock, newDiskOfferingMock, storagePoolMock, volumeApiServiceImpl);
+        inOrder.verify(storagePoolMock).isShared();
+        inOrder.verify(newDiskOfferingMock).getUseLocalStorage();
+        inOrder.verify(storagePoolMock).isLocal();
+        inOrder.verify(newDiskOfferingMock, times(0)).isShared();
+        inOrder.verify(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        inOrder.verify(volumeVoMock).getSize();
+        inOrder.verify(newDiskOfferingMock).getDiskSize();
+    }
+
     @Test(expected = InvalidParameterValueException.class)
     public void retrieveAndValidateVolumeTestVolumeNotFound() {
         Mockito.doReturn(null).when(volumeDaoMock).findById(volumeMockId);
@@ -701,7 +818,7 @@
     }
 
     @Test(expected = InterruptedException.class)
-    public void expungeVolumesInSecondaryStorageIfNeededTestthrowinInterruptedException() throws InterruptedException, ExecutionException {
+    public void expungeVolumesInSecondaryStorageIfNeededTestThrowinInterruptedException() throws InterruptedException, ExecutionException {
         Mockito.doReturn(asyncCallFutureVolumeapiResultMock).when(volumeServiceMock).expungeVolumeAsync(volumeInfoMock);
         Mockito.doReturn(volumeInfoMock).when(volumeDataFactoryMock).getVolume(volumeMockId, DataStoreRole.Image);
         Mockito.doNothing().when(resourceLimitServiceMock).decrementResourceCount(accountMockId, ResourceType.secondary_storage, volumeSizeMock);
@@ -715,7 +832,7 @@
     }
 
     @Test(expected = ExecutionException.class)
-    public void expungeVolumesInSecondaryStorageIfNeededTestthrowinExecutionException() throws InterruptedException, ExecutionException {
+    public void expungeVolumesInSecondaryStorageIfNeededTestThrowingExecutionException() throws InterruptedException, ExecutionException {
         Mockito.doReturn(asyncCallFutureVolumeapiResultMock).when(volumeServiceMock).expungeVolumeAsync(volumeInfoMock);
         Mockito.doReturn(volumeInfoMock).when(volumeDataFactoryMock).getVolume(volumeMockId, DataStoreRole.Image);
         Mockito.doNothing().when(resourceLimitServiceMock).decrementResourceCount(accountMockId, ResourceType.secondary_storage, volumeSizeMock);
@@ -768,7 +885,7 @@
 
         boolean result = volumeApiServiceImpl.deleteVolume(volumeMockId, accountMock);
 
-        assertTrue(result);
+        Assert.assertTrue(result);
         Mockito.verify(volumeApiServiceImpl).retrieveAndValidateVolume(volumeMockId, accountMock);
         Mockito.verify(volumeApiServiceImpl).destroyVolumeIfPossible(volumeVoMock);
         Mockito.verify(volumeDaoMock).remove(volumeMockId);
@@ -794,7 +911,7 @@
 
         boolean result = volumeApiServiceImpl.deleteVolume(volumeMockId, accountMock);
 
-        assertTrue(result);
+        Assert.assertTrue(result);
         Mockito.verify(volumeApiServiceImpl).retrieveAndValidateVolume(volumeMockId, accountMock);
         Mockito.verify(volumeApiServiceImpl).destroyVolumeIfPossible(volumeVoMock);
         Mockito.verify(volumeDaoMock, Mockito.times(0)).remove(volumeMockId);
@@ -818,7 +935,7 @@
 
         boolean result = volumeApiServiceImpl.deleteVolume(volumeMockId, accountMock);
 
-        assertFalse(result);
+        Assert.assertFalse(result);
         Mockito.verify(volumeApiServiceImpl).retrieveAndValidateVolume(volumeMockId, accountMock);
         Mockito.verify(volumeApiServiceImpl).destroyVolumeIfPossible(volumeVoMock);
         Mockito.verify(volumeDaoMock, Mockito.times(0)).remove(volumeMockId);
@@ -838,7 +955,7 @@
 
         boolean result = volumeApiServiceImpl.deleteVolume(volumeMockId, accountMock);
 
-        assertFalse(result);
+        Assert.assertFalse(result);
         Mockito.verify(volumeApiServiceImpl).retrieveAndValidateVolume(volumeMockId, accountMock);
         Mockito.verify(volumeApiServiceImpl).destroyVolumeIfPossible(volumeVoMock);
         Mockito.verify(volumeDaoMock, Mockito.times(0)).remove(volumeMockId);
@@ -858,7 +975,7 @@
 
         boolean result = volumeApiServiceImpl.deleteVolume(volumeMockId, accountMock);
 
-        assertFalse(result);
+        Assert.assertFalse(result);
         Mockito.verify(volumeApiServiceImpl).retrieveAndValidateVolume(volumeMockId, accountMock);
         Mockito.verify(volumeApiServiceImpl).destroyVolumeIfPossible(volumeVoMock);
         Mockito.verify(volumeDaoMock, Mockito.times(0)).remove(volumeMockId);
@@ -878,4 +995,95 @@
 
         volumeApiServiceImpl.deleteVolume(volumeMockId, accountMock);
     }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingMoreTagsThanStorageTags() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("A,B,C").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("A").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertFalse(result);
+    }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingTagsIsSubSetOfStorageTags() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("A,B,C").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("A,B,C,D,X,Y").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertTrue(result);
+    }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingTagsEmptyAndStorageTagsNotEmpty() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("A,B,C,D,X,Y").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertTrue(result);
+    }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingTagsNotEmptyAndStorageTagsEmpty() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("A").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertFalse(result);
+    }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingTagsEmptyAndStorageTagsEmpty() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertTrue(result);
+    }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingTagsDifferentFromdStorageTags() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("A,B").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("C,D").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertFalse(result);
+    }
+
+    @Test
+    public void doesTargetStorageSupportDiskOfferingTestDiskOfferingTagsEqualsStorageTags() {
+        DiskOfferingVO diskOfferingVoMock = Mockito.mock(DiskOfferingVO.class);
+        Mockito.doReturn("A").when(diskOfferingVoMock).getTags();
+
+        StoragePool storagePoolMock = Mockito.mock(StoragePool.class);
+        Mockito.doReturn("A").when(volumeApiServiceImpl).getStoragePoolTags(storagePoolMock);
+
+        boolean result = volumeApiServiceImpl.doesTargetStorageSupportNewDiskOffering(storagePoolMock, diskOfferingVoMock);
+
+        Assert.assertTrue(result);
+    }
 }
diff --git a/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java b/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java
new file mode 100644
index 0000000..ed93698
--- /dev/null
+++ b/server/src/test/java/com/cloud/storage/dao/AsyncJobJoinDaoTest.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.cloud.storage.dao;
+
+import com.cloud.api.query.dao.AsyncJobJoinDaoImpl;
+import com.cloud.api.query.vo.AsyncJobJoinVO;
+import org.apache.cloudstack.api.ApiCommandJobType;
+import org.apache.cloudstack.api.response.AsyncJobResponse;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.util.Date;
+
+@RunWith(MockitoJUnitRunner.class)
+public class AsyncJobJoinDaoTest {
+
+    @InjectMocks
+    AsyncJobJoinDaoImpl dao;
+
+    @Test
+    public void testNewAsyncJobResponseValidValues() {
+        final AsyncJobJoinVO job = new AsyncJobJoinVO();
+        ReflectionTestUtils.setField(job,"uuid","a2b22932-1b61-4406-8e89-4ae19968e8d3");
+        ReflectionTestUtils.setField(job,"accountUuid","4dea2836-72cc-11e8-b2de-107b4429825a");
+        ReflectionTestUtils.setField(job,"domainUuid","4dea136b-72cc-11e8-b2de-107b4429825a");
+        ReflectionTestUtils.setField(job,"userUuid","4decc724-72cc-11e8-b2de-107b4429825a");
+        ReflectionTestUtils.setField(job,"cmd","org.apache.cloudstack.api.command.admin.vm.StartVMCmdByAdmin");
+        ReflectionTestUtils.setField(job,"status",0);
+        ReflectionTestUtils.setField(job,"resultCode",0);
+        ReflectionTestUtils.setField(job,"result",null);
+        ReflectionTestUtils.setField(job,"created",new Date());
+        ReflectionTestUtils.setField(job,"removed",new Date());
+        ReflectionTestUtils.setField(job,"instanceType",ApiCommandJobType.VirtualMachine);
+        ReflectionTestUtils.setField(job,"instanceId",3L);
+        final AsyncJobResponse response = dao.newAsyncJobResponse(job);
+        Assert.assertEquals(job.getUuid(),response.getJobId());
+        Assert.assertEquals(job.getAccountUuid(), ReflectionTestUtils.getField(response, "accountId"));
+        Assert.assertEquals(job.getUserUuid(), ReflectionTestUtils.getField(response, "userId"));
+        Assert.assertEquals(job.getCmd(), ReflectionTestUtils.getField(response, "cmd"));
+        Assert.assertEquals(job.getStatus(), ReflectionTestUtils.getField(response, "jobStatus"));
+        Assert.assertEquals(job.getStatus(), ReflectionTestUtils.getField(response, "jobProcStatus"));
+        Assert.assertEquals(job.getResultCode(), ReflectionTestUtils.getField(response, "jobResultCode"));
+        Assert.assertEquals(null, ReflectionTestUtils.getField(response, "jobResultType"));
+        Assert.assertEquals(job.getResult(), ReflectionTestUtils.getField(response, "jobResult"));
+        Assert.assertEquals(job.getInstanceType().toString(), ReflectionTestUtils.getField(response, "jobInstanceType"));
+        Assert.assertEquals(job.getInstanceUuid(), ReflectionTestUtils.getField(response, "jobInstanceId"));
+        Assert.assertEquals(job.getCreated(), ReflectionTestUtils.getField(response, "created"));
+        Assert.assertEquals(job.getRemoved(), ReflectionTestUtils.getField(response, "removed"));
+    }
+
+    @Test
+    public void testNewAsyncJobResponseNullValues() {
+        final AsyncJobJoinVO job = new AsyncJobJoinVO();
+        final AsyncJobResponse response = dao.newAsyncJobResponse(job);
+        Assert.assertEquals(job.getUuid(),response.getJobId());
+        Assert.assertEquals(job.getAccountUuid(), ReflectionTestUtils.getField(response, "accountId"));
+        Assert.assertEquals(job.getUserUuid(), ReflectionTestUtils.getField(response, "userId"));
+        Assert.assertEquals(job.getCmd(), ReflectionTestUtils.getField(response, "cmd"));
+        Assert.assertEquals(job.getStatus(), ReflectionTestUtils.getField(response, "jobStatus"));
+        Assert.assertEquals(job.getStatus(), ReflectionTestUtils.getField(response, "jobProcStatus"));
+        Assert.assertEquals(job.getResultCode(), ReflectionTestUtils.getField(response, "jobResultCode"));
+        Assert.assertEquals(null, ReflectionTestUtils.getField(response, "jobResultType"));
+        Assert.assertEquals(job.getResult(), ReflectionTestUtils.getField(response, "jobResult"));
+        Assert.assertEquals(job.getInstanceType(), ReflectionTestUtils.getField(response, "jobInstanceType"));
+        Assert.assertEquals(job.getInstanceUuid(), ReflectionTestUtils.getField(response, "jobInstanceId"));
+        Assert.assertEquals(job.getCreated(), ReflectionTestUtils.getField(response, "created"));
+        Assert.assertEquals(job.getRemoved(), ReflectionTestUtils.getField(response, "removed"));
+    }
+}
diff --git a/server/test/com/cloud/storage/dao/StoragePoolDaoTest.java b/server/src/test/java/com/cloud/storage/dao/StoragePoolDaoTest.java
similarity index 100%
rename from server/test/com/cloud/storage/dao/StoragePoolDaoTest.java
rename to server/src/test/java/com/cloud/storage/dao/StoragePoolDaoTest.java
diff --git a/server/test/com/cloud/storage/dao/StoragePoolDaoTestConfiguration.java b/server/src/test/java/com/cloud/storage/dao/StoragePoolDaoTestConfiguration.java
similarity index 100%
rename from server/test/com/cloud/storage/dao/StoragePoolDaoTestConfiguration.java
rename to server/src/test/java/com/cloud/storage/dao/StoragePoolDaoTestConfiguration.java
diff --git a/server/test/com/cloud/storage/listener/StoragePoolMonitorTest.java b/server/src/test/java/com/cloud/storage/listener/StoragePoolMonitorTest.java
similarity index 100%
rename from server/test/com/cloud/storage/listener/StoragePoolMonitorTest.java
rename to server/src/test/java/com/cloud/storage/listener/StoragePoolMonitorTest.java
diff --git a/server/test/com/cloud/storage/snapshot/SnapshotManagerTest.java b/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java
similarity index 95%
rename from server/test/com/cloud/storage/snapshot/SnapshotManagerTest.java
rename to server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java
index 39eb703..973485f 100755
--- a/server/test/com/cloud/storage/snapshot/SnapshotManagerTest.java
+++ b/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java
@@ -23,6 +23,7 @@
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotStrategy;
@@ -336,4 +337,17 @@
         Snapshot snapshot = _snapshotMgr.backupSnapshotFromVmSnapshot(TEST_SNAPSHOT_ID, TEST_VM_ID, TEST_VOLUME_ID, TEST_VM_SNAPSHOT_ID);
         Assert.assertNull(snapshot);
     }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void testArchiveSnapshotSnapshotNotOnPrimary() {
+        when(snapshotFactory.getSnapshot(anyLong(), Mockito.eq(DataStoreRole.Primary))).thenReturn(null);
+        _snapshotMgr.archiveSnapshot(TEST_SNAPSHOT_ID);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void testArchiveSnapshotSnapshotNotReady() {
+        when(snapshotFactory.getSnapshot(anyLong(), Mockito.eq(DataStoreRole.Primary))).thenReturn(snapshotInfoMock);
+        when(snapshotInfoMock.getStatus()).thenReturn(ObjectInDataStoreStateMachine.State.Destroyed);
+        _snapshotMgr.archiveSnapshot(TEST_SNAPSHOT_ID);
+    }
 }
diff --git a/server/test/com/cloud/template/HypervisorTemplateAdapterTest.java b/server/src/test/java/com/cloud/template/HypervisorTemplateAdapterTest.java
similarity index 100%
rename from server/test/com/cloud/template/HypervisorTemplateAdapterTest.java
rename to server/src/test/java/com/cloud/template/HypervisorTemplateAdapterTest.java
diff --git a/server/test/com/cloud/template/TemplateManagerImplTest.java b/server/src/test/java/com/cloud/template/TemplateManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/template/TemplateManagerImplTest.java
rename to server/src/test/java/com/cloud/template/TemplateManagerImplTest.java
diff --git a/server/src/test/java/com/cloud/user/AccountManagerImplTest.java b/server/src/test/java/com/cloud/user/AccountManagerImplTest.java
new file mode 100644
index 0000000..fcb0c57
--- /dev/null
+++ b/server/src/test/java/com/cloud/user/AccountManagerImplTest.java
@@ -0,0 +1,702 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.user;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.cloudstack.acl.ControlledEntity;
+import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.api.command.admin.user.GetUserKeysCmd;
+import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.cloud.acl.DomainChecker;
+import com.cloud.domain.Domain;
+import com.cloud.domain.DomainVO;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.PermissionDeniedException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.server.auth.UserAuthenticator;
+import com.cloud.server.auth.UserAuthenticator.ActionOnFailedAuthentication;
+import com.cloud.user.Account.State;
+import com.cloud.utils.Pair;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.vm.UserVmManagerImpl;
+import com.cloud.vm.UserVmVO;
+import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.snapshot.VMSnapshotVO;
+
+@RunWith(MockitoJUnitRunner.class)
+public class AccountManagerImplTest extends AccountManagetImplTestBase {
+
+    @Mock
+    private UserVmManagerImpl _vmMgr;
+    @Mock
+    private AccountVO callingAccount;
+    @Mock
+    private DomainChecker domainChecker;
+    @Mock
+    private AccountService accountService;
+    @Mock
+    private GetUserKeysCmd _listkeyscmd;
+    @Mock
+    private User _user;
+    @Mock
+    private UserAccountVO userAccountVO;
+
+    @Mock
+    private UpdateUserCmd UpdateUserCmdMock;
+
+    private long userVoIdMock = 111l;
+    @Mock
+    private UserVO userVoMock;
+
+    private long accountMockId = 100l;
+    @Mock
+    private Account accountMock;
+
+    @Before
+    public void beforeTest() {
+        Mockito.doReturn(accountMockId).when(accountMock).getId();
+        Mockito.doReturn(accountMock).when(accountManagerImpl).getCurrentCallingAccount();
+
+        Mockito.doReturn(accountMockId).when(userVoMock).getAccountId();
+
+        Mockito.doReturn(userVoIdMock).when(userVoMock).getId();
+    }
+
+    @Test
+    public void disableAccountNotexisting() throws ConcurrentOperationException, ResourceUnavailableException {
+        Mockito.when(accountDaoMock.findById(42l)).thenReturn(null);
+        Assert.assertTrue(accountManagerImpl.disableAccount(42));
+    }
+
+    @Test
+    public void disableAccountDisabled() throws ConcurrentOperationException, ResourceUnavailableException {
+        AccountVO disabledAccount = new AccountVO();
+        disabledAccount.setState(State.disabled);
+        Mockito.when(accountDaoMock.findById(42l)).thenReturn(disabledAccount);
+        Assert.assertTrue(accountManagerImpl.disableAccount(42));
+    }
+
+    @Test
+    public void disableAccount() throws ConcurrentOperationException, ResourceUnavailableException {
+        AccountVO account = new AccountVO();
+        account.setState(State.enabled);
+        Mockito.when(accountDaoMock.findById(42l)).thenReturn(account);
+        Mockito.when(accountDaoMock.createForUpdate()).thenReturn(new AccountVO());
+        Mockito.when(accountDaoMock.update(Mockito.eq(42l), Mockito.any(AccountVO.class))).thenReturn(true);
+        Mockito.when(_vmDao.listByAccountId(42l)).thenReturn(Arrays.asList(Mockito.mock(VMInstanceVO.class)));
+        Assert.assertTrue(accountManagerImpl.disableAccount(42));
+        Mockito.verify(accountDaoMock, Mockito.atLeastOnce()).update(Mockito.eq(42l), Mockito.any(AccountVO.class));
+    }
+
+    @Test
+    public void deleteUserAccount() {
+        AccountVO account = new AccountVO();
+        account.setId(42l);
+        DomainVO domain = new DomainVO();
+        Mockito.when(accountDaoMock.findById(42l)).thenReturn(account);
+        Mockito.when(securityChecker.checkAccess(Mockito.any(Account.class), Mockito.any(ControlledEntity.class), Mockito.any(AccessType.class), Mockito.anyString())).thenReturn(true);
+        Mockito.when(accountDaoMock.remove(42l)).thenReturn(true);
+        Mockito.when(_configMgr.releaseAccountSpecificVirtualRanges(42l)).thenReturn(true);
+        Mockito.when(_domainMgr.getDomain(Mockito.anyLong())).thenReturn(domain);
+        Mockito.when(securityChecker.checkAccess(Mockito.any(Account.class), Mockito.any(Domain.class))).thenReturn(true);
+        Mockito.when(_vmSnapshotDao.listByAccountId(Mockito.anyLong())).thenReturn(new ArrayList<VMSnapshotVO>());
+
+        List<SSHKeyPairVO> sshkeyList = new ArrayList<SSHKeyPairVO>();
+        SSHKeyPairVO sshkey = new SSHKeyPairVO();
+        sshkey.setId(1l);
+        sshkeyList.add(sshkey);
+        Mockito.when(_sshKeyPairDao.listKeyPairs(Mockito.anyLong(), Mockito.anyLong())).thenReturn(sshkeyList);
+        Mockito.when(_sshKeyPairDao.remove(Mockito.anyLong())).thenReturn(true);
+
+        Assert.assertTrue(accountManagerImpl.deleteUserAccount(42));
+        // assert that this was a clean delete
+        Mockito.verify(accountDaoMock, Mockito.never()).markForCleanup(Mockito.eq(42l));
+    }
+
+    @Test
+    public void deleteUserAccountCleanup() {
+        AccountVO account = new AccountVO();
+        account.setId(42l);
+        DomainVO domain = new DomainVO();
+        Mockito.when(accountDaoMock.findById(42l)).thenReturn(account);
+        Mockito.when(securityChecker.checkAccess(Mockito.any(Account.class), Mockito.any(ControlledEntity.class), Mockito.any(AccessType.class), Mockito.anyString())).thenReturn(true);
+        Mockito.when(accountDaoMock.remove(42l)).thenReturn(true);
+        Mockito.when(_configMgr.releaseAccountSpecificVirtualRanges(42l)).thenReturn(true);
+        Mockito.when(_userVmDao.listByAccountId(42l)).thenReturn(Arrays.asList(Mockito.mock(UserVmVO.class)));
+        Mockito.when(_vmMgr.expunge(Mockito.any(UserVmVO.class), Mockito.anyLong(), Mockito.any(Account.class))).thenReturn(false);
+        Mockito.when(_domainMgr.getDomain(Mockito.anyLong())).thenReturn(domain);
+        Mockito.when(securityChecker.checkAccess(Mockito.any(Account.class), Mockito.any(Domain.class))).thenReturn(true);
+
+        Assert.assertTrue(accountManagerImpl.deleteUserAccount(42));
+        // assert that this was NOT a clean delete
+        Mockito.verify(accountDaoMock, Mockito.atLeastOnce()).markForCleanup(Mockito.eq(42l));
+    }
+
+    @Test
+    public void testAuthenticateUser() throws UnknownHostException {
+        Pair<Boolean, UserAuthenticator.ActionOnFailedAuthentication> successAuthenticationPair = new Pair<>(true, null);
+        Pair<Boolean, UserAuthenticator.ActionOnFailedAuthentication> failureAuthenticationPair = new Pair<>(false,
+                UserAuthenticator.ActionOnFailedAuthentication.INCREMENT_INCORRECT_LOGIN_ATTEMPT_COUNT);
+
+        UserAccountVO userAccountVO = new UserAccountVO();
+        userAccountVO.setSource(User.Source.UNKNOWN);
+        userAccountVO.setState(Account.State.disabled.toString());
+        Mockito.when(userAccountDaoMock.getUserAccount("test", 1L)).thenReturn(userAccountVO);
+        Mockito.when(userAuthenticator.authenticate("test", "fail", 1L, null)).thenReturn(failureAuthenticationPair);
+        Mockito.when(userAuthenticator.authenticate("test", null, 1L, null)).thenReturn(successAuthenticationPair);
+        Mockito.when(userAuthenticator.authenticate("test", "", 1L, null)).thenReturn(successAuthenticationPair);
+
+        //Test for incorrect password. authentication should fail
+        UserAccount userAccount = accountManagerImpl.authenticateUser("test", "fail", 1L, InetAddress.getByName("127.0.0.1"), null);
+        Assert.assertNull(userAccount);
+
+        //Test for null password. authentication should fail
+        userAccount = accountManagerImpl.authenticateUser("test", null, 1L, InetAddress.getByName("127.0.0.1"), null);
+        Assert.assertNull(userAccount);
+
+        //Test for empty password. authentication should fail
+        userAccount = accountManagerImpl.authenticateUser("test", "", 1L, InetAddress.getByName("127.0.0.1"), null);
+        Assert.assertNull(userAccount);
+
+        //Verifying that the authentication method is only called when password is specified
+        Mockito.verify(userAuthenticator, Mockito.times(1)).authenticate("test", "fail", 1L, null);
+        Mockito.verify(userAuthenticator, Mockito.never()).authenticate("test", null, 1L, null);
+        Mockito.verify(userAuthenticator, Mockito.never()).authenticate("test", "", 1L, null);
+    }
+
+    @Test(expected = PermissionDeniedException.class)
+    public void testgetUserCmd() {
+        CallContext.register(callingUser, callingAccount); // Calling account is user account i.e normal account
+        Mockito.when(_listkeyscmd.getID()).thenReturn(1L);
+        Mockito.when(accountManagerImpl.getActiveUser(1L)).thenReturn(_user);
+        Mockito.when(accountManagerImpl.getUserAccountById(1L)).thenReturn(userAccountVO);
+        Mockito.when(userAccountVO.getAccountId()).thenReturn(1L);
+        Mockito.when(accountManagerImpl.getAccount(Mockito.anyLong())).thenReturn(accountMock); // Queried account - admin account
+
+        Mockito.when(callingUser.getAccountId()).thenReturn(1L);
+        Mockito.when(accountDaoMock.findById(1L)).thenReturn(callingAccount);
+
+        Mockito.when(accountService.isNormalUser(Mockito.anyLong())).thenReturn(Boolean.TRUE);
+        Mockito.when(accountMock.getAccountId()).thenReturn(2L);
+
+        accountManagerImpl.getKeys(_listkeyscmd);
+    }
+
+    @Test
+    public void updateUserTestTimeZoneAndEmailNull() {
+        prepareMockAndExecuteUpdateUserTest(0);
+    }
+
+    @Test
+    public void updateUserTestTimeZoneAndEmailNotNull() {
+        Mockito.when(UpdateUserCmdMock.getEmail()).thenReturn("email");
+        Mockito.when(UpdateUserCmdMock.getTimezone()).thenReturn("timezone");
+        prepareMockAndExecuteUpdateUserTest(1);
+    }
+
+    private void prepareMockAndExecuteUpdateUserTest(int numberOfExpectedCallsForSetEmailAndSetTimeZone) {
+        Mockito.doReturn(userVoMock).when(accountManagerImpl).retrieveAndValidateUser(UpdateUserCmdMock);
+        Mockito.doNothing().when(accountManagerImpl).validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+        Mockito.doReturn(accountMock).when(accountManagerImpl).retrieveAndValidateAccount(userVoMock);
+
+        Mockito.doNothing().when(accountManagerImpl).validateAndUpdateFirstNameIfNeeded(UpdateUserCmdMock, userVoMock);
+        Mockito.doNothing().when(accountManagerImpl).validateAndUpdateLastNameIfNeeded(UpdateUserCmdMock, userVoMock);
+        Mockito.doNothing().when(accountManagerImpl).validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+        Mockito.doNothing().when(accountManagerImpl).validateUserPasswordAndUpdateIfNeeded(Mockito.anyString(), Mockito.eq(userVoMock), Mockito.anyString());
+
+        Mockito.doReturn(true).when(userDaoMock).update(Mockito.anyLong(), Mockito.eq(userVoMock));
+        Mockito.doReturn(Mockito.mock(UserAccountVO.class)).when(userAccountDaoMock).findById(Mockito.anyLong());
+
+        accountManagerImpl.updateUser(UpdateUserCmdMock);
+
+        InOrder inOrder = Mockito.inOrder(userVoMock, accountManagerImpl, userDaoMock, userAccountDaoMock);
+
+        inOrder.verify(accountManagerImpl).retrieveAndValidateUser(UpdateUserCmdMock);
+        inOrder.verify(accountManagerImpl).validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+        inOrder.verify(accountManagerImpl).retrieveAndValidateAccount(userVoMock);
+
+        inOrder.verify(accountManagerImpl).validateAndUpdateFirstNameIfNeeded(UpdateUserCmdMock, userVoMock);
+        inOrder.verify(accountManagerImpl).validateAndUpdateLastNameIfNeeded(UpdateUserCmdMock, userVoMock);
+        inOrder.verify(accountManagerImpl).validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+        inOrder.verify(accountManagerImpl).validateUserPasswordAndUpdateIfNeeded(Mockito.anyString(), Mockito.eq(userVoMock), Mockito.anyString());
+
+        inOrder.verify(userVoMock, Mockito.times(numberOfExpectedCallsForSetEmailAndSetTimeZone)).setEmail(Mockito.anyString());
+        inOrder.verify(userVoMock, Mockito.times(numberOfExpectedCallsForSetEmailAndSetTimeZone)).setTimezone(Mockito.anyString());
+
+        inOrder.verify(userDaoMock).update(Mockito.anyLong(), Mockito.eq(userVoMock));
+        inOrder.verify(userAccountDaoMock).findById(Mockito.anyLong());
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void retrieveAndValidateUserTestNoUserFound() {
+        Mockito.doReturn(null).when(userDaoMock).getUser(Mockito.anyLong());
+
+        accountManagerImpl.retrieveAndValidateUser(UpdateUserCmdMock);
+    }
+
+    @Test
+    public void retrieveAndValidateUserTestUserIsFound() {
+        Mockito.doReturn(userVoMock).when(userDaoMock).getUser(Mockito.anyLong());
+
+        UserVO receivedUser = accountManagerImpl.retrieveAndValidateUser(UpdateUserCmdMock);
+
+        Assert.assertEquals(userVoMock, receivedUser);
+    }
+
+    @Test
+    public void validateAndUpdatApiAndSecretKeyIfNeededTestNoKeys() {
+        accountManagerImpl.validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+
+        Mockito.verify(accountDaoMock, Mockito.times(0)).findUserAccountByApiKey(Mockito.anyString());
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdatApiAndSecretKeyIfNeededTestOnlyApiKeyInformed() {
+        Mockito.doReturn("apiKey").when(UpdateUserCmdMock).getApiKey();
+
+        accountManagerImpl.validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdatApiAndSecretKeyIfNeededTestOnlySecretKeyInformed() {
+        Mockito.doReturn("secretKey").when(UpdateUserCmdMock).getSecretKey();
+
+        accountManagerImpl.validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdatApiAndSecretKeyIfNeededTestApiKeyAlreadyUsedBySomeoneElse() {
+        String apiKey = "apiKey";
+        Mockito.doReturn(apiKey).when(UpdateUserCmdMock).getApiKey();
+        Mockito.doReturn("secretKey").when(UpdateUserCmdMock).getSecretKey();
+
+        Mockito.doReturn(1L).when(userVoMock).getId();
+
+        User otherUserMock = Mockito.mock(User.class);
+        Mockito.doReturn(2L).when(otherUserMock).getId();
+
+        Pair<User, Account> pairUserAccountMock = new Pair<User, Account>(otherUserMock, Mockito.mock(Account.class));
+        Mockito.doReturn(pairUserAccountMock).when(accountDaoMock).findUserAccountByApiKey(apiKey);
+
+        accountManagerImpl.validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+    }
+
+    @Test
+    public void validateAndUpdatApiAndSecretKeyIfNeededTest() {
+        String apiKey = "apiKey";
+        Mockito.doReturn(apiKey).when(UpdateUserCmdMock).getApiKey();
+
+        String secretKey = "secretKey";
+        Mockito.doReturn(secretKey).when(UpdateUserCmdMock).getSecretKey();
+
+        Mockito.doReturn(1L).when(userVoMock).getId();
+
+        User otherUserMock = Mockito.mock(User.class);
+        Mockito.doReturn(1L).when(otherUserMock).getId();
+
+        Pair<User, Account> pairUserAccountMock = new Pair<User, Account>(otherUserMock, Mockito.mock(Account.class));
+        Mockito.doReturn(pairUserAccountMock).when(accountDaoMock).findUserAccountByApiKey(apiKey);
+
+        accountManagerImpl.validateAndUpdatApiAndSecretKeyIfNeeded(UpdateUserCmdMock, userVoMock);
+
+        Mockito.verify(accountDaoMock).findUserAccountByApiKey(apiKey);
+        Mockito.verify(userVoMock).setApiKey(apiKey);
+        Mockito.verify(userVoMock).setSecretKey(secretKey);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void retrieveAndValidateAccountTestAccountNotFound() {
+        Mockito.doReturn(accountMockId).when(userVoMock).getAccountId();
+
+        Mockito.doReturn(null).when(accountDaoMock).findById(accountMockId);
+
+        accountManagerImpl.retrieveAndValidateAccount(userVoMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void retrieveAndValidateAccountTestAccountTypeEqualsProjectType() {
+        Mockito.doReturn(accountMockId).when(userVoMock).getAccountId();
+        Mockito.doReturn(Account.ACCOUNT_TYPE_PROJECT).when(accountMock).getType();
+        Mockito.doReturn(accountMock).when(accountDaoMock).findById(accountMockId);
+
+        accountManagerImpl.retrieveAndValidateAccount(userVoMock);
+    }
+
+    @Test(expected = PermissionDeniedException.class)
+    public void retrieveAndValidateAccountTestAccountTypeEqualsSystemType() {
+        Mockito.doReturn(Account.ACCOUNT_ID_SYSTEM).when(userVoMock).getAccountId();
+        Mockito.doReturn(Account.ACCOUNT_ID_SYSTEM).when(accountMock).getId();
+        Mockito.doReturn(accountMock).when(accountDaoMock).findById(Account.ACCOUNT_ID_SYSTEM);
+
+        accountManagerImpl.retrieveAndValidateAccount(userVoMock);
+    }
+
+    @Test
+    public void retrieveAndValidateAccountTest() {
+        Mockito.doReturn(accountMockId).when(userVoMock).getAccountId();
+        Mockito.doReturn(accountMock).when(accountDaoMock).findById(accountMockId);
+
+        Mockito.doNothing().when(accountManagerImpl).checkAccess(Mockito.eq(accountMock), Mockito.eq(AccessType.OperateEntry), Mockito.anyBoolean(), Mockito.any(Account.class));
+        accountManagerImpl.retrieveAndValidateAccount(userVoMock);
+
+        Mockito.verify(accountManagerImpl).getCurrentCallingAccount();
+        Mockito.verify(accountManagerImpl).checkAccess(Mockito.eq(accountMock), Mockito.eq(AccessType.OperateEntry), Mockito.anyBoolean(), Mockito.any(Account.class));
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdateFirstNameIfNeededTestFirstNameBlank() {
+        Mockito.doReturn("   ").when(UpdateUserCmdMock).getFirstname();
+
+        accountManagerImpl.validateAndUpdateFirstNameIfNeeded(UpdateUserCmdMock, userVoMock);
+    }
+
+    @Test
+    public void validateAndUpdateFirstNameIfNeededTestFirstNameNull() {
+        Mockito.doReturn(null).when(UpdateUserCmdMock).getFirstname();
+
+        accountManagerImpl.validateAndUpdateFirstNameIfNeeded(UpdateUserCmdMock, userVoMock);
+
+        Mockito.verify(userVoMock, Mockito.times(0)).setFirstname(Mockito.anyString());
+    }
+
+    @Test
+    public void validateAndUpdateFirstNameIfNeededTest() {
+        String firstname = "firstName";
+        Mockito.doReturn(firstname).when(UpdateUserCmdMock).getFirstname();
+
+        accountManagerImpl.validateAndUpdateFirstNameIfNeeded(UpdateUserCmdMock, userVoMock);
+
+        Mockito.verify(userVoMock).setFirstname(firstname);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdateLastNameIfNeededTestLastNameBlank() {
+        Mockito.doReturn("   ").when(UpdateUserCmdMock).getLastname();
+
+        accountManagerImpl.validateAndUpdateLastNameIfNeeded(UpdateUserCmdMock, userVoMock);
+    }
+
+    @Test
+    public void validateAndUpdateLastNameIfNeededTestLastNameNull() {
+        Mockito.doReturn(null).when(UpdateUserCmdMock).getLastname();
+
+        accountManagerImpl.validateAndUpdateLastNameIfNeeded(UpdateUserCmdMock, userVoMock);
+
+        Mockito.verify(userVoMock, Mockito.times(0)).setLastname(Mockito.anyString());
+    }
+
+    @Test
+    public void validateAndUpdateLastNameIfNeededTest() {
+        String lastName = "lastName";
+        Mockito.doReturn(lastName).when(UpdateUserCmdMock).getLastname();
+
+        accountManagerImpl.validateAndUpdateLastNameIfNeeded(UpdateUserCmdMock, userVoMock);
+
+        Mockito.verify(userVoMock).setLastname(lastName);
+    }
+
+    @Test
+    public void validateAndUpdateUsernameIfNeededTestNullUsername() {
+        Mockito.doReturn(null).when(UpdateUserCmdMock).getUsername();
+
+        accountManagerImpl.validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+
+        Mockito.verify(userVoMock, Mockito.times(0)).setUsername(Mockito.anyString());
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdateUsernameIfNeededTestBlankUsername() {
+        Mockito.doReturn("   ").when(UpdateUserCmdMock).getUsername();
+
+        accountManagerImpl.validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateAndUpdateUsernameIfNeededTestDuplicatedUserSameDomainThisUser() {
+        long domanIdCurrentUser = 22l;
+
+        String userName = "username";
+        Mockito.doReturn(userName).when(UpdateUserCmdMock).getUsername();
+        Mockito.doReturn(userName).when(userVoMock).getUsername();
+        Mockito.doReturn(domanIdCurrentUser).when(accountMock).getDomainId();
+
+        long userVoDuplicatedMockId = 67l;
+        UserVO userVoDuplicatedMock = Mockito.mock(UserVO.class);
+        Mockito.doReturn(userName).when(userVoDuplicatedMock).getUsername();
+        Mockito.doReturn(userVoDuplicatedMockId).when(userVoDuplicatedMock).getId();
+
+        long accountIdUserDuplicated = 98l;
+        Mockito.doReturn(accountIdUserDuplicated).when(userVoDuplicatedMock).getAccountId();
+
+        Account accountUserDuplicatedMock = Mockito.mock(Account.class);
+        Mockito.doReturn(accountIdUserDuplicated).when(accountUserDuplicatedMock).getId();
+        Mockito.doReturn(domanIdCurrentUser).when(accountUserDuplicatedMock).getDomainId();
+
+        List<UserVO> usersWithSameUserName = new ArrayList<>();
+        usersWithSameUserName.add(userVoMock);
+        usersWithSameUserName.add(userVoDuplicatedMock);
+
+        Mockito.doReturn(usersWithSameUserName).when(userDaoMock).findUsersByName(userName);
+
+        Mockito.doReturn(accountMock).when(accountDaoMock).findById(accountMockId);
+        Mockito.doReturn(accountUserDuplicatedMock).when(accountDaoMock).findById(accountIdUserDuplicated);
+
+        Mockito.doReturn(Mockito.mock(DomainVO.class)).when(_domainDao).findById(Mockito.anyLong());
+
+        accountManagerImpl.validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+    }
+
+    @Test
+    public void validateAndUpdateUsernameIfNeededTestDuplicatedUserButInDifferentDomains() {
+        long domanIdCurrentUser = 22l;
+
+        String userName = "username";
+        Mockito.doReturn(userName).when(UpdateUserCmdMock).getUsername();
+        Mockito.doReturn(userName).when(userVoMock).getUsername();
+        Mockito.doReturn(domanIdCurrentUser).when(accountMock).getDomainId();
+
+        long userVoDuplicatedMockId = 67l;
+        UserVO userVoDuplicatedMock = Mockito.mock(UserVO.class);
+        Mockito.doReturn(userName).when(userVoDuplicatedMock).getUsername();
+        Mockito.doReturn(userVoDuplicatedMockId).when(userVoDuplicatedMock).getId();
+
+        long accountIdUserDuplicated = 98l;
+        Mockito.doReturn(accountIdUserDuplicated).when(userVoDuplicatedMock).getAccountId();
+
+        Account accountUserDuplicatedMock = Mockito.mock(Account.class);
+        Mockito.doReturn(accountIdUserDuplicated).when(accountUserDuplicatedMock).getId();
+        Mockito.doReturn(45l).when(accountUserDuplicatedMock).getDomainId();
+
+        List<UserVO> usersWithSameUserName = new ArrayList<>();
+        usersWithSameUserName.add(userVoMock);
+        usersWithSameUserName.add(userVoDuplicatedMock);
+
+        Mockito.doReturn(usersWithSameUserName).when(userDaoMock).findUsersByName(userName);
+
+        Mockito.doReturn(accountMock).when(accountDaoMock).findById(accountMockId);
+        Mockito.doReturn(accountUserDuplicatedMock).when(accountDaoMock).findById(accountIdUserDuplicated);
+
+        accountManagerImpl.validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+
+        Mockito.verify(userVoMock).setUsername(userName);
+    }
+
+    @Test
+    public void validateAndUpdateUsernameIfNeededTestNoDuplicatedUserNames() {
+        long domanIdCurrentUser = 22l;
+
+        String userName = "username";
+        Mockito.doReturn(userName).when(UpdateUserCmdMock).getUsername();
+        Mockito.doReturn(userName).when(userVoMock).getUsername();
+        Mockito.doReturn(domanIdCurrentUser).when(accountMock).getDomainId();
+
+        List<UserVO> usersWithSameUserName = new ArrayList<>();
+
+        Mockito.doReturn(usersWithSameUserName).when(userDaoMock).findUsersByName(userName);
+
+        Mockito.doReturn(accountMock).when(accountDaoMock).findById(accountMockId);
+
+        accountManagerImpl.validateAndUpdateUsernameIfNeeded(UpdateUserCmdMock, userVoMock, accountMock);
+
+        Mockito.verify(userVoMock).setUsername(userName);
+    }
+
+    @Test
+    public void valiateUserPasswordAndUpdateIfNeededTestPasswordNull() {
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded(null, userVoMock, null);
+
+        Mockito.verify(userVoMock, Mockito.times(0)).setPassword(Mockito.anyString());
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void valiateUserPasswordAndUpdateIfNeededTestBlankPassword() {
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded("       ", userVoMock, null);
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void valiateUserPasswordAndUpdateIfNeededTestNoAdminAndNoCurrentPasswordProvided() {
+        Mockito.doReturn(accountMock).when(accountManagerImpl).getCurrentCallingAccount();
+        Mockito.doReturn(false).when(accountManagerImpl).isRootAdmin(accountMockId);
+        Mockito.doReturn(false).when(accountManagerImpl).isDomainAdmin(accountMockId);
+        Mockito.doReturn(true).when(accountManagerImpl).isResourceDomainAdmin(accountMockId);
+
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded("newPassword", userVoMock, "  ");
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void valiateUserPasswordAndUpdateIfNeededTestNoUserAuthenticatorsConfigured() {
+        Mockito.doReturn(accountMock).when(accountManagerImpl).getCurrentCallingAccount();
+        Mockito.doReturn(true).when(accountManagerImpl).isRootAdmin(accountMockId);
+        Mockito.doReturn(false).when(accountManagerImpl).isDomainAdmin(accountMockId);
+
+        Mockito.doNothing().when(accountManagerImpl).validateCurrentPassword(Mockito.eq(userVoMock), Mockito.anyString());
+
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded("newPassword", userVoMock, null);
+    }
+
+    @Test
+    public void validateUserPasswordAndUpdateIfNeededTestRootAdminUpdatingUserPassword() {
+        Mockito.doReturn(accountMock).when(accountManagerImpl).getCurrentCallingAccount();
+        Mockito.doReturn(true).when(accountManagerImpl).isRootAdmin(accountMockId);
+        Mockito.doReturn(false).when(accountManagerImpl).isDomainAdmin(accountMockId);
+
+        String newPassword = "newPassword";
+
+        String expectedUserPasswordAfterEncoded = configureUserMockAuthenticators(newPassword);
+
+        Mockito.doNothing().when(accountManagerImpl).validateCurrentPassword(Mockito.eq(userVoMock), Mockito.anyString());
+
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded(newPassword, userVoMock, null);
+
+        Mockito.verify(accountManagerImpl, Mockito.times(0)).validateCurrentPassword(Mockito.eq(userVoMock), Mockito.anyString());
+        Mockito.verify(userVoMock, Mockito.times(1)).setPassword(expectedUserPasswordAfterEncoded);
+    }
+
+    @Test
+    public void validateUserPasswordAndUpdateIfNeededTestDomainAdminUpdatingUserPassword() {
+        Mockito.doReturn(accountMock).when(accountManagerImpl).getCurrentCallingAccount();
+        Mockito.doReturn(false).when(accountManagerImpl).isRootAdmin(accountMockId);
+        Mockito.doReturn(true).when(accountManagerImpl).isDomainAdmin(accountMockId);
+
+        String newPassword = "newPassword";
+
+        String expectedUserPasswordAfterEncoded = configureUserMockAuthenticators(newPassword);
+
+        Mockito.doNothing().when(accountManagerImpl).validateCurrentPassword(Mockito.eq(userVoMock), Mockito.anyString());
+
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded(newPassword, userVoMock, null);
+
+        Mockito.verify(accountManagerImpl, Mockito.times(0)).validateCurrentPassword(Mockito.eq(userVoMock), Mockito.anyString());
+        Mockito.verify(userVoMock, Mockito.times(1)).setPassword(expectedUserPasswordAfterEncoded);
+    }
+
+    @Test
+    public void validateUserPasswordAndUpdateIfNeededTestUserUpdatingHisPassword() {
+        Mockito.doReturn(accountMock).when(accountManagerImpl).getCurrentCallingAccount();
+        Mockito.doReturn(false).when(accountManagerImpl).isRootAdmin(accountMockId);
+        Mockito.doReturn(false).when(accountManagerImpl).isDomainAdmin(accountMockId);
+
+        String newPassword = "newPassword";
+        String expectedUserPasswordAfterEncoded = configureUserMockAuthenticators(newPassword);
+
+        Mockito.doNothing().when(accountManagerImpl).validateCurrentPassword(Mockito.eq(userVoMock), Mockito.anyString());
+
+        String currentPassword = "theCurrentPassword";
+        accountManagerImpl.validateUserPasswordAndUpdateIfNeeded(newPassword, userVoMock, currentPassword);
+
+        Mockito.verify(accountManagerImpl, Mockito.times(1)).validateCurrentPassword(userVoMock, currentPassword);
+        Mockito.verify(userVoMock, Mockito.times(1)).setPassword(expectedUserPasswordAfterEncoded);
+    }
+
+    private String configureUserMockAuthenticators(String newPassword) {
+        accountManagerImpl._userPasswordEncoders = new ArrayList<>();
+        UserAuthenticator authenticatorMock1 = Mockito.mock(UserAuthenticator.class);
+        String expectedUserPasswordAfterEncoded = "passwordEncodedByAuthenticator1";
+        Mockito.doReturn(expectedUserPasswordAfterEncoded).when(authenticatorMock1).encode(newPassword);
+
+        UserAuthenticator authenticatorMock2 = Mockito.mock(UserAuthenticator.class);
+        Mockito.doReturn("passwordEncodedByAuthenticator2").when(authenticatorMock2).encode(newPassword);
+
+        accountManagerImpl._userPasswordEncoders.add(authenticatorMock1);
+        accountManagerImpl._userPasswordEncoders.add(authenticatorMock2);
+        return expectedUserPasswordAfterEncoded;
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void validateCurrentPasswordTestUserNotAuthenticatedWithProvidedCurrentPassword() {
+        Mockito.doReturn(Mockito.mock(AccountVO.class)).when(accountDaoMock).findById(accountMockId);
+        String newPassword = "newPassword";
+        configureUserMockAuthenticators(newPassword);
+
+        accountManagerImpl.validateCurrentPassword(userVoMock, "currentPassword");
+    }
+
+    @Test
+    public void validateCurrentPasswordTestUserAuthenticatedWithProvidedCurrentPasswordViaFirstAuthenticator() {
+        AccountVO accountVoMock = Mockito.mock(AccountVO.class);
+        long domainId = 14l;
+        Mockito.doReturn(domainId).when(accountVoMock).getDomainId();
+
+        Mockito.doReturn(accountVoMock).when(accountDaoMock).findById(accountMockId);
+        String username = "username";
+        Mockito.doReturn(username).when(userVoMock).getUsername();
+
+        accountManagerImpl._userPasswordEncoders = new ArrayList<>();
+        UserAuthenticator authenticatorMock1 = Mockito.mock(UserAuthenticator.class);
+        UserAuthenticator authenticatorMock2 = Mockito.mock(UserAuthenticator.class);
+
+        accountManagerImpl._userPasswordEncoders.add(authenticatorMock1);
+        accountManagerImpl._userPasswordEncoders.add(authenticatorMock2);
+
+        Pair<Boolean, ActionOnFailedAuthentication> authenticationResult = new Pair<Boolean, UserAuthenticator.ActionOnFailedAuthentication>(true,
+                UserAuthenticator.ActionOnFailedAuthentication.INCREMENT_INCORRECT_LOGIN_ATTEMPT_COUNT);
+
+        String currentPassword = "currentPassword";
+        Mockito.doReturn(authenticationResult).when(authenticatorMock1).authenticate(username, currentPassword, domainId, null);
+
+        accountManagerImpl.validateCurrentPassword(userVoMock, currentPassword);
+
+        Mockito.verify(authenticatorMock1, Mockito.times(1)).authenticate(username, currentPassword, domainId, null);
+        Mockito.verify(authenticatorMock2, Mockito.times(0)).authenticate(username, currentPassword, domainId, null);
+    }
+
+    @Test
+    public void validateCurrentPasswordTestUserAuthenticatedWithProvidedCurrentPasswordViaSecondAuthenticator() {
+        AccountVO accountVoMock = Mockito.mock(AccountVO.class);
+        long domainId = 14l;
+        Mockito.doReturn(domainId).when(accountVoMock).getDomainId();
+
+        Mockito.doReturn(accountVoMock).when(accountDaoMock).findById(accountMockId);
+        String username = "username";
+        Mockito.doReturn(username).when(userVoMock).getUsername();
+
+        accountManagerImpl._userPasswordEncoders = new ArrayList<>();
+        UserAuthenticator authenticatorMock1 = Mockito.mock(UserAuthenticator.class);
+        UserAuthenticator authenticatorMock2 = Mockito.mock(UserAuthenticator.class);
+
+        accountManagerImpl._userPasswordEncoders.add(authenticatorMock1);
+        accountManagerImpl._userPasswordEncoders.add(authenticatorMock2);
+
+        Pair<Boolean, ActionOnFailedAuthentication> authenticationResult = new Pair<Boolean, UserAuthenticator.ActionOnFailedAuthentication>(true,
+                UserAuthenticator.ActionOnFailedAuthentication.INCREMENT_INCORRECT_LOGIN_ATTEMPT_COUNT);
+
+        String currentPassword = "currentPassword";
+        Mockito.doReturn(authenticationResult).when(authenticatorMock2).authenticate(username, currentPassword, domainId, null);
+
+        accountManagerImpl.validateCurrentPassword(userVoMock, currentPassword);
+
+        Mockito.verify(authenticatorMock1, Mockito.times(1)).authenticate(username, currentPassword, domainId, null);
+        Mockito.verify(authenticatorMock2, Mockito.times(1)).authenticate(username, currentPassword, domainId, null);
+    }
+
+}
diff --git a/server/test/com/cloud/user/AccountManagerImplVolumeDeleteEventTest.java b/server/src/test/java/com/cloud/user/AccountManagerImplVolumeDeleteEventTest.java
similarity index 78%
rename from server/test/com/cloud/user/AccountManagerImplVolumeDeleteEventTest.java
rename to server/src/test/java/com/cloud/user/AccountManagerImplVolumeDeleteEventTest.java
index 2397713..48eb473 100644
--- a/server/test/com/cloud/user/AccountManagerImplVolumeDeleteEventTest.java
+++ b/server/src/test/java/com/cloud/user/AccountManagerImplVolumeDeleteEventTest.java
@@ -16,12 +16,12 @@
 // under the License.
 package com.cloud.user;
 
-import static org.mockito.Mockito.when;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyLong;
-import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.when;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -52,13 +52,12 @@
 import com.cloud.exception.CloudException;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.service.ServiceOfferingVO;
-import com.cloud.storage.VolumeVO;
 import com.cloud.storage.Volume.Type;
+import com.cloud.storage.VolumeVO;
 import com.cloud.vm.UserVmManagerImpl;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine;
 
-
 public class AccountManagerImplVolumeDeleteEventTest extends AccountManagetImplTestBase {
 
     private static final Long ACCOUNT_ID = 1l;
@@ -70,12 +69,10 @@
     Map<String, Object> oldFields = new HashMap<>();
     UserVmVO vm = mock(UserVmVO.class);
 
-
     // Configures the static fields of the UsageEventUtils class, Storing the
     // previous values to be restored during the cleanup phase, to avoid
     // interference with other unit tests.
-    protected UsageEventUtils setupUsageUtils() throws NoSuchMethodException, SecurityException, IllegalAccessException,
-    IllegalArgumentException, InvocationTargetException {
+    protected UsageEventUtils setupUsageUtils() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
 
         _usageEventDao = new MockUsageEventDao();
         UsageEventUtils utils = new UsageEventUtils();
@@ -93,8 +90,7 @@
                 Field staticField = UsageEventUtils.class.getDeclaredField("s_" + fieldName);
                 staticField.setAccessible(true);
                 oldFields.put(f.getName(), staticField.get(null));
-                f.set(utils,
-                        this.getClass().getSuperclass().getDeclaredField("_" + fieldName).get(this));
+                f.set(utils, this.getClass().getSuperclass().getDeclaredField("_" + fieldName).get(this));
             } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
                 e.printStackTrace();
             }
@@ -106,14 +102,12 @@
         return utils;
     }
 
-
-    protected void defineMocksBehavior()
-            throws AgentUnavailableException, ConcurrentOperationException, CloudException {
+    protected void defineMocksBehavior() throws AgentUnavailableException, ConcurrentOperationException, CloudException {
 
         AccountVO account = new AccountVO();
         account.setId(ACCOUNT_ID);
-        when(_accountDao.remove(ACCOUNT_ID)).thenReturn(true);
-        when(_accountDao.findById(ACCOUNT_ID)).thenReturn(account);
+        when(accountDaoMock.remove(ACCOUNT_ID)).thenReturn(true);
+        when(accountDaoMock.findById(ACCOUNT_ID)).thenReturn(account);
 
         DomainVO domain = new DomainVO();
         VirtualMachineEntity vmEntity = mock(VirtualMachineEntity.class);
@@ -128,8 +122,7 @@
         List<VolumeVO> volumes = new ArrayList<>();
         volumes.add(vol);
 
-        when(securityChecker.checkAccess(any(Account.class), any(ControlledEntity.class), any(AccessType.class),
-                anyString())).thenReturn(true);
+        when(securityChecker.checkAccess(any(Account.class), any(ControlledEntity.class), any(AccessType.class), anyString())).thenReturn(true);
 
         when(_userVmDao.findById(anyLong())).thenReturn(vm);
         when(_userVmDao.listByAccountId(ACCOUNT_ID)).thenReturn(Arrays.asList(vm));
@@ -142,8 +135,7 @@
         when(offering.getId()).thenReturn(1l);
         when(offering.getCpu()).thenReturn(500);
         when(offering.getRamSize()).thenReturn(500);
-        when(_serviceOfferingDao.findByIdIncludingRemoved(anyLong(), anyLong()))
-        .thenReturn(offering);
+        when(_serviceOfferingDao.findByIdIncludingRemoved(anyLong(), anyLong())).thenReturn(offering);
 
         when(_domainMgr.getDomain(anyLong())).thenReturn(domain);
 
@@ -152,9 +144,8 @@
     }
 
     @Before
-    public void init()
-            throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
-            InvocationTargetException, AgentUnavailableException, ConcurrentOperationException, CloudException {
+    public void init() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, AgentUnavailableException,
+    ConcurrentOperationException, CloudException {
 
         setupUsageUtils();
         defineMocksBehavior();
@@ -175,22 +166,19 @@
         method.invoke(utils);
     }
 
-    @SuppressWarnings("unchecked")
-    protected List<UsageEventVO> deleteUserAccountRootVolumeUsageEvents(boolean vmDestroyedPrior)
-            throws AgentUnavailableException, ConcurrentOperationException, CloudException {
+    protected List<UsageEventVO> deleteUserAccountRootVolumeUsageEvents(boolean vmDestroyedPrior) throws AgentUnavailableException, ConcurrentOperationException, CloudException {
 
-        when(vm.getState())
-        .thenReturn(vmDestroyedPrior ? VirtualMachine.State.Destroyed : VirtualMachine.State.Running);
+        when(vm.getState()).thenReturn(vmDestroyedPrior ? VirtualMachine.State.Destroyed : VirtualMachine.State.Running);
         when(vm.getRemoved()).thenReturn(vmDestroyedPrior ? new Date() : null);
-        accountManager.deleteUserAccount(ACCOUNT_ID);
+        accountManagerImpl.deleteUserAccount(ACCOUNT_ID);
 
         return _usageEventDao.listAll();
     }
 
     @Test
     // If the VM is alerady destroyed, no events should get emitted
-    public void destroyedVMRootVolumeUsageEvent() throws SecurityException, IllegalArgumentException,
-    ReflectiveOperationException, AgentUnavailableException, ConcurrentOperationException, CloudException {
+    public void destroyedVMRootVolumeUsageEvent()
+            throws SecurityException, IllegalArgumentException, ReflectiveOperationException, AgentUnavailableException, ConcurrentOperationException, CloudException {
         List<UsageEventVO> emittedEvents = deleteUserAccountRootVolumeUsageEvents(true);
         Assert.assertEquals(0, emittedEvents.size());
     }
@@ -198,8 +186,8 @@
     @Test
     // If the VM is running, we should see one emitted event for the root
     // volume.
-    public void runningVMRootVolumeUsageEvent() throws SecurityException, IllegalArgumentException,
-    ReflectiveOperationException, AgentUnavailableException, ConcurrentOperationException, CloudException {
+    public void runningVMRootVolumeUsageEvent()
+            throws SecurityException, IllegalArgumentException, ReflectiveOperationException, AgentUnavailableException, ConcurrentOperationException, CloudException {
         List<UsageEventVO> emittedEvents = deleteUserAccountRootVolumeUsageEvents(false);
         Assert.assertEquals(1, emittedEvents.size());
         UsageEventVO event = emittedEvents.get(0);
diff --git a/server/test/com/cloud/user/AccountManagetImplTestBase.java b/server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java
similarity index 80%
rename from server/test/com/cloud/user/AccountManagetImplTestBase.java
rename to server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java
index 53b781a..885a23d 100644
--- a/server/test/com/cloud/user/AccountManagetImplTestBase.java
+++ b/server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java
@@ -21,8 +21,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.inject.Inject;
-
 import org.apache.cloudstack.acl.SecurityChecker;
 import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 import org.apache.cloudstack.context.CallContext;
@@ -34,9 +32,10 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Spy;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.springframework.test.util.ReflectionTestUtils;
 
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.configuration.dao.ResourceCountDao;
@@ -84,17 +83,17 @@
 public class AccountManagetImplTestBase {
 
     @Mock
-    AccountDao _accountDao;
+    AccountDao accountDaoMock;
     @Mock
     ConfigurationDao _configDao;
     @Mock
     ResourceCountDao _resourceCountDao;
     @Mock
-    UserDao _userDao;
+    UserDao userDaoMock;
     @Mock
     InstanceGroupDao _vmGroupDao;
     @Mock
-    UserAccountDao _userAccountDao;
+    UserAccountDao userAccountDaoMock;
     @Mock
     VolumeDao _volumeDao;
     @Mock
@@ -193,27 +192,16 @@
     @Mock
     SSHKeyPairDao _sshKeyPairDao;
 
-    AccountManagerImpl accountManager;
-
-    UsageEventDao _usageEventDao = new MockUsageEventDao();
+    @Spy
+    @InjectMocks
+    AccountManagerImpl accountManagerImpl;
+    @Mock
+    UsageEventDao _usageEventDao;
 
     @Before
-    public void setup()
-            throws NoSuchFieldException, SecurityException,
-            IllegalArgumentException, IllegalAccessException {
-        accountManager = new AccountManagerImpl();
-        Map<String, Field> declaredFields = getInheritedFields(this.getClass());
-        for (Field field : AccountManagerImpl.class.getDeclaredFields()) {
-            if (field.getAnnotation(Inject.class) != null) {
-                field.setAccessible(true);
-                if (declaredFields.containsKey(field.getName())) {
-                    Field mockField = declaredFields.get(field.getName());
-                    field.set(accountManager, mockField.get(this));
-                }
-            }
-        }
-        ReflectionTestUtils.setField(accountManager, "_userAuthenticators", Arrays.asList(userAuthenticator));
-        accountManager.setSecurityCheckers(Arrays.asList(securityChecker));
+    public void setup() {
+        accountManagerImpl.setUserAuthenticators(Arrays.asList(userAuthenticator));
+        accountManagerImpl.setSecurityCheckers(Arrays.asList(securityChecker));
         CallContext.register(callingUser, callingAccount);
     }
 
@@ -231,14 +219,4 @@
         }
         return fields;
     }
-
-    public static Map<Class<?>, Field> getInheritedFieldsByClass(Class<?> type) {
-        Map<Class<?>, Field> fields = new HashMap<>();
-        for (Class<?> c = type; c != null; c = c.getSuperclass()) {
-            for (Field f : c.getDeclaredFields()) {
-                fields.put(f.getType(), f);
-            }
-        }
-        return fields;
-    }
 }
diff --git a/server/test/com/cloud/user/DomainManagerImplTest.java b/server/src/test/java/com/cloud/user/DomainManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/user/DomainManagerImplTest.java
rename to server/src/test/java/com/cloud/user/DomainManagerImplTest.java
diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/src/test/java/com/cloud/user/MockAccountManagerImpl.java
similarity index 97%
rename from server/test/com/cloud/user/MockAccountManagerImpl.java
rename to server/src/test/java/com/cloud/user/MockAccountManagerImpl.java
index 0a92c14..4fbf752 100644
--- a/server/test/com/cloud/user/MockAccountManagerImpl.java
+++ b/server/src/test/java/com/cloud/user/MockAccountManagerImpl.java
@@ -158,13 +158,6 @@
     }
 
     @Override
-    public UserAccount updateUser(Long userId, String firstName, String lastName, String email, String userName, String password, String apiKey, String secretKey,
-                                  String timeZone) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     public Account getActiveAccountById(long accountId) {
         // TODO Auto-generated method stub
         return null;
diff --git a/server/test/com/cloud/user/MockUsageEventDao.java b/server/src/test/java/com/cloud/user/MockUsageEventDao.java
similarity index 100%
rename from server/test/com/cloud/user/MockUsageEventDao.java
rename to server/src/test/java/com/cloud/user/MockUsageEventDao.java
diff --git a/server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java b/server/src/test/java/com/cloud/vm/DeploymentPlanningManagerImplTest.java
similarity index 100%
rename from server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java
rename to server/src/test/java/com/cloud/vm/DeploymentPlanningManagerImplTest.java
diff --git a/server/test/com/cloud/vm/FirstFitPlannerTest.java b/server/src/test/java/com/cloud/vm/FirstFitPlannerTest.java
similarity index 100%
rename from server/test/com/cloud/vm/FirstFitPlannerTest.java
rename to server/src/test/java/com/cloud/vm/FirstFitPlannerTest.java
diff --git a/server/test/com/cloud/vm/UserVmManagerTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
similarity index 100%
rename from server/test/com/cloud/vm/UserVmManagerTest.java
rename to server/src/test/java/com/cloud/vm/UserVmManagerTest.java
diff --git a/server/test/com/cloud/vm/dao/UserVmCloneSettingDaoImplTest.java b/server/src/test/java/com/cloud/vm/dao/UserVmCloneSettingDaoImplTest.java
similarity index 100%
rename from server/test/com/cloud/vm/dao/UserVmCloneSettingDaoImplTest.java
rename to server/src/test/java/com/cloud/vm/dao/UserVmCloneSettingDaoImplTest.java
diff --git a/server/test/com/cloud/vm/dao/UserVmCloneSettingDaoTestConfiguration.java b/server/src/test/java/com/cloud/vm/dao/UserVmCloneSettingDaoTestConfiguration.java
similarity index 100%
rename from server/test/com/cloud/vm/dao/UserVmCloneSettingDaoTestConfiguration.java
rename to server/src/test/java/com/cloud/vm/dao/UserVmCloneSettingDaoTestConfiguration.java
diff --git a/server/test/com/cloud/vm/dao/UserVmDaoImplTest.java b/server/src/test/java/com/cloud/vm/dao/UserVmDaoImplTest.java
similarity index 100%
rename from server/test/com/cloud/vm/dao/UserVmDaoImplTest.java
rename to server/src/test/java/com/cloud/vm/dao/UserVmDaoImplTest.java
diff --git a/server/test/com/cloud/vm/dao/UserVmDaoTestConfiguration.java b/server/src/test/java/com/cloud/vm/dao/UserVmDaoTestConfiguration.java
similarity index 100%
rename from server/test/com/cloud/vm/dao/UserVmDaoTestConfiguration.java
rename to server/src/test/java/com/cloud/vm/dao/UserVmDaoTestConfiguration.java
diff --git a/server/test/com/cloud/vm/snapshot/VMSnapshotManagerTest.java b/server/src/test/java/com/cloud/vm/snapshot/VMSnapshotManagerTest.java
similarity index 100%
rename from server/test/com/cloud/vm/snapshot/VMSnapshotManagerTest.java
rename to server/src/test/java/com/cloud/vm/snapshot/VMSnapshotManagerTest.java
diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/src/test/java/com/cloud/vpc/MockConfigurationManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
rename to server/src/test/java/com/cloud/vpc/MockConfigurationManagerImpl.java
diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/src/test/java/com/cloud/vpc/MockNetworkManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockNetworkManagerImpl.java
rename to server/src/test/java/com/cloud/vpc/MockNetworkManagerImpl.java
diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockNetworkModelImpl.java
rename to server/src/test/java/com/cloud/vpc/MockNetworkModelImpl.java
diff --git a/server/test/com/cloud/vpc/MockResourceLimitManagerImpl.java b/server/src/test/java/com/cloud/vpc/MockResourceLimitManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockResourceLimitManagerImpl.java
rename to server/src/test/java/com/cloud/vpc/MockResourceLimitManagerImpl.java
diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java b/server/src/test/java/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java
rename to server/src/test/java/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java
diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java b/server/src/test/java/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java
rename to server/src/test/java/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java
diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
similarity index 100%
rename from server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
rename to server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
diff --git a/server/test/com/cloud/vpc/NetworkACLManagerTest.java b/server/src/test/java/com/cloud/vpc/NetworkACLManagerTest.java
similarity index 91%
rename from server/test/com/cloud/vpc/NetworkACLManagerTest.java
rename to server/src/test/java/com/cloud/vpc/NetworkACLManagerTest.java
index 9daf551..ca1ddc6 100644
--- a/server/test/com/cloud/vpc/NetworkACLManagerTest.java
+++ b/server/src/test/java/com/cloud/vpc/NetworkACLManagerTest.java
@@ -22,8 +22,6 @@
 
 import javax.inject.Inject;
 
-import junit.framework.TestCase;
-
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.cloudstack.framework.messagebus.MessageBus;
@@ -74,6 +72,8 @@
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.db.EntityManager;
 
+import junit.framework.TestCase;
+
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
 public class NetworkACLManagerTest extends TestCase {
@@ -135,8 +135,7 @@
     public void testApplyACL() throws Exception {
         final NetworkVO network = Mockito.mock(NetworkVO.class);
         Mockito.when(_networkDao.findById(Matchers.anyLong())).thenReturn(network);
-        Mockito.when(_networkModel.isProviderSupportServiceInNetwork(Matchers.anyLong(), Matchers.any(Network.Service.class), Matchers.any(Network.Provider.class)))
-        .thenReturn(true);
+        Mockito.when(_networkModel.isProviderSupportServiceInNetwork(Matchers.anyLong(), Matchers.any(Network.Service.class), Matchers.any(Network.Provider.class))).thenReturn(true);
         Mockito.when(_networkAclElements.get(0).applyNetworkACLs(Matchers.any(Network.class), Matchers.anyList())).thenReturn(true);
         assertTrue(_aclMgr.applyACLToNetwork(1L));
     }
@@ -162,14 +161,10 @@
         final NetworkVO network = Mockito.mock(NetworkVO.class);
         final List<NetworkVO> networks = new ArrayList<NetworkVO>();
         networks.add(network);
-        Mockito.when(_networkDao.listByAclId(Matchers.anyLong()))
-        .thenReturn(networks);
+        Mockito.when(_networkDao.listByAclId(Matchers.anyLong())).thenReturn(networks);
         Mockito.when(_networkDao.findById(Matchers.anyLong())).thenReturn(network);
-        Mockito.when(_networkModel.isProviderSupportServiceInNetwork(Matchers.anyLong(),
-                Matchers.any(Network.Service.class), Matchers.any(Network.Provider.class)))
-                .thenReturn(true);
-        Mockito.when(_networkAclElements.get(0).applyNetworkACLs(Matchers.any(Network.class),
-                Matchers.anyList())).thenReturn(applyNetworkACLs);
+        Mockito.when(_networkModel.isProviderSupportServiceInNetwork(Matchers.anyLong(), Matchers.any(Network.Service.class), Matchers.any(Network.Provider.class))).thenReturn(true);
+        Mockito.when(_networkAclElements.get(0).applyNetworkACLs(Matchers.any(Network.class), Matchers.anyList())).thenReturn(applyNetworkACLs);
 
         // Make sure it applies ACL to private gateway
         final List<VpcGatewayVO> vpcGateways = new ArrayList<VpcGatewayVO>();
@@ -177,8 +172,7 @@
         final PrivateGateway privateGateway = Mockito.mock(PrivateGateway.class);
         Mockito.when(_vpcSvc.getVpcPrivateGateway(Mockito.anyLong())).thenReturn(privateGateway);
         vpcGateways.add(vpcGateway);
-        Mockito.when(_vpcGatewayDao.listByAclIdAndType(aclId, VpcGateway.Type.Private))
-        .thenReturn(vpcGateways);
+        Mockito.when(_vpcGatewayDao.listByAclIdAndType(aclId, VpcGateway.Type.Private)).thenReturn(vpcGateways);
 
         // Create 4 rules to test all 4 scenarios: only revoke should
         // be deleted, only add should update
@@ -203,8 +197,7 @@
         Mockito.when(rule2Add.getId()).thenReturn(addId);
         Mockito.when(_networkACLItemDao.findById(addId)).thenReturn(rule2Add);
 
-        Mockito.when(_networkACLItemDao.listByACL(aclId))
-        .thenReturn(rules);
+        Mockito.when(_networkACLItemDao.listByACL(aclId)).thenReturn(rules);
         // Mock methods to avoid
         Mockito.doReturn(applyACLToPrivateGw).when(aclManager).applyACLToPrivateGw(privateGateway);
 
@@ -218,7 +211,6 @@
         Mockito.verify(_networkACLItemDao, Mockito.times(timesProcessingDone)).update(addId, rule2Add);
     }
 
-
     @Test
     public void testRevokeACLItem() throws Exception {
         Mockito.when(_networkACLItemDao.findById(Matchers.anyLong())).thenReturn(aclItem);
@@ -226,13 +218,6 @@
     }
 
     @Test
-    public void testUpdateACLItem() throws Exception {
-        Mockito.when(_networkACLItemDao.findById(Matchers.anyLong())).thenReturn(aclItem);
-        Mockito.when(_networkACLItemDao.update(Matchers.anyLong(), Matchers.any(NetworkACLItemVO.class))).thenReturn(true);
-        assertNotNull(_aclMgr.updateNetworkACLItem(1L, "UDP", null, NetworkACLItem.TrafficType.Ingress, "Deny", 10, 22, 32, null, null, null, true));
-    }
-
-    @Test
     public void deleteNonEmptyACL() throws Exception {
         final List<NetworkACLItemVO> aclItems = new ArrayList<NetworkACLItemVO>();
         aclItems.add(aclItem);
@@ -251,8 +236,8 @@
     }
 
     @Configuration
-    @ComponentScan(basePackageClasses = {NetworkACLManagerImpl.class}, includeFilters = {@ComponentScan.Filter(value = NetworkACLTestConfiguration.Library.class,
-    type = FilterType.CUSTOM)}, useDefaultFilters = false)
+    @ComponentScan(basePackageClasses = {NetworkACLManagerImpl.class}, includeFilters = {
+            @ComponentScan.Filter(value = NetworkACLTestConfiguration.Library.class, type = FilterType.CUSTOM)}, useDefaultFilters = false)
     public static class NetworkACLTestConfiguration extends SpringUtils.CloudStackTestConfiguration {
 
         @Bean
diff --git a/server/test/com/cloud/vpc/NetworkACLServiceTest.java b/server/src/test/java/com/cloud/vpc/NetworkACLServiceTest.java
similarity index 66%
rename from server/test/com/cloud/vpc/NetworkACLServiceTest.java
rename to server/src/test/java/com/cloud/vpc/NetworkACLServiceTest.java
index 1909a4f..35a94a2 100644
--- a/server/test/com/cloud/vpc/NetworkACLServiceTest.java
+++ b/server/src/test/java/com/cloud/vpc/NetworkACLServiceTest.java
@@ -20,14 +20,9 @@
 
 import javax.inject.Inject;
 
-import com.cloud.user.User;
-import junit.framework.TestCase;
-
-import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 import org.apache.cloudstack.test.utils.SpringUtils;
-import org.apache.log4j.Logger;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -48,7 +43,6 @@
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.NetworkModel;
 import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.vpc.NetworkACLItem;
 import com.cloud.network.vpc.NetworkACLItemDao;
 import com.cloud.network.vpc.NetworkACLItemVO;
 import com.cloud.network.vpc.NetworkACLManager;
@@ -66,39 +60,31 @@
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
+import com.cloud.user.User;
 import com.cloud.user.UserVO;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.db.EntityManager;
 
+import junit.framework.TestCase;
+
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
 public class NetworkACLServiceTest extends TestCase {
-    @Inject
-    NetworkACLService _aclService;
 
     @Inject
-    AccountManager _accountMgr;
+    private NetworkACLService _aclService;
     @Inject
-    VpcManager _vpcMgr;
+    private NetworkACLManager _networkAclMgr;
     @Inject
-    NetworkACLManager _networkAclMgr;
+    private NetworkACLDao _networkACLDao;
     @Inject
-    NetworkACLDao _networkACLDao;
+    private NetworkACLItemDao _networkACLItemDao;
     @Inject
-    NetworkACLItemDao _networkACLItemDao;
-    @Inject
-    EntityManager _entityMgr;
-    @Inject
-    VpcDao _vpcDao;
-    @Inject
-    VpcService _vpcSrv;
+    private EntityManager _entityMgr;
 
-    private CreateNetworkACLCmd createACLItemCmd;
     private NetworkACLVO acl;
     private NetworkACLItemVO aclItem;
 
-    private static final Logger s_logger = Logger.getLogger(NetworkACLServiceTest.class);
-
     @Override
     @Before
     public void setUp() {
@@ -107,43 +93,6 @@
         UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString(), User.Source.UNKNOWN);
 
         CallContext.register(user, account);
-
-        createACLItemCmd = new CreateNetworkACLCmd() {
-            @Override
-            public Long getACLId() {
-                return 3L;
-            }
-
-            @Override
-            public Integer getNumber() {
-                return 1;
-            }
-
-            @Override
-            public String getProtocol() {
-                return "TCP";
-            }
-        };
-
-        acl = new NetworkACLVO() {
-            @Override
-            public Long getVpcId() {
-                return 1L;
-            }
-
-            @Override
-            public long getId() {
-                return 1L;
-            }
-
-        };
-
-        aclItem = new NetworkACLItemVO() {
-            @Override
-            public long getAclId() {
-                return 4L;
-            }
-        };
     }
 
     @Override
@@ -152,13 +101,6 @@
         CallContext.unregister();
     }
 
-    @Test
-    public void testCreateACL() throws Exception {
-        Mockito.when(_entityMgr.findById(Matchers.eq(Vpc.class), Matchers.anyLong())).thenReturn(new VpcVO());
-        Mockito.when(_networkAclMgr.createNetworkACL("acl_new", "acl desc", 1L, true)).thenReturn(acl);
-        assertNotNull(_aclService.createNetworkACL("acl_new", "acl desc", 1L, true));
-    }
-
     @Test(expected = InvalidParameterValueException.class)
     public void testDeleteDefaultACL() throws Exception {
         Mockito.when(_networkACLDao.findById(Matchers.anyLong())).thenReturn(acl);
@@ -167,26 +109,6 @@
     }
 
     @Test
-    public void testCreateACLItem() throws Exception {
-        Mockito.when(_entityMgr.findById(Matchers.eq(Vpc.class), Matchers.anyLong())).thenReturn(new VpcVO());
-        Mockito.when(_networkAclMgr.getNetworkACL(Matchers.anyLong())).thenReturn(acl);
-        Mockito.when(
-            _networkAclMgr.createNetworkACLItem(Matchers.anyInt(), Matchers.anyInt(), Matchers.anyString(), Matchers.anyList(), Matchers.anyInt(), Matchers.anyInt(),
-                        Matchers.any(NetworkACLItem.TrafficType.class), Matchers.anyLong(), Matchers.anyString(), Matchers.anyInt(), Matchers.anyBoolean())).thenReturn(
-                new NetworkACLItemVO());
-        Mockito.when(_networkACLItemDao.findByAclAndNumber(Matchers.anyLong(), Matchers.anyInt())).thenReturn(null);
-        assertNotNull(_aclService.createNetworkACLItem(createACLItemCmd));
-    }
-
-    @Test(expected = InvalidParameterValueException.class)
-    public void testCreateACLItemDuplicateNumber() throws Exception {
-        Mockito.when(_entityMgr.findById(Matchers.eq(Vpc.class), Matchers.anyLong())).thenReturn(new VpcVO());
-        Mockito.when(_networkAclMgr.getNetworkACL(Matchers.anyLong())).thenReturn(acl);
-        Mockito.when(_networkACLItemDao.findByAclAndNumber(Matchers.anyLong(), Matchers.anyInt())).thenReturn(new NetworkACLItemVO());
-        _aclService.createNetworkACLItem(createACLItemCmd);
-    }
-
-    @Test
     public void testDeleteACLItem() throws Exception {
         Mockito.when(_networkACLItemDao.findById(Matchers.anyLong())).thenReturn(aclItem);
         Mockito.when(_networkAclMgr.getNetworkACL(Matchers.anyLong())).thenReturn(acl);
@@ -196,8 +118,8 @@
     }
 
     @Configuration
-    @ComponentScan(basePackageClasses = {NetworkACLServiceImpl.class}, includeFilters = {@ComponentScan.Filter(value = NetworkACLTestConfiguration.Library.class,
-                                                                                                               type = FilterType.CUSTOM)}, useDefaultFilters = false)
+    @ComponentScan(basePackageClasses = {NetworkACLServiceImpl.class}, includeFilters = {
+            @ComponentScan.Filter(value = NetworkACLTestConfiguration.Library.class, type = FilterType.CUSTOM)}, useDefaultFilters = false)
     public static class NetworkACLTestConfiguration extends SpringUtils.CloudStackTestConfiguration {
 
         @Bean
diff --git a/server/test/com/cloud/vpc/Site2SiteVpnTest.java b/server/src/test/java/com/cloud/vpc/Site2SiteVpnTest.java
similarity index 100%
rename from server/test/com/cloud/vpc/Site2SiteVpnTest.java
rename to server/src/test/java/com/cloud/vpc/Site2SiteVpnTest.java
diff --git a/server/test/com/cloud/vpc/VpcApiUnitTest.java b/server/src/test/java/com/cloud/vpc/VpcApiUnitTest.java
similarity index 100%
rename from server/test/com/cloud/vpc/VpcApiUnitTest.java
rename to server/src/test/java/com/cloud/vpc/VpcApiUnitTest.java
diff --git a/server/test/com/cloud/vpc/VpcTestConfiguration.java b/server/src/test/java/com/cloud/vpc/VpcTestConfiguration.java
similarity index 100%
rename from server/test/com/cloud/vpc/VpcTestConfiguration.java
rename to server/src/test/java/com/cloud/vpc/VpcTestConfiguration.java
diff --git a/server/test/com/cloud/vpc/dao/MockConfigurationDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockConfigurationDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockConfigurationDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockConfigurationDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockNetworkDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockNetworkDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockNetworkOfferingDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockNetworkOfferingDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockNetworkOfferingDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockNetworkOfferingDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockNetworkOfferingServiceMapDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockNetworkOfferingServiceMapDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockNetworkOfferingServiceMapDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockNetworkOfferingServiceMapDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockNetworkServiceMapDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockNetworkServiceMapDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockNetworkServiceMapDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockNetworkServiceMapDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockVpcDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockVpcDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockVpcOfferingDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockVpcOfferingDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockVpcOfferingDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockVpcOfferingDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockVpcOfferingServiceMapDaoImpl.java b/server/src/test/java/com/cloud/vpc/dao/MockVpcOfferingServiceMapDaoImpl.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockVpcOfferingServiceMapDaoImpl.java
rename to server/src/test/java/com/cloud/vpc/dao/MockVpcOfferingServiceMapDaoImpl.java
diff --git a/server/test/com/cloud/vpc/dao/MockVpcVirtualRouterElement.java b/server/src/test/java/com/cloud/vpc/dao/MockVpcVirtualRouterElement.java
similarity index 100%
rename from server/test/com/cloud/vpc/dao/MockVpcVirtualRouterElement.java
rename to server/src/test/java/com/cloud/vpc/dao/MockVpcVirtualRouterElement.java
diff --git a/server/test/org/apache/cloudstack/acl/RoleManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/acl/RoleManagerImplTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/acl/RoleManagerImplTest.java
rename to server/src/test/java/org/apache/cloudstack/acl/RoleManagerImplTest.java
diff --git a/server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java b/server/src/test/java/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
rename to server/src/test/java/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
diff --git a/server/test/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java b/server/src/test/java/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java
rename to server/src/test/java/org/apache/cloudstack/affinity/AffinityGroupServiceImplTest.java
diff --git a/server/test/org/apache/cloudstack/ca/CABackgroundTaskTest.java b/server/src/test/java/org/apache/cloudstack/ca/CABackgroundTaskTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/ca/CABackgroundTaskTest.java
rename to server/src/test/java/org/apache/cloudstack/ca/CABackgroundTaskTest.java
diff --git a/server/test/org/apache/cloudstack/ca/CAManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/ca/CAManagerImplTest.java
similarity index 98%
rename from server/test/org/apache/cloudstack/ca/CAManagerImplTest.java
rename to server/src/test/java/org/apache/cloudstack/ca/CAManagerImplTest.java
index 14ecc97..64cbf20 100644
--- a/server/test/org/apache/cloudstack/ca/CAManagerImplTest.java
+++ b/server/src/test/java/org/apache/cloudstack/ca/CAManagerImplTest.java
@@ -113,7 +113,7 @@
         final X509Certificate certificate = CertUtils.generateV3Certificate(null, keyPair, keyPair.getPublic(), "CN=ca", "SHA256withRSA", 365, null, null);
         Mockito.when(caProvider.issueCertificate(Mockito.anyString(), Mockito.anyList(), Mockito.anyList(), Mockito.anyInt())).thenReturn(new Certificate(certificate, null, Collections.singletonList(certificate)));
         Mockito.when(agentManager.send(Mockito.anyLong(), Mockito.any(SetupKeyStoreCommand.class))).thenReturn(new SetupKeystoreAnswer("someCsr"));
-        Mockito.when(agentManager.reconnect(Mockito.anyLong())).thenReturn(true);
+        Mockito.doNothing().when(agentManager).reconnect(Mockito.anyLong());
         Assert.assertTrue(caManager.provisionCertificate(host, true, null));
         Mockito.verify(agentManager, Mockito.times(2)).send(Mockito.anyLong(), Mockito.any(Answer.class));
         Mockito.verify(agentManager, Mockito.times(1)).reconnect(Mockito.anyLong());
diff --git a/server/src/test/java/org/apache/cloudstack/diagnostics/DiagnosticsServiceImplTest.java b/server/src/test/java/org/apache/cloudstack/diagnostics/DiagnosticsServiceImplTest.java
new file mode 100644
index 0000000..d85c543
--- /dev/null
+++ b/server/src/test/java/org/apache/cloudstack/diagnostics/DiagnosticsServiceImplTest.java
@@ -0,0 +1,196 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package org.apache.cloudstack.diagnostics;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.routing.NetworkElementCommand;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachineManager;
+import com.cloud.vm.dao.VMInstanceDao;
+import junit.framework.TestCase;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.command.admin.diagnostics.RunDiagnosticsCmd;
+import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RunWith(MockitoJUnitRunner.class)
+public class DiagnosticsServiceImplTest extends TestCase {
+
+    @Mock
+    private AgentManager agentManager;
+    @Mock
+    private VMInstanceDao instanceDao;
+    @Mock
+    private RunDiagnosticsCmd diagnosticsCmd;
+    @Mock
+    private DiagnosticsCommand command;
+    @Mock
+    private VMInstanceVO instanceVO;
+    @Mock
+    private VirtualMachineManager vmManager;
+    @Mock
+    private NetworkOrchestrationService networkManager;
+
+    @InjectMocks
+    private DiagnosticsServiceImpl diagnosticsService = new DiagnosticsServiceImpl();
+
+    @Before
+    public void setUp() throws Exception {
+        Mockito.when(diagnosticsCmd.getId()).thenReturn(1L);
+        Mockito.when(diagnosticsCmd.getType()).thenReturn(DiagnosticsType.PING);
+        Mockito.when(instanceDao.findByIdTypes(Mockito.anyLong(), Mockito.any(VirtualMachine.Type.class),
+                Mockito.any(VirtualMachine.Type.class), Mockito.any(VirtualMachine.Type.class))).thenReturn(instanceVO);
+
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        Mockito.reset(diagnosticsCmd);
+        Mockito.reset(agentManager);
+        Mockito.reset(instanceDao);
+        Mockito.reset(instanceVO);
+        Mockito.reset(command);
+    }
+
+    @Test
+    public void testRunDiagnosticsCommandTrue() throws Exception {
+        Mockito.when(diagnosticsCmd.getAddress()).thenReturn("8.8.8.8");
+        Map<String, String> accessDetailsMap = new HashMap<>();
+        accessDetailsMap.put(NetworkElementCommand.ROUTER_IP, "169.20.175.10");
+        Mockito.when(networkManager.getSystemVMAccessDetails(Mockito.any(VMInstanceVO.class))).thenReturn(accessDetailsMap);
+        final String details = "PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=1 ttl=125 time=7.88 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=2 ttl=125 time=251 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=3 ttl=125 time=64.9 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=4 ttl=125 time=50.7 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=5 ttl=125 time=67.9 ms\n" +
+                "\n" +
+                "--- 8.8.8.8 ping statistics ---\n" +
+                "5 packets transmitted, 5 received, 0% packet loss, time 4003ms\n" +
+                "rtt min/avg/max/mdev = 7.881/88.587/251.410/84.191 ms&&\n" +
+                "&&\n" +
+                "0\n";
+
+        Mockito.when(agentManager.easySend(Mockito.anyLong(), Mockito.any(DiagnosticsCommand.class))).thenReturn(new DiagnosticsAnswer(command, true, details));
+
+        Map<String, String> detailsMap = diagnosticsService.runDiagnosticsCommand(diagnosticsCmd);
+
+        String stdout = "PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=1 ttl=125 time=7.88 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=2 ttl=125 time=251 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=3 ttl=125 time=64.9 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=4 ttl=125 time=50.7 ms\n" +
+                "64 bytes from 8.8.8.8: icmp_seq=5 ttl=125 time=67.9 ms\n" +
+                "\n" +
+                "--- 8.8.8.8 ping statistics ---\n" +
+                "5 packets transmitted, 5 received, 0% packet loss, time 4003ms\n" +
+                "rtt min/avg/max/mdev = 7.881/88.587/251.410/84.191 ms";
+
+        assertEquals(3, detailsMap.size());
+        assertEquals("Mismatch between actual and expected STDERR", "", detailsMap.get(ApiConstants.STDERR));
+        assertEquals("Mismatch between actual and expected EXITCODE", "0", detailsMap.get(ApiConstants.EXITCODE));
+        assertEquals("Mismatch between actual and expected STDOUT", stdout, detailsMap.get(ApiConstants.STDOUT));
+    }
+
+    @Test
+    public void testRunDiagnosticsCommandFalse() throws Exception {
+        Mockito.when(diagnosticsCmd.getAddress()).thenReturn("192.0.2.2");
+
+        Map<String, String> accessDetailsMap = new HashMap<>();
+        accessDetailsMap.put(NetworkElementCommand.ROUTER_IP, "169.20.175.10");
+        Mockito.when(networkManager.getSystemVMAccessDetails(Mockito.any(VMInstanceVO.class))).thenReturn(accessDetailsMap);
+
+        String details = "PING 192.0.2.2 (192.0.2.2): 56 data bytes\n" +
+                "76 bytes from 213.130.48.253: Destination Net Unreachable\n" +
+                "--- 192.0.2.2 ping statistics ---\n" +
+                "4 packets transmitted, 0 packets received, 100% packet loss&&\n" +
+                "&&\n" +
+                "1\n";
+        String stdout = "PING 192.0.2.2 (192.0.2.2): 56 data bytes\n" +
+                "76 bytes from 213.130.48.253: Destination Net Unreachable\n" +
+                "--- 192.0.2.2 ping statistics ---\n" +
+                "4 packets transmitted, 0 packets received, 100% packet loss";
+        Mockito.when(agentManager.easySend(Mockito.anyLong(), Mockito.any(DiagnosticsCommand.class))).thenReturn(new DiagnosticsAnswer(command, true, details));
+
+        Map<String, String> detailsMap = diagnosticsService.runDiagnosticsCommand(diagnosticsCmd);
+
+        assertEquals(3, detailsMap.size());
+        assertEquals("Mismatch between actual and expected STDERR", "", detailsMap.get(ApiConstants.STDERR));
+        assertTrue("Mismatch between actual and expected EXITCODE", !detailsMap.get(ApiConstants.EXITCODE).equalsIgnoreCase("0"));
+        assertEquals("Mismatch between actual and expected STDOUT", stdout, detailsMap.get(ApiConstants.STDOUT));
+    }
+
+    @Test(expected = InvalidParameterValueException.class)
+    public void testRunDiagnosticsThrowsInvalidParamException() throws Exception {
+        Mockito.when(diagnosticsCmd.getAddress()).thenReturn("");
+        Mockito.when(instanceDao.findByIdTypes(Mockito.anyLong(), Mockito.any(VirtualMachine.Type.class),
+                Mockito.any(VirtualMachine.Type.class), Mockito.any(VirtualMachine.Type.class))).thenReturn(null);
+
+        diagnosticsService.runDiagnosticsCommand(diagnosticsCmd);
+    }
+
+    @Test(expected = CloudRuntimeException.class)
+    public void testVMControlIPisNull() throws Exception {
+        Mockito.when(diagnosticsCmd.getAddress()).thenReturn("0.42.42.42");
+
+        Map<String, String> accessDetailsMap = new HashMap<>();
+        accessDetailsMap.put(NetworkElementCommand.ROUTER_IP, null);
+        Mockito.when(networkManager.getSystemVMAccessDetails(Mockito.any(VMInstanceVO.class))).thenReturn(accessDetailsMap);
+
+        diagnosticsService.runDiagnosticsCommand(diagnosticsCmd);
+    }
+
+    @Test
+    public void testInvalidCharsInParams() throws Exception {
+        assertFalse(diagnosticsService.hasValidChars("'\\''"));
+        assertFalse(diagnosticsService.hasValidChars("-I eth0 &"));
+        assertFalse(diagnosticsService.hasValidChars("-I eth0 ;"));
+        assertFalse(diagnosticsService.hasValidChars(" &2 > "));
+        assertFalse(diagnosticsService.hasValidChars(" &2 >> "));
+        assertFalse(diagnosticsService.hasValidChars(" | "));
+        assertFalse(diagnosticsService.hasValidChars("|"));
+        assertFalse(diagnosticsService.hasValidChars(","));
+    }
+
+    @Test
+    public void testValidCharsInParams() throws Exception {
+        assertTrue(diagnosticsService.hasValidChars(""));
+        assertTrue(diagnosticsService.hasValidChars("."));
+        assertTrue(diagnosticsService.hasValidChars(" "));
+        assertTrue(diagnosticsService.hasValidChars("-I eth0 www.google.com"));
+        assertTrue(diagnosticsService.hasValidChars(" "));
+        assertTrue(diagnosticsService.hasValidChars(" -I cloudbr0 --sport "));
+        assertTrue(diagnosticsService.hasValidChars(" --back -m20 "));
+        assertTrue(diagnosticsService.hasValidChars("-c 5 -4"));
+        assertTrue(diagnosticsService.hasValidChars("-c 5 -4 -AbDfhqUV"));
+    }
+}
\ No newline at end of file
diff --git a/server/test/org/apache/cloudstack/direct/download/DirectDownloadManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImplTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/direct/download/DirectDownloadManagerImplTest.java
rename to server/src/test/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImplTest.java
diff --git a/server/test/org/apache/cloudstack/network/lb/ApplicationLoadBalancerTest.java b/server/src/test/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/network/lb/ApplicationLoadBalancerTest.java
rename to server/src/test/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerTest.java
diff --git a/server/test/org/apache/cloudstack/network/ssl/CertServiceTest.java b/server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/network/ssl/CertServiceTest.java
rename to server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest.java
diff --git a/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java b/server/src/test/java/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
similarity index 100%
rename from server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
rename to server/src/test/java/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
diff --git a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java b/server/src/test/java/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
rename to server/src/test/java/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
diff --git a/server/test/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceTest.java b/server/src/test/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceTest.java
rename to server/src/test/java/org/apache/cloudstack/outofbandmanagement/OutOfBandManagementServiceTest.java
diff --git a/server/test/org/apache/cloudstack/poll/BackgroundPollManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/poll/BackgroundPollManagerImplTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/poll/BackgroundPollManagerImplTest.java
rename to server/src/test/java/org/apache/cloudstack/poll/BackgroundPollManagerImplTest.java
diff --git a/server/test/org/apache/cloudstack/privategw/AclOnPrivateGwTest.java b/server/src/test/java/org/apache/cloudstack/privategw/AclOnPrivateGwTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/privategw/AclOnPrivateGwTest.java
rename to server/src/test/java/org/apache/cloudstack/privategw/AclOnPrivateGwTest.java
diff --git a/server/test/org/apache/cloudstack/region/RegionManagerTest.java b/server/src/test/java/org/apache/cloudstack/region/RegionManagerTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/region/RegionManagerTest.java
rename to server/src/test/java/org/apache/cloudstack/region/RegionManagerTest.java
diff --git a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java b/server/src/test/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
rename to server/src/test/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
diff --git a/server/test/org/apache/cloudstack/service/ServiceOfferingVOTest.java b/server/src/test/java/org/apache/cloudstack/service/ServiceOfferingVOTest.java
similarity index 100%
rename from server/test/org/apache/cloudstack/service/ServiceOfferingVOTest.java
rename to server/src/test/java/org/apache/cloudstack/service/ServiceOfferingVOTest.java
diff --git a/server/test/org/cloud/network/router/deployment/RouterDeploymentDefinitionTest.java b/server/src/test/java/org/cloud/network/router/deployment/RouterDeploymentDefinitionTest.java
similarity index 100%
rename from server/test/org/cloud/network/router/deployment/RouterDeploymentDefinitionTest.java
rename to server/src/test/java/org/cloud/network/router/deployment/RouterDeploymentDefinitionTest.java
diff --git a/server/test/org/cloud/network/router/deployment/RouterDeploymentDefinitionTestBase.java b/server/src/test/java/org/cloud/network/router/deployment/RouterDeploymentDefinitionTestBase.java
similarity index 100%
rename from server/test/org/cloud/network/router/deployment/RouterDeploymentDefinitionTestBase.java
rename to server/src/test/java/org/cloud/network/router/deployment/RouterDeploymentDefinitionTestBase.java
diff --git a/server/test/org/cloud/network/router/deployment/VpcRouterDeploymentDefinitionTest.java b/server/src/test/java/org/cloud/network/router/deployment/VpcRouterDeploymentDefinitionTest.java
similarity index 100%
rename from server/test/org/cloud/network/router/deployment/VpcRouterDeploymentDefinitionTest.java
rename to server/src/test/java/org/cloud/network/router/deployment/VpcRouterDeploymentDefinitionTest.java
diff --git a/server/test/resources/CloneSettingDaoTestContext.xml b/server/src/test/resources/CloneSettingDaoTestContext.xml
similarity index 100%
rename from server/test/resources/CloneSettingDaoTestContext.xml
rename to server/src/test/resources/CloneSettingDaoTestContext.xml
diff --git a/server/test/resources/SecurityGroupManagerTestContext.xml b/server/src/test/resources/SecurityGroupManagerTestContext.xml
similarity index 100%
rename from server/test/resources/SecurityGroupManagerTestContext.xml
rename to server/src/test/resources/SecurityGroupManagerTestContext.xml
diff --git a/server/test/resources/SnapshotDaoTestContext.xml b/server/src/test/resources/SnapshotDaoTestContext.xml
similarity index 100%
rename from server/test/resources/SnapshotDaoTestContext.xml
rename to server/src/test/resources/SnapshotDaoTestContext.xml
diff --git a/server/test/resources/StoragePoolDaoTestContext.xml b/server/src/test/resources/StoragePoolDaoTestContext.xml
similarity index 100%
rename from server/test/resources/StoragePoolDaoTestContext.xml
rename to server/src/test/resources/StoragePoolDaoTestContext.xml
diff --git a/server/test/resources/UserVMDaoTestContext.xml b/server/src/test/resources/UserVMDaoTestContext.xml
similarity index 100%
rename from server/test/resources/UserVMDaoTestContext.xml
rename to server/src/test/resources/UserVMDaoTestContext.xml
diff --git a/server/test/resources/VpcApiUnitTestContext.xml b/server/src/test/resources/VpcApiUnitTestContext.xml
similarity index 100%
rename from server/test/resources/VpcApiUnitTestContext.xml
rename to server/src/test/resources/VpcApiUnitTestContext.xml
diff --git a/server/test/resources/VpcTestContext.xml b/server/src/test/resources/VpcTestContext.xml
similarity index 100%
rename from server/test/resources/VpcTestContext.xml
rename to server/src/test/resources/VpcTestContext.xml
diff --git a/server/test/resources/appLoadBalancer.xml b/server/src/test/resources/appLoadBalancer.xml
similarity index 100%
rename from server/test/resources/appLoadBalancer.xml
rename to server/src/test/resources/appLoadBalancer.xml
diff --git a/server/test/resources/certs/bad_format_cert.crt b/server/src/test/resources/certs/bad_format_cert.crt
similarity index 100%
rename from server/test/resources/certs/bad_format_cert.crt
rename to server/src/test/resources/certs/bad_format_cert.crt
diff --git a/server/test/resources/certs/dsa_self_signed.key b/server/src/test/resources/certs/dsa_self_signed.key
similarity index 100%
rename from server/test/resources/certs/dsa_self_signed.key
rename to server/src/test/resources/certs/dsa_self_signed.key
diff --git a/server/test/resources/certs/expired_cert.crt b/server/src/test/resources/certs/expired_cert.crt
similarity index 100%
rename from server/test/resources/certs/expired_cert.crt
rename to server/src/test/resources/certs/expired_cert.crt
diff --git a/server/test/resources/certs/non_root.crt b/server/src/test/resources/certs/non_root.crt
similarity index 100%
rename from server/test/resources/certs/non_root.crt
rename to server/src/test/resources/certs/non_root.crt
diff --git a/server/test/resources/certs/non_root.csr b/server/src/test/resources/certs/non_root.csr
similarity index 100%
rename from server/test/resources/certs/non_root.csr
rename to server/src/test/resources/certs/non_root.csr
diff --git a/server/test/resources/certs/non_root.key b/server/src/test/resources/certs/non_root.key
similarity index 100%
rename from server/test/resources/certs/non_root.key
rename to server/src/test/resources/certs/non_root.key
diff --git a/server/test/resources/certs/non_x509_pem.crt b/server/src/test/resources/certs/non_x509_pem.crt
similarity index 100%
rename from server/test/resources/certs/non_x509_pem.crt
rename to server/src/test/resources/certs/non_x509_pem.crt
diff --git a/server/test/resources/certs/root_chain.crt b/server/src/test/resources/certs/root_chain.crt
similarity index 100%
rename from server/test/resources/certs/root_chain.crt
rename to server/src/test/resources/certs/root_chain.crt
diff --git a/server/test/resources/certs/root_chain.csr b/server/src/test/resources/certs/root_chain.csr
similarity index 100%
rename from server/test/resources/certs/root_chain.csr
rename to server/src/test/resources/certs/root_chain.csr
diff --git a/server/test/resources/certs/root_chain.key b/server/src/test/resources/certs/root_chain.key
similarity index 100%
rename from server/test/resources/certs/root_chain.key
rename to server/src/test/resources/certs/root_chain.key
diff --git a/server/test/resources/certs/rsa_ca_signed.crt b/server/src/test/resources/certs/rsa_ca_signed.crt
similarity index 100%
rename from server/test/resources/certs/rsa_ca_signed.crt
rename to server/src/test/resources/certs/rsa_ca_signed.crt
diff --git a/server/test/resources/certs/rsa_ca_signed.csr b/server/src/test/resources/certs/rsa_ca_signed.csr
similarity index 100%
rename from server/test/resources/certs/rsa_ca_signed.csr
rename to server/src/test/resources/certs/rsa_ca_signed.csr
diff --git a/server/test/resources/certs/rsa_ca_signed.key b/server/src/test/resources/certs/rsa_ca_signed.key
similarity index 100%
rename from server/test/resources/certs/rsa_ca_signed.key
rename to server/src/test/resources/certs/rsa_ca_signed.key
diff --git a/server/test/resources/certs/rsa_self_signed.crt b/server/src/test/resources/certs/rsa_self_signed.crt
similarity index 100%
rename from server/test/resources/certs/rsa_self_signed.crt
rename to server/src/test/resources/certs/rsa_self_signed.crt
diff --git a/server/test/resources/certs/rsa_self_signed.csr b/server/src/test/resources/certs/rsa_self_signed.csr
similarity index 100%
rename from server/test/resources/certs/rsa_self_signed.csr
rename to server/src/test/resources/certs/rsa_self_signed.csr
diff --git a/server/test/resources/certs/rsa_self_signed.key b/server/src/test/resources/certs/rsa_self_signed.key
similarity index 100%
rename from server/test/resources/certs/rsa_self_signed.key
rename to server/src/test/resources/certs/rsa_self_signed.key
diff --git a/server/test/resources/certs/rsa_self_signed_with_pwd.crt b/server/src/test/resources/certs/rsa_self_signed_with_pwd.crt
similarity index 100%
rename from server/test/resources/certs/rsa_self_signed_with_pwd.crt
rename to server/src/test/resources/certs/rsa_self_signed_with_pwd.crt
diff --git a/server/test/resources/certs/rsa_self_signed_with_pwd.csr b/server/src/test/resources/certs/rsa_self_signed_with_pwd.csr
similarity index 100%
rename from server/test/resources/certs/rsa_self_signed_with_pwd.csr
rename to server/src/test/resources/certs/rsa_self_signed_with_pwd.csr
diff --git a/server/test/resources/certs/rsa_self_signed_with_pwd.key b/server/src/test/resources/certs/rsa_self_signed_with_pwd.key
similarity index 100%
rename from server/test/resources/certs/rsa_self_signed_with_pwd.key
rename to server/src/test/resources/certs/rsa_self_signed_with_pwd.key
diff --git a/server/test/resources/cleanup.sql b/server/src/test/resources/cleanup.sql
similarity index 100%
rename from server/test/resources/cleanup.sql
rename to server/src/test/resources/cleanup.sql
diff --git a/server/test/resources/createNetworkOffering.xml b/server/src/test/resources/createNetworkOffering.xml
similarity index 100%
rename from server/test/resources/createNetworkOffering.xml
rename to server/src/test/resources/createNetworkOffering.xml
diff --git a/server/test/resources/db.properties b/server/src/test/resources/db.properties
similarity index 100%
rename from server/test/resources/db.properties
rename to server/src/test/resources/db.properties
diff --git a/server/test/resources/fake.sql b/server/src/test/resources/fake.sql
similarity index 100%
rename from server/test/resources/fake.sql
rename to server/src/test/resources/fake.sql
diff --git a/server/test/resources/testContext.xml b/server/src/test/resources/testContext.xml
similarity index 100%
rename from server/test/resources/testContext.xml
rename to server/src/test/resources/testContext.xml
diff --git a/server/test/sync-queue-component.xml b/server/src/test/sync-queue-component.xml
similarity index 100%
rename from server/test/sync-queue-component.xml
rename to server/src/test/sync-queue-component.xml
diff --git a/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java b/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java
deleted file mode 100644
index d09b030..0000000
--- a/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.network;
-
-public class NetworkManagerTestComponentLibrary {
-
-    /* (non-Javadoc)
-     * @see com.cloud.configuration.DefaultComponentLibrary#populateManagers()
-     */
-    protected void populateManagers() {
-//        addManager("configuration manager", MockConfigurationManagerImpl.class);
-//        addManager("account manager", MockAccountManagerImpl.class);
-//        addManager("domain manager", MockDomainManagerImpl.class);
-//        addManager("resource limit manager", MockResourceLimitManagerImpl.class);
-//        addManager("network service", NetworkServiceImpl.class);
-//        addManager("network manager", NetworkManagerImpl.class);
-//        addManager("network model", NetworkModelImpl.class);
-//        addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
-//        //addManager("AutoScaleManager", AutoScaleManagerImpl.class);
-//        addManager("RulesManager", RulesManagerImpl.class);
-//        addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
-//        addManager("FirewallManager", FirewallManagerImpl.class);
-//        addManager("StorageNetworkManager", StorageNetworkManagerImpl.class);
-//        addManager("VPC Manager", MockVpcManagerImpl.class);
-//        addManager("VpcVirtualRouterManager", MockVpcVirtualNetworkApplianceManager.class);
-//        addManager("NetworkACLManager", NetworkACLManagerImpl.class);
-//        addManager("Site2SiteVpnManager", Site2SiteVpnManagerImpl.class);
-//        addManager("Alert Manager", MockAlertManagerImpl.class);
-//        addManager("ProjectManager", MockProjectManagerImpl.class);
-//        //addManager("SwiftManager", SwiftManagerImpl.class);
-//        //addManager("S3Manager", S3ManagerImpl.class);
-//        //addManager("SecondaryStorageManager", SecondaryStorageManagerImpl.class);
-//        //addManager("SecurityGroupManager", SecurityGroupManagerImpl2.class);
-//        addManager("AgentManager", MockAgentManagerImpl.class);
-//        addManager("ExternalLoadBalancerUsageManager", ExternalLoadBalancerUsageManagerImpl.class);
-//        //addManager("TemplateManager", TemplateManagerImpl.class);
-//        //addManager("VirtualMachineManager", MockVirtualMachineManagerImpl.class);
-//        addManager("ResourceManager", MockResourceManagerImpl.class);
-//        addManager("ExternalDhcpManager", ExternalDhcpManagerImpl.class);
-
-    }
-
-}
diff --git a/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java
deleted file mode 100644
index 0156afb..0000000
--- a/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.network.vpn;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.naming.ConfigurationException;
-
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.RemoteAccessVpn;
-import com.cloud.network.VpnUser;
-import com.cloud.network.element.RemoteAccessVPNServiceProvider;
-import com.cloud.utils.component.ManagerBase;
-
-public class MockRemoteAccessVPNServiceProvider extends ManagerBase implements RemoteAccessVPNServiceProvider {
-
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-        return true;
-    }
-
-    @Override
-    public String getName() {
-        return "MockRemoteAccessVPNServiceProvider";
-    }
-
-    @Override
-    public boolean start() {
-        return true;
-    }
-
-    @Override
-    public boolean stop() {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public String[] applyVpnUsers(RemoteAccessVpn vpn, List<? extends VpnUser> users) throws ResourceUnavailableException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean startVpn(RemoteAccessVpn vpn) throws ResourceUnavailableException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean stopVpn(RemoteAccessVpn vpn) throws ResourceUnavailableException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-}
diff --git a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java
deleted file mode 100644
index 58315e6..0000000
--- a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.network.vpn;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Test;
-
-public class RemoteAccessVpnTest {
-    private final static Logger s_logger = Logger.getLogger(RemoteAccessVpnTest.class);
-
-//    private static void addDaos(MockComponentLocator locator) {
-//        locator.addDao("AccountDao", AccountDaoImpl.class);
-//        locator.addDao("VpnUserDao", VpnUserDaoImpl.class);
-//        locator.addDao("FirewallRulesDao", FirewallRulesDaoImpl.class);
-//        locator.addDao("IPAddressDao", IPAddressDaoImpl.class);
-//        locator.addDao("DomainDao", DomainDaoImpl.class);
-//        locator.addDao("UsageEventDao", UsageEventDaoImpl.class);
-//        locator.addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class);
-//        locator.addDao("ConfigurationDao", ConfigurationDaoImpl.class);
-//
-//    }
-//
-//    private static void addManagers(MockComponentLocator locator) {
-//        locator.addManager("AccountManager", MockAccountManagerImpl.class);
-//        locator.addManager("DomainManager", MockDomainManagerImpl.class);
-//        locator.addManager("NetworkManager", MockNetworkManagerImpl.class);
-//        locator.addManager("NetworkModel", MockNetworkModelImpl.class);
-//        locator.addManager("RulesManager", MockRulesManagerImpl.class);
-//        locator.addManager("FirewallManager", MockFirewallManagerImpl.class);
-//    }
-
-//    @Before
-//    public void setUp() {
-//        locator = new MockComponentLocator("management-server");
-//        addDaos(locator);
-//        addManagers(locator);
-//        s_logger.info("Finished setUp");
-//    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void testInjected() throws Exception {
-//        List<Pair<String, Class<? extends RemoteAccessVPNServiceProvider>>> list =
-//                new ArrayList<Pair<String, Class<? extends RemoteAccessVPNServiceProvider>>>();
-//        list.add(new Pair<String, Class<? extends RemoteAccessVPNServiceProvider>>("RemoteAccessVPNServiceProvider", MockRemoteAccessVPNServiceProvider.class));
-//        locator.addAdapterChain(RemoteAccessVPNServiceProvider.class, list);
-//        s_logger.info("Finished add adapter");
-//        locator.makeActive(new DefaultInterceptorLibrary());
-//        s_logger.info("Finished make active");
-//        RemoteAccessVpnManagerImpl vpnMgr = ComponentLocator.inject(RemoteAccessVpnManagerImpl.class);
-//        s_logger.info("Finished inject");
-//        Assert.assertTrue(vpnMgr.configure("RemoteAccessVpnMgr",new HashMap<String, Object>()) );
-//        Assert.assertTrue(vpnMgr.start());
-//        int numProviders = vpnMgr.getRemoteAccessVPNServiceProviders().size();
-//        Assert.assertTrue(numProviders > 0);
-    }
-
-}
diff --git a/server/test/com/cloud/user/AccountManagerImplTest.java b/server/test/com/cloud/user/AccountManagerImplTest.java
deleted file mode 100644
index 9190cf8..0000000
--- a/server/test/com/cloud/user/AccountManagerImplTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.user;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import com.cloud.acl.DomainChecker;
-import com.cloud.exception.PermissionDeniedException;
-import com.cloud.server.auth.UserAuthenticator;
-import com.cloud.utils.Pair;
-
-import org.apache.cloudstack.api.command.admin.user.GetUserKeysCmd;
-import org.apache.cloudstack.context.CallContext;
-import org.junit.Assert;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.apache.cloudstack.acl.ControlledEntity;
-import org.apache.cloudstack.acl.SecurityChecker.AccessType;
-import com.cloud.vm.snapshot.VMSnapshotVO;
-import com.cloud.domain.Domain;
-import com.cloud.domain.DomainVO;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.user.Account.State;
-import com.cloud.vm.UserVmManagerImpl;
-import com.cloud.vm.UserVmVO;
-import com.cloud.vm.VMInstanceVO;
-
-
-public class AccountManagerImplTest extends AccountManagetImplTestBase {
-
-
-    @Mock
-    UserVmManagerImpl _vmMgr;
-
-    @Test
-    public void disableAccountNotexisting()
-            throws ConcurrentOperationException, ResourceUnavailableException {
-        Mockito.when(_accountDao.findById(42l)).thenReturn(null);
-        Assert.assertTrue(accountManager.disableAccount(42));
-    }
-
-    @Test
-    public void disableAccountDisabled() throws ConcurrentOperationException,
-    ResourceUnavailableException {
-        AccountVO disabledAccount = new AccountVO();
-        disabledAccount.setState(State.disabled);
-        Mockito.when(_accountDao.findById(42l)).thenReturn(disabledAccount);
-        Assert.assertTrue(accountManager.disableAccount(42));
-    }
-
-    @Test
-    public void disableAccount() throws ConcurrentOperationException,
-    ResourceUnavailableException {
-        AccountVO account = new AccountVO();
-        account.setState(State.enabled);
-        Mockito.when(_accountDao.findById(42l)).thenReturn(account);
-        Mockito.when(_accountDao.createForUpdate()).thenReturn(new AccountVO());
-        Mockito.when(
-                _accountDao.update(Mockito.eq(42l),
-                        Mockito.any(AccountVO.class))).thenReturn(true);
-        Mockito.when(_vmDao.listByAccountId(42l)).thenReturn(
-                Arrays.asList(Mockito.mock(VMInstanceVO.class)));
-        Assert.assertTrue(accountManager.disableAccount(42));
-        Mockito.verify(_accountDao, Mockito.atLeastOnce()).update(
-                Mockito.eq(42l), Mockito.any(AccountVO.class));
-    }
-
-    @Test
-    public void deleteUserAccount() {
-        AccountVO account = new AccountVO();
-        account.setId(42l);
-        DomainVO domain = new DomainVO();
-        Mockito.when(_accountDao.findById(42l)).thenReturn(account);
-        Mockito.when(
-                securityChecker.checkAccess(Mockito.any(Account.class),
-                        Mockito.any(ControlledEntity.class), Mockito.any(AccessType.class),
-                        Mockito.anyString()))
-        .thenReturn(true);
-        Mockito.when(_accountDao.remove(42l)).thenReturn(true);
-        Mockito.when(_configMgr.releaseAccountSpecificVirtualRanges(42l))
-        .thenReturn(true);
-        Mockito.when(_domainMgr.getDomain(Mockito.anyLong())).thenReturn(domain);
-        Mockito.when(
-                securityChecker.checkAccess(Mockito.any(Account.class),
-                        Mockito.any(Domain.class)))
-        .thenReturn(true);
-        Mockito.when(_vmSnapshotDao.listByAccountId(Mockito.anyLong())).thenReturn(new ArrayList<VMSnapshotVO>());
-
-        List<SSHKeyPairVO> sshkeyList = new ArrayList<SSHKeyPairVO>();
-        SSHKeyPairVO sshkey = new SSHKeyPairVO();
-        sshkey.setId(1l);
-        sshkeyList.add(sshkey);
-        Mockito.when(_sshKeyPairDao.listKeyPairs(Mockito.anyLong(), Mockito.anyLong())).thenReturn(sshkeyList);
-        Mockito.when(_sshKeyPairDao.remove(Mockito.anyLong())).thenReturn(true);
-
-        Assert.assertTrue(accountManager.deleteUserAccount(42));
-        // assert that this was a clean delete
-        Mockito.verify(_accountDao, Mockito.never()).markForCleanup(
-                Mockito.eq(42l));
-    }
-
-    @Test
-    public void deleteUserAccountCleanup() {
-        AccountVO account = new AccountVO();
-        account.setId(42l);
-        DomainVO domain = new DomainVO();
-        Mockito.when(_accountDao.findById(42l)).thenReturn(account);
-        Mockito.when(
-                securityChecker.checkAccess(Mockito.any(Account.class),
-                        Mockito.any(ControlledEntity.class), Mockito.any(AccessType.class),
-                        Mockito.anyString()))
-        .thenReturn(true);
-        Mockito.when(_accountDao.remove(42l)).thenReturn(true);
-        Mockito.when(_configMgr.releaseAccountSpecificVirtualRanges(42l))
-        .thenReturn(true);
-        Mockito.when(_userVmDao.listByAccountId(42l)).thenReturn(
-                Arrays.asList(Mockito.mock(UserVmVO.class)));
-        Mockito.when(
-                _vmMgr.expunge(Mockito.any(UserVmVO.class), Mockito.anyLong(),
-                        Mockito.any(Account.class))).thenReturn(false);
-        Mockito.when(_domainMgr.getDomain(Mockito.anyLong())).thenReturn(domain);
-        Mockito.when(
-                securityChecker.checkAccess(Mockito.any(Account.class),
-                        Mockito.any(Domain.class)))
-        .thenReturn(true);
-
-        Assert.assertTrue(accountManager.deleteUserAccount(42));
-        // assert that this was NOT a clean delete
-        Mockito.verify(_accountDao, Mockito.atLeastOnce()).markForCleanup(
-                Mockito.eq(42l));
-    }
-
-
-    @Test
-    public void testAuthenticateUser() throws UnknownHostException {
-        Pair<Boolean, UserAuthenticator.ActionOnFailedAuthentication> successAuthenticationPair = new Pair<>(true, null);
-        Pair<Boolean, UserAuthenticator.ActionOnFailedAuthentication> failureAuthenticationPair = new Pair<>(false,
-                UserAuthenticator.ActionOnFailedAuthentication.INCREMENT_INCORRECT_LOGIN_ATTEMPT_COUNT);
-
-        UserAccountVO userAccountVO = new UserAccountVO();
-        userAccountVO.setSource(User.Source.UNKNOWN);
-        userAccountVO.setState(Account.State.disabled.toString());
-        Mockito.when(_userAccountDao.getUserAccount("test", 1L)).thenReturn(userAccountVO);
-        Mockito.when(userAuthenticator.authenticate("test", "fail", 1L, null)).thenReturn(failureAuthenticationPair);
-        Mockito.when(userAuthenticator.authenticate("test", null, 1L, null)).thenReturn(successAuthenticationPair);
-        Mockito.when(userAuthenticator.authenticate("test", "", 1L, null)).thenReturn(successAuthenticationPair);
-
-        //Test for incorrect password. authentication should fail
-        UserAccount userAccount = accountManager.authenticateUser("test", "fail", 1L, InetAddress.getByName("127.0.0.1"), null);
-        Assert.assertNull(userAccount);
-
-        //Test for null password. authentication should fail
-        userAccount = accountManager.authenticateUser("test", null, 1L, InetAddress.getByName("127.0.0.1"), null);
-        Assert.assertNull(userAccount);
-
-        //Test for empty password. authentication should fail
-        userAccount = accountManager.authenticateUser("test", "", 1L, InetAddress.getByName("127.0.0.1"), null);
-        Assert.assertNull(userAccount);
-
-        //Verifying that the authentication method is only called when password is specified
-        Mockito.verify(userAuthenticator, Mockito.times(1)).authenticate("test", "fail", 1L, null);
-        Mockito.verify(userAuthenticator, Mockito.never()).authenticate("test", null, 1L, null);
-        Mockito.verify(userAuthenticator, Mockito.never()).authenticate("test", "", 1L, null);
-    }
-
-    @Mock
-    AccountVO callingAccount;
-    @Mock
-    DomainChecker domainChecker;
-    @Mock
-    AccountService accountService;
-    @Mock
-    private GetUserKeysCmd _listkeyscmd;
-    @Mock
-    private Account _account;
-    @Mock
-    private User _user;
-    @Mock
-    private UserAccountVO userAccountVO;
-
-
-    @Test (expected = PermissionDeniedException.class)
-    public void testgetUserCmd(){
-        CallContext.register(callingUser, callingAccount); // Calling account is user account i.e normal account
-        Mockito.when(_listkeyscmd.getID()).thenReturn(1L);
-        Mockito.when(accountManager.getActiveUser(1L)).thenReturn(_user);
-        Mockito.when(accountManager.getUserAccountById(1L)).thenReturn(userAccountVO);
-        Mockito.when(userAccountVO.getAccountId()).thenReturn(1L);
-        Mockito.when(accountManager.getAccount(Mockito.anyLong())).thenReturn(_account); // Queried account - admin account
-
-        Mockito.when(callingUser.getAccountId()).thenReturn(1L);
-        Mockito.when(_accountDao.findById(1L)).thenReturn(callingAccount);
-
-        Mockito.when(accountService.isNormalUser(Mockito.anyLong())).thenReturn(Boolean.TRUE);
-        Mockito.when(_account.getAccountId()).thenReturn(2L);
-
-        accountManager.getKeys(_listkeyscmd);
-
-        }
-}
diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java
deleted file mode 100644
index 394c3e2..0000000
--- a/server/test/com/cloud/user/MockDomainManagerImpl.java
+++ /dev/null
@@ -1,164 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.user;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.naming.ConfigurationException;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;
-import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;
-import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
-
-import com.cloud.domain.Domain;
-import com.cloud.domain.DomainVO;
-import com.cloud.exception.PermissionDeniedException;
-import com.cloud.utils.Pair;
-import com.cloud.utils.component.ManagerBase;
-
-@Component
-public class MockDomainManagerImpl extends ManagerBase implements DomainManager, DomainService {
-
-    @Override
-    public Domain getDomain(long id) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Domain getDomain(String uuid) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Domain getDomainByName(String name, long parentId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean isChildDomain(Long parentId, Long childId) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean deleteDomain(long domainId, Boolean cleanup) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd) throws PermissionDeniedException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<List<? extends Domain>, Integer> searchForDomainChildren(ListDomainChildrenCmd cmd) throws PermissionDeniedException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Set<Long> getDomainChildrenIds(String parentDomainPath) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public DomainVO findDomainByPath(String domainPath) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public DomainVO findDomainByIdOrPath(Long id, String domainPath) {
-        return null;
-    }
-
-    @Override
-    public Set<Long> getDomainParentIds(long domainId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean removeDomain(long domainId) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public List<? extends Domain> findInactiveDomains() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean deleteDomain(DomainVO domain, Boolean cleanup) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-        return true;
-    }
-
-    @Override
-    public boolean start() {
-        // TODO Auto-generated method stub
-        return true;
-    }
-
-    @Override
-    public boolean stop() {
-        // TODO Auto-generated method stub
-        return true;
-    }
-
-    @Override
-    public String getName() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Domain createDomain(String name, Long parentId, String networkDomain, String domainUUID) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Domain updateDomain(UpdateDomainCmd cmd) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Domain createDomain(String name, Long parentId, Long ownerId, String networkDomain, String domainUUID) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/server/test/resources/network-mgr-component.xml b/server/test/resources/network-mgr-component.xml
deleted file mode 100644
index a0ddce0..0000000
--- a/server/test/resources/network-mgr-component.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<!--
-  components.xml is the configuration file for the VM Ops
-  insertion servers.  Someone can quickly pull together an
-  insertion server by selecting the correct adapters to use.
-
-  Here are some places to look for information.
-    - To find out the general functionality that each Manager 
-      or Adapter provide, look at the javadoc for the interface
-      that it implements.  The interface is usually the
-      "key" attribute in the declaration.
-    - To find specific implementation of each Manager or
-      Adapter, look at the javadoc for the actual class.  The 
-      class can be found in the <class> element.
-    - To find out the configuration parameters for each Manager 
-      or Adapter, look at the javadoc for the actual implementation
-      class.  It should be documented in the description of the 
-      class.
-    - To know more about the components.xml in general, look for
-      the javadoc for ComponentLocator.java.
-
-  If you found that the Manager or Adapter are not properly 
-  documented, please contact the author.
--->
-<components.xml>
-    <interceptor library="com.cloud.configuration.DefaultInterceptorLibrary"/>
-    <management-server class="com.cloud.network.NetworkManagerImpl" library="com.cloud.network.NetworkManagerTestComponentLibrary">
-        <dao name="Configuration configuration server" class="com.cloud.configuration.dao.ConfigurationDaoImpl">
-             <param name="premium">true</param>
-        </dao>
-        <adapters key="com.cloud.network.guru.NetworkGuru">
-            <!--
-                 NOTE: The order of those gurus implicates priority of network traffic types the guru implements.
-                 The upper the higher priority. It effects listTafficTypeImplementors API which returns impelmentor
-                 of a specific network traffic.
-                 A fair question is, if two gurus implement the same two network traffic types, but these traffic types
-                 have cross priority, how to rank them? For example:
-                    GuruA (TrafficTypeA, TrafficTypeB)
-                    GuruB (TrafficTypeA, TrafficTypeB)
-                 we want GuruB.TrafficTypeB > GuruA.TrafficTypeB and GuruB.TrafficTypeA < GuruA.TrafficTypeA. As the priority
-                 implicated by order can not map to multiple traffic type, you have to do implement GuruC which inherits GuruB
-                 for TrafficTypeB. Then ranking them in order of:
-                    GuruC (TrafficTypeB)
-                    GuruA (TrafficTypeA, TrafficTypeB)
-                    GuruB (TrafficTypeA, TrafficTypeB)
-                 now GuruC represents TrafficTypeB with highest priority while GuruA represents TrafficTypeA with highest pirority.
-
-                 However, above case barely happens.
-            -->
-
-            <adapter name="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru"/>
-            <adapter name="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru"/>
-            <adapter name="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru"/>
-            <adapter name="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru"/>
-            <adapter name="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru"/>
-            <adapter name="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru"/>
-            <adapter name="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru"/>
-            <!--<adapter name="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru"/> -->
-            <adapter name="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru"/>
-            <!--<adapter name="NiciraNvpGuestNetworkGuru" class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru"/> -->
-        </adapters>
-        <adapters key="com.cloud.network.IpAddrAllocator">
-            <adapter name="Basic" class="com.cloud.network.ExternalIpAddressAllocator"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.NetworkElement">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <!--<adapter name="Ovs" class="com.cloud.network.element.OvsElement"/> -->
-            <!--<adapter name="ExternalDhcpServer" class="com.cloud.network.element.ExternalDhcpElement"/>-->
-            <adapter name="BareMetal" class="com.cloud.network.element.BareMetalElement"/>
-            <adapter name="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-            <!--<adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> -->
-        </adapters>
-        <adapters key="com.cloud.network.element.FirewallServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.DhcpServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-            <adapter name="ExternalDhcpElement" class="com.cloud.network.element.ExternalDhcpElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.UserDataServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.SourceNatServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-            <!--<adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/>   -->
-        </adapters>
-        <adapters key="com.cloud.network.element.StaticNatServiceProvider">
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <!-- <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> -->
-        </adapters>
-        <adapters key="com.cloud.network.element.PortForwardingServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-            <!-- <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> -->
-        </adapters>
-        <adapters key="com.cloud.network.element.LoadBalancingServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.RemoteAccessVPNServiceProvider">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.Site2SiteVpnServiceProvider">
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.IpDeployer">
-            <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/>
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-            <!-- <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> -->
-        </adapters>
-        <adapters key="com.cloud.network.element.ConnectivityProvider">
-            <!-- <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> -->
-        </adapters>
-        <adapters key="com.cloud.network.element.NetworkACLServiceProvider">
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-        </adapters>
-        <adapters key="com.cloud.network.element.VpcProvider">
-            <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/>
-        </adapters>
-
-        <!--<manager name="OvsTunnelManager" key="com.cloud.network.ovs.OvsTunnelManager" class="com.cloud.network.ovs.OvsTunnelManagerImpl"/>-->
-        <!--<manager name="ElasticLoadBalancerManager" key="com.cloud.network.lb.ElasticLoadBalancerManager" class="com.cloud.network.lb.ElasticLoadBalancerManagerImpl"/>-->
-        <pluggableservice name="VirtualRouterElementService" key="com.cloud.network.element.VirtualRouterElementService" class="com.cloud.network.element.VirtualRouterElement"/>
-        <!-- <pluggableservice name="NiciraNvpElementService" key="com.cloud.network.element.NiciraNvpElementService" class="com.cloud.network.element.NiciraNvpElement"/> -->
-        <!--<dao name="OvsTunnelInterfaceDao" class="com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl" singleton="false"/> -->
-        <!--<dao name="OvsTunnelAccountDao" class="com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl" singleton="false"/> -->
-        <!--<dao name="NiciraNvpDao" class="com.cloud.network.dao.NiciraNvpDaoImpl" singleton="false"/> -->
-        <!--<dao name="NiciraNvpNicMappingDao" class="com.cloud.network.dao.NiciraNvpNicMappingDaoImpl" singleton="false"/> -->
-        <!--<dao name="NiciraNvpRouterMappingDao" class="com.cloud.network.dao.NiciraNvpRouterMappingDaoImpl" singleton="false"/> -->
-        <!--<dao name="ElasticLbVmMapDao" class="com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl" singleton="false"/> -->
-    </management-server>
-
-    <configuration-server class="com.cloud.server.ConfigurationServerImpl">
-        <dao name="Configuration configuration server" class="com.cloud.configuration.dao.ConfigurationDaoImpl" singleton="false">
-             <param name="premium">true</param>
-        </dao>
-        <dao name="Snapshot policy defaults" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl" singleton="false"/>
-        <dao name="DiskOffering configuration server" class="com.cloud.storage.dao.DiskOfferingDaoImpl" singleton="false"/>         
-        <dao name="ServiceOffering configuration server" class="com.cloud.service.dao.ServiceOfferingDaoImpl" singleton="false"/>
-        <dao name="host zone configuration server" class="com.cloud.dc.dao.DataCenterDaoImpl" singleton="false"/>
-        <dao name="host pod configuration server" class="com.cloud.dc.dao.HostPodDaoImpl" singleton="false"/>
-        <dao name="DomainDao" class="com.cloud.domain.dao.DomainDaoImpl" singleton="false"/>
-        <dao name="NetworkOfferingDao" class="com.cloud.offerings.dao.NetworkOfferingDaoImpl" singleton="false"/>
-        <dao name="DataCenterDao" class="com.cloud.dc.dao.DataCenterDaoImpl" singleton="false"/>
-        <dao name="NetworkDao" class="com.cloud.network.dao.NetworkDaoImpl" singleton="false"/>
-        <dao name="IpAddressDao" class="com.cloud.network.dao.IPAddressDaoImpl" singleton="false"/>     
-        <dao name="VlanDao" class="com.cloud.dc.dao.VlanDaoImpl" singleton="false"/>
-        <dao name="ResouceCountDao" class="com.cloud.configuration.dao.ResourceCountDaoImpl" singleton="false"/>
-        <dao name="AccountDao" class="com.cloud.user.dao.AccountDaoImpl" singleton="false"/>
-        <dao name="UserDao" class="com.cloud.user.dao.UserDaoImpl" singleton="false"/>
-        <dao name="NetworkOfferingServiceDao" class="com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl" singleton="false"/>
-        <dao name="VirtualRouterProviderDao" class="com.cloud.network.dao.VirtualRouterProviderDaoImpl" singleton="false"/>
-        <dao name="Site2SiteCustomerGatewayDao" class="com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl" singleton="false"/>
-        <dao name="Site2SiteVpnGatewayDao" class="com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl" singleton="false"/>
-        <dao name="Site2SiteVpnConnectionDao" class="com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl" singleton="false"/>
-    </configuration-server>
-    
-    
-</components.xml>
diff --git a/services/console-proxy-rdp/rdpconsole/pom.xml b/services/console-proxy-rdp/rdpconsole/pom.xml
deleted file mode 100755
index 7e1cb7c..0000000
--- a/services/console-proxy-rdp/rdpconsole/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>rdpclient</groupId>
-  <artifactId>cloudstack-service-console-proxy-rdpclient</artifactId>
-  <packaging>jar</packaging>
-  <name>Apache CloudStack Console Proxy - RDP Client</name>
-
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-services</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <!-- not parenting to the maven-default pom, as we want this in services -->
-  <build>
-    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
-    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
-    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
-    <outputDirectory>${basedir}/target/classes</outputDirectory>
-    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
-    <resources>
-      <resource>
-        <directory>${basedir}/src/main/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>${basedir}/src/test/resources</directory>
-      </testResource>
-    </testResources>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${cs.junit.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <!-- Apache Portable Runtime implementation of SSL protocol, which is compatible with broken MS RDP SSL suport.
-    NOTE: tomcat-native package with /usr/lib/libtcnative-1.so library is necessary for APR to work. -->
-    <dependency>
-      <groupId>org.apache.tomcat.embed</groupId>
-      <artifactId>tomcat-embed-core</artifactId>
-      <version>8.0.30</version>
-    </dependency>
-    <!-- Another implementation of SSL protocol. Does not work with broken MS RDP SSL too. -->
-    <dependency>
-      <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15on</artifactId>
-      <version>${cs.bcprov.version}</version>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/services/console-proxy/plugin/pom.xml b/services/console-proxy/plugin/pom.xml
deleted file mode 100644
index 321dcfd..0000000
--- a/services/console-proxy/plugin/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-console-proxy</artifactId>
-  <name>Apache CloudStack Console Proxy - Plugin</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-service-console-proxy</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-</project>
diff --git a/services/console-proxy/pom.xml b/services/console-proxy/pom.xml
index ec49246..e96c8a7 100644
--- a/services/console-proxy/pom.xml
+++ b/services/console-proxy/pom.xml
@@ -1,39 +1,50 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloudstack-service-console-proxy</artifactId>
-  <name>Apache CloudStack Console Proxy</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-services</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
-  <modules>
-    <!-- The plugin isn't used by anything
-    <module>plugin</module>
-    -->
-    <module>server</module>
-  </modules>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloudstack-service-console-proxy</artifactId>
+    <name>Apache CloudStack Console Proxy</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-services</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <modules>
+        <module>server</module>
+        <module>rdpconsole</module>
+    </modules>
 </project>
diff --git a/services/console-proxy-rdp/rdpconsole/README.txt b/services/console-proxy/rdpconsole/README.txt
old mode 100755
new mode 100644
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/README.txt
rename to services/console-proxy/rdpconsole/README.txt
diff --git a/services/console-proxy/rdpconsole/pom.xml b/services/console-proxy/rdpconsole/pom.xml
new file mode 100644
index 0000000..ccfdbcc
--- /dev/null
+++ b/services/console-proxy/rdpconsole/pom.xml
@@ -0,0 +1,52 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>rdpclient</groupId>
+    <artifactId>cloudstack-service-console-proxy-rdpclient</artifactId>
+    <packaging>jar</packaging>
+    <name>Apache CloudStack Console Proxy - RDP Client</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-service-console-proxy</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <!--
+            Apache Portable Runtime implementation of SSL protocol, which is compatible with broken MS RDP SSL suport.
+            NOTE: tomcat-native package with /usr/lib/libtcnative-1.so library is necessary for APR to work.
+        -->
+        <dependency>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-core</artifactId>
+        </dependency>
+        <!-- Another implementation of SSL protocol. Does not work with broken MS RDP SSL too. -->
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/services/console-proxy-rdp/rdpconsole/rdp-config.bat b/services/console-proxy/rdpconsole/rdp-config.bat
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/rdp-config.bat
rename to services/console-proxy/rdpconsole/rdp-config.bat
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/AwtKeyEventSource.java b/services/console-proxy/rdpconsole/src/main/java/common/AwtKeyEventSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/AwtKeyEventSource.java
rename to services/console-proxy/rdpconsole/src/main/java/common/AwtKeyEventSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/AwtMouseEventSource.java b/services/console-proxy/rdpconsole/src/main/java/common/AwtMouseEventSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/AwtMouseEventSource.java
rename to services/console-proxy/rdpconsole/src/main/java/common/AwtMouseEventSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/BitmapOrder.java b/services/console-proxy/rdpconsole/src/main/java/common/BitmapOrder.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/BitmapOrder.java
rename to services/console-proxy/rdpconsole/src/main/java/common/BitmapOrder.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/BitmapRectangle.java b/services/console-proxy/rdpconsole/src/main/java/common/BitmapRectangle.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/BitmapRectangle.java
rename to services/console-proxy/rdpconsole/src/main/java/common/BitmapRectangle.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/BufferedImageCanvas.java b/services/console-proxy/rdpconsole/src/main/java/common/BufferedImageCanvas.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/BufferedImageCanvas.java
rename to services/console-proxy/rdpconsole/src/main/java/common/BufferedImageCanvas.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/BufferedImageCopyRectAdapter.java b/services/console-proxy/rdpconsole/src/main/java/common/BufferedImageCopyRectAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/BufferedImageCopyRectAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/common/BufferedImageCopyRectAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/BufferedImagePixelsAdapter.java b/services/console-proxy/rdpconsole/src/main/java/common/BufferedImagePixelsAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/BufferedImagePixelsAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/common/BufferedImagePixelsAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java b/services/console-proxy/rdpconsole/src/main/java/common/Client.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java
rename to services/console-proxy/rdpconsole/src/main/java/common/Client.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/CopyRectOrder.java b/services/console-proxy/rdpconsole/src/main/java/common/CopyRectOrder.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/CopyRectOrder.java
rename to services/console-proxy/rdpconsole/src/main/java/common/CopyRectOrder.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/KeyOrder.java b/services/console-proxy/rdpconsole/src/main/java/common/KeyOrder.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/KeyOrder.java
rename to services/console-proxy/rdpconsole/src/main/java/common/KeyOrder.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/MouseOrder.java b/services/console-proxy/rdpconsole/src/main/java/common/MouseOrder.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/MouseOrder.java
rename to services/console-proxy/rdpconsole/src/main/java/common/MouseOrder.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/OrderType.java b/services/console-proxy/rdpconsole/src/main/java/common/OrderType.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/OrderType.java
rename to services/console-proxy/rdpconsole/src/main/java/common/OrderType.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/ScreenDescription.java b/services/console-proxy/rdpconsole/src/main/java/common/ScreenDescription.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/ScreenDescription.java
rename to services/console-proxy/rdpconsole/src/main/java/common/ScreenDescription.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/SizeChangeListener.java b/services/console-proxy/rdpconsole/src/main/java/common/SizeChangeListener.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/SizeChangeListener.java
rename to services/console-proxy/rdpconsole/src/main/java/common/SizeChangeListener.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/adapter/AwtBellAdapter.java b/services/console-proxy/rdpconsole/src/main/java/common/adapter/AwtBellAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/adapter/AwtBellAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/common/adapter/AwtBellAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/adapter/AwtCanvasAdapter.java b/services/console-proxy/rdpconsole/src/main/java/common/adapter/AwtCanvasAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/adapter/AwtCanvasAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/common/adapter/AwtCanvasAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/adapter/AwtClipboardAdapter.java b/services/console-proxy/rdpconsole/src/main/java/common/adapter/AwtClipboardAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/adapter/AwtClipboardAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/common/adapter/AwtClipboardAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Any.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/Any.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Any.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/Any.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Asn1Constants.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/Asn1Constants.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Asn1Constants.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/Asn1Constants.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Asn1Integer.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/Asn1Integer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Asn1Integer.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/Asn1Integer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/BerType.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/BerType.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/BerType.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/BerType.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/BitString.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/BitString.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/BitString.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/BitString.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/ObjectID.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/ObjectID.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/ObjectID.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/ObjectID.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/OctetString.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/OctetString.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/OctetString.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/OctetString.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Sequence.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/Sequence.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Sequence.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/Sequence.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/SequenceOf.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/SequenceOf.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/SequenceOf.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/SequenceOf.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Tag.java b/services/console-proxy/rdpconsole/src/main/java/common/asn1/Tag.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/asn1/Tag.java
rename to services/console-proxy/rdpconsole/src/main/java/common/asn1/Tag.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/IncrementalOption.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/IncrementalOption.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/IncrementalOption.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/IncrementalOption.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/IntOption.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/IntOption.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/IntOption.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/IntOption.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/NoArgumentForOptionException.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/NoArgumentForOptionException.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/NoArgumentForOptionException.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/NoArgumentForOptionException.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/Option.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/Option.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/Option.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/Option.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/OptionParser.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/OptionParser.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/OptionParser.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/OptionParser.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/OptionRequiredException.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/OptionRequiredException.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/OptionRequiredException.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/OptionRequiredException.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/StringArrayOption.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/StringArrayOption.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/StringArrayOption.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/StringArrayOption.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/StringEnumerationOption.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/StringEnumerationOption.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/StringEnumerationOption.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/StringEnumerationOption.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/StringOption.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/StringOption.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/StringOption.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/StringOption.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/UnknownOptionException.java b/services/console-proxy/rdpconsole/src/main/java/common/opt/UnknownOptionException.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/common/opt/UnknownOptionException.java
rename to services/console-proxy/rdpconsole/src/main/java/common/opt/UnknownOptionException.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/RdpClient.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/RdpClient.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/RdpClient.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/RdpClient.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpMouseAdapter.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpMouseAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpMouseAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpMouseAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ClipboardDataFormat.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ClipboardDataFormat.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ClipboardDataFormat.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ClipboardDataFormat.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ClipboardState.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ClipboardState.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ClipboardState.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ClipboardState.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerClipRdrChannelRouter.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerClipRdrChannelRouter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerClipRdrChannelRouter.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerClipRdrChannelRouter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerClipboardCapabilitiesPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerClipboardCapabilitiesPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerClipboardCapabilitiesPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerClipboardCapabilitiesPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerFormatDataResponsePDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerFormatDataResponsePDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerFormatDataResponsePDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerFormatDataResponsePDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerFormatListPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerFormatListPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerFormatListPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerFormatListPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerMonitorReadyPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerMonitorReadyPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/clip/ServerMonitorReadyPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/clip/ServerMonitorReadyPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/debug/ClientPacketSniffer.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/debug/ClientPacketSniffer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/debug/ClientPacketSniffer.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/debug/ClientPacketSniffer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/debug/PacketSniffer.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/debug/PacketSniffer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/debug/PacketSniffer.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/debug/PacketSniffer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/debug/ServerPacketSniffer.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/debug/ServerPacketSniffer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/debug/ServerPacketSniffer.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/debug/ServerPacketSniffer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/hyperv/ClientPreConnectionBlob.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/hyperv/ClientPreConnectionBlob.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/hyperv/ClientPreConnectionBlob.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/hyperv/ClientPreConnectionBlob.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspNegotiate.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspNegotiate.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspNegotiate.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspNegotiate.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspPubKeyAuth.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspPubKeyAuth.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspPubKeyAuth.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspPubKeyAuth.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspUserCredentials.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspUserCredentials.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspUserCredentials.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ClientNtlmsspUserCredentials.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/CryptoAlgos.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/CryptoAlgos.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/CryptoAlgos.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/CryptoAlgos.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NegoFlags.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NegoFlags.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NegoFlags.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NegoFlags.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmCompute.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmCompute.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmCompute.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmCompute.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmConstants.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmConstants.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmConstants.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmConstants.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmState.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmState.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmState.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/NtlmState.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/SecBuffer.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/SecBuffer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/SecBuffer.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/SecBuffer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspChallenge.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspChallenge.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspChallenge.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspChallenge.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspPubKeyPlus1.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspPubKeyPlus1.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspPubKeyPlus1.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/ServerNtlmsspPubKeyPlus1.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/AlgorithmIdentifier.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/AlgorithmIdentifier.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/AlgorithmIdentifier.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/AlgorithmIdentifier.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoData.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoData.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoData.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoData.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoItem.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoItem.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoItem.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/NegoItem.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/SubjectPublicKeyInfo.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/SubjectPublicKeyInfo.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/SubjectPublicKeyInfo.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/SubjectPublicKeyInfo.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCredentials.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCredentials.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCredentials.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCredentials.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCspDataDetail.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCspDataDetail.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCspDataDetail.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSCspDataDetail.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSPasswordCreds.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSPasswordCreds.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSPasswordCreds.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSPasswordCreds.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSRequest.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSRequest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSRequest.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSRequest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSSmartCardCreds.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSSmartCardCreds.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSSmartCardCreds.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/asn1/TSSmartCardCreds.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/package-info.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/package-info.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/ntlmssp/package-info.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/ntlmssp/package-info.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientConfirmActivePDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientConfirmActivePDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientConfirmActivePDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientConfirmActivePDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientFastPathPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientFastPathPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientFastPathPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientFastPathPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientInfoPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientInfoPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientInfoPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientInfoPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSAttachUserRequest.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSAttachUserRequest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSAttachUserRequest.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSAttachUserRequest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSChannelJoinRequestServerMCSChannelConfirmPDUs.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSChannelJoinRequestServerMCSChannelConfirmPDUs.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSChannelJoinRequestServerMCSChannelConfirmPDUs.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSChannelJoinRequestServerMCSChannelConfirmPDUs.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSConnectInitial.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSConnectInitial.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSConnectInitial.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSConnectInitial.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSErectDomainRequest.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSErectDomainRequest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSErectDomainRequest.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientMCSErectDomainRequest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientSynchronizePDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientSynchronizePDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientSynchronizePDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientSynchronizePDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientTpkt.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientTpkt.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientTpkt.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientTpkt.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientX224ConnectionRequestPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientX224ConnectionRequestPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientX224ConnectionRequestPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientX224ConnectionRequestPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientX224DataPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientX224DataPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ClientX224DataPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ClientX224DataPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/RLEBitmapDecompression.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/RLEBitmapDecompression.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/RLEBitmapDecompression.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/RLEBitmapDecompression.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/RdpConstants.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/RdpConstants.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/RdpConstants.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/RdpConstants.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/RdpState.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/RdpState.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/RdpState.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/RdpState.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerBitmapUpdate.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerBitmapUpdate.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerBitmapUpdate.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerBitmapUpdate.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUCooperate.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUCooperate.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUCooperate.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUCooperate.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUGrantedControl.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUGrantedControl.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUGrantedControl.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerControlPDUGrantedControl.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerDemandActivePDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerDemandActivePDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerDemandActivePDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerDemandActivePDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerFastPath.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerFastPath.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerFastPath.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerFastPath.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerIOChannelRouter.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerIOChannelRouter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerIOChannelRouter.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerIOChannelRouter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerLicenseErrorPDUValidClient.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerLicenseErrorPDUValidClient.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerLicenseErrorPDUValidClient.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerLicenseErrorPDUValidClient.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSAttachUserConfirmPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSAttachUserConfirmPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSAttachUserConfirmPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSAttachUserConfirmPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSChannelJoinConfirmPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSChannelJoinConfirmPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSChannelJoinConfirmPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSChannelJoinConfirmPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSConnectResponse.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSConnectResponse.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSConnectResponse.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSConnectResponse.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerMCSPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerPaletteUpdate.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerPaletteUpdate.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerPaletteUpdate.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerPaletteUpdate.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerSynchronizePDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerSynchronizePDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerSynchronizePDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerSynchronizePDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerTpkt.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerTpkt.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerTpkt.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerTpkt.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerX224ConnectionConfirmPDU.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerX224ConnectionConfirmPDU.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerX224ConnectionConfirmPDU.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerX224ConnectionConfirmPDU.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerX224DataPdu.java b/services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerX224DataPdu.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/rdp/ServerX224DataPdu.java
rename to services/console-proxy/rdpconsole/src/main/java/rdpclient/rdp/ServerX224DataPdu.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java b/services/console-proxy/rdpconsole/src/main/java/streamer/BaseElement.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BaseElement.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/BaseElement.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BufferPool.java b/services/console-proxy/rdpconsole/src/main/java/streamer/BufferPool.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/BufferPool.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/BufferPool.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java b/services/console-proxy/rdpconsole/src/main/java/streamer/ByteBuffer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/ByteBuffer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/DataSink.java b/services/console-proxy/rdpconsole/src/main/java/streamer/DataSink.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/DataSink.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/DataSink.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/DataSource.java b/services/console-proxy/rdpconsole/src/main/java/streamer/DataSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/DataSource.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/DataSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Direction.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Direction.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Direction.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Direction.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Element.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Element.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Element.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Element.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Event.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Event.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Event.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Event.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/InputStreamSource.java b/services/console-proxy/rdpconsole/src/main/java/streamer/InputStreamSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/InputStreamSource.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/InputStreamSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Link.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Link.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Link.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Link.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OneTimeSwitch.java b/services/console-proxy/rdpconsole/src/main/java/streamer/OneTimeSwitch.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OneTimeSwitch.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/OneTimeSwitch.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Order.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Order.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Order.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Order.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OutputStreamSink.java b/services/console-proxy/rdpconsole/src/main/java/streamer/OutputStreamSink.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OutputStreamSink.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/OutputStreamSink.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Pipeline.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Pipeline.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Pipeline.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Pipeline.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/PipelineImpl.java b/services/console-proxy/rdpconsole/src/main/java/streamer/PipelineImpl.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/PipelineImpl.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/PipelineImpl.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Queue.java b/services/console-proxy/rdpconsole/src/main/java/streamer/Queue.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/Queue.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/Queue.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapper.java b/services/console-proxy/rdpconsole/src/main/java/streamer/SocketWrapper.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapper.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/SocketWrapper.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java b/services/console-proxy/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SyncLink.java b/services/console-proxy/rdpconsole/src/main/java/streamer/SyncLink.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SyncLink.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/SyncLink.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java b/services/console-proxy/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java b/services/console-proxy/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java b/services/console-proxy/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java b/services/console-proxy/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/AssertingByteBuffer.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/AssertingByteBuffer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/AssertingByteBuffer.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/AssertingByteBuffer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/Dumper.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/Dumper.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/Dumper.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/Dumper.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/FakeSink.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/FakeSink.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/FakeSink.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/FakeSink.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/FakeSource.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/FakeSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/FakeSource.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/FakeSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockServer.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/MockServer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockServer.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/MockServer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockSink.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/MockSink.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockSink.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/MockSink.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockSource.java b/services/console-proxy/rdpconsole/src/main/java/streamer/debug/MockSource.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockSource.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/debug/MockSource.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ssl/SSLState.java b/services/console-proxy/rdpconsole/src/main/java/streamer/ssl/SSLState.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ssl/SSLState.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/ssl/SSLState.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ssl/TrustAllX509TrustManager.java b/services/console-proxy/rdpconsole/src/main/java/streamer/ssl/TrustAllX509TrustManager.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ssl/TrustAllX509TrustManager.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/ssl/TrustAllX509TrustManager.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ssl/UpgradeSocketToSSL.java b/services/console-proxy/rdpconsole/src/main/java/streamer/ssl/UpgradeSocketToSSL.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ssl/UpgradeSocketToSSL.java
rename to services/console-proxy/rdpconsole/src/main/java/streamer/ssl/UpgradeSocketToSSL.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/VncClient.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/VncClient.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/VncClient.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/VncClient.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/adapter/AwtVncKeyboardAdapter.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/adapter/AwtVncKeyboardAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/adapter/AwtVncKeyboardAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/adapter/AwtVncKeyboardAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/adapter/AwtVncMouseAdapter.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/adapter/AwtVncMouseAdapter.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/adapter/AwtVncMouseAdapter.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/adapter/AwtVncMouseAdapter.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/EncodingsMessage.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/EncodingsMessage.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/EncodingsMessage.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/EncodingsMessage.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/FrameBufferUpdateRequest.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/FrameBufferUpdateRequest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/FrameBufferUpdateRequest.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/FrameBufferUpdateRequest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/RGB888LE32PixelFormatRequest.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/RGB888LE32PixelFormatRequest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/RGB888LE32PixelFormatRequest.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/RGB888LE32PixelFormatRequest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/RfbConstants.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/RfbConstants.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/RfbConstants.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/RfbConstants.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/Vnc33Authentication.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/Vnc33Authentication.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/Vnc33Authentication.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/Vnc33Authentication.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/Vnc33Hello.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/Vnc33Hello.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/Vnc33Hello.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/Vnc33Hello.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/VncInitializer.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/VncInitializer.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/VncInitializer.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/VncInitializer.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/VncMessageHandler.java b/services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/VncMessageHandler.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/java/vncclient/vnc/VncMessageHandler.java
rename to services/console-proxy/rdpconsole/src/main/java/vncclient/vnc/VncMessageHandler.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/resources/jaas_ntlm_config.txt b/services/console-proxy/rdpconsole/src/main/resources/jaas_ntlm_config.txt
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/main/resources/jaas_ntlm_config.txt
rename to services/console-proxy/rdpconsole/src/main/resources/jaas_ntlm_config.txt
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/doc/README.txt b/services/console-proxy/rdpconsole/src/test/doc/README.txt
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/doc/README.txt
rename to services/console-proxy/rdpconsole/src/test/doc/README.txt
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/doc/dev-rdp-config.bat b/services/console-proxy/rdpconsole/src/test/doc/dev-rdp-config.bat
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/doc/dev-rdp-config.bat
rename to services/console-proxy/rdpconsole/src/test/doc/dev-rdp-config.bat
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/doc/freerdp-debug-log.txt b/services/console-proxy/rdpconsole/src/test/doc/freerdp-debug-log.txt
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/doc/freerdp-debug-log.txt
rename to services/console-proxy/rdpconsole/src/test/doc/freerdp-debug-log.txt
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/doc/rdp-key.pem b/services/console-proxy/rdpconsole/src/test/doc/rdp-key.pem
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/doc/rdp-key.pem
rename to services/console-proxy/rdpconsole/src/test/doc/rdp-key.pem
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/doc/rdp.pfx b/services/console-proxy/rdpconsole/src/test/doc/rdp.pfx
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/doc/rdp.pfx
rename to services/console-proxy/rdpconsole/src/test/doc/rdp.pfx
Binary files differ
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/common/ClientTest.java b/services/console-proxy/rdpconsole/src/test/java/common/ClientTest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/java/common/ClientTest.java
rename to services/console-proxy/rdpconsole/src/test/java/common/ClientTest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java b/services/console-proxy/rdpconsole/src/test/java/rdpclient/MockServerTest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java
rename to services/console-proxy/rdpconsole/src/test/java/rdpclient/MockServerTest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/BaseElementTest.java b/services/console-proxy/rdpconsole/src/test/java/streamer/BaseElementTest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/java/streamer/BaseElementTest.java
rename to services/console-proxy/rdpconsole/src/test/java/streamer/BaseElementTest.java
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/ByteBufferTest.java b/services/console-proxy/rdpconsole/src/test/java/streamer/ByteBufferTest.java
similarity index 100%
rename from services/console-proxy-rdp/rdpconsole/src/test/java/streamer/ByteBufferTest.java
rename to services/console-proxy/rdpconsole/src/test/java/streamer/ByteBufferTest.java
diff --git a/services/console-proxy/server/pom.xml b/services/console-proxy/server/pom.xml
index e470863..57f6ccb 100644
--- a/services/console-proxy/server/pom.xml
+++ b/services/console-proxy/server/pom.xml
@@ -1,63 +1,64 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-console-proxy</artifactId>
-  <name>Apache CloudStack Console Proxy - Server</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-service-console-proxy</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>rdpclient</groupId>
-      <artifactId>cloudstack-service-console-proxy-rdpclient</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <resources>
-      <resource>
-        <directory>certs</directory>
-        <excludes>
-          <exclude>realhostip.csr</exclude>
-        </excludes>
-      </resource>
-    </resources>
-  </build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-console-proxy</artifactId>
+    <name>Apache CloudStack Console Proxy - Server</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-service-console-proxy</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>rdpclient</groupId>
+            <artifactId>cloudstack-service-console-proxy-rdpclient</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <resources>
+            <resource>
+                <directory>certs</directory>
+                <excludes>
+                    <exclude>realhostip.csr</exclude>
+                </excludes>
+            </resource>
+        </resources>
+    </build>
 </project>
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AjaxFIFOImageCache.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AjaxFIFOImageCache.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/AuthenticationException.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AuthenticationException.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/AuthenticationException.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AuthenticationException.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAuthenticationResult.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAuthenticationResult.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAuthenticationResult.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAuthenticationResult.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClient.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClient.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClient.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientBase.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientBase.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientListener.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientListener.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientListener.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientListener.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientParam.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientParam.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientParam.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientParam.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientStatsCollector.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientStatsCollector.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientStatsCollector.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientStatsCollector.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyGCThread.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyGCThread.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyMonitor.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyMonitor.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyMonitor.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyMonitor.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyRdpClient.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxySecureServerFactoryImpl.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxySecureServerFactoryImpl.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxySecureServerFactoryImpl.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxySecureServerFactoryImpl.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyServerFactory.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyServerFactory.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyServerFactory.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyServerFactory.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyVncClient.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyVncClient.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/InputEventType.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/InputEventType.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/InputEventType.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/InputEventType.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/KeysymToKeycode.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/KeysymToKeycode.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/rdp/KeysymToKeycode.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/KeysymToKeycode.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/ITileScanListener.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/ITileScanListener.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/ITileScanListener.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/ITileScanListener.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/ImageHelper.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/ImageHelper.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/ImageHelper.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/ImageHelper.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/Logger.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Logger.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/Logger.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Logger.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/LoggerFactory.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/LoggerFactory.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/LoggerFactory.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/LoggerFactory.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/RawHTTP.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RawHTTP.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/RawHTTP.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RawHTTP.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/Region.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Region.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/Region.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Region.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/RegionClassifier.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RegionClassifier.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/RegionClassifier.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RegionClassifier.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/TileInfo.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/TileInfo.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/TileInfo.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/TileInfo.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/util/TileTracker.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/TileTracker.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/util/TileTracker.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/TileTracker.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/FrameBufferCanvas.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/FrameBufferCanvas.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/FrameBufferCanvas.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/FrameBufferCanvas.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/FrameBufferUpdateListener.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/FrameBufferUpdateListener.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/FrameBufferUpdateListener.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/FrameBufferUpdateListener.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/PaintNotificationListener.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/PaintNotificationListener.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/PaintNotificationListener.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/PaintNotificationListener.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/RfbConstants.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/RfbConstants.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/RfbConstants.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/RfbConstants.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClient.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClient.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClient.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClientPacketSender.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClientPacketSender.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClientPacketSender.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClientPacketSender.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncScreenDescription.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncScreenDescription.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncScreenDescription.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncScreenDescription.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/ClientPacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/ClientPacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/ClientPacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/ClientPacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/FramebufferUpdateRequestPacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/FramebufferUpdateRequestPacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/FramebufferUpdateRequestPacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/FramebufferUpdateRequestPacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/KeyboardEventPacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/KeyboardEventPacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/KeyboardEventPacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/KeyboardEventPacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/MouseEventPacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/MouseEventPacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/MouseEventPacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/MouseEventPacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/SetEncodingsPacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/SetEncodingsPacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/SetEncodingsPacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/SetEncodingsPacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/SetPixelFormatPacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/SetPixelFormatPacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/client/SetPixelFormatPacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/client/SetPixelFormatPacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/CopyRect.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/CopyRect.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/CopyRect.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/CopyRect.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/FrameBufferSizeChangeRequest.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/FrameBufferSizeChangeRequest.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/FrameBufferSizeChangeRequest.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/FrameBufferSizeChangeRequest.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/FramebufferUpdatePacket.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/FramebufferUpdatePacket.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/FramebufferUpdatePacket.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/FramebufferUpdatePacket.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/RawRect.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/RawRect.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/RawRect.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/RawRect.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/Rect.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/Rect.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/Rect.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/Rect.java
diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java
similarity index 100%
rename from services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java
rename to services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java
diff --git a/services/console-proxy/server/test/com/cloud/consoleproxy/ConsoleProxyRdpClientTest.java b/services/console-proxy/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyRdpClientTest.java
similarity index 100%
rename from services/console-proxy/server/test/com/cloud/consoleproxy/ConsoleProxyRdpClientTest.java
rename to services/console-proxy/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyRdpClientTest.java
diff --git a/services/iam/plugin/pom.xml b/services/iam/plugin/pom.xml
index 373aed2..1ea101d 100644
--- a/services/iam/plugin/pom.xml
+++ b/services/iam/plugin/pom.xml
@@ -1,58 +1,59 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-plugin-iam</artifactId>
-  <name>Apache CloudStack IAM - Plugin</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-service-iam</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>    
-    </dependency> 
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>    
-    </dependency> 
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>    
-    </dependency>  
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-iam</artifactId>
-      <version>${project.version}</version>    
-    </dependency>  
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>              
-  </dependencies> 
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-plugin-iam</artifactId>
+    <name>Apache CloudStack IAM - Plugin</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-service-iam</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-iam</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AddAccountToIAMGroupCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AddAccountToIAMGroupCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AddAccountToIAMGroupCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AddAccountToIAMGroupCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AddIAMPermissionToIAMPolicyCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AddIAMPermissionToIAMPolicyCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AddIAMPermissionToIAMPolicyCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AddIAMPermissionToIAMPolicyCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToAccountCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToAccountCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToAccountCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToAccountCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToIAMGroupCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToIAMGroupCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToIAMGroupCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/AttachIAMPolicyToIAMGroupCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/CreateIAMGroupCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/CreateIAMGroupCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/CreateIAMGroupCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/CreateIAMGroupCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/CreateIAMPolicyCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/CreateIAMPolicyCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/CreateIAMPolicyCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/CreateIAMPolicyCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/DeleteIAMGroupCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/DeleteIAMGroupCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/DeleteIAMGroupCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/DeleteIAMGroupCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/DeleteIAMPolicyCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/DeleteIAMPolicyCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/DeleteIAMPolicyCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/DeleteIAMPolicyCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/ListIAMGroupsCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/ListIAMGroupsCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/ListIAMGroupsCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/ListIAMGroupsCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/ListIAMPoliciesCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/ListIAMPoliciesCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/ListIAMPoliciesCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/ListIAMPoliciesCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveAccountFromIAMGroupCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveAccountFromIAMGroupCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveAccountFromIAMGroupCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveAccountFromIAMGroupCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveIAMPermissionFromIAMPolicyCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveIAMPermissionFromIAMPolicyCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveIAMPermissionFromIAMPolicyCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveIAMPermissionFromIAMPolicyCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromAccountCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromAccountCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromAccountCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromAccountCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromIAMGroupCmd.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromIAMGroupCmd.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromIAMGroupCmd.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/command/iam/RemoveIAMPolicyFromIAMGroupCmd.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/response/iam/IAMGroupResponse.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/response/iam/IAMGroupResponse.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/response/iam/IAMGroupResponse.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/response/iam/IAMGroupResponse.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/response/iam/IAMPermissionResponse.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/response/iam/IAMPermissionResponse.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/response/iam/IAMPermissionResponse.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/response/iam/IAMPermissionResponse.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/api/response/iam/IAMPolicyResponse.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/api/response/iam/IAMPolicyResponse.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/api/response/iam/IAMPolicyResponse.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/api/response/iam/IAMPolicyResponse.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/iam/IAMApiService.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/iam/IAMApiService.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/iam/IAMApiService.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/iam/IAMApiService.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/iam/IAMApiServiceImpl.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/iam/IAMApiServiceImpl.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/iam/IAMApiServiceImpl.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/iam/IAMApiServiceImpl.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/iam/RoleBasedAPIAccessChecker.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/iam/RoleBasedAPIAccessChecker.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/iam/RoleBasedAPIAccessChecker.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/iam/RoleBasedAPIAccessChecker.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/iam/RoleBasedEntityAccessChecker.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/iam/RoleBasedEntityAccessChecker.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/iam/RoleBasedEntityAccessChecker.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/iam/RoleBasedEntityAccessChecker.java
diff --git a/services/iam/plugin/src/org/apache/cloudstack/iam/RoleBasedEntityQuerySelector.java b/services/iam/plugin/src/main/java/org/apache/cloudstack/iam/RoleBasedEntityQuerySelector.java
similarity index 100%
rename from services/iam/plugin/src/org/apache/cloudstack/iam/RoleBasedEntityQuerySelector.java
rename to services/iam/plugin/src/main/java/org/apache/cloudstack/iam/RoleBasedEntityQuerySelector.java
diff --git a/services/iam/plugin/resources/META-INF/cloudstack/iam-access-checkers/module.properties b/services/iam/plugin/src/main/resources/META-INF/cloudstack/iam-access-checkers/module.properties
similarity index 100%
rename from services/iam/plugin/resources/META-INF/cloudstack/iam-access-checkers/module.properties
rename to services/iam/plugin/src/main/resources/META-INF/cloudstack/iam-access-checkers/module.properties
diff --git a/services/iam/plugin/resources/META-INF/cloudstack/iam-access-checkers/spring-iam-access-checkers-context.xml b/services/iam/plugin/src/main/resources/META-INF/cloudstack/iam-access-checkers/spring-iam-access-checkers-context.xml
similarity index 100%
rename from services/iam/plugin/resources/META-INF/cloudstack/iam-access-checkers/spring-iam-access-checkers-context.xml
rename to services/iam/plugin/src/main/resources/META-INF/cloudstack/iam-access-checkers/spring-iam-access-checkers-context.xml
diff --git a/services/iam/plugin/test/org/apache/cloudstack/iam/test/IAMApiServiceTest.java b/services/iam/plugin/src/test/java/org/apache/cloudstack/iam/test/IAMApiServiceTest.java
similarity index 100%
rename from services/iam/plugin/test/org/apache/cloudstack/iam/test/IAMApiServiceTest.java
rename to services/iam/plugin/src/test/java/org/apache/cloudstack/iam/test/IAMApiServiceTest.java
diff --git a/services/iam/plugin/test/resources/db.properties b/services/iam/plugin/src/test/resources/db.properties
similarity index 100%
rename from services/iam/plugin/test/resources/db.properties
rename to services/iam/plugin/src/test/resources/db.properties
diff --git a/services/iam/pom.xml b/services/iam/pom.xml
index 30611c0..2d0baed 100644
--- a/services/iam/pom.xml
+++ b/services/iam/pom.xml
@@ -1,59 +1,59 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloudstack-service-iam</artifactId>
-  <name>Apache CloudStack IAM Service</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-services</artifactId>
-    <version>4.7.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
-  <modules>
-    <module>plugin</module>
-    <module>server</module>
-  </modules>
-  <!-- 
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>      
-    </dependency>	
-  </dependencies>
-  -->
-  
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloudstack-service-iam</artifactId>
+    <name>Apache CloudStack IAM Service</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-services</artifactId>
+        <version>4.7.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <build>
+        <defaultGoal>install</defaultGoal>
+    </build>
+    <modules>
+        <module>plugin</module>
+        <module>server</module>
+    </modules>
+<!--
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+-->
 </project>
diff --git a/services/iam/server/pom.xml b/services/iam/server/pom.xml
index e12b5af..15840a8 100644
--- a/services/iam/server/pom.xml
+++ b/services/iam/server/pom.xml
@@ -1,57 +1,57 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-iam</artifactId>
-  <name>Apache CloudStack IAM - Server</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-service-iam</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-	<dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${cs.commons-io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>net.sf.ehcache</groupId>
-      <artifactId>ehcache-core</artifactId>
-    </dependency>      
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-	<dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>      
-    </dependency>       
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-iam</artifactId>
+    <name>Apache CloudStack IAM - Server</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-service-iam</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.ehcache</groupId>
+            <artifactId>ehcache-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/api/IAMGroup.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMGroup.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/api/IAMGroup.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMGroup.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/api/IAMPolicy.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMPolicy.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/api/IAMPolicy.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMPolicy.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/api/IAMPolicyPermission.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMPolicyPermission.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/api/IAMPolicyPermission.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMPolicyPermission.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/api/IAMService.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMService.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/api/IAMService.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/api/IAMService.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMAccountPolicyMapVO.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMAccountPolicyMapVO.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMAccountPolicyMapVO.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMAccountPolicyMapVO.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMGroupAccountMapVO.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMGroupAccountMapVO.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMGroupAccountMapVO.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMGroupAccountMapVO.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMGroupPolicyMapVO.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMGroupPolicyMapVO.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMGroupPolicyMapVO.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMGroupPolicyMapVO.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMGroupVO.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMGroupVO.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMGroupVO.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMGroupVO.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMPolicyPermissionVO.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMPolicyPermissionVO.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMPolicyPermissionVO.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMPolicyPermissionVO.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMPolicyVO.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMPolicyVO.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMPolicyVO.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMPolicyVO.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMServiceImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/IAMServiceImpl.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDao.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDao.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDao.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDao.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDaoImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDaoImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDaoImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMAccountPolicyMapDaoImpl.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDao.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDao.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDao.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDao.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDaoImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDaoImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDaoImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupAccountMapDaoImpl.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupDao.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupDao.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupDao.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupDao.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupDaoImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupDaoImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupDaoImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupDaoImpl.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDao.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDao.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDao.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDao.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDaoImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDaoImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDaoImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMGroupPolicyMapDaoImpl.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyDao.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyDao.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyDao.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyDao.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyDaoImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyDaoImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyDaoImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyDaoImpl.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDao.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDao.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDao.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDao.java
diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDaoImpl.java b/services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDaoImpl.java
similarity index 100%
rename from services/iam/server/src/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDaoImpl.java
rename to services/iam/server/src/main/java/org/apache/cloudstack/iam/server/dao/IAMPolicyPermissionDaoImpl.java
diff --git a/services/iam/server/resources/META-INF/cloudstack/core/spring-iam-server-context.xml b/services/iam/server/src/main/resources/META-INF/cloudstack/core/spring-iam-server-context.xml
similarity index 100%
rename from services/iam/server/resources/META-INF/cloudstack/core/spring-iam-server-context.xml
rename to services/iam/server/src/main/resources/META-INF/cloudstack/core/spring-iam-server-context.xml
diff --git a/services/iam/server/test/org/apache/cloudstack/iam/IAMServiceUnitTest.java b/services/iam/server/src/test/java/org/apache/cloudstack/iam/IAMServiceUnitTest.java
similarity index 100%
rename from services/iam/server/test/org/apache/cloudstack/iam/IAMServiceUnitTest.java
rename to services/iam/server/src/test/java/org/apache/cloudstack/iam/IAMServiceUnitTest.java
diff --git a/services/iam/server/test/resources/db.properties b/services/iam/server/src/test/resources/db.properties
similarity index 100%
rename from services/iam/server/test/resources/db.properties
rename to services/iam/server/src/test/resources/db.properties
diff --git a/services/pom.xml b/services/pom.xml
index ad84e62..66011c3 100644
--- a/services/pom.xml
+++ b/services/pom.xml
@@ -1,51 +1,50 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloudstack-services</artifactId>
-  <name>Apache CloudStack Cloud Services</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>cloudstack-checkstyle</id>
-              <phase>none</phase>
-              <inherited>false</inherited>
-            </execution>
-          </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <modules>
-    <module>console-proxy</module>
-    <module>console-proxy-rdp/rdpconsole</module>
-    <module>secondary-storage</module>
-  </modules>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloudstack-services</artifactId>
+    <name>Apache CloudStack Cloud Services</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <modules>
+        <module>console-proxy</module>
+        <module>secondary-storage</module>
+    </modules>
 </project>
diff --git a/services/secondary-storage/controller/pom.xml b/services/secondary-storage/controller/pom.xml
index 642cafe..544a183 100644
--- a/services/secondary-storage/controller/pom.xml
+++ b/services/secondary-storage/controller/pom.xml
@@ -1,50 +1,51 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-controller-secondary-storage</artifactId>
-  <name>Apache CloudStack Secondary Storage Controller</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-service-secondary-storage</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-controller-secondary-storage</artifactId>
+    <name>Apache CloudStack Secondary Storage Controller</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-service-secondary-storage</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/services/secondary-storage/controller/src/org/apache/cloudstack/secondarystorage/PremiumSecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/PremiumSecondaryStorageManagerImpl.java
similarity index 98%
rename from services/secondary-storage/controller/src/org/apache/cloudstack/secondarystorage/PremiumSecondaryStorageManagerImpl.java
rename to services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/PremiumSecondaryStorageManagerImpl.java
index 357c55e..ecfc67e 100644
--- a/services/secondary-storage/controller/src/org/apache/cloudstack/secondarystorage/PremiumSecondaryStorageManagerImpl.java
+++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/PremiumSecondaryStorageManagerImpl.java
@@ -136,7 +136,7 @@
 
             alreadyRunning = _secStorageVmDao.getSecStorageVmListInStates(null, dataCenterId, State.Running, State.Migrating, State.Starting);
 
-            List<CommandExecLogVO> activeCmds = listActiveCommands(dataCenterId, cutTime);
+            List<CommandExecLogVO> activeCmds = findActiveCommands(dataCenterId, cutTime);
             if (alreadyRunning.size() * _capacityPerSSVM - activeCmds.size() < _standbyCapacity) {
                 s_logger.info("secondary storage command execution standby capactiy low (running VMs: " + alreadyRunning.size() + ", active cmds: " + activeCmds.size() +
                         "), starting a new one");
@@ -163,7 +163,7 @@
         return null;
     }
 
-    private List<CommandExecLogVO> listActiveCommands(long dcId, Date cutTime) {
+    private List<CommandExecLogVO> findActiveCommands(long dcId, Date cutTime) {
         SearchCriteria<CommandExecLogVO> sc = activeCommandSearch.create();
 
         sc.setParameters("created", cutTime);
diff --git a/services/secondary-storage/controller/src/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java
similarity index 100%
rename from services/secondary-storage/controller/src/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java
rename to services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java
diff --git a/services/secondary-storage/controller/resources/META-INF/cloudstack/core/spring-services-secondary-storage-controller-core-context.xml b/services/secondary-storage/controller/src/main/resources/META-INF/cloudstack/core/spring-services-secondary-storage-controller-core-context.xml
similarity index 100%
rename from services/secondary-storage/controller/resources/META-INF/cloudstack/core/spring-services-secondary-storage-controller-core-context.xml
rename to services/secondary-storage/controller/src/main/resources/META-INF/cloudstack/core/spring-services-secondary-storage-controller-core-context.xml
diff --git a/services/secondary-storage/controller/test/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerTest.java b/services/secondary-storage/controller/src/test/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerTest.java
similarity index 100%
rename from services/secondary-storage/controller/test/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerTest.java
rename to services/secondary-storage/controller/src/test/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerTest.java
diff --git a/services/secondary-storage/pom.xml b/services/secondary-storage/pom.xml
index ab72e2b..6f3b729 100644
--- a/services/secondary-storage/pom.xml
+++ b/services/secondary-storage/pom.xml
@@ -1,34 +1,50 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloudstack-service-secondary-storage</artifactId>
-  <name>Apache CloudStack Secondary Storage</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-services</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <modules>
-    <module>controller</module>
-    <module>server</module>
-  </modules>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloudstack-service-secondary-storage</artifactId>
+    <name>Apache CloudStack Secondary Storage</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-services</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <modules>
+        <module>controller</module>
+        <module>server</module>
+    </modules>
 </project>
diff --git a/services/secondary-storage/server/pom.xml b/services/secondary-storage/server/pom.xml
index 0558d91..90e1a77 100644
--- a/services/secondary-storage/server/pom.xml
+++ b/services/secondary-storage/server/pom.xml
@@ -1,114 +1,115 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-secondary-storage</artifactId>
-  <name>Apache CloudStack Secondary Storage Service</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack-service-secondary-storage</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-secondary-storage</artifactId>
+    <name>Apache CloudStack Secondary Storage Service</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack-service-secondary-storage</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
     <dependencies>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <!-- required deps for the systemvm -->
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-agent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-server</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-storage-configdrive</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <!-- dependencies for starting a post upload server on ssvm -->
-      <dependency>
-        <groupId>io.netty</groupId>
-        <artifactId>netty-all</artifactId>
-        <version>4.0.33.Final</version>
-        <scope>compile</scope>
-      </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-         <skipTests>${skipTests}</skipTests>
-         <systemPropertyVariables>
-            <log4j.configuration>file:${project.build.testSourceDirectory}/../conf/log4j.xml</log4j.configuration>
-        </systemPropertyVariables>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>java</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <mainClass>com.cloud.agent.AgentShell</mainClass>
-          <arguments>
-            <argument>zone=1</argument>
-            <argument>pod=1</argument>
-            <argument>host=192.168.56.1</argument>
-            <argument>name=192.168.56.10</argument>
-            <argument>eth1ip=192.168.56.10</argument>
-            <argument>eth2ip=192.168.56.10</argument>
-            <argument>guid=SecondaryStorage.1</argument>
-            <argument>secondary.storage.vm=false</argument>
-            <argument>instance=Secondary</argument>
-          </arguments>
-          <systemProperties>
-            <systemProperty>
-              <key>javax.net.ssl.trustStore</key>
-              <value>certs/realhostip.keystore</value>
-              <key>log.home</key>
-              <value>${PWD}/</value>
-            </systemProperty>
-          </systemProperties>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <!-- required deps for the systemvm -->
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-agent</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-storage-configdrive</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <!-- dependencies for starting a post upload server on ssvm -->
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+            <version>4.0.33.Final</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>${skipTests}</skipTests>
+                    <systemPropertyVariables>
+                        <log4j.configuration>file:${project.build.testSourceDirectory}/../conf/log4j.xml</log4j.configuration>
+                    </systemPropertyVariables>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>java</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <mainClass>com.cloud.agent.AgentShell</mainClass>
+                    <arguments>
+                        <argument>zone=1</argument>
+                        <argument>pod=1</argument>
+                        <argument>host=192.168.56.1</argument>
+                        <argument>name=192.168.56.10</argument>
+                        <argument>eth1ip=192.168.56.10</argument>
+                        <argument>eth2ip=192.168.56.10</argument>
+                        <argument>guid=SecondaryStorage.1</argument>
+                        <argument>secondary.storage.vm=false</argument>
+                        <argument>instance=Secondary</argument>
+                    </arguments>
+                    <systemProperties>
+                        <systemProperty>
+                            <key>javax.net.ssl.trustStore</key>
+                            <value>certs/realhostip.keystore</value>
+                            <key>log.home</key>
+                            <value>${PWD}/</value>
+                        </systemProperty>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/HttpUploadServerHandler.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/HttpUploadServerHandler.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/HttpUploadServerHandler.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/HttpUploadServerHandler.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/SecondaryStorageResourceHandler.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResourceHandler.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/SecondaryStorageResourceHandler.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResourceHandler.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManager.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManager.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManager.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManager.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/UploadEntity.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadEntity.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/template/UploadEntity.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadEntity.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/UploadManager.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManager.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/template/UploadManager.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManager.java
diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/template/UploadManagerImpl.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManagerImpl.java
similarity index 100%
rename from services/secondary-storage/server/src/org/apache/cloudstack/storage/template/UploadManagerImpl.java
rename to services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManagerImpl.java
diff --git a/services/secondary-storage/server/resources/META-INF/cloudstack/secondary-storage-discoverer/module.properties b/services/secondary-storage/server/src/main/resources/META-INF/cloudstack/secondary-storage-discoverer/module.properties
similarity index 100%
rename from services/secondary-storage/server/resources/META-INF/cloudstack/secondary-storage-discoverer/module.properties
rename to services/secondary-storage/server/src/main/resources/META-INF/cloudstack/secondary-storage-discoverer/module.properties
diff --git a/services/secondary-storage/server/resources/META-INF/cloudstack/secondary-storage-discoverer/spring-secondary-storage-discoverer-context.xml b/services/secondary-storage/server/src/main/resources/META-INF/cloudstack/secondary-storage-discoverer/spring-secondary-storage-discoverer-context.xml
similarity index 100%
rename from services/secondary-storage/server/resources/META-INF/cloudstack/secondary-storage-discoverer/spring-secondary-storage-discoverer-context.xml
rename to services/secondary-storage/server/src/main/resources/META-INF/cloudstack/secondary-storage-discoverer/spring-secondary-storage-discoverer-context.xml
diff --git a/services/secondary-storage/server/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java b/services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
similarity index 100%
rename from services/secondary-storage/server/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
rename to services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
diff --git a/services/secondary-storage/server/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java b/services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
similarity index 100%
rename from services/secondary-storage/server/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
rename to services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
diff --git a/setup/db/create-schema-premium.sql b/setup/db/create-schema-premium.sql
index 3c86710..d8d60ff 100644
--- a/setup/db/create-schema-premium.sql
+++ b/setup/db/create-schema-premium.sql
@@ -285,42 +285,4 @@
 
 USE `cloud`;
 
-CREATE TABLE `cloud`.`netapp_volume` (
-  `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
-  `ip_address` varchar(255) NOT NULL COMMENT 'ip address/fqdn of the volume',
-  `pool_id` bigint unsigned NOT NULL COMMENT 'id for the pool',
-  `pool_name` varchar(255) NOT NULL COMMENT 'name for the pool',
-  `aggregate_name` varchar(255) NOT NULL COMMENT 'name for the aggregate',
-  `volume_name` varchar(255) NOT NULL COMMENT 'name for the volume',
-  `volume_size` varchar(255) NOT NULL COMMENT 'volume size',
-  `snapshot_policy` varchar(255) NOT NULL COMMENT 'snapshot policy',
-  `snapshot_reservation` int NOT NULL COMMENT 'snapshot reservation',  
-  `username` varchar(255) NOT NULL COMMENT 'username',  
-  `password` varchar(200) COMMENT 'password',
-  `round_robin_marker` int COMMENT 'This marks the volume to be picked up for lun creation, RR fashion',
-  PRIMARY KEY  (`id`),
-  CONSTRAINT `fk_netapp_volume__pool_id` FOREIGN KEY `fk_netapp_volume__pool_id` (`pool_id`) REFERENCES `cloud`.`netapp_pool` (`id`) ON DELETE CASCADE,
-  INDEX `i_netapp_volume__pool_id`(`pool_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `cloud`.`netapp_pool` (
-  `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
-  `name` varchar(255) NOT NULL UNIQUE COMMENT 'name for the pool',
-  `algorithm` varchar(255) NOT NULL COMMENT 'algorithm',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `cloud`.`netapp_lun` (
-  `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
-  `lun_name` varchar(255) NOT NULL COMMENT 'lun name',
-  `target_iqn` varchar(255) NOT NULL COMMENT 'target iqn',
-  `path` varchar(255) NOT NULL COMMENT 'lun path',
-  `size` bigint NOT NULL COMMENT 'lun size',
-  `volume_id` bigint unsigned NOT NULL COMMENT 'parent volume id',
-  PRIMARY KEY (`id`),
-  CONSTRAINT `fk_netapp_lun__volume_id` FOREIGN KEY `fk_netapp_lun__volume_id` (`volume_id`) REFERENCES `cloud`.`netapp_volume` (`id`) ON DELETE CASCADE,
-  INDEX `i_netapp_lun__volume_id`(`volume_id`),
-  INDEX `i_netapp_lun__lun_name`(`lun_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
 SET foreign_key_checks = 1;
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 7665aec..2c680918 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -195,9 +195,6 @@
 DROP TABLE IF EXISTS `cloud`.`vm_compute_tags`;
 DROP TABLE IF EXISTS `cloud`.`vm_root_disk_tags`;
 DROP TABLE IF EXISTS `cloud`.`vm_network_map`;
-DROP TABLE IF EXISTS `cloud`.`netapp_volume`;
-DROP TABLE IF EXISTS `cloud`.`netapp_pool`;
-DROP TABLE IF EXISTS `cloud`.`netapp_lun`;
 
 CREATE TABLE `cloud`.`version` (
   `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id',
diff --git a/setup/db/hypervisor_capabilities.simulator.sql b/setup/db/hypervisor_capabilities.simulator.sql
index 32f9aaa..f0644f7 100755
--- a/setup/db/hypervisor_capabilities.simulator.sql
+++ b/setup/db/hypervisor_capabilities.simulator.sql
@@ -16,4 +16,4 @@
 -- under the License.
 
 
-INSERT INTO `cloud`.`hypervisor_capabilities` (uuid, hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled, max_data_volumes_limit, max_hosts_per_cluster, storage_motion_supported, vm_snapshot_enabled) values (UUID(), 'Simulator', 'default', 50, 1, 6, NULL, 0, 1);
+INSERT INTO `cloud`.`hypervisor_capabilities` (uuid, hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled, max_data_volumes_limit, max_hosts_per_cluster, storage_motion_supported, vm_snapshot_enabled) values (UUID(), 'Simulator', 'default', 50, 1, 6, NULL, 1, 1);
diff --git a/systemvm/debian/opt/cloud/bin/cs/CsHelper.py b/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
index ff404f0..278e1e6 100755
--- a/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
+++ b/systemvm/debian/opt/cloud/bin/cs/CsHelper.py
@@ -188,6 +188,8 @@
         logging.info("Executing: %s" % command)
         result = subprocess.check_output(command, shell=True)
         returncode = 0
+
+        logging.debug("Command [%s] has the result [%s]" % (command, result))
         return result.splitlines()
     except subprocess.CalledProcessError as e:
         logging.error(e)
diff --git a/systemvm/debian/opt/cloud/bin/diagnostics.py b/systemvm/debian/opt/cloud/bin/diagnostics.py
new file mode 100755
index 0000000..477f99d
--- /dev/null
+++ b/systemvm/debian/opt/cloud/bin/diagnostics.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import shlex
+import subprocess
+import sys
+
+
+def run_cmd(command):
+    if command is not None:
+        try:
+            p = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+            stdout, stderr = p.communicate()
+            return_code = p.returncode
+
+        except OSError as e:
+            stdout = "Check your command type"
+            stderr = "Exception occurred: %s" % e
+            return_code = 1
+
+        finally:
+            print('%s&&' % stdout.strip())
+            print('%s&&' % stderr.strip())
+            print('%s' % return_code)
+
+
+def get_command():
+    arguments = sys.argv
+    cmd = " ".join(arguments[1:])
+    cmd_type = sys.argv[1]
+
+    if cmd_type == 'ping':
+        if '-c' in arguments:
+            return cmd
+        else:
+            return cmd + " -c 4"
+
+    elif cmd_type == 'traceroute':
+        if '-m' in arguments:
+            return cmd
+        else:
+            return cmd + " -m 20"
+
+    elif cmd_type == 'arping':
+        if '-c' in arguments:
+            return cmd
+        else:
+            return cmd + " -c 4"
+
+    else:
+        return None
+
+
+if __name__ == "__main__":
+    command = get_command()
+    run_cmd(command)
diff --git a/systemvm/pom.xml b/systemvm/pom.xml
index a05c794..76f1d8c 100644
--- a/systemvm/pom.xml
+++ b/systemvm/pom.xml
@@ -1,248 +1,245 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-systemvm</artifactId>
-  <name>Apache CloudStack System VM</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <properties>
-    <mkisofs>mkisofs</mkisofs>
-  </properties>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-agent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-secondary-storage</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-console-proxy</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <configuration>
-          <finalName>agent</finalName>
-          <appendAssemblyId>false</appendAssemblyId>
-          <descriptors>
-            <descriptor>systemvm-agent-descriptor.xml</descriptor>
-          </descriptors>
-        </configuration>
-        <executions>
-          <execution>
-            <id>make-systemvm</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-resources-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-resources</id>
-            <!-- here the phase you need -->
-            <phase>package</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>dist</outputDirectory>
-              <resources>          
-                <resource>
-                  <directory>target</directory>
-                  <includes>
-                    <include>agent.zip</include>
-                  </includes>
-                </resource>
-                <resource>
-                  <directory>debian/root/.ssh</directory>
-                  <includes>
-                    <include>authorized_keys</include>
-                  </includes>
-                </resource>
-              </resources>              
-            </configuration>            
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>build-cloud-scripts</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <mkdir dir="${basedir}/dist" />
-                <mkdir dir="${basedir}/target/build-patch" />
-                <copy overwrite="true" todir="${basedir}/target/build-patch">
-                  <fileset dir="${basedir}/debian/">
-                    <include name="**/*" />
-                  </fileset>
-                </copy>
-                <copy overwrite="true" todir="${basedir}/target/build-patch/opt/cloud/bin/">
-                  <fileset dir="${basedir}/../scripts/util/">
-                    <include name="**/keystore-*" />
-                  </fileset>
-                </copy>
-                <tar destfile="${basedir}/target/patch.tar">
-                  <tarfileset dir="${basedir}/target/build-patch/"
-                    filemode="755">
-                    <include name="**/*" />
-                    <exclude name="**/.classpath" />
-                    <exclude name="**/log**"/>
-                    <exclude name="**/logrotate.d"/>
-                    <exclude name="**/.project" />
-                    <exclude name="**/wscript_build" />
-                  </tarfileset>
-                  <tarfileset dir="${basedir}/target/build-patch/"
-                   filemode="644">
-                   <include name="**/log**"/>
-                   <include name="**/logrotate.d/**"/>
-                  </tarfileset>
-                </tar>
-                <gzip destfile="${basedir}/dist/cloud-scripts.tgz" src="${basedir}/target/patch.tar" />
-                <delete dir="${basedir}/target/build-patch" />
-                <delete file="${basedir}/target/patch.tar" />
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    <plugin>
-      <groupId>org.codehaus.mojo</groupId>
-       <artifactId>exec-maven-plugin</artifactId>
-       <version>1.2.1</version>
-       <executions>
-         <execution>
-           <phase>package</phase>
-           <goals>
-             <goal>exec</goal>
-           </goals>
-         </execution>
-       </executions>
-       <configuration>
-         <executable>${mkisofs}</executable>
-         <workingDirectory>dist</workingDirectory>
-         <arguments>
-           <argument>-quiet</argument>
-           <argument>-r</argument>
-           <argument>-o</argument>
-           <argument>systemvm.iso</argument>
-           <argument>agent.zip</argument>
-           <argument>cloud-scripts.tgz</argument>
-           <argument>authorized_keys</argument>
-         </arguments>
-       </configuration>
-     </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <!-- Debian will never distribute mkisofs due to licensing issues.
-         Fortunately genisoimage is a work-alike -->
-    <profile>
-      <id>genisoimage</id>
-      <activation>
-        <file>
-          <exists>/usr/bin/genisoimage</exists>
-        </file>
-      </activation>
-      <properties>
-        <mkisofs>genisoimage</mkisofs>
-      </properties>
-    </profile>
-    <profile>
-      <id>vmware</id>
-      <activation>
-        <property>
-          <name>noredist</name>
-        </property>
-      </activation>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.cloudstack</groupId>
-                <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.cloudstack</groupId>
-                <artifactId>cloud-vmware-base</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-        </dependencies>
-    </profile>
-    <profile>
-      <id>quickcloud</id>
-      <build>
-      <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>java</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <mainClass>com.cloud.agent.AgentShell</mainClass>
-          <arguments>
-            <argument>zone=1</argument>
-            <argument>pod=1</argument>
-            <argument>host=192.168.56.1</argument>
-            <argument>guid=ConsoleProxy.1</argument>
-          </arguments>
-          <systemProperties>
-            <systemProperty>
-              <key>javax.net.ssl.trustStore</key>
-              <value>certs/realhostip.keystore</value>
-              <key>log.home</key>
-              <value>${PWD}/</value>
-            </systemProperty>
-          </systemProperties>
-        </configuration>
-      </plugin>
-      </plugins>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-systemvm</artifactId>
+    <name>Apache CloudStack System VM</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <properties>
+        <mkisofs>mkisofs</mkisofs>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-agent</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-secondary-storage</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-console-proxy</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <finalName>agent</finalName>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <descriptors>
+                        <descriptor>systemvm-agent-descriptor.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-systemvm</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <!-- here the phase you need -->
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>dist</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>target</directory>
+                                    <includes>
+                                        <include>agent.zip</include>
+                                    </includes>
+                                </resource>
+                                <resource>
+                                    <directory>debian/root/.ssh</directory>
+                                    <includes>
+                                        <include>authorized_keys</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>build-cloud-scripts</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <mkdir dir="${basedir}/dist" />
+                                <mkdir dir="${basedir}/target/build-patch" />
+                                <copy overwrite="true" todir="${basedir}/target/build-patch">
+                                    <fileset dir="${basedir}/debian/">
+                                        <include name="**/*" />
+                                    </fileset>
+                                </copy>
+                                <copy overwrite="true" todir="${basedir}/target/build-patch/opt/cloud/bin/">
+                                    <fileset dir="${basedir}/../scripts/util/">
+                                        <include name="**/keystore-*" />
+                                    </fileset>
+                                </copy>
+                                <tar destfile="${basedir}/target/patch.tar">
+                                    <tarfileset dir="${basedir}/target/build-patch/" filemode="755">
+                                        <include name="**/*" />
+                                        <exclude name="**/.classpath" />
+                                        <exclude name="**/log**" />
+                                        <exclude name="**/logrotate.d" />
+                                        <exclude name="**/.project" />
+                                        <exclude name="**/wscript_build" />
+                                    </tarfileset>
+                                    <tarfileset dir="${basedir}/target/build-patch/" filemode="644">
+                                        <include name="**/log**" />
+                                        <include name="**/logrotate.d/**" />
+                                    </tarfileset>
+                                </tar>
+                                <gzip destfile="${basedir}/dist/cloud-scripts.tgz" src="${basedir}/target/patch.tar" />
+                                <delete dir="${basedir}/target/build-patch" />
+                                <delete file="${basedir}/target/patch.tar" />
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <executable>${mkisofs}</executable>
+                    <workingDirectory>dist</workingDirectory>
+                    <arguments>
+                        <argument>-quiet</argument>
+                        <argument>-r</argument>
+                        <argument>-o</argument>
+                        <argument>systemvm.iso</argument>
+                        <argument>agent.zip</argument>
+                        <argument>cloud-scripts.tgz</argument>
+                        <argument>authorized_keys</argument>
+                    </arguments>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
-  </profile>
-  </profiles>
-
+    <profiles>
+        <!-- Debian will never distribute mkisofs due to licensing issues. Fortunately genisoimage is a work-alike -->
+        <profile>
+            <id>genisoimage</id>
+            <activation>
+                <file>
+                    <exists>/usr/bin/genisoimage</exists>
+                </file>
+            </activation>
+            <properties>
+                <mkisofs>genisoimage</mkisofs>
+            </properties>
+        </profile>
+        <profile>
+            <id>vmware</id>
+            <activation>
+                <property>
+                    <name>noredist</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cloudstack</groupId>
+                    <artifactId>cloud-vmware-base</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>quickcloud</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <mainClass>com.cloud.agent.AgentShell</mainClass>
+                            <arguments>
+                                <argument>zone=1</argument>
+                                <argument>pod=1</argument>
+                                <argument>host=192.168.56.1</argument>
+                                <argument>guid=ConsoleProxy.1</argument>
+                            </arguments>
+                            <systemProperties>
+                                <systemProperty>
+                                    <key>javax.net.ssl.trustStore</key>
+                                    <value>certs/realhostip.keystore</value>
+                                    <key>log.home</key>
+                                    <value>${PWD}/</value>
+                                </systemProperty>
+                            </systemProperties>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/test/integration/component/test_updateResourceCount.py b/test/integration/component/test_updateResourceCount.py
new file mode 100644
index 0000000..c9bd6e6
--- /dev/null
+++ b/test/integration/component/test_updateResourceCount.py
@@ -0,0 +1,235 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" Test update resource count API method
+"""
+# Import Local Modules
+from marvin.cloudstackTestCase import cloudstackTestCase
+from marvin.lib.utils import (random_gen,
+                              cleanup_resources)
+from marvin.lib.base import (Domain,
+                             Account,
+                             ServiceOffering,
+                             VirtualMachine,
+                             Network,
+                             User,
+                             NATRule,
+                             Template,
+                             PublicIPAddress,
+                             Resources)
+from marvin.lib.common import (get_domain,
+                               get_zone,
+                               get_template,
+                               list_accounts,
+                               list_virtual_machines,
+                               list_service_offering,
+                               list_templates,
+                               list_users,
+                               get_builtin_template_info,
+                               wait_for_cleanup)
+from nose.plugins.attrib import attr
+from marvin.cloudstackException import CloudstackAPIException
+import time
+
+
+class Services:
+
+    """These are some configurations that will get implemented in ACS. They are put here to follow some sort of standard that seems to be in place.
+    """
+
+    def __init__(self):
+        self.services = {
+            "account": {
+                "email": "test@test.com",
+                "firstname": "Test",
+                "lastname": "Tester",
+                "username": "test",
+                "password": "acountFirstUserPass",
+            },
+            "service_offering_custom": {
+                "name": "Custom service offering test",
+                "displaytext": "Custom service offering test",
+                "cpunumber": None,
+                "cpuspeed": None,
+                # in MHz
+                "memory": None,
+                # In MBs
+            },
+            "service_offering_normal": {
+                "name": "Normal service offering",
+                "displaytext": "Normal service offering",
+                "cpunumber": 2,
+                "cpuspeed": 1000,
+                # in MHz
+                "memory": 512,
+                # In MBs
+            },
+            "virtual_machine": {
+                "displayname": "Test VM",
+                "username": "root",
+                "password": "password",
+                "ssh_port": 22,
+                "hypervisor": 'XenServer',
+                # Hypervisor type should be same as
+                # hypervisor type of cluster
+                "privateport": 22,
+                "publicport": 22,
+                "protocol": 'TCP',
+            },
+            "ostype": 'CentOS 5.3 (64-bit)',
+            "sleep": 60,
+            "timeout": 10
+        }
+
+
+class TestUpdateResourceCount(cloudstackTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.testClient = super(TestUpdateResourceCount, cls).getClsTestClient()
+        cls.api_client = cls.testClient.getApiClient()
+
+        cls.services = Services().services
+        cls.zone = get_zone(cls.api_client, cls.testClient.getZoneForTests())
+        cls.services['mode'] = cls.zone.networktype
+        cls.template = get_template(
+            cls.api_client,
+            cls.zone.id,
+            cls.services["ostype"]
+        )
+        cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+        cls.services["virtual_machine"]["template"] = cls.template.id
+
+        cls.service_offering_custom = ServiceOffering.create(
+            cls.api_client,
+            cls.services["service_offering_custom"]
+        )
+        cls.service_offering_normal = ServiceOffering.create(
+            cls.api_client,
+            cls.services["service_offering_normal"]
+        )
+        cls._cleanup = [cls.service_offering_custom, cls.service_offering_normal]
+        return
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            # Cleanup resources used
+            cleanup_resources(cls.api_client, cls._cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+        return
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.dbclient = self.testClient.getDbConnection()
+        self.cleanup = []
+        self.account = Account.create(
+            self.apiclient,
+            self.services["account"]
+        )
+        self.debug("Created account: %s" % self.account.name)
+        self.cleanup.append(self.account)
+        
+        return
+
+    def tearDown(self):
+        try:
+            # Clean up, terminate the created accounts, domains etc
+            cleanup_resources(self.apiclient, self.cleanup)
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+        return
+
+    @attr(
+        tags=[
+            "advanced",
+            "basic",
+            "eip",
+            "advancedns",
+            "sg"],
+        required_hardware="false")
+    def test_01_updateResourceCount(self):
+        """Test update resource count for an account using a custom service offering to deploy a VM.
+        """
+        
+        # This test will execute the following steps to assure resource count update is working properly
+        # 1. Create an account.
+        # 2. Start 2 VMs; one with normal service offering and other with a custom service offering
+        # 3. Call the update resource count method and check the CPU and memory values.
+        #    The two VMs will add up to 3 CPUs and 1024Mb of RAM.
+        # 4. If the return of updateResourceCount method matches with the expected one, the test passes; otherwise, it fails.
+        # 5. Remove everything created by deleting the account
+        
+        vm_1 = VirtualMachine.create(
+            self.apiclient,
+            self.services["virtual_machine"],
+            accountid=self.account.name,
+            domainid=self.account.domainid,
+            serviceofferingid=self.service_offering_custom.id,
+            customcpunumber = 1,
+            customcpuspeed = 1000,
+            custommemory = 512
+        )
+        
+        self.debug("Deployed VM 1 in account: %s, ID: %s" % (
+            self.account.name,
+            vm_1.id
+        ))
+        
+        vm_2 = VirtualMachine.create(
+            self.apiclient,
+            self.services["virtual_machine"],
+            accountid=self.account.name,
+            domainid=self.account.domainid,
+            serviceofferingid=self.service_offering_normal.id
+        )
+        self.debug("Deployed VM 2 in account: %s, ID: %s" % (
+            self.account.name,
+            vm_2.id
+        ))
+
+        resourceCountCpu = Resources.updateCount(
+            self.apiclient,
+            resourcetype=8,
+            account=self.account.name,
+            domainid=self.account.domainid
+        ) 
+            
+        self.debug("ResourceCount for CPU: %s" % (
+            resourceCountCpu[0].resourcecount
+        ))
+        self.assertEqual(
+            resourceCountCpu[0].resourcecount,
+            3,
+            "The number of CPU cores does not seem to be right."
+        )
+        resourceCountMemory = Resources.updateCount(
+            self.apiclient,
+            resourcetype=9,
+            account=self.account.name,
+            domainid=self.account.domainid
+        ) 
+            
+        self.debug("ResourceCount for memory: %s" % (
+            resourceCountMemory[0].resourcecount
+        ))
+        self.assertEqual(
+            resourceCountMemory[0].resourcecount,
+            1024,
+            "The memory amount does not seem to be right."
+        )
+        return
\ No newline at end of file
diff --git a/test/integration/plugins/solidfire/TestAddRemoveHosts.py b/test/integration/plugins/solidfire/TestAddRemoveHosts.py
index d9118dd..1dd29bb 100644
--- a/test/integration/plugins/solidfire/TestAddRemoveHosts.py
+++ b/test/integration/plugins/solidfire/TestAddRemoveHosts.py
@@ -34,7 +34,7 @@
 from marvin.lib.base import Account, ServiceOffering, User, Host, StoragePool, VirtualMachine
 
 # common - commonly used methods for all tests are listed here
-from marvin.lib.common import get_domain, get_template, get_zone, list_hosts, list_clusters, list_volumes
+from marvin.lib.common import get_domain, get_template, get_zone, list_clusters, list_hosts, list_volumes
 
 # utils - utility classes for common cleanup, external library wrappers, etc.
 from marvin.lib.utils import cleanup_resources
@@ -46,14 +46,15 @@
 #
 # Running the tests:
 #  Change the "hypervisor_type" variable to control which hypervisor type to test.
-#  If using XenServer, set a breakpoint on each test after the first one. When the breakpoint is hit, reset the added/removed
-#   host to a snapshot state and re-start it. Once it's up and running, run the test code.
+#  If using XenServer, set a breakpoint on each test after the first one. When the breakpoint is hit, reset the
+#   added/removed host to a snapshot state and re-start it. Once it's up and running, run the test code.
 #  Check that ip_address_of_new_xenserver_host / ip_address_of_new_kvm_host is correct.
 #  If using XenServer, verify the "xen_server_master_hostname" variable is correct.
 #  If using KVM, verify the "kvm_1_ip_address" variable is correct.
 #
 # Note:
-#  If you do have more than one cluster, you might need to change this line: cls.cluster = list_clusters(cls.apiClient)[0]
+#  If you do have more than one cluster, you might need to change this line: cls.cluster = list_clusters(cls.apiClient)[0] and
+#   this variable's value: TestData.clusterId.
 
 
 class TestData:
@@ -95,18 +96,18 @@
     # modify to control which hypervisor type to test
     hypervisor_type = xenServer
     xen_server_master_hostname = "XenServer-6.5-1"
-    kvm_1_ip_address = "10.117.40.112"
-    ip_address_of_new_xenserver_host = "10.117.40.107"
-    ip_address_of_new_kvm_host = "10.117.40.116"
+    kvm_1_ip_address = "10.117.40.111"
+    ip_address_of_new_xenserver_host = "10.117.40.118"
+    ip_address_of_new_kvm_host = "10.117.40.115"
 
     def __init__(self):
         self.testdata = {
             TestData.solidFire: {
-                TestData.mvip: "10.117.40.120",
+                TestData.mvip: "10.117.78.225",
                 TestData.username: "admin",
                 TestData.password: "admin",
                 TestData.port: 443,
-                TestData.url: "https://10.117.40.120:443"
+                TestData.url: "https://10.117.78.225:443"
             },
             TestData.kvm: {
                 TestData.username: "root",
@@ -147,7 +148,7 @@
             TestData.primaryStorage: {
                 TestData.name: "SolidFire-%d" % random.randint(0, 100),
                 TestData.scope: "ZONE",
-                TestData.url: "MVIP=10.117.40.120;SVIP=10.117.41.120;" +
+                TestData.url: "MVIP=10.117.78.225;SVIP=10.117.94.225;" +
                        "clusterAdminUsername=admin;clusterAdminPassword=admin;" +
                        "clusterDefaultMinIops=10000;clusterDefaultMaxIops=15000;" +
                        "clusterDefaultBurstIopsPercentOfMaxIops=1.5;",
@@ -160,7 +161,7 @@
             TestData.primaryStorage2: {
                 TestData.name: "SolidFireShared-%d" % random.randint(0, 100),
                 TestData.scope: "CLUSTER",
-                TestData.url: "MVIP=10.117.40.120;SVIP=10.117.41.120;" +
+                TestData.url: "MVIP=10.117.78.225;SVIP=10.117.94.225;" +
                        "clusterAdminUsername=admin;clusterAdminPassword=admin;" +
                        "minIops=5000;maxIops=50000;burstIops=75000",
                 TestData.provider: "SolidFireShared",
@@ -454,6 +455,143 @@
 
         self._perform_add_remove_xenserver_host(primary_storage_2.id, sf_iscsi_name)
 
+    # Make sure each host is in its own VAG.
+    # Create a VM that needs a new volume from the storage that has a VAG per host.
+    # Verify the volume is in all VAGs.
+    # Remove one of the hosts.
+    # Check that the IQN is no longer in its previous VAG, but that the volume ID is still in that VAG, though.
+    # Add the host back into the cluster. The IQN should be added to a VAG that already has an IQN from this cluster in it.
+    def test_vag_per_host_5(self):
+        hosts = list_hosts(self.apiClient, clusterid=self.cluster.id)
+
+        self.assertTrue(
+            len(hosts) >= 2,
+            "There needs to be at least two hosts."
+        )
+
+        unique_vag_ids = self._get_unique_vag_ids(hosts)
+
+        self.assertTrue(len(hosts) == len(unique_vag_ids), "To run this test, each host should be in its own VAG.")
+
+        primarystorage = self.testdata[TestData.primaryStorage]
+
+        primary_storage = StoragePool.create(
+            self.apiClient,
+            primarystorage,
+            scope=primarystorage[TestData.scope],
+            zoneid=self.zone.id,
+            provider=primarystorage[TestData.provider],
+            tags=primarystorage[TestData.tags],
+            capacityiops=primarystorage[TestData.capacityIops],
+            capacitybytes=primarystorage[TestData.capacityBytes],
+            hypervisor=primarystorage[TestData.hypervisor]
+        )
+
+        self.cleanup.append(primary_storage)
+
+        self.virtual_machine = VirtualMachine.create(
+            self.apiClient,
+            self.testdata[TestData.virtualMachine],
+            accountid=self.account.name,
+            zoneid=self.zone.id,
+            serviceofferingid=self.compute_offering.id,
+            templateid=self.template.id,
+            domainid=self.domain.id,
+            startvm=True
+        )
+
+        root_volume = self._get_root_volume(self.virtual_machine)
+
+        sf_account_id = sf_util.get_sf_account_id(self.cs_api, self.account.id, primary_storage.id, self, TestAddRemoveHosts._sf_account_id_should_be_non_zero_int_err_msg)
+
+        sf_volumes = sf_util.get_active_sf_volumes(self.sfe, sf_account_id)
+
+        sf_volume = sf_util.check_and_get_sf_volume(sf_volumes, root_volume.name, self)
+
+        sf_vag_ids = sf_util.get_vag_ids(self.cs_api, self.cluster.id, primary_storage.id, self)
+
+        sf_util.check_vags(sf_volume, sf_vag_ids, self)
+
+        host = Host(hosts[0].__dict__)
+
+        host_iqn = self._get_host_iqn(host)
+
+        all_vags = sf_util.get_all_vags(self.sfe)
+
+        host_vag = self._get_host_vag(host_iqn, all_vags)
+
+        self.assertTrue(host_vag != None, "The host should be in a VAG.")
+
+        host.delete(self.apiClient)
+
+        sf_volumes = sf_util.get_active_sf_volumes(self.sfe, sf_account_id)
+
+        sf_volume = sf_util.check_and_get_sf_volume(sf_volumes, root_volume.name, self)
+
+        sf_util.check_vags(sf_volume, sf_vag_ids, self)
+
+        all_vags = sf_util.get_all_vags(self.sfe)
+
+        host_vag = self._get_host_vag(host_iqn, all_vags)
+
+        self.assertTrue(host_vag == None, "The host should not be in a VAG.")
+
+        details = {
+            TestData.username: "root",
+            TestData.password: "solidfire",
+            TestData.url: "http://" + host.ipaddress,
+            TestData.podId : host.podid,
+            TestData.zoneId: host.zoneid
+        }
+
+        host = Host.create(
+            self.apiClient,
+            self.cluster,
+            details,
+            hypervisor=host.hypervisor
+        )
+
+        self.assertTrue(
+            isinstance(host, Host),
+            "'host' is not a 'Host'."
+        )
+
+        hosts = list_hosts(self.apiClient, clusterid=self.cluster.id)
+
+        unique_vag_ids = self._get_unique_vag_ids(hosts)
+
+        self.assertTrue(len(hosts) == len(unique_vag_ids) + 1, "There should be one more host than unique VAG.")
+
+    def _get_unique_vag_ids(self, hosts):
+        all_vags = sf_util.get_all_vags(self.sfe)
+
+        unique_vag_ids = []
+
+        for host in hosts:
+            host = Host(host.__dict__)
+
+            host_iqn = self._get_host_iqn(host)
+
+            host_vag = self._get_host_vag(host_iqn, all_vags)
+
+            if host_vag != None and host_vag.volume_access_group_id not in unique_vag_ids:
+                unique_vag_ids.append(host_vag.volume_access_group_id)
+
+        return unique_vag_ids
+
+    def _get_host_vag(self, host_iqn, vags):
+        self.assertTrue(host_iqn, "'host_iqn' should not be 'None'.")
+        self.assertTrue(vags, "'vags' should not be 'None'.")
+
+        self.assertTrue(isinstance(host_iqn, basestring), "'host_iqn' should be a 'string'.")
+        self.assertTrue(isinstance(vags, list), "'vags' should be a 'list'.")
+
+        for vag in vags:
+            if host_iqn in vag.initiators:
+                return vag
+
+        return None
+
     def _perform_add_remove_xenserver_host(self, primary_storage_id, sr_name):
         xen_sr = self.xen_session.xenapi.SR.get_by_name_label(sr_name)[0]
 
@@ -463,7 +601,7 @@
 
         num_pbds = len(pbds)
 
-        sf_vag_id = self._get_sf_vag_id(self.cluster.id, primary_storage_id)
+        sf_vag_id = sf_util.get_vag_id(self.cs_api, self.cluster.id, primary_storage_id, self)
 
         host_iscsi_iqns = self._get_xenserver_host_iscsi_iqns()
 
@@ -604,7 +742,7 @@
         )
 
     def _perform_add_remove_kvm_host(self, primary_storage_id):
-        sf_vag_id = self._get_sf_vag_id(self.cluster.id, primary_storage_id)
+        sf_vag_id = sf_util.get_vag_id(self.cs_api, self.cluster.id, primary_storage_id, self)
 
         kvm_login = self.testdata[TestData.kvm]
 
@@ -720,6 +858,14 @@
 
         return sql_result[0][0]
 
+    def _get_host_iqn(self, host):
+        sql_query = "Select url From host Where uuid = '" + str(host.id) + "'"
+
+        # make sure you can connect to MySQL: https://teamtreehouse.com/community/cant-connect-remotely-to-mysql-server-with-mysql-workbench
+        sql_result = self.dbConnection.execute(sql_query)
+
+        return sql_result[0][0]
+
     def _get_xenserver_host_iscsi_iqns(self):
         hosts = self.xen_session.xenapi.host.get_all()
 
@@ -767,20 +913,6 @@
 
         return result[len(searchFor):].strip()
 
-    def _get_sf_vag_id(self, cluster_id, primary_storage_id):
-        # Get SF Volume Access Group ID
-        sf_vag_id_request = {'clusterid': cluster_id, 'storageid': primary_storage_id}
-        sf_vag_id_result = self.cs_api.getSolidFireVolumeAccessGroupId(sf_vag_id_request)
-        sf_vag_id = sf_vag_id_result['apisolidfirevolumeaccessgroupid']['solidFireVolumeAccessGroupId']
-
-        self.assertEqual(
-            isinstance(sf_vag_id, int),
-            True,
-            TestAddRemoveHosts._vag_id_should_be_non_zero_int_err_msg
-        )
-
-        return sf_vag_id
-
     def _get_sf_vag(self, sf_vag_id):
         return self.sfe.list_volume_access_groups(sf_vag_id, 1).volume_access_groups[0]
 
diff --git a/test/integration/plugins/solidfire/TestCapacityManagement.py b/test/integration/plugins/solidfire/TestCapacityManagement.py
index ab6eff1..0cc9db2 100644
--- a/test/integration/plugins/solidfire/TestCapacityManagement.py
+++ b/test/integration/plugins/solidfire/TestCapacityManagement.py
@@ -33,7 +33,7 @@
 from marvin.lib.base import Account, ServiceOffering, StoragePool, User, VirtualMachine
 
 # common - commonly used methods for all tests are listed here
-from marvin.lib.common import get_domain, get_template, get_zone, list_clusters, list_hosts
+from marvin.lib.common import get_domain, get_template, get_zone, list_hosts
 
 # utils - utility classes for common cleanup, external library wrappers, etc.
 from marvin.lib.utils import cleanup_resources
@@ -47,7 +47,7 @@
 #  If using XenServer, verify the "xen_server_hostname" variable is correct.
 #
 # Note:
-#  If you do have more than one cluster, you might need to change this line: cls.cluster = list_clusters(cls.apiClient)[0]
+#  If you do have more than one cluster, you might need to change this variable: TestData.clusterId.
 
 
 class TestData():
@@ -193,7 +193,6 @@
 
         # Get Resources from Cloud Infrastructure
         cls.zone = get_zone(cls.apiClient, zone_id=cls.testdata[TestData.zoneId])
-        cls.cluster = list_clusters(cls.apiClient)[0]
         cls.template = get_template(cls.apiClient, cls.zone.id, hypervisor=TestData.hypervisor_type)
         cls.domain = get_domain(cls.apiClient, cls.testdata[TestData.domainId])
 
diff --git a/test/integration/plugins/solidfire/TestOnlineStorageMigration.py b/test/integration/plugins/solidfire/TestOnlineStorageMigration.py
new file mode 100644
index 0000000..f7d8c14
--- /dev/null
+++ b/test/integration/plugins/solidfire/TestOnlineStorageMigration.py
@@ -0,0 +1,402 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import logging
+import random
+import SignedAPICall
+import XenAPI
+
+from solidfire.factory import ElementFactory
+
+from util import sf_util
+
+# All tests inherit from cloudstackTestCase
+from marvin.cloudstackTestCase import cloudstackTestCase
+
+# Import Integration Libraries
+
+# base - contains all resources as entities and defines create, delete, list operations on them
+from marvin.lib.base import Account, ServiceOffering, Snapshot, StoragePool, User, VirtualMachine, Volume
+
+# common - commonly used methods for all tests are listed here
+from marvin.lib.common import list_clusters, get_domain, list_hosts, list_snapshots, get_template, list_volumes, get_zone
+
+# utils - utility classes for common cleanup, external library wrappers, etc.
+from marvin.lib.utils import cleanup_resources
+
+# Prerequisites:
+#  Only one zone
+#  Only one pod
+#  Only one cluster
+#
+# Running the tests:
+#  If using XenServer, verify the "xen_server_hostname" variable is correct.
+#
+# Note:
+#  If you do have more than one cluster, you might need to change this line: cls.cluster = list_clusters(cls.apiClient)[0]
+
+
+class TestData():
+    # constants
+    account = "account"
+    capacityBytes = "capacitybytes"
+    capacityIops = "capacityiops"
+    clusterId = "clusterId"
+    computeOffering = "computeoffering"
+    domainId = "domainId"
+    email = "email"
+    firstname = "firstname"
+    hypervisor = "hypervisor"
+    lastname = "lastname"
+    managementServer = "managementServer"
+    mvip = "mvip"
+    name = "name"
+    nfs_folder = "/export/primary2"
+    nfs_path = "nfs://10.117.40.114" + nfs_folder
+    nfs_storage_tag = "NFS-123"
+    password = "password"
+    podId = "podId"
+    port = "port"
+    primaryStorage = "primarystorage"
+    primaryStorage2 = "primarystorage2"
+    provider = "provider"
+    scope = "scope"
+    solidFire = "solidfire"
+    storageTag = "SolidFire_SAN_1"
+    tags = "tags"
+    url = "url"
+    user = "user"
+    username = "username"
+    xenServer = "xenserver"
+    zoneId = "zoneId"
+
+    hypervisor_type = xenServer
+    xen_server_hostname = "XenServer-6.5-1"
+
+    def __init__(self):
+        self.testdata = {
+            TestData.solidFire: {
+                TestData.mvip: "10.117.40.120",
+                TestData.username: "admin",
+                TestData.password: "admin",
+                TestData.port: 443,
+                TestData.url: "https://10.117.40.120:443"
+            },
+            TestData.xenServer: {
+                TestData.username: "root",
+                TestData.password: "solidfire"
+            },
+            TestData.managementServer: {
+                TestData.username: "cloudstack",
+                TestData.password: "solidfire"
+            },
+            TestData.account: {
+                TestData.email: "test@test.com",
+                TestData.firstname: "John",
+                TestData.lastname: "Doe",
+                TestData.username: "test",
+                TestData.password: "test"
+            },
+            TestData.user: {
+                TestData.email: "user@test.com",
+                TestData.firstname: "Jane",
+                TestData.lastname: "Doe",
+                TestData.username: "testuser",
+                TestData.password: "password"
+            },
+            TestData.primaryStorage: {
+                TestData.name: "NFS-%d" % random.randint(0, 100),
+                TestData.scope: "CLUSTER",
+                TestData.clusterId: 1,
+                TestData.url: TestData.nfs_path,
+                TestData.tags: TestData.nfs_storage_tag
+            },
+            TestData.primaryStorage2: {
+                TestData.name: "SolidFire-%d" % random.randint(0, 100),
+                TestData.scope: "ZONE",
+                TestData.url: "MVIP=10.117.40.120;SVIP=10.117.41.120;" +
+                       "clusterAdminUsername=admin;clusterAdminPassword=admin;" +
+                       "clusterDefaultMinIops=10000;clusterDefaultMaxIops=15000;" +
+                       "clusterDefaultBurstIopsPercentOfMaxIops=1.5;",
+                TestData.provider: "SolidFire",
+                TestData.tags: TestData.storageTag,
+                TestData.capacityIops: 4500000,
+                TestData.capacityBytes: 2251799813685248, # 2 PiB
+                TestData.hypervisor: "Any"
+            },
+            TestData.computeOffering: {
+                TestData.name: "SF_CO_1",
+                "displaytext": "SF_CO_1 (Min IOPS = 300; Max IOPS = 600)",
+                "cpunumber": 1,
+                "cpuspeed": 100,
+                "memory": 128,
+                "storagetype": "shared",
+                "customizediops": False,
+                "miniops": "300",
+                "maxiops": "600",
+                "hypervisorsnapshotreserve": 200,
+                TestData.tags: TestData.nfs_storage_tag
+            },
+            TestData.zoneId: 1,
+            TestData.podId: 1,
+            TestData.clusterId: 1,
+            TestData.domainId: 1,
+            TestData.url: "10.117.40.114"
+        }
+
+
+class TestOnlineStorageMigration(cloudstackTestCase):
+    _should_only_be_one_volume_in_list_err_msg = "There should only be one volume in this list."
+    _volume_not_on_correct_primary_storage = "The volume is not on the correct primary storage."
+    _snapshot_not_associated_with_correct_volume = "The snapshot is not associated with the correct volume."
+
+    @classmethod
+    def setUpClass(cls):
+        # Set up API client
+        testclient = super(TestOnlineStorageMigration, cls).getClsTestClient()
+
+        cls.apiClient = testclient.getApiClient()
+        cls.configData = testclient.getParsedTestDataConfig()
+        cls.dbConnection = testclient.getDbConnection()
+
+        cls.testdata = TestData().testdata
+
+        sf_util.set_supports_resign(True, cls.dbConnection)
+
+        cls._connect_to_hypervisor()
+
+        # Set up SolidFire connection
+        solidfire = cls.testdata[TestData.solidFire]
+
+        cls.sfe = ElementFactory.create(solidfire[TestData.mvip], solidfire[TestData.username], solidfire[TestData.password])
+
+        # Get Resources from Cloud Infrastructure
+        cls.zone = get_zone(cls.apiClient, zone_id=cls.testdata[TestData.zoneId])
+        cls.cluster = list_clusters(cls.apiClient)[0]
+        cls.template = get_template(cls.apiClient, cls.zone.id, hypervisor=TestData.hypervisor_type)
+        cls.domain = get_domain(cls.apiClient, cls.testdata[TestData.domainId])
+
+        # Create test account
+        cls.account = Account.create(
+            cls.apiClient,
+            cls.testdata["account"],
+            admin=1
+        )
+
+        # Set up connection to make customized API calls
+        cls.user = User.create(
+            cls.apiClient,
+            cls.testdata["user"],
+            account=cls.account.name,
+            domainid=cls.domain.id
+        )
+
+        url = cls.testdata[TestData.url]
+
+        api_url = "http://" + url + ":8080/client/api"
+        userkeys = User.registerUserKeys(cls.apiClient, cls.user.id)
+
+        cls.cs_api = SignedAPICall.CloudStack(api_url, userkeys.apikey, userkeys.secretkey)
+
+        primarystorage = cls.testdata[TestData.primaryStorage]
+
+        cls.primary_storage = StoragePool.create(
+            cls.apiClient,
+            primarystorage,
+            scope=primarystorage[TestData.scope],
+            zoneid=cls.zone.id,
+            podid=cls.testdata[TestData.podId],
+            clusterid=cls.cluster.id,
+            tags=primarystorage[TestData.tags]
+        )
+
+        primarystorage2 = cls.testdata[TestData.primaryStorage2]
+
+        cls.primary_storage_2 = StoragePool.create(
+            cls.apiClient,
+            primarystorage2,
+            scope=primarystorage2[TestData.scope],
+            zoneid=cls.zone.id,
+            provider=primarystorage2[TestData.provider],
+            tags=primarystorage2[TestData.tags],
+            capacityiops=primarystorage2[TestData.capacityIops],
+            capacitybytes=primarystorage2[TestData.capacityBytes],
+            hypervisor=primarystorage2[TestData.hypervisor]
+        )
+
+        cls.compute_offering = ServiceOffering.create(
+            cls.apiClient,
+            cls.testdata[TestData.computeOffering]
+        )
+
+        # Resources that are to be destroyed
+        cls._cleanup = [
+            cls.compute_offering,
+            cls.user,
+            cls.account
+        ]
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            cleanup_resources(cls.apiClient, cls._cleanup)
+
+            cls.primary_storage.delete(cls.apiClient)
+            cls.primary_storage_2.delete(cls.apiClient)
+
+            ms = cls.testdata[TestData.managementServer]
+            ip_address = cls.testdata[TestData.url]
+
+            cls._delete_all_files(ip_address, ms[TestData.username], ms[TestData.password], TestData.nfs_folder)
+
+            sf_util.purge_solidfire_volumes(cls.sfe)
+        except Exception as e:
+            logging.debug("Exception in tearDownClass(cls): %s" % e)
+
+    def setUp(self):
+        self.cleanup = []
+
+    def tearDown(self):
+        cleanup_resources(self.apiClient, self.cleanup)
+
+    def test_online_migrate_volume_from_nfs_storage_to_managed_storage(self):
+        if TestData.hypervisor_type != TestData.xenServer:
+            return
+
+        virtual_machine = VirtualMachine.create(
+            self.apiClient,
+            self._get_vm_name(),
+            accountid=self.account.name,
+            zoneid=self.zone.id,
+            serviceofferingid=self.compute_offering.id,
+            templateid=self.template.id,
+            domainid=self.domain.id,
+            startvm=True
+        )
+
+        self.cleanup.append(virtual_machine)
+
+        vm_root_volume = self._get_only_volume(virtual_machine.id)
+
+        self._verify_volume_on_primary_storage(vm_root_volume, self.primary_storage)
+
+        # Migrate the root disk from NFS storage to managed storage.
+
+        Volume.migrate(self.apiClient, livemigrate=True, volumeid=vm_root_volume.id, storageid=self.primary_storage_2.id)
+
+        vm_root_volume = self._get_only_volume(virtual_machine.id)
+
+        self._verify_volume_on_primary_storage(vm_root_volume, self.primary_storage_2)
+
+    def test_online_migrate_volume_with_snapshot_from_nfs_storage_to_managed_storage(self):
+        if TestData.hypervisor_type != TestData.xenServer:
+            return
+
+        virtual_machine = VirtualMachine.create(
+            self.apiClient,
+            self._get_vm_name(),
+            accountid=self.account.name,
+            zoneid=self.zone.id,
+            serviceofferingid=self.compute_offering.id,
+            templateid=self.template.id,
+            domainid=self.domain.id,
+            startvm=True
+        )
+
+        self.cleanup.append(virtual_machine)
+
+        vm_root_volume = self._get_only_volume(virtual_machine.id)
+
+        self._verify_volume_on_primary_storage(vm_root_volume, self.primary_storage)
+
+        vol_snap = Snapshot.create(
+            self.apiClient,
+            volume_id=vm_root_volume.id
+        )
+
+        self.cleanup.append(vol_snap)
+
+        self._verify_snapshot_belongs_to_volume(vol_snap.id, vm_root_volume.id)
+
+        # Migrate the root disk from NFS storage to managed storage.
+
+        Volume.migrate(self.apiClient, livemigrate=True, volumeid=vm_root_volume.id, storageid=self.primary_storage_2.id)
+
+        vm_root_volume = self._get_only_volume(virtual_machine.id)
+
+        self._verify_volume_on_primary_storage(vm_root_volume, self.primary_storage_2)
+
+        self._verify_snapshot_belongs_to_volume(vol_snap.id, vm_root_volume.id)
+
+    def _verify_snapshot_belongs_to_volume(self, snapshot_id, volume_id):
+        snapshot = list_snapshots(
+            self.apiClient,
+            id=snapshot_id
+        )[0]
+
+        self.assertEqual(
+            snapshot.volumeid,
+            volume_id,
+            TestOnlineStorageMigration._snapshot_not_associated_with_correct_volume
+        )
+
+    def _get_only_volume(self, virtual_machine_id):
+        list_volumes_response = list_volumes(
+            self.apiClient,
+            virtualmachineid=virtual_machine_id,
+            listall=True
+        )
+
+        sf_util.check_list(list_volumes_response, 1, self, TestOnlineStorageMigration._should_only_be_one_volume_in_list_err_msg)
+
+        return list_volumes_response[0]
+
+    def _verify_volume_on_primary_storage(self, vm_root_volume, primary_storage):
+        self.assertEqual(
+            vm_root_volume.storageid,
+            primary_storage.id,
+            TestOnlineStorageMigration._volume_not_on_correct_primary_storage
+        )
+
+    def _get_vm_name(self):
+        number = random.randint(0, 1000)
+
+        vm_name = {
+            TestData.name: "VM-%d" % number,
+            "displayname": "Test VM %d" % number
+        }
+
+        return vm_name
+
+    @classmethod
+    def _delete_all_files(cls, ip_address, username, password, path):
+        ssh_connection = sf_util.get_ssh_connection(ip_address, username, password)
+
+        ssh_connection.exec_command("sudo rm -rf " + path + "/*")
+
+        ssh_connection.close()
+
+    @classmethod
+    def _connect_to_hypervisor(cls):
+        host_ip = "https://" + \
+              list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId], name=TestData.xen_server_hostname)[0].ipaddress
+
+        cls.xen_session = XenAPI.Session(host_ip)
+
+        xen_server = cls.testdata[TestData.xenServer]
+
+        cls.xen_session.xenapi.login_with_password(xen_server[TestData.username], xen_server[TestData.password])
diff --git a/test/integration/plugins/solidfire/TestSnapshots.py b/test/integration/plugins/solidfire/TestSnapshots.py
index fab509e..d9ab3b2 100644
--- a/test/integration/plugins/solidfire/TestSnapshots.py
+++ b/test/integration/plugins/solidfire/TestSnapshots.py
@@ -35,7 +35,7 @@
 from marvin.lib.base import Account, DiskOffering, ServiceOffering, Snapshot, StoragePool, Template, User, VirtualMachine, Volume
 
 # common - commonly used methods for all tests are listed here
-from marvin.lib.common import get_domain, get_template, get_zone, list_clusters, list_volumes, list_snapshots
+from marvin.lib.common import get_domain, get_template, get_zone, list_volumes, list_snapshots
 
 # utils - utility classes for common cleanup, external library wrappers, etc.
 from marvin.lib.utils import cleanup_resources, wait_until
@@ -87,16 +87,16 @@
     def __init__(self):
         self.testdata = {
             TestData.solidFire: {
-                TestData.mvip: "10.117.40.120",
+                TestData.mvip: "10.117.78.225",
                 TestData.username: "admin",
                 TestData.password: "admin",
                 TestData.port: 443,
-                TestData.url: "https://10.117.40.120:443"
+                TestData.url: "https://10.117.78.225:443"
             },
             TestData.primaryStorage: {
                 "name": "SolidFire-%d" % random.randint(0, 100),
                 TestData.scope: "ZONE",
-                "url": "MVIP=10.117.40.120;SVIP=10.117.41.120;" +
+                "url": "MVIP=10.117.78.225;SVIP=10.117.94.225;" +
                        "clusterAdminUsername=admin;clusterAdminPassword=admin;" +
                        "clusterDefaultMinIops=10000;clusterDefaultMaxIops=15000;" +
                        "clusterDefaultBurstIopsPercentOfMaxIops=1.5;",
@@ -155,7 +155,6 @@
                 TestData.diskName: "test-volume-2",
             },
             TestData.zoneId: 1,
-            TestData.clusterId: 1,
             TestData.domainId: 1,
             TestData.url: "10.117.40.114"
         }
@@ -198,7 +197,6 @@
 
         # Get Resources from Cloud Infrastructure
         cls.zone = get_zone(cls.apiClient, zone_id=cls.testdata[TestData.zoneId])
-        cls.cluster = list_clusters(cls.apiClient)[0]
         cls.template = get_template(cls.apiClient, cls.zone.id, hypervisor=TestData.hypervisor_type)
         cls.domain = get_domain(cls.apiClient, cls.testdata[TestData.domainId])
 
diff --git a/test/integration/plugins/solidfire/TestUploadDownload.py b/test/integration/plugins/solidfire/TestUploadDownload.py
index d81600e..a15f27b 100644
--- a/test/integration/plugins/solidfire/TestUploadDownload.py
+++ b/test/integration/plugins/solidfire/TestUploadDownload.py
@@ -185,7 +185,7 @@
 
         # Get Resources from Cloud Infrastructure
         cls.zone = get_zone(cls.apiClient, zone_id=cls.testdata[TestData.zoneId])
-        cls.cluster = list_clusters(cls.apiClient)[1]
+        cls.cluster = list_clusters(cls.apiClient)[0]
         cls.template = get_template(cls.apiClient, cls.zone.id, hypervisor=TestData.hypervisor_type)
         cls.domain = get_domain(cls.apiClient, cls.testdata[TestData.domainId])
 
diff --git a/test/integration/plugins/solidfire/TestVMMigrationWithStorage.py b/test/integration/plugins/solidfire/TestVMMigrationWithStorage.py
index 93ab3b6..7da6c9d 100644
--- a/test/integration/plugins/solidfire/TestVMMigrationWithStorage.py
+++ b/test/integration/plugins/solidfire/TestVMMigrationWithStorage.py
@@ -40,6 +40,9 @@
 #  Only one zone
 #  Only one pod
 #  Two clusters (have system VMs (including the VR) running on local or NFS storage)
+#
+# Running the tests:
+#  Verify the "xen_server_hostname_src" and "xen_server_hostname_dest" variables are correct.
 
 
 class TestData():
@@ -81,6 +84,9 @@
     xenServer = "xenserver"
     zoneId = "zoneid"
 
+    xen_server_hostname_src = "XenServer-6.5-1"
+    xen_server_hostname_dest = "XenServer-6.5-3"
+
     def __init__(self):
         self.testdata = {
             TestData.solidFire: {
@@ -233,7 +239,7 @@
 
         # Set up xenAPI connection
         host_ip = "https://" + \
-                  list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId1], name="XenServer-6.5-1")[0].ipaddress
+                  list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId1], name=TestData.xen_server_hostname_src)[0].ipaddress
 
         # Set up XenAPI connection
         cls.xen_session_1 = XenAPI.Session(host_ip)
@@ -242,7 +248,7 @@
 
         # Set up xenAPI connection
         host_ip = "https://" + \
-                  list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId2], name="XenServer-6.5-3")[0].ipaddress
+                  list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId2], name=TestData.xen_server_hostname_dest)[0].ipaddress
 
         # Set up XenAPI connection
         cls.xen_session_2 = XenAPI.Session(host_ip)
@@ -532,9 +538,9 @@
         hosts = list_hosts(self.apiClient)
 
         for host in hosts:
-            if host.name == "XenServer-6.5-1":
+            if host.name == TestData.xen_server_hostname_src:
                 src_host = host
-            elif host.name == "XenServer-6.5-3":
+            elif host.name == TestData.xen_server_hostname_dest:
                 dest_host = host
 
         self.assertIsNotNone(src_host, "Could not locate the source host")
diff --git a/test/integration/plugins/solidfire/TestVMSnapshots.py b/test/integration/plugins/solidfire/TestVMSnapshots.py
index 45c4242..106d583 100644
--- a/test/integration/plugins/solidfire/TestVMSnapshots.py
+++ b/test/integration/plugins/solidfire/TestVMSnapshots.py
@@ -44,6 +44,10 @@
 #  Only one pod
 #  Only one cluster
 
+# Running the tests:
+#  Change the "hypervisor_type" variable to control which hypervisor type to test.
+#  If using XenServer, verify the "xen_server_hostname" variable is correct.
+
 
 class TestData:
     account = "account"
@@ -74,6 +78,7 @@
 
     # modify to control which hypervisor type to test
     hypervisor_type = xenServer
+    xen_server_hostname = "XenServer-6.5-1"
 
     def __init__(self):
         self.testdata = {
@@ -129,7 +134,7 @@
                 "customizediops": False,
                 "miniops": "10000",
                 "maxiops": "15000",
-                "hypervisorsnapshotreserve": 200,
+                "hypervisorsnapshotreserve": 400,
                 TestData.tags: TestData.storageTag
             },
             TestData.diskOffering: {
@@ -139,7 +144,7 @@
                 "customizediops": False,
                 "miniops": 300,
                 "maxiops": 500,
-                "hypervisorsnapshotreserve": 200,
+                "hypervisorsnapshotreserve": 400,
                 TestData.tags: TestData.storageTag,
                 "storagetype": "shared"
             },
@@ -179,7 +184,7 @@
 
         # Set up XenAPI connection
         host_ip = "https://" + \
-                  list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId], name="XenServer-6.5-1")[0].ipaddress
+                  list_hosts(cls.apiClient, clusterid=cls.testdata[TestData.clusterId], name=TestData.xen_server_hostname)[0].ipaddress
 
         cls.xen_session = XenAPI.Session(host_ip)
 
diff --git a/test/integration/plugins/solidfire/TestVolumes.py b/test/integration/plugins/solidfire/TestVolumes.py
index 9d3ab2f..9685e50 100644
--- a/test/integration/plugins/solidfire/TestVolumes.py
+++ b/test/integration/plugins/solidfire/TestVolumes.py
@@ -51,7 +51,8 @@
 #  If using XenServer, change the "supports_cloning" variable to True or False as desired.
 #
 # Note:
-#  If you do have more than one cluster, you might need to change this line: cls.cluster = list_clusters(cls.apiClient)[0]
+#  If you do have more than one cluster, you might need to change this line: cls.cluster = list_clusters(cls.apiClient)[0] and
+#   this variable's value: TestData.clusterId.
 
 
 class TestData():
@@ -79,6 +80,7 @@
     tags = "tags"
     templateCacheNameKvm = "centos55-x86-64"
     templateCacheNameXenServer = "centos56-x86-64-xen"
+    # templateCacheNameXenServer = "centos65-x86-64-XenServer"
     testAccount = "testaccount"
     url = "url"
     user = "user"
@@ -91,17 +93,17 @@
     zoneId = "zoneId"
 
     # modify to control which hypervisor type to test
-    hypervisor_type = kvm
+    hypervisor_type = xenServer
     xen_server_hostname = "XenServer-6.5-1"
 
     def __init__(self):
         self.testdata = {
             TestData.solidFire: {
-                TestData.mvip: "10.117.40.120",
+                TestData.mvip: "10.117.78.225",
                 TestData.username: "admin",
                 TestData.password: "admin",
                 TestData.port: 443,
-                TestData.url: "https://10.117.40.120:443"
+                TestData.url: "https://10.117.78.225:443"
             },
             TestData.kvm: {
                 TestData.username: "root",
@@ -135,7 +137,7 @@
             TestData.primaryStorage: {
                 "name": "SolidFire-%d" % random.randint(0, 100),
                 TestData.scope: "ZONE",
-                "url": "MVIP=10.117.40.120;SVIP=10.117.41.120;" +
+                "url": "MVIP=10.117.78.225;SVIP=10.117.94.225;" +
                        "clusterAdminUsername=admin;clusterAdminPassword=admin;" +
                        "clusterDefaultMinIops=10000;clusterDefaultMaxIops=15000;" +
                        "clusterDefaultBurstIopsPercentOfMaxIops=1.5;",
diff --git a/test/integration/smoke/test_async_job.py b/test/integration/smoke/test_async_job.py
new file mode 100644
index 0000000..f727dd8
--- /dev/null
+++ b/test/integration/smoke/test_async_job.py
@@ -0,0 +1,135 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase
+from marvin.lib.utils import cleanup_resources
+from marvin.lib.base import ServiceOffering, DiskOffering, Account, VirtualMachine,\
+    queryAsyncJobResult, PASS
+from marvin.lib.common import get_domain, get_zone, get_test_template
+from pytz import timezone
+
+
+class TestAsyncJob(cloudstackTestCase):
+    """
+    Test queryAsyncJobResult
+    """
+    @classmethod
+    def setUpClass(cls):
+        cls.testClient = super(TestAsyncJob, cls).getClsTestClient()
+        cls.api_client = cls.testClient.getApiClient()
+
+        cls.testdata = cls.testClient.getParsedTestDataConfig()
+        # Get Zone, Domain and templates
+        cls.domain = get_domain(cls.api_client)
+        cls.zone = get_zone(cls.api_client, cls.testClient.getZoneForTests())
+        cls.hypervisor = cls.testClient.getHypervisorInfo()
+
+        cls.template = get_test_template(
+            cls.api_client,
+            cls.zone.id,
+            cls.hypervisor
+        )
+
+        # Create service, disk offerings  etc
+        cls.service_offering = ServiceOffering.create(
+            cls.api_client,
+            cls.testdata["service_offering"]
+        )
+
+        cls.disk_offering = DiskOffering.create(
+            cls.api_client,
+            cls.testdata["disk_offering"]
+        )
+
+        cls._cleanup = [
+            cls.service_offering,
+            cls.disk_offering
+        ]
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            cleanup_resources(cls.api_client, cls._cleanup)
+        except Exception as exception:
+            raise Exception("Warning: Exception during cleanup : %s" % exception)
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.dbclient = self.testClient.getDbConnection()
+        self.hypervisor = self.testClient.getHypervisorInfo()
+        self.testdata["virtual_machine"]["zoneid"] = self.zone.id
+        self.testdata["virtual_machine"]["template"] = self.template.id
+        self.testdata["iso"]["zoneid"] = self.zone.id
+        self.account = Account.create(
+            self.apiclient,
+            self.testdata["account"],
+            domainid=self.domain.id
+        )
+        self.cleanup = [self.account]
+
+    def tearDown(self):
+        try:
+            self.debug("Cleaning up the resources")
+            cleanup_resources(self.apiclient, self.cleanup)
+            self.debug("Cleanup complete!")
+        except Exception as exception:
+            self.debug("Warning! Exception in tearDown: %s" % exception)
+
+    @attr(tags=["advanced", "eip", "advancedns", "basic", "sg"], required_hardware="false")
+    def test_query_async_job_result(self):
+        """
+        Test queryAsyncJobResult API for expected values
+        """
+        self.debug("Deploying instance in the account: %s" %
+                   self.account.name)
+        virtual_machine = VirtualMachine.create(
+            self.apiclient,
+            self.testdata["virtual_machine"],
+            accountid=self.account.name,
+            domainid=self.account.domainid,
+            serviceofferingid=self.service_offering.id,
+            diskofferingid=self.disk_offering.id,
+            hypervisor=self.hypervisor
+        )
+
+        response = virtual_machine.getState(
+            self.apiclient,
+            VirtualMachine.RUNNING)
+        self.assertEqual(response[0], PASS, response[1])
+
+        cmd = queryAsyncJobResult.queryAsyncJobResultCmd()
+        cmd.jobid = virtual_machine.jobid
+        cmd_response = self.apiclient.queryAsyncJobResult(cmd)
+
+        db_result = self.dbclient.execute("select * from async_job where uuid='%s'" %
+                                          virtual_machine.jobid)
+
+        # verify that 'completed' value from api equals 'removed' db column value
+        completed = cmd_response.completed
+        removed = timezone('UTC').localize(db_result[0][17])
+        removed = removed.strftime("%Y-%m-%dT%H:%M:%S%z")
+        self.assertEqual(completed, removed,
+                         "Expected 'completed' timestamp value %s to be equal to "
+                         "'removed' db column value %s." % (completed, removed))
+
+        # verify that api job_status value equals db job_status value
+        jobstatus_db = db_result[0][8]
+        jobstatus_api = cmd_response.jobstatus
+        self.assertEqual(jobstatus_api, jobstatus_db,
+                         "Expected 'jobstatus' api value %s to be equal to "
+                         "'job_status' db column value %s." % (jobstatus_api, jobstatus_db))
diff --git a/test/integration/smoke/test_diagnostics.py b/test/integration/smoke/test_diagnostics.py
new file mode 100644
index 0000000..6364d83
--- /dev/null
+++ b/test/integration/smoke/test_diagnostics.py
@@ -0,0 +1,539 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" BVT tests for remote diagnostics of system VMs
+"""
+# Import Local Modules
+from marvin.codes import FAILED
+from marvin.cloudstackTestCase import cloudstackTestCase
+from marvin.cloudstackAPI import runDiagnostics
+from marvin.lib.utils import (cleanup_resources)
+from marvin.lib.base import (Account,
+                             ServiceOffering,
+                             VirtualMachine)
+from marvin.lib.common import (get_domain,
+                               get_zone,
+                               get_test_template,
+                               list_ssvms,
+                               list_routers)
+
+from nose.plugins.attrib import attr
+
+
+class TestRemoteDiagnostics(cloudstackTestCase):
+    """
+    Test remote diagnostics with system VMs and VR as root admin
+    """
+
+    @classmethod
+    def setUpClass(cls):
+
+        testClient = super(TestRemoteDiagnostics, cls).getClsTestClient()
+        cls.apiclient = testClient.getApiClient()
+        cls.services = testClient.getParsedTestDataConfig()
+
+        # Get Zone, Domain and templates
+        cls.domain = get_domain(cls.apiclient)
+        cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
+        cls.hypervisor = testClient.getHypervisorInfo()
+        cls.services['mode'] = cls.zone.networktype
+        template = get_test_template(
+            cls.apiclient,
+            cls.zone.id,
+            cls.hypervisor
+        )
+        if template == FAILED:
+            cls.fail("get_test_template() failed to return template")
+
+        cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+        # Create an account, network, VM and IP addresses
+        cls.account = Account.create(
+            cls.apiclient,
+            cls.services["account"],
+            domainid=cls.domain.id
+        )
+        cls.service_offering = ServiceOffering.create(
+            cls.apiclient,
+            cls.services["service_offerings"]["tiny"]
+        )
+        cls.vm_1 = VirtualMachine.create(
+            cls.apiclient,
+            cls.services["virtual_machine"],
+            templateid=template.id,
+            accountid=cls.account.name,
+            domainid=cls.account.domainid,
+            serviceofferingid=cls.service_offering.id
+        )
+        cls.cleanup = [
+            cls.account,
+            cls.service_offering
+        ]
+
+    @classmethod
+    def tearDownClass(cls):
+        try:
+            cls.apiclient = super(
+                TestRemoteDiagnostics,
+                cls
+            ).getClsTestClient().getApiClient()
+            # Clean up, terminate the created templates
+            cleanup_resources(cls.apiclient, cls.cleanup)
+
+        except Exception as e:
+            raise Exception("Warning: Exception during cleanup : %s" % e)
+
+    def setUp(self):
+        self.apiclient = self.testClient.getApiClient()
+        self.hypervisor = self.testClient.getHypervisorInfo()
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_01_ping_in_vr_success(self):
+        '''
+        Test Ping command execution in VR
+        '''
+
+        # Validate the following:
+        # 1. Ping command is executed remotely on VR
+
+        list_router_response = list_routers(
+            self.apiclient,
+            account=self.account.name,
+            domainid=self.account.domainid
+        )
+        self.assertEqual(
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
+        router = list_router_response[0]
+        self.debug('Starting the router with ID: %s' % router.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = router.id
+        cmd.ipaddress = '8.8.8.8'
+        cmd.type = 'ping'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Ping in VR')
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_02_ping_in_vr_failure(self):
+        '''
+        Test Ping command execution in VR
+        '''
+
+        # Validate the following:
+        # 1. Ping command is executed remotely on VR
+        # 2. Validate Ping command execution with a non-existent/pingable IP address
+
+        if self.hypervisor.lower() == 'simulator':
+            raise self.skipTest("Skipping negative test case for Simulator hypervisor")
+
+        list_router_response = list_routers(
+            self.apiclient,
+            account=self.account.name,
+            domainid=self.account.domainid
+        )
+        self.assertEqual(
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
+        router = list_router_response[0]
+        self.debug('Starting the router with ID: %s' % router.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = router.id
+        cmd.ipaddress = '192.0.2.2'
+        cmd.type = 'ping'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertNotEqual(
+            '0',
+            cmd_response.exitcode,
+            'Check diagnostics command returns a non-zero exit code')
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_03_ping_in_ssvm_success(self):
+        '''
+        Test Ping command execution in SSVM
+        '''
+
+        # Validate the following:
+        # 1. Ping command is executed remotely on SSVM
+
+        list_ssvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='secondarystoragevm',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_ssvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        ssvm = list_ssvm_response[0]
+
+        self.debug('Setting up SSVM with ID %s' % ssvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = ssvm.id
+        cmd.ipaddress = '8.8.8.8'
+        cmd.type = 'ping'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Ping in SSVM'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_04_ping_in_ssvm_failure(self):
+        '''
+        Test Ping command execution in SSVM
+        '''
+
+        # Validate the following:
+        # 1. Ping command is executed remotely on SSVM
+        # 2. Validate Ping command execution with a non-existent/pingable IP address
+
+        if self.hypervisor.lower() == 'simulator':
+            raise self.skipTest("Skipping negative test case for Simulator hypervisor")
+
+        list_ssvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='secondarystoragevm',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_ssvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        ssvm = list_ssvm_response[0]
+
+        self.debug('Setting up SSVM with ID %s' % ssvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = ssvm.id
+        cmd.ipaddress = '192.0.2.2'
+        cmd.type = 'ping'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertNotEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Ping in SSVM'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_05_ping_in_cpvm_success(self):
+        '''
+        Test Ping command execution in CPVM
+        '''
+
+        # Validate the following:
+        # 1. Ping command is executed remotely on CPVM
+
+        list_ssvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='consoleproxy',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_ssvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        cpvm = list_ssvm_response[0]
+
+        self.debug('Setting up CPVM with ID %s' % cpvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = cpvm.id
+        cmd.ipaddress = '8.8.8.8'
+        cmd.type = 'ping'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Ping in CPVM'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_06_ping_in_cpvm_failure(self):
+        '''
+        Test Ping command execution in CPVM
+        '''
+
+        # Validate the following:
+        # 1. Ping command is executed remotely on CPVM
+        # 2. Validate Ping command execution with a non-existent/pingable IP address
+
+        if self.hypervisor.lower() == 'simulator':
+            raise self.skipTest("Skipping negative test case for Simulator hypervisor")
+
+        list_ssvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='consoleproxy',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_ssvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        cpvm = list_ssvm_response[0]
+
+        self.debug('Setting up CPVM with ID %s' % cpvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = cpvm.id
+        cmd.ipaddress = '192.0.2.2'
+        cmd.type = 'ping'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertNotEqual(
+            '0',
+            cmd_response.exitcode,
+            'Check diagnostics command returns a non-zero exit code'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_07_arping_in_vr(self):
+        '''
+        Test Arping command execution in VR
+        '''
+
+        # Validate the following:
+        # 1. Arping command is executed remotely on VR
+
+        list_router_response = list_routers(
+            self.apiclient,
+            account=self.account.name,
+            domainid=self.account.domainid
+        )
+        self.assertEqual(
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
+        router = list_router_response[0]
+        self.debug('Starting the router with ID: %s' % router.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = router.id
+        cmd.ipaddress = router.gateway
+        cmd.type = 'arping'
+        cmd.params = "-I eth2"
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Arping in VR')
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_08_arping_in_ssvm(self):
+        '''
+        Test Arping command execution in SSVM
+        '''
+
+        # Validate the following:
+        # 1. Arping command is executed remotely on SSVM
+
+        list_ssvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='secondarystoragevm',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_ssvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        ssvm = list_ssvm_response[0]
+
+        self.debug('Setting up SSVM with ID %s' % ssvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = ssvm.id
+        cmd.ipaddress = ssvm.gateway
+        cmd.type = 'arping'
+        cmd.params = '-I eth2'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Arping in SSVM'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_09_arping_in_cpvm(self):
+        '''
+        Test Arping command execution in CPVM
+        '''
+
+        # Validate the following:
+        # 1. Arping command is executed remotely on CPVM
+
+        list_cpvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='secondarystoragevm',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_cpvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        cpvm = list_cpvm_response[0]
+
+        self.debug('Setting up CPVM with ID %s' % cpvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = cpvm.id
+        cmd.ipaddress = cpvm.gateway
+        cmd.type = 'arping'
+        cmd.params = '-I eth2'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Arping in CPVM'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_10_traceroute_in_vr(self):
+        '''
+        Test Arping command execution in VR
+        '''
+
+        # Validate the following:
+        # 1. Arping command is executed remotely on VR
+
+        list_router_response = list_routers(
+            self.apiclient,
+            account=self.account.name,
+            domainid=self.account.domainid
+        )
+        self.assertEqual(
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
+        router = list_router_response[0]
+        self.debug('Starting the router with ID: %s' % router.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = router.id
+        cmd.ipaddress = '8.8.4.4'
+        cmd.type = 'traceroute'
+        cmd.params = "-m 10"
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Arping in VR')
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_11_traceroute_in_ssvm(self):
+        '''
+        Test Traceroute command execution in SSVM
+        '''
+
+        # Validate the following:
+        # 1. Traceroute command is executed remotely on SSVM
+
+        list_ssvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='secondarystoragevm',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_ssvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        ssvm = list_ssvm_response[0]
+
+        self.debug('Setting up SSVM with ID %s' % ssvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = ssvm.id
+        cmd.ipaddress = '8.8.4.4'
+        cmd.type = 'traceroute'
+        cmd.params = '-m 10'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Traceroute in SSVM'
+        )
+
+    @attr(tags=["advanced", "advancedns", "ssh", "smoke"], required_hardware="true")
+    def test_12_traceroute_in_cpvm(self):
+        '''
+        Test Traceroute command execution in CPVMM
+        '''
+
+        # Validate the following:
+        # 1. Traceroute command is executed remotely on CPVM
+
+        list_cpvm_response = list_ssvms(
+            self.apiclient,
+            systemvmtype='consoleproxy',
+            state='Running',
+        )
+
+        self.assertEqual(
+            isinstance(list_cpvm_response, list),
+            True,
+            'Check list response returns a valid list'
+        )
+        cpvm = list_cpvm_response[0]
+
+        self.debug('Setting up CPVMM with ID %s' % cpvm.id)
+
+        cmd = runDiagnostics.runDiagnosticsCmd()
+        cmd.targetid = cpvm.id
+        cmd.ipaddress = '8.8.4.4'
+        cmd.type = 'traceroute'
+        cmd.params = '-m 10'
+        cmd_response = self.apiclient.runDiagnostics(cmd)
+
+        self.assertEqual(
+            '0',
+            cmd_response.exitcode,
+            'Failed to run remote Traceroute in CPVM'
+        )
diff --git a/test/integration/smoke/test_hostha_simulator.py b/test/integration/smoke/test_hostha_simulator.py
index 4dfb9e9..bb25d47 100644
--- a/test/integration/smoke/test_hostha_simulator.py
+++ b/test/integration/smoke/test_hostha_simulator.py
@@ -161,7 +161,7 @@
         cmd.recover = recover
         cmd.fence = fence
         response = self.apiclient.configureSimulatorHAProviderState(cmd)
-        self.assertEqual(response.success, 'true')
+        self.assertEqual(response.success, True)
 
 
     def getSimulatorHAStateTransitions(self, hostId):
diff --git a/test/integration/smoke/test_primary_storage.py b/test/integration/smoke/test_primary_storage.py
index 882df3c..707d0b9 100644
--- a/test/integration/smoke/test_primary_storage.py
+++ b/test/integration/smoke/test_primary_storage.py
@@ -43,11 +43,7 @@
         self.pod = get_pod(self.apiclient, self.zone.id)
         self.hypervisor = self.testClient.getHypervisorInfo()
         self.domain = get_domain(self.apiclient)
-        self.template = get_template(
-            self.apiclient ,
-            self.zone.id ,
-            self.services["ostype"]
-        )
+        self.template = get_template(self.apiclient, self.zone.id, self.services["ostype"])
 
         return
 
@@ -383,11 +379,7 @@
         cls.pod = get_pod(cls.apiclient, cls.zone.id)
         cls.hypervisor = testClient.getHypervisorInfo()
         cls.domain = get_domain(cls.apiclient)
-        cls.template = get_template(
-            cls.apiclient,
-            cls.zone.id,
-            cls.services["ostype"]
-        )
+        cls.template = get_template(cls.apiclient, cls.zone.id, cls.services["ostype"])
         cls.services["virtual_machine"]["zoneid"] = cls.zone.id
         cls.services["virtual_machine"]["template"] = cls.template.id
         cls.services["storage_tags"] = StorageTagsServices().storage_tags
@@ -477,17 +469,18 @@
         try:
             # First expunge vm, so PS can be cleaned up
             cls.virtual_machine_1.delete(cls.apiclient)
+            time.sleep(60)
 
             # Force delete primary storage
             cmd = enableStorageMaintenance.enableStorageMaintenanceCmd()
             cmd.id = cls.storage_pool_1.id
             cls.apiclient.enableStorageMaintenance(cmd)
-            time.sleep(30)
+            time.sleep(45)
             cmd = deleteStoragePool.deleteStoragePoolCmd()
             cmd.id = cls.storage_pool_1.id
             cmd.forced = True
             cls.apiclient.deleteStoragePool(cmd)
-
+            time.sleep(30)
             cleanup_resources(cls.apiclient, cls._cleanup)
         except Exception as e:
             raise Exception("Cleanup failed with %s" % e)
@@ -660,12 +653,23 @@
         if self.hypervisor.lower() not in ["vmware", "xenserver"]:
             self.virtual_machine_1.stop(self.apiclient)
 
+        volumePool = StoragePool.list(
+            self.apiclient,
+            id=vol.storageid
+        )
+        self.debug("Volume %s is on storage: %s" % (vol.id, volumePool))
+        allStoragePools = StoragePool.list(
+            self.apiclient
+        )
+        self.debug("All storage pools in the system: %s" % (allStoragePools))
         # Check migration options for volume
         pools_response = StoragePool.listForMigration(
             self.apiclient,
             id=vol.id
         )
         pools_suitable = filter(lambda p : p.suitableformigration, pools_response)
+        
+        self.debug("Suitable storage pools found: %s" % len(pools_suitable))
         self.assertEquals(1, len(pools_suitable), "Check that there is only one item on the list")
         self.assertEquals(pools_suitable[0].id, storage_pool_2.id, "Check that PS-2 is the migration option for volume")
         
@@ -682,6 +686,8 @@
             id=vol.id
         )
         pools_suitable = filter(lambda p : p.suitableformigration, pools_response)
+        
+        self.debug("Suitable storage pools found: %s" % len(pools_suitable))
         self.assertEquals(0, len(pools_suitable), "Check that there is no migration option for volume")
         
         return
\ No newline at end of file
diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py
index d40c0fd..633c300 100644
--- a/test/integration/smoke/test_volumes.py
+++ b/test/integration/smoke/test_volumes.py
@@ -37,7 +37,8 @@
                                 get_zone,
                                 get_template,
                                 find_storage_pool_type,
-                                get_pod)
+                                get_pod,
+                                list_disk_offering)
 from marvin.lib.utils import checkVolumeSize
 from marvin.codes import SUCCESS, FAILED, XEN_SERVER
 from nose.plugins.attrib import attr
@@ -875,3 +876,80 @@
         if not res:
             self.fail("Failed to return root volume response")
         return response
+
+
+    @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="true")
+    def test_11_migrate_volume_and_change_offering(self):
+
+    # Validates the following
+    #
+    # 1. Creates a new Volume with a small disk offering
+    #
+    # 2. Migrates the Volume to another primary storage and changes the offering
+    #
+    # 3. Verifies the Volume has new offering when migrated to the new storage.
+
+        small_offering = list_disk_offering(
+            self.apiclient,
+            name = "Small"
+        )[0]
+
+        large_offering = list_disk_offering(
+            self.apiclient,
+            name = "Large"
+        )[0]
+        volume = Volume.create(
+            self.apiClient,
+            self.services,
+            zoneid = self.zone.id,
+            account = self.account.name,
+            domainid = self.account.domainid,
+            diskofferingid = small_offering.id
+        )
+        self.debug("Created a small volume: %s" % volume.id)
+
+        self.virtual_machine.attach_volume(self.apiclient, volume=volume)
+
+        if self.virtual_machine.hypervisor == "KVM":
+            self.virtual_machine.stop(self.apiclient)
+
+        pools = StoragePool.listForMigration(
+            self.apiclient,
+            id=volume.id
+            )
+
+        pool = None
+
+        if pools and len(pools) > 0:
+            pool = pools[0]
+        else:
+            raise self.skipTest("Not enough storage pools found, skipping test")
+        
+        if hasattr(pool, 'tags'):
+            StoragePool.update(self.apiclient, id=pool.id, tags="")
+
+        self.debug("Migrating Volume-ID: %s to Pool: %s" % (volume.id, pool.id))
+        livemigrate = False
+        if self.virtual_machine.hypervisor.lower() == "vmware" or self.virtual_machine.hypervisor.lower() == 'xenserver':
+            livemigrate = True
+
+        Volume.migrate(
+            self.apiclient,
+            volumeid = volume.id,
+            storageid = pool.id,
+            newdiskofferingid = large_offering.id,
+            livemigrate = livemigrate
+        )
+        if self.virtual_machine.hypervisor == "KVM":
+            self.virtual_machine.start(self.apiclient
+        )
+        migrated_vol = Volume.list(
+            self.apiclient,
+            id = volume.id
+        )[0]
+        self.assertEqual(
+            migrated_vol.diskofferingname,
+            large_offering.name,
+            "Offering name did not match with the new one "
+        )
+        return
diff --git a/test/pom.xml b/test/pom.xml
index 468292d..607b1b8 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -1,29 +1,30 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>cloud-testclient</artifactId>
     <name>Apache CloudStack Test</name>
     <parent>
         <groupId>org.apache.cloudstack</groupId>
         <artifactId>cloudstack</artifactId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <version>4.12.0.0-SNAPSHOT</version>
     </parent>
     <dependencies>
         <dependency>
@@ -34,16 +35,11 @@
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
-            </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${cs.junit.version}</version>
         </dependency>
         <dependency>
             <groupId>com.trilead</groupId>
             <artifactId>trilead-ssh2</artifactId>
-            </dependency>
+        </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>apache-log4j-extras</artifactId>
@@ -62,13 +58,11 @@
         <dependency>
             <groupId>org.seleniumhq.selenium.client-drivers</groupId>
             <artifactId>selenium-java-client-driver</artifactId>
-            <version>1.0.1</version>
+            <version>${cs.selenium-java-client-driver.version}</version>
         </dependency>
     </dependencies>
     <build>
         <defaultGoal>compile</defaultGoal>
-        <sourceDirectory>test</sourceDirectory>
-        <testSourceDirectory>test</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/test/src/com/cloud/sample/UserCloudAPIExecutor.java b/test/src-not-used/main/java/com/cloud/sample/UserCloudAPIExecutor.java
similarity index 100%
rename from test/src/com/cloud/sample/UserCloudAPIExecutor.java
rename to test/src-not-used/main/java/com/cloud/sample/UserCloudAPIExecutor.java
diff --git a/test/src/com/cloud/test/longrun/BuildGuestNetwork.java b/test/src-not-used/main/java/com/cloud/test/longrun/BuildGuestNetwork.java
similarity index 100%
rename from test/src/com/cloud/test/longrun/BuildGuestNetwork.java
rename to test/src-not-used/main/java/com/cloud/test/longrun/BuildGuestNetwork.java
diff --git a/test/src/com/cloud/test/longrun/GuestNetwork.java b/test/src-not-used/main/java/com/cloud/test/longrun/GuestNetwork.java
similarity index 100%
rename from test/src/com/cloud/test/longrun/GuestNetwork.java
rename to test/src-not-used/main/java/com/cloud/test/longrun/GuestNetwork.java
diff --git a/test/src/com/cloud/test/longrun/PerformanceWithAPI.java b/test/src-not-used/main/java/com/cloud/test/longrun/PerformanceWithAPI.java
similarity index 100%
rename from test/src/com/cloud/test/longrun/PerformanceWithAPI.java
rename to test/src-not-used/main/java/com/cloud/test/longrun/PerformanceWithAPI.java
diff --git a/test/src/com/cloud/test/longrun/User.java b/test/src-not-used/main/java/com/cloud/test/longrun/User.java
similarity index 100%
rename from test/src/com/cloud/test/longrun/User.java
rename to test/src-not-used/main/java/com/cloud/test/longrun/User.java
diff --git a/test/src/com/cloud/test/longrun/VirtualMachine.java b/test/src-not-used/main/java/com/cloud/test/longrun/VirtualMachine.java
similarity index 100%
rename from test/src/com/cloud/test/longrun/VirtualMachine.java
rename to test/src-not-used/main/java/com/cloud/test/longrun/VirtualMachine.java
diff --git a/test/src/com/cloud/test/regression/ApiCommand.java b/test/src-not-used/main/java/com/cloud/test/regression/ApiCommand.java
similarity index 100%
rename from test/src/com/cloud/test/regression/ApiCommand.java
rename to test/src-not-used/main/java/com/cloud/test/regression/ApiCommand.java
diff --git a/test/src/com/cloud/test/regression/ConfigTest.java b/test/src-not-used/main/java/com/cloud/test/regression/ConfigTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/ConfigTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/ConfigTest.java
diff --git a/test/src/com/cloud/test/regression/DelegatedAdminTest.java b/test/src-not-used/main/java/com/cloud/test/regression/DelegatedAdminTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/DelegatedAdminTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/DelegatedAdminTest.java
diff --git a/test/src/com/cloud/test/regression/Deploy.java b/test/src-not-used/main/java/com/cloud/test/regression/Deploy.java
similarity index 100%
rename from test/src/com/cloud/test/regression/Deploy.java
rename to test/src-not-used/main/java/com/cloud/test/regression/Deploy.java
diff --git a/test/src/com/cloud/test/regression/EventsApiTest.java b/test/src-not-used/main/java/com/cloud/test/regression/EventsApiTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/EventsApiTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/EventsApiTest.java
diff --git a/test/src/com/cloud/test/regression/HA.java b/test/src-not-used/main/java/com/cloud/test/regression/HA.java
similarity index 100%
rename from test/src/com/cloud/test/regression/HA.java
rename to test/src-not-used/main/java/com/cloud/test/regression/HA.java
diff --git a/test/src/com/cloud/test/regression/LoadBalancingTest.java b/test/src-not-used/main/java/com/cloud/test/regression/LoadBalancingTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/LoadBalancingTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/LoadBalancingTest.java
diff --git a/test/src/com/cloud/test/regression/PortForwardingTest.java b/test/src-not-used/main/java/com/cloud/test/regression/PortForwardingTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/PortForwardingTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/PortForwardingTest.java
diff --git a/test/src/com/cloud/test/regression/SanityTest.java b/test/src-not-used/main/java/com/cloud/test/regression/SanityTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/SanityTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/SanityTest.java
diff --git a/test/src/com/cloud/test/regression/Test.java b/test/src-not-used/main/java/com/cloud/test/regression/Test.java
similarity index 100%
rename from test/src/com/cloud/test/regression/Test.java
rename to test/src-not-used/main/java/com/cloud/test/regression/Test.java
diff --git a/test/src/com/cloud/test/regression/TestCase.java b/test/src-not-used/main/java/com/cloud/test/regression/TestCase.java
similarity index 100%
rename from test/src/com/cloud/test/regression/TestCase.java
rename to test/src-not-used/main/java/com/cloud/test/regression/TestCase.java
diff --git a/test/src/com/cloud/test/regression/TestCaseEngine.java b/test/src-not-used/main/java/com/cloud/test/regression/TestCaseEngine.java
similarity index 100%
rename from test/src/com/cloud/test/regression/TestCaseEngine.java
rename to test/src-not-used/main/java/com/cloud/test/regression/TestCaseEngine.java
diff --git a/test/src/com/cloud/test/regression/VMApiTest.java b/test/src-not-used/main/java/com/cloud/test/regression/VMApiTest.java
similarity index 100%
rename from test/src/com/cloud/test/regression/VMApiTest.java
rename to test/src-not-used/main/java/com/cloud/test/regression/VMApiTest.java
diff --git a/test/src/com/cloud/test/stress/SshTest.java b/test/src-not-used/main/java/com/cloud/test/stress/SshTest.java
similarity index 100%
rename from test/src/com/cloud/test/stress/SshTest.java
rename to test/src-not-used/main/java/com/cloud/test/stress/SshTest.java
diff --git a/test/src/com/cloud/test/stress/StressTestDirectAttach.java b/test/src-not-used/main/java/com/cloud/test/stress/StressTestDirectAttach.java
similarity index 100%
rename from test/src/com/cloud/test/stress/StressTestDirectAttach.java
rename to test/src-not-used/main/java/com/cloud/test/stress/StressTestDirectAttach.java
diff --git a/test/src/com/cloud/test/stress/TestClientWithAPI.java b/test/src-not-used/main/java/com/cloud/test/stress/TestClientWithAPI.java
similarity index 100%
rename from test/src/com/cloud/test/stress/TestClientWithAPI.java
rename to test/src-not-used/main/java/com/cloud/test/stress/TestClientWithAPI.java
diff --git a/test/src/com/cloud/test/stress/WgetTest.java b/test/src-not-used/main/java/com/cloud/test/stress/WgetTest.java
similarity index 100%
rename from test/src/com/cloud/test/stress/WgetTest.java
rename to test/src-not-used/main/java/com/cloud/test/stress/WgetTest.java
diff --git a/test/src/com/cloud/test/ui/AbstractSeleniumTestCase.java b/test/src-not-used/main/java/com/cloud/test/ui/AbstractSeleniumTestCase.java
similarity index 100%
rename from test/src/com/cloud/test/ui/AbstractSeleniumTestCase.java
rename to test/src-not-used/main/java/com/cloud/test/ui/AbstractSeleniumTestCase.java
diff --git a/test/src/com/cloud/test/ui/AddAndDeleteAISO.java b/test/src-not-used/main/java/com/cloud/test/ui/AddAndDeleteAISO.java
similarity index 100%
rename from test/src/com/cloud/test/ui/AddAndDeleteAISO.java
rename to test/src-not-used/main/java/com/cloud/test/ui/AddAndDeleteAISO.java
diff --git a/test/src/com/cloud/test/ui/AddAndDeleteATemplate.java b/test/src-not-used/main/java/com/cloud/test/ui/AddAndDeleteATemplate.java
similarity index 100%
rename from test/src/com/cloud/test/ui/AddAndDeleteATemplate.java
rename to test/src-not-used/main/java/com/cloud/test/ui/AddAndDeleteATemplate.java
diff --git a/test/src/com/cloud/test/ui/UIScenarioTest.java b/test/src-not-used/main/java/com/cloud/test/ui/UIScenarioTest.java
similarity index 100%
rename from test/src/com/cloud/test/ui/UIScenarioTest.java
rename to test/src-not-used/main/java/com/cloud/test/ui/UIScenarioTest.java
diff --git a/test/src/com/cloud/test/utils/ConsoleProxy.java b/test/src-not-used/main/java/com/cloud/test/utils/ConsoleProxy.java
similarity index 100%
rename from test/src/com/cloud/test/utils/ConsoleProxy.java
rename to test/src-not-used/main/java/com/cloud/test/utils/ConsoleProxy.java
diff --git a/test/src/com/cloud/test/utils/IpSqlGenerator.java b/test/src-not-used/main/java/com/cloud/test/utils/IpSqlGenerator.java
similarity index 100%
rename from test/src/com/cloud/test/utils/IpSqlGenerator.java
rename to test/src-not-used/main/java/com/cloud/test/utils/IpSqlGenerator.java
diff --git a/test/src/com/cloud/test/utils/ProxyLoadTemp.java b/test/src-not-used/main/java/com/cloud/test/utils/ProxyLoadTemp.java
similarity index 100%
rename from test/src/com/cloud/test/utils/ProxyLoadTemp.java
rename to test/src-not-used/main/java/com/cloud/test/utils/ProxyLoadTemp.java
diff --git a/test/src/com/cloud/test/utils/SignEC2.java b/test/src-not-used/main/java/com/cloud/test/utils/SignEC2.java
similarity index 100%
rename from test/src/com/cloud/test/utils/SignEC2.java
rename to test/src-not-used/main/java/com/cloud/test/utils/SignEC2.java
diff --git a/test/src/com/cloud/test/utils/SignRequest.java b/test/src-not-used/main/java/com/cloud/test/utils/SignRequest.java
similarity index 100%
rename from test/src/com/cloud/test/utils/SignRequest.java
rename to test/src-not-used/main/java/com/cloud/test/utils/SignRequest.java
diff --git a/test/src/com/cloud/test/utils/SqlDataGenerator.java b/test/src-not-used/main/java/com/cloud/test/utils/SqlDataGenerator.java
similarity index 100%
rename from test/src/com/cloud/test/utils/SqlDataGenerator.java
rename to test/src-not-used/main/java/com/cloud/test/utils/SqlDataGenerator.java
diff --git a/test/src/com/cloud/test/utils/SubmitCert.java b/test/src-not-used/main/java/com/cloud/test/utils/SubmitCert.java
similarity index 100%
rename from test/src/com/cloud/test/utils/SubmitCert.java
rename to test/src-not-used/main/java/com/cloud/test/utils/SubmitCert.java
diff --git a/test/src/com/cloud/test/utils/TestClient.java b/test/src-not-used/main/java/com/cloud/test/utils/TestClient.java
similarity index 100%
rename from test/src/com/cloud/test/utils/TestClient.java
rename to test/src-not-used/main/java/com/cloud/test/utils/TestClient.java
diff --git a/test/src/com/cloud/test/utils/UtilsForTest.java b/test/src-not-used/main/java/com/cloud/test/utils/UtilsForTest.java
similarity index 100%
rename from test/src/com/cloud/test/utils/UtilsForTest.java
rename to test/src-not-used/main/java/com/cloud/test/utils/UtilsForTest.java
diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py
index a025efe..f45f030 100644
--- a/tools/apidoc/gen_toc.py
+++ b/tools/apidoc/gen_toc.py
@@ -190,7 +190,8 @@
     'CA': 'Certificate',
     'listElastistorInterface': 'Misc',
     'cloudian': 'Cloudian',
-    'Sioc' : 'Sioc'
+    'Sioc' : 'Sioc',
+    'Diagnostics': 'Diagnostics'
     }
 
 
diff --git a/tools/apidoc/pom.xml b/tools/apidoc/pom.xml
index 6389217..08ad0fd 100644
--- a/tools/apidoc/pom.xml
+++ b/tools/apidoc/pom.xml
@@ -1,13 +1,21 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
@@ -17,7 +25,7 @@
     <parent>
         <groupId>org.apache.cloudstack</groupId>
         <artifactId>cloud-tools</artifactId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <version>4.12.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <properties>
@@ -25,23 +33,20 @@
         <client.config.jars>${client.config.base}/cloud-client-ui-${project.version}.jar</client.config.jars>
         <client.config.conf>${client.config.base}/classes</client.config.conf>
     </properties>
-
     <dependencies>
-      <dependency>
-        <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-server</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-client-ui</artifactId>
-        <version>${project.version}</version>
-	<type>pom</type>
-      </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-client-ui</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+        </dependency>
     </dependencies>
-
     <build>
-        <defaultGoal>install</defaultGoal>
         <plugins>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
diff --git a/tools/appliance/build.sh b/tools/appliance/build.sh
index ba6fe4d..edbe11f 100755
--- a/tools/appliance/build.sh
+++ b/tools/appliance/build.sh
@@ -34,8 +34,12 @@
 END
   exit 0
 }
-echo $@ | grep help >/dev/null && usage
-echo $@ | grep '\-h' >/dev/null && usage
+
+for i in $@; do
+    if [ "$i" == "-h" -o "$i" == "--help" -o "$i" == "help" ]; then
+        usage
+    fi
+done
 
 # requires 32-bit vhd-util and faketime binaries to be available (even for 64 bit builds)
 # Something like (on centos 6.5)...
@@ -194,8 +198,10 @@
     cp -r "${appliance}" "${appliance_build_name}"
     set +e
     if [ ! -z "${version}" ]; then
-    sed ${sed_regex_option} -i -e "s/^CLOUDSTACK_RELEASE=.+/CLOUDSTACK_RELEASE=${version}/" \
-        "${appliance_build_name}/scripts/configure_systemvm_services.sh"
+      if [ -f "${appliance_build_name}/scripts/configure_systemvm_services.sh" ]; then
+          sed ${sed_regex_option} -i -e "s/^CLOUDSTACK_RELEASE=.+/CLOUDSTACK_RELEASE=${version}/" \
+              "${appliance_build_name}/scripts/configure_systemvm_services.sh"
+      fi
     fi
     set -e
     add_on_exit rm -rf "${appliance_build_name}"
@@ -215,7 +221,7 @@
   cd ${appliance_build_name} && packer build template.json && cd ..
 }
 
-function stage_vmx (){
+function stage_vmx() {
   cat << VMXFILE > "${1}.vmx"
 .encoding = "UTF-8"
 displayname = "${1}"
diff --git a/tools/build/build_asf.sh b/tools/build/build_asf.sh
index 04a2d24..ecccb95 100755
--- a/tools/build/build_asf.sh
+++ b/tools/build/build_asf.sh
@@ -98,7 +98,6 @@
 perl -pi -e "s/-SNAPSHOT//" deps/XenServerJava/pom.xml
 perl -pi -e "s/-SNAPSHOT//" tools/apidoc/pom.xml
 perl -pi -e "s/-SNAPSHOT//" build/replace.properties
-perl -pi -e "s/-SNAPSHOT//" services/console-proxy/plugin/pom.xml
 perl -pi -e "s/-SNAPSHOT//" tools/marvin/setup.py
 perl -pi -e "s/-SNAPSHOT//" tools/marvin/marvin/deployAndRun.py
 perl -pi -e "s/-SNAPSHOT//" services/iam/plugin/pom.xml
diff --git a/tools/build/setnextversion.sh b/tools/build/setnextversion.sh
index 2387b89..2f9c980 100755
--- a/tools/build/setnextversion.sh
+++ b/tools/build/setnextversion.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -16,77 +16,148 @@
 # specific language governing permissions and limitations
 # under the License.
 
-version='TESTBUILD'
-sourcedir=~/cloudstack/
-branch='master'
+set -e
 
-usage(){
-    echo "usage: $0 -v version [-b branch] [-s source dir] [-h]"
-    echo "  -v sets the version"
-    echo "  -b sets the branch (defaults to 'master')"
-    echo "  -s sets the source directory (defaults to $sourcedir)"
-    echo "  -h"
+usage() {
+    cat << USAGE
+Usage: setnextversion.sh --version string [OPTIONS]...
+Set the next version of CloudStack in the POMs.
+
+Mandatory arguments:
+   -v, --version string                    Set the next version to be applied
+
+Optional arguments:
+   -b, --branch string                     Set the branch to update the version into (default "master")
+   -s, --sourcedir string                  Set the source directory to clone repo into (default "$sourcedir")
+   -n, --no-commit                         Apply only the version change and don't git commit them (default "false")
+
+Other arguments:
+   -h, --help                              Display this help message and exit
+
+Examples:
+   setnextversion.sh --version x.y.z.a-SNAPSHOT
+   setnextversion.sh --version x.y.z.a-SNAPSHOT --branch foo-feature
+   setnextversion.sh --version x.y.z.a-SNAPSHOT --sourcedir /path/to/cloudstack/repo
+   setnextversion.sh --version x.y.z.a-SNAPSHOT --no-commit
+
+USAGE
+    exit 0
 }
 
-while getopts v:s:b:h opt
-do
-    case "$opt" in
-      v)  version="$OPTARG";;
-      s)  sourcedir="$OPTARG";;
-      b)  branch="$OPTARG";;
-      h)  usage
-          exit 0;;
-      /?)       # unknown flag
-          usage
-          exit 1;;
+while [ -n "$1" ]; do
+    case "$1" in
+        -h | --help)
+            usage
+            ;;
+
+        -v | --version)
+            if [ -n "$version" ]; then
+                echo "ERROR: you have already entered value for -v, --version"
+                exit 1
+            else
+                version=$2
+                shift 2
+            fi
+            ;;
+
+        -b | --branch)
+            if [ -n "$branch" ]; then
+                echo "ERROR: you have already entered value for -b, --branch"
+                exit 1
+            else
+                branch=$2
+                shift 2
+            fi
+            ;;
+
+        -s | --sourcedir)
+            if [ -n "$sourcedir" ]; then
+                echo "ERROR: you have already entered value for -s, --sourcedir"
+                exit 1
+            else
+                sourcedir=$2
+                shift 2
+            fi
+            ;;
+
+        -n | --no-commit)
+            if [ "$nocommit" == "true" ]; then
+                echo "ERROR: you have already entered value for -n, --no-commit"
+                exit 1
+            else
+                nocommit="true"
+                shift 1
+            fi
+            ;;
+
+        -*|*)
+            echo "ERROR: no such option $1. -h or --help for help"
+            exit 1
+            ;;
     esac
 done
-shift `expr $OPTIND - 1`
 
-if [ $version == 'TESTBUILD' ]; then
-    echo >&2 "A version must be specified with the -v option: $0 -v 4.0.0.RC1"
+if [ -z "$version" ]; then
+    echo >&2 "A version must be specified with the -v, --version option: $0 -v 4.0.0.RC1"
     exit 1
 fi
 
-echo "Using version: $version"
-echo "Using source directory: $sourcedir"
-echo "Using branch: $branch"
+if [ -z "$branch" ]; then
+    branch="master"
+fi
+
+if [ -z "$sourcedir" ]; then
+    sourcedir="~/cloudstack/"
+fi
+
+if [ -z "$nocommit" ]; then
+    nocommit="false"
+fi
+
+echo "Using version          : $version"
+echo "Using source directory : $sourcedir"
+echo "Using branch           : $branch"
 
 cd $sourcedir
 
-echo 'checking out correct branch'
+echo "checking out correct branch"
 git checkout $branch
 
-echo 'determining current mvn version'
+echo "determining current POM version"
 export currentversion=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['`
 echo "found $currentversion"
 
-echo 'setting version numbers'
-mvn versions:set -DnewVersion=$version -P vmware -P developer -P systemvm -P simulator -P baremetal -P ucs -Dnoredist
-mv deps/XenServerJava/pom.xml.versionsBackup deps/XenServerJava/pom.xml
-perl -pi -e "s/$currentversion/$version/" deps/XenServerJava/pom.xml
-perl -pi -e "s/$currentversion/$version/" tools/apidoc/pom.xml
+echo "setting new version numbers"
+mvn versions:set -DnewVersion=$version -P vmware -P developer -P systemvm -P simulator -Dnoredist versions:commit
+
 perl -pi -e "s/$currentversion/$version/" debian/changelog
-perl -pi -e "s/$currentversion/$version/" tools/marvin/setup.py
 perl -pi -e "s/$currentversion/$version/" services/iam/plugin/pom.xml
-perl -pi -e "s/$currentversion/$version/" services/iam/pom.xm
+perl -pi -e "s/$currentversion/$version/" services/iam/pom.xml
 perl -pi -e "s/$currentversion/$version/" services/iam/server/pom.xml
+perl -pi -e "s/$currentversion/$version/" tools/apidoc/pom.xml
 perl -pi -e "s/$currentversion/$version/" tools/checkstyle/pom.xml
-perl -pi -e "s/$currentversion/$version/" services/console-proxy/plugin/pom.xml
+perl -pi -e "s/$currentversion/$version/" tools/marvin/setup.py
+
 # Dockerfiles
 perl -pi -e "s/Version=\"$currentversion\"/Version=\"$version\"/" tools/docker/Dockerfile
+
+# Marvin Dockerfiles
 perl -pi -e "s/Version=\"$currentversion\"/Version=\"$version\"/" tools/docker/Dockerfile.marvin
-# centos6 based dockerfile
+perl -pi -e "s/Marvin-(.*).tar.gz/Marvin-${version}.tar.gz/" tools/docker/Dockerfile.marvin
+
+# centos6 based Dockerfile
 perl -pi -e "s/Version=\"$currentversion\"/Version=\"$version\"/" tools/docker/Dockerfile.centos6
 perl -pi -e "s/cloudstack-common-(.*).el6.x86_64.rpm/cloudstack-common-${version}.el6.x86_64.rpm/" tools/docker/Dockerfile.centos6
 perl -pi -e "s/cloudstack-management-(.*)el6.x86_64.rpm/cloudstack-management-${version}.el6.x86_64.rpm/" tools/docker/Dockerfile.centos6
-perl -pi -e "s/Marvin-(.*).tar.gz/Marvin-${version}.tar.gz/" tools/docker/Dockerfile.marvin
+
 # systemtpl.sh:  system vm template version without -SNAPSHOT
 
 git clean -f
 
-echo 'commit changes'
-git commit -a -s -m "Updating pom.xml version numbers for release $version"
-export commitsh=`git show HEAD | head -n 1 | cut -d ' ' -f 2`
+if [ "$nocommit" == "false" ]; then
+    echo "commit changes"
+    git commit -a -s -m "Updating pom.xml version numbers for release $version"
+    export commitsh=`git show HEAD | head -n 1 | cut -d ' ' -f 2`
 
-echo "committed as $commitsh"
+    echo "committed as $commitsh"
+fi
diff --git a/tools/checkstyle/pom.xml b/tools/checkstyle/pom.xml
index 851ac63..20c502c 100644
--- a/tools/checkstyle/pom.xml
+++ b/tools/checkstyle/pom.xml
@@ -1,44 +1,31 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
     <name>Apache CloudStack Developer Tools - Checkstyle Configuration</name>
     <groupId>org.apache.cloudstack</groupId>
     <artifactId>checkstyle</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
+    <version>4.12.0.0-SNAPSHOT</version>
 
-    <build>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-checkstyle-plugin</artifactId>
-          <version>2.13</version>
-          <executions>
-            <execution>
-              <phase>none</phase>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </build>
-
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    </properties>
 </project>
diff --git a/tools/checkstyle/src/main/resources/cloud-style.xml b/tools/checkstyle/src/main/resources/cloud-style.xml
index 47ea1fb..6aaef17 100644
--- a/tools/checkstyle/src/main/resources/cloud-style.xml
+++ b/tools/checkstyle/src/main/resources/cloud-style.xml
@@ -21,7 +21,6 @@
     <module name="LineLength">
       <property name="max" value="1024" />
     </module>
-
     <module name="RedundantImport" />
     <module name="UnusedImports" />
     <module name="MemberName">
@@ -36,12 +35,13 @@
 	<module name="ConstantName">
 	  <property name="format" value="^[a-zA-Z][a-zA-Z0-9_]*$"/>
 	</module>
-
     <module name="PackageName" />
+    <module name="PackageDeclaration"><property name="matchDirectoryStructure" value="true"/></module>
     <module name="ParameterName" />
     <module name="TypeName" />
     <module name="AvoidStarImport" />
   </module>
+
   <module name="RegexpSingleline">
     <!-- \s matches whitespace character, $ matches end of line. -->
     <property name="format" value="\s+$" />
diff --git a/tools/devcloud-kvm/pom.xml b/tools/devcloud-kvm/pom.xml
index cf33f10..98a87d0 100644
--- a/tools/devcloud-kvm/pom.xml
+++ b/tools/devcloud-kvm/pom.xml
@@ -1,145 +1,149 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-devcloud-kvm</artifactId>
-  <name>Apache CloudStack DevCloud-KVM</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-tools</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-developer</artifactId>
-      <version>${project.version}</version>
-      <type>pom</type>
-      <optional>true</optional>
-      <scope>runtime</scope>
-    </dependency>
-  </dependencies>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
-  <profiles>
-    <profile>
-      <id>deploydb</id>
-      <activation>
-        <property>
-          <name>deploydb</name>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>properties-maven-plugin</artifactId>
-            <version>1.0-alpha-2</version>
-            <executions>
-              <execution>
-                <phase>initialize</phase>
-                <goals>
-                  <goal>read-project-properties</goal>
-                </goals>
-                <configuration>
-                  <files>
-                    <file>${project.parent.basedir}/utils/conf/db.properties</file>
-                    <file>${project.parent.basedir}/utils/conf/db.properties.override</file>
-                  </files>
-                  <quiet>true</quiet>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>sql-maven-plugin</artifactId>
-            <version>1.5</version>
-            <dependencies>
-              <!-- specify the dependent jdbc driver here -->
-              <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${cs.mysql.version}</version>
-              </dependency>
-            </dependencies>
-            <configuration>
-              <driver>org.gjt.mm.mysql.Driver</driver>
-              <url>${db.cloud.driver}://${db.cloud.host}:${db.cloud.port}/cloud</url>
-              <username>${db.cloud.username}</username>
-              <password>${db.cloud.password}</password>
-              <!--all executions are ignored if -Dmaven.test.skip=true -->
-              <skip>${maven.test.skip}</skip>
-              <forceMojoExecution>true</forceMojoExecution>
-            </configuration>
-            <executions>
-              <execution>
-                <id>create-schema</id>
-                <phase>process-resources</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <srcFiles>
-                    <srcFile>${basedir}/devcloud-kvm.sql</srcFile>
-                  </srcFiles>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>deploysvr</id>
-      <activation>
-        <property>
-          <name>deploysvr</name>
-        </property>
-      </activation>
-      <build> 
-        <plugins>
-          <plugin>
-         <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <executable>python</executable>
-          <arguments>
-            <argument>../marvin/marvin/deployDataCenter.py</argument>
-            <argument>-i</argument>
-            <argument>devcloud-kvm.cfg</argument>
-          </arguments>
-        </configuration>
-          </plugin>
-        </plugins>
-      </build> 
-    </profile>
-  </profiles>
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-devcloud-kvm</artifactId>
+    <name>Apache CloudStack DevCloud-KVM</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-tools</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-developer</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+            <optional>true</optional>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+    <profiles>
+        <profile>
+            <id>deploydb</id>
+            <activation>
+                <property>
+                    <name>deploydb</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>properties-maven-plugin</artifactId>
+                        <version>1.0-alpha-2</version>
+                        <executions>
+                            <execution>
+                                <phase>initialize</phase>
+                                <goals>
+                                    <goal>read-project-properties</goal>
+                                </goals>
+                                <configuration>
+                                    <files>
+                                        <file>${project.parent.basedir}/utils/conf/db.properties</file>
+                                        <file>${project.parent.basedir}/utils/conf/db.properties.override</file>
+                                    </files>
+                                    <quiet>true</quiet>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>sql-maven-plugin</artifactId>
+                        <version>1.5</version>
+                        <dependencies>
+                            <!-- specify the dependent jdbc driver here -->
+                            <dependency>
+                                <groupId>mysql</groupId>
+                                <artifactId>mysql-connector-java</artifactId>
+                                <version>${cs.mysql.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <configuration>
+                            <driver>org.gjt.mm.mysql.Driver</driver>
+                            <url>${db.cloud.driver}://${db.cloud.host}:${db.cloud.port}/cloud</url>
+                            <username>${db.cloud.username}</username>
+                            <password>${db.cloud.password}</password>
+                            <!--all executions are ignored if -Dmaven.test.skip=true -->
+                            <skip>${maven.test.skip}</skip>
+                            <forceMojoExecution>true</forceMojoExecution>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>create-schema</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                                <configuration>
+                                    <srcFiles>
+                                        <srcFile>${basedir}/devcloud-kvm.sql</srcFile>
+                                    </srcFiles>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>deploysvr</id>
+            <activation>
+                <property>
+                    <name>deploysvr</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <executions>
+                            <execution>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <executable>python</executable>
+                            <arguments>
+                                <argument>../marvin/marvin/deployDataCenter.py</argument>
+                                <argument>-i</argument>
+                                <argument>devcloud-kvm.cfg</argument>
+                            </arguments>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/tools/devcloud4/pom.xml b/tools/devcloud4/pom.xml
index 7f8011a..be81a56 100644
--- a/tools/devcloud4/pom.xml
+++ b/tools/devcloud4/pom.xml
@@ -1,112 +1,116 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to 
-  you under the Apache License, Version 2.0 (the "License"); you may not use 
-  this file except in compliance with the License. You may obtain a copy of 
-  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-  by applicable law or agreed to in writing, software distributed under the 
-  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific 
-  language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-devcloud4</artifactId>
-  <name>Apache CloudStack DevCloud4</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-tools</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-developer</artifactId>
-      <version>${project.version}</version>
-      <type>pom</type>
-      <optional>true</optional>
-      <scope>runtime</scope>
-    </dependency>
-  </dependencies>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-  <build>
-    <defaultGoal>install</defaultGoal>
-  </build>
-  <profiles>
-    <profile>
-      <id>deploydb</id>
-      <activation>
-        <property>
-          <name>deploydb</name>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>properties-maven-plugin</artifactId>
-            <version>1.0-alpha-2</version>
-            <executions>
-              <execution>
-                <phase>initialize</phase>
-                <goals>
-                  <goal>read-project-properties</goal>
-                </goals>
-                <configuration>
-                  <files>
-                    <file>${project.parent.parent.basedir}/utils/conf/db.properties</file>
-                    <file>${project.parent.parent.basedir}/utils/conf/db.properties.override</file>
-                  </files>
-                  <quiet>true</quiet>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>sql-maven-plugin</artifactId>
-            <version>1.5</version>
-            <dependencies>
-              <!-- specify the dependent jdbc driver here -->
-              <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${cs.mysql.version}</version>
-              </dependency>
-            </dependencies>
-            <configuration>
-              <driver>org.gjt.mm.mysql.Driver</driver>
-              <url>${db.cloud.driver}://${db.cloud.host}:${db.cloud.port}/cloud</url>
-              <username>${db.cloud.username}</username>
-              <password>${db.cloud.password}</password>
-              <!--all executions are ignored if -Dmaven.test.skip=true -->
-              <skip>${maven.test.skip}</skip>
-              <forceMojoExecution>true</forceMojoExecution>
-            </configuration>
-            <executions>
-              <execution>
-                <id>create-schema</id>
-                <phase>process-resources</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <srcFiles>
-                    <srcFile>${basedir}/prefill.sql</srcFile>
-                  </srcFiles>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-devcloud4</artifactId>
+    <name>Apache CloudStack DevCloud4</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-tools</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-developer</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+            <optional>true</optional>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+    <profiles>
+        <profile>
+            <id>deploydb</id>
+            <activation>
+                <property>
+                    <name>deploydb</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>properties-maven-plugin</artifactId>
+                        <version>1.0-alpha-2</version>
+                        <executions>
+                            <execution>
+                                <phase>initialize</phase>
+                                <goals>
+                                    <goal>read-project-properties</goal>
+                                </goals>
+                                <configuration>
+                                    <files>
+                                        <file>${project.parent.parent.basedir}/utils/conf/db.properties</file>
+                                        <file>${project.parent.parent.basedir}/utils/conf/db.properties.override</file>
+                                    </files>
+                                    <quiet>true</quiet>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>sql-maven-plugin</artifactId>
+                        <version>1.5</version>
+                        <dependencies>
+                            <!-- specify the dependent jdbc driver here -->
+                            <dependency>
+                                <groupId>mysql</groupId>
+                                <artifactId>mysql-connector-java</artifactId>
+                                <version>${cs.mysql.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <configuration>
+                            <driver>org.gjt.mm.mysql.Driver</driver>
+                            <url>${db.cloud.driver}://${db.cloud.host}:${db.cloud.port}/cloud</url>
+                            <username>${db.cloud.username}</username>
+                            <password>${db.cloud.password}</password>
+                            <!--all executions are ignored if -Dmaven.test.skip=true -->
+                            <skip>${maven.test.skip}</skip>
+                            <forceMojoExecution>true</forceMojoExecution>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>create-schema</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                                <configuration>
+                                    <srcFiles>
+                                        <srcFile>${basedir}/prefill.sql</srcFile>
+                                    </srcFiles>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
index 4429bf6..4a9f398 100644
--- a/tools/docker/Dockerfile
+++ b/tools/docker/Dockerfile
@@ -20,7 +20,7 @@
 FROM ubuntu:16.04
 
 MAINTAINER "Apache CloudStack" <dev@cloudstack.apache.org>
-LABEL Vendor="Apache.org" License="ApacheV2" Version="4.11.2.0-SNAPSHOT"
+LABEL Vendor="Apache.org" License="ApacheV2" Version="4.12.0.0-SNAPSHOT"
 
 RUN apt-get -y update && apt-get install -y \
     genisoimage \
diff --git a/tools/docker/Dockerfile.centos6 b/tools/docker/Dockerfile.centos6
index fd0d26c..62c750e 100644
--- a/tools/docker/Dockerfile.centos6
+++ b/tools/docker/Dockerfile.centos6
@@ -18,7 +18,7 @@
 FROM centos:6
 
 MAINTAINER "Apache CloudStack" <dev@cloudstack.apache.org>
-LABEL Vendor="Apache.org" License="ApacheV2" Version="4.11.2.0-SNAPSHOT"
+LABEL Vendor="Apache.org" License="ApacheV2" Version="4.12.0.0-SNAPSHOT"
 
 ENV PKG_URL=https://builds.cloudstack.org/job/package-master-rhel63/lastSuccessfulBuild/artifact/dist/rpmbuild/RPMS/x86_64
 
@@ -26,8 +26,8 @@
 RUN rpm -i http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.3-1.el6.x86_64.rpm
 
 RUN yum install -y nc wget \
-    ${PKG_URL}/cloudstack-common-4.11.2.0-SNAPSHOT.el6.x86_64.rpm \
-    ${PKG_URL}/cloudstack-management-4.11.2.0-SNAPSHOT.el6.x86_64.rpm
+    ${PKG_URL}/cloudstack-common-4.12.0.0-SNAPSHOT.el6.x86_64.rpm \
+    ${PKG_URL}/cloudstack-management-4.12.0.0-SNAPSHOT.el6.x86_64.rpm
 
 RUN cd /etc/cloudstack/management; \
     ln -s tomcat6-nonssl.conf tomcat6.conf; \
diff --git a/tools/docker/Dockerfile.marvin b/tools/docker/Dockerfile.marvin
index fa87e4a..6325182 100644
--- a/tools/docker/Dockerfile.marvin
+++ b/tools/docker/Dockerfile.marvin
@@ -20,11 +20,11 @@
 FROM python:2
 
 MAINTAINER "Apache CloudStack" <dev@cloudstack.apache.org>
-LABEL Vendor="Apache.org" License="ApacheV2" Version="4.11.2.0-SNAPSHOT"
+LABEL Vendor="Apache.org" License="ApacheV2" Version="4.12.0.0-SNAPSHOT"
 
 ENV WORK_DIR=/marvin
 
-ENV PKG_URL=https://builds.cloudstack.org/job/build-master-marvin/lastSuccessfulBuild/artifact/tools/marvin/dist/Marvin-4.11.2.0-SNAPSHOT.tar.gz
+ENV PKG_URL=https://builds.cloudstack.org/job/build-master-marvin/lastSuccessfulBuild/artifact/tools/marvin/dist/Marvin-4.12.0.0-SNAPSHOT.tar.gz
 
 RUN apt-get update && apt-get install -y vim
 RUN pip install --upgrade paramiko nose requests
diff --git a/tools/marvin/marvin/lib/base.py b/tools/marvin/marvin/lib/base.py
index b3b3069..fdfed77 100755
--- a/tools/marvin/marvin/lib/base.py
+++ b/tools/marvin/marvin/lib/base.py
@@ -596,6 +596,10 @@
 
         virtual_machine = apiclient.deployVirtualMachine(cmd, method=method)
 
+        if 'password' in virtual_machine.__dict__.keys():
+            if virtual_machine.password:
+                services['password'] = virtual_machine.password
+
         virtual_machine.ssh_ip = virtual_machine.nic[0].ipaddress
         if startvm is False:
             virtual_machine.public_ip = virtual_machine.nic[0].ipaddress
diff --git a/tools/marvin/pom.xml b/tools/marvin/pom.xml
index 328c276..f3bbd1f 100644
--- a/tools/marvin/pom.xml
+++ b/tools/marvin/pom.xml
@@ -1,287 +1,293 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-marvin</artifactId>
-  <name>Apache CloudStack marvin</name>
-  <packaging>pom</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloud-tools</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-apidoc</artifactId>
-      <version>${project.version}</version>
-      <type>pom</type>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <defaultGoal>install</defaultGoal>
-    <plugins>
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>clean</id>
-            <phase>clean</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <delete dir="marvin/cloudstackAPI" />
-                <echo>Deleting ${project.artifactId} API sources</echo>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <executions>
-          <execution>
-            <id>generate-sources</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <workingDirectory>${basedir}/marvin</workingDirectory>
-              <executable>python</executable>
-              <arguments>
-                <argument>codegenerator.py</argument>
-                <argument>-s</argument>
-                <argument>${basedir}/../apidoc/target/commands.xml</argument>
-                <echo>Generating ${project.artifactId} API classes}</echo>
-              </arguments>
-            </configuration>
-          </execution>
-          <execution>
-            <id>package</id>
-            <phase>package</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <workingDirectory>${exec.workingdir}</workingDirectory>
-              <executable>python</executable>
-              <arguments>
-                <argument>mvn-setup.py</argument>
-                <argument>${project.version}</argument>
-                <argument>sdist</argument>
-              </arguments>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <!-- Custom profiles for sync and integration tests -->
-  <profiles>
-    <profile>
-      <id>marvin.sync</id>
-      <activation>
-        <property>
-          <name>endpoint</name>
-          <value>localhost</value>
-        </property>
-      </activation>
-      <build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-marvin</artifactId>
+    <name>Apache CloudStack marvin</name>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloud-tools</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-apidoc</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+        </dependency>
+    </dependencies>
+    <build>
         <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>1.2.1</version>
-            <executions>
-              <execution>
-                <id>generate-sources</id>
-                <phase>generate-sources</phase>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-                <configuration>
-                  <workingDirectory>${basedir}/marvin</workingDirectory>
-                  <executable>python</executable>
-                  <arguments>
-                    <argument>codegenerator.py</argument>
-                    <argument>-e</argument>
-                    <argument>${endpoint}</argument>
-                    <echo>Generating ${project.artifactId} API classes}</echo>
-                  </arguments>
-                </configuration>
-              </execution>
-              <execution>
-                <id>package</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-                <configuration>
-                  <workingDirectory>${exec.workingdir}</workingDirectory>
-                  <executable>python</executable>
-                  <arguments>
-                    <argument>mvn-setup.py</argument>
-                    <argument>${project.version}</argument>
-                    <argument>sdist</argument>
-                  </arguments>
-                </configuration>
-              </execution>
-              <execution>
-                <id>install</id>
-                <phase>install</phase>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-                <configuration>
-                  <workingDirectory>${basedir}/dist</workingDirectory>
-                  <executable>pip</executable>
-                  <arguments>
-                    <argument>install</argument>
-                    <argument>--allow-external</argument>
-                    <argument>--upgrade</argument>
-                    <argument>Marvin-${project.version}.tar.gz</argument>
-                  </arguments>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>clean</id>
+                        <phase>clean</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <delete dir="marvin/cloudstackAPI" />
+                                <echo>Deleting ${project.artifactId} API sources</echo>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <executions>
+                    <execution>
+                        <id>generate-sources</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <workingDirectory>${basedir}/marvin</workingDirectory>
+                            <executable>python</executable>
+                            <arguments>
+                                <argument>codegenerator.py</argument>
+                                <argument>-s</argument>
+                                <argument>${basedir}/../apidoc/target/commands.xml</argument>
+                                <echo>Generating ${project.artifactId} API classes}</echo>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>package</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <workingDirectory>${exec.workingdir}</workingDirectory>
+                            <executable>python</executable>
+                            <arguments>
+                                <argument>mvn-setup.py</argument>
+                                <argument>${project.version}</argument>
+                                <argument>sdist</argument>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>marvin.setup</id>
-      <properties>
-        <marvin.config>${user.dir}/setup/dev/advanced.cfg</marvin.config>
-      </properties>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.gmaven</groupId>
-            <artifactId>gmaven-plugin</artifactId>
-            <version>1.5</version>
-            <executions>
-              <execution>
-                <id>setproperty</id>
-                <phase>validate</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <source>
-                    pom.properties['resolved.basedir']=project.basedir.absolutePath.replace('\','/').replace('D:','/cyg/d');
-                    pom.properties['resolved.userdir']='${user.dir}'.replace('\','/').replace('D:','/cyg/d');
-                  </source>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>1.2.1</version>
-            <executions>
-              <execution>
-                <id>pre-integration-test</id>
-                <phase>pre-integration-test</phase>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-                <configuration>
-                  <workingDirectory>${basedir}/marvin</workingDirectory>
-                  <executable>python</executable>
-                  <arguments>
-                   <argument>deployAndRun.py</argument>
-                   <argument>-c</argument>
-                   <argument>${resolved.userdir}/${marvin.config}</argument>
-                   <argument>-d</argument>
-                   <argument>${resolved.basedir}/marvin/testSetupSuccess.py</argument>
-                  </arguments>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>marvin.test</id>
-      <properties>
-        <tag>simulator</tag>
-        <test>test/integration/smoke</test>
-        <marvin.config>${user.dir}/setup/dev/advanced.cfg</marvin.config>
-      </properties>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.gmaven</groupId>
-            <artifactId>gmaven-plugin</artifactId>
-            <version>1.5</version>
-            <executions>
-              <execution>
-                <id>setproperty</id>
-                <phase>validate</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <properties>
-                    <resolved.user.dir>${user.dir}</resolved.user.dir>
-                    <resolved.marvin.config>${marvin.config}</resolved.marvin.config>
-                  </properties>
-                  <source>
-                    project.properties['resolved.user.dir']='${user.dir}'.replace('\','/').replace('D:','/cyg/d');
-                    project.properties['resolved.marvin.config']='${marvin.config}'.replace('\','/').replace('D:','/cyg/d');
-                  </source>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>1.2.1</version>
-            <executions>
-              <execution>
-                <id>integration-test</id>
-                <phase>integration-test</phase>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-                <configuration>
-                  <workingDirectory>${basedir}/marvin</workingDirectory>
-                  <executable>nosetests</executable>
-                  <arguments>
-                    <argument>--with-marvin</argument>
-                    <argument>--marvin-config</argument>
-                    <argument>${resolved.user.dir}/${resolved.marvin.config}</argument>
-                    <argument>--load</argument>
-                    <argument>-a</argument>
-                    <argument>tags=${tag}</argument>
-                    <argument>${resolved.user.dir}/${test}</argument>
-                    <argument>-v</argument>
-                  </arguments>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+    </build>
+    <!-- Custom profiles for sync and integration tests -->
+    <profiles>
+        <profile>
+            <id>marvin.sync</id>
+            <activation>
+                <property>
+                    <name>endpoint</name>
+                    <value>localhost</value>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <executions>
+                            <execution>
+                                <id>generate-sources</id>
+                                <phase>generate-sources</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${basedir}/marvin</workingDirectory>
+                                    <executable>python</executable>
+                                    <arguments>
+                                        <argument>codegenerator.py</argument>
+                                        <argument>-e</argument>
+                                        <argument>${endpoint}</argument>
+                                        <echo>Generating ${project.artifactId} API classes}</echo>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>package</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${exec.workingdir}</workingDirectory>
+                                    <executable>python</executable>
+                                    <arguments>
+                                        <argument>mvn-setup.py</argument>
+                                        <argument>${project.version}</argument>
+                                        <argument>sdist</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>install</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${basedir}/dist</workingDirectory>
+                                    <executable>pip</executable>
+                                    <arguments>
+                                        <argument>install</argument>
+                                        <argument>--allow-external</argument>
+                                        <argument>--upgrade</argument>
+                                        <argument>Marvin-${project.version}.tar.gz</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>marvin.setup</id>
+            <properties>
+                <marvin.config>${user.dir}/setup/dev/advanced.cfg</marvin.config>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.gmaven</groupId>
+                        <artifactId>gmaven-plugin</artifactId>
+                        <version>1.5</version>
+                        <executions>
+                            <execution>
+                                <id>setproperty</id>
+                                <phase>validate</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                                <configuration>
+                                    <source>
+                                        pom.properties['resolved.basedir']=project.basedir.absolutePath.replace('\','/').replace('D:','/cyg/d');
+                                        pom.properties['resolved.userdir']='${user.dir}'.replace('\','/').replace('D:','/cyg/d');
+                                    </source>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <executions>
+                            <execution>
+                                <id>pre-integration-test</id>
+                                <phase>pre-integration-test</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${basedir}/marvin</workingDirectory>
+                                    <executable>python</executable>
+                                    <arguments>
+                                        <argument>deployAndRun.py</argument>
+                                        <argument>-c</argument>
+                                        <argument>${resolved.userdir}/${marvin.config}</argument>
+                                        <argument>-d</argument>
+                                        <argument>${resolved.basedir}/marvin/testSetupSuccess.py</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>marvin.test</id>
+            <properties>
+                <tag>simulator</tag>
+                <test>test/integration/smoke</test>
+                <marvin.config>${user.dir}/setup/dev/advanced.cfg</marvin.config>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.gmaven</groupId>
+                        <artifactId>gmaven-plugin</artifactId>
+                        <version>1.5</version>
+                        <executions>
+                            <execution>
+                                <id>setproperty</id>
+                                <phase>validate</phase>
+                                <goals>
+                                    <goal>execute</goal>
+                                </goals>
+                                <configuration>
+                                    <properties>
+                                        <resolved.user.dir>${user.dir}</resolved.user.dir>
+                                        <resolved.marvin.config>${marvin.config}</resolved.marvin.config>
+                                    </properties>
+                                    <source>
+                                        project.properties['resolved.user.dir']='${user.dir}'.replace('\','/').replace('D:','/cyg/d');
+                                        project.properties['resolved.marvin.config']='${marvin.config}'.replace('\','/').replace('D:','/cyg/d');
+                                    </source>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <executions>
+                            <execution>
+                                <id>integration-test</id>
+                                <phase>integration-test</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${basedir}/marvin</workingDirectory>
+                                    <executable>nosetests</executable>
+                                    <arguments>
+                                        <argument>--with-marvin</argument>
+                                        <argument>--marvin-config</argument>
+                                        <argument>${resolved.user.dir}/${resolved.marvin.config}</argument>
+                                        <argument>--load</argument>
+                                        <argument>-a</argument>
+                                        <argument>tags=${tag}</argument>
+                                        <argument>${resolved.user.dir}/${test}</argument>
+                                        <argument>-v</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/tools/marvin/setup.py b/tools/marvin/setup.py
index 310d27a..864d856 100644
--- a/tools/marvin/setup.py
+++ b/tools/marvin/setup.py
@@ -27,7 +27,7 @@
         raise RuntimeError("python setuptools is required to build Marvin")
 
 
-VERSION = "4.11.2.0-SNAPSHOT"
+VERSION = "4.12.0.0-SNAPSHOT"
 
 setup(name="Marvin",
       version=VERSION,
@@ -54,7 +54,8 @@
           "pyvmomi >= 5.5.0",
           "netaddr >= 0.7.14",
           "dnspython",
-          "ipmisim >= 0.7"
+          "ipmisim >= 0.7",
+          "pytz"
       ],
       extras_require={
         "nuagevsp": ["vspk", "PyYAML", "futures", "netaddr", "retries", "jpype1"]
diff --git a/tools/pom.xml b/tools/pom.xml
index f001982..15cdfe0 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -1,42 +1,52 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
     <name>Apache CloudStack Developer Tools</name>
     <artifactId>cloud-tools</artifactId>
     <packaging>pom</packaging>
     <parent>
         <groupId>org.apache.cloudstack</groupId>
         <artifactId>cloudstack</artifactId>
-        <version>4.11.2.0-SNAPSHOT</version>
+        <version>4.12.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <build>
-        <defaultGoal>install</defaultGoal>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>cloudstack-checkstyle</id>
+                        <phase>none</phase>
+                        <inherited>false</inherited>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
     </build>
     <modules>
         <module>apidoc</module>
         <module>marvin</module>
         <module>devcloud4</module>
-	<module>devcloud-kvm</module>
+        <module>devcloud-kvm</module>
     </modules>
 </project>
diff --git a/tools/whisker/LICENSE b/tools/whisker/LICENSE
index e107c4f..de89620 100644
--- a/tools/whisker/LICENSE
+++ b/tools/whisker/LICENSE
@@ -4726,13 +4726,13 @@
             qunit.css  from http://docs.jquery.com/QUnit
             qunit.js  from http://docs.jquery.com/QUnit
 
-Within the utils/src/com/cloud/utils/db directory
+Within the utils/src/main/java/com/cloud/utils/db directory
     licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt  (as above)
     Copyright (c) 2004 Clinton Begin
         from Clinton Begin  http://code.google.com/p/mybatis/ 
             ScriptRunner.java  from http://code.google.com/p/mybatis/
 
-Within the utils/src/org/apache/commons/httpclient/contrib/ssl directory
+Within the utils/src/main/java/org/apache/commons/httpclient/contrib/ssl directory
     licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt  (as above)
     Copyright (c) 2007 The Apache Software Foundation
         from The Apache Software Foundation  http://www.apache.org/ 
diff --git a/tools/whisker/descriptor-for-packaging.xml b/tools/whisker/descriptor-for-packaging.xml
index 3a7624d..be02601 100644
--- a/tools/whisker/descriptor-for-packaging.xml
+++ b/tools/whisker/descriptor-for-packaging.xml
@@ -2629,7 +2629,7 @@
             </by-organisation>
         </with-license>
     </within>
-    <within dir='utils/src/com/cloud/utils/db'>
+    <within dir='utils/src/main/java/com/cloud/utils/db'>
         <with-license id='ApacheLicenseVersion2'>
             <copyright-notice>
 Copyright (c) 2004 Clinton Begin
@@ -2991,7 +2991,7 @@
                </by-organisation>
         </with-license>
     </within>
-    <within dir='utils/src/org/apache/commons/httpclient/contrib/ssl'>
+    <within dir='utils/src/main/java/org/apache/commons/httpclient/contrib/ssl'>
         <with-license id='ApacheLicenseVersion2'>
             <copyright-notice>
 Copyright (c) 2007 The Apache Software Foundation
diff --git a/tools/whisker/descriptor.xml b/tools/whisker/descriptor.xml
index 8cad773..c64913c 100644
--- a/tools/whisker/descriptor.xml
+++ b/tools/whisker/descriptor.xml
@@ -2609,7 +2609,7 @@
             </by-organisation>
         </with-license>
     </within>
-    <within dir='utils/src/com/cloud/utils/db'>
+    <within dir='utils/src/main/java/com/cloud/utils/db'>
         <with-license id='ApacheLicenseVersion2'>
             <copyright-notice>
 Copyright (c) 2004 Clinton Begin
@@ -2639,7 +2639,7 @@
 			</by-organisation>
 		</with-license>
     </within>
-    <within dir='utils/src/org/apache/commons/httpclient/contrib/ssl'>
+    <within dir='utils/src/main/java/org/apache/commons/httpclient/contrib/ssl'>
         <with-license id='ApacheLicenseVersion2'>
             <copyright-notice>
 Copyright (c) 2007 The Apache Software Foundation
diff --git a/tools/wix-cloudstack-maven-plugin/pom.xml b/tools/wix-cloudstack-maven-plugin/pom.xml
index fa3e934..c4693ff 100644
--- a/tools/wix-cloudstack-maven-plugin/pom.xml
+++ b/tools/wix-cloudstack-maven-plugin/pom.xml
@@ -1,78 +1,84 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-  license agreements. See the NOTICE file distributed with this work for additional
-  information regarding copyright ownership. The ASF licenses this file to you under
-  the Apache License, Version 2.0 (the "License"); you may not use this file except
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-  Unless required by applicable law or agreed to in writing, software distributed under
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-  OF ANY KIND, either express or implied. See the License for the specific language
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>Wix-cloudstack-maven-plugin</artifactId>
-  <name>Apache CloudStack - Wix Maven Plugin</name>
-  <packaging>maven-plugin</packaging>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../../pom.xml</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-plugin-api</artifactId>
-      <version>${maven-plugin-api.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-exec</artifactId>
-      <version>${commons-exec.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.bitbucket.joxley</groupId>
-      <artifactId>wix-maven-plugin</artifactId>
-      <version>${wix-maven-plugin.version}</version>
-    </dependency>
-  </dependencies>
-
-  <properties>
-    <maven-plugin-api.version>2.0</maven-plugin-api.version>
-    <commons-exec.version>1.1</commons-exec.version>
-    <wix-maven-plugin.version>1.1.1</wix-maven-plugin.version>
-  </properties>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <!-- Ignore/Execute plugin execution -->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-enforcer-plugin</artifactId>
-                    <versionRange>[1.0.0,)</versionRange>
-                    <goals>
-                      <goal>enforce</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore />
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>Wix-cloudstack-maven-plugin</artifactId>
+    <name>Apache CloudStack - Wix Maven Plugin</name>
+    <packaging>maven-plugin</packaging>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>${maven-plugin-api.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-exec</artifactId>
+            <version>${commons-exec.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bitbucket.joxley</groupId>
+            <artifactId>wix-maven-plugin</artifactId>
+            <version>${wix-maven-plugin.version}</version>
+        </dependency>
+    </dependencies>
+    <properties>
+        <maven-plugin-api.version>2.0</maven-plugin-api.version>
+        <commons-exec.version>1.1</commons-exec.version>
+        <wix-maven-plugin.version>1.1.1</wix-maven-plugin.version>
+    </properties>
+    <build>
+        <pluginManagement>
+            <plugins>
+                <!-- Ignore/Execute plugin execution -->
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.apache.maven.plugins</groupId>
+                                        <artifactId>maven-enforcer-plugin</artifactId>
+                                        <versionRange>[1.0.0,)</versionRange>
+                                        <goals>
+                                            <goal>enforce</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore />
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
 </project>
diff --git a/tools/wix-cloudstack-maven-plugin/src/org/apache/cloudstack/wix/HeatMojo.java b/tools/wix-cloudstack-maven-plugin/src/main/java/org/apache/cloudstack/wix/HeatMojo.java
similarity index 100%
rename from tools/wix-cloudstack-maven-plugin/src/org/apache/cloudstack/wix/HeatMojo.java
rename to tools/wix-cloudstack-maven-plugin/src/main/java/org/apache/cloudstack/wix/HeatMojo.java
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index dadc3c9..1493954 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -3240,6 +3240,7 @@
   height: 12px;
 }
 
+div.toolbar div.button.export:hover,
 div.toolbar div.button.add:hover,
 div.toolbar div.button.refresh:hover,
 div.toolbar div.button.main-action:hover,
@@ -8390,7 +8391,6 @@
   border-right: 1px solid #CFC9C9;
   height: 15px;
   overflow: auto;
-  padding-right: 0;
 }
 
 .multi-edit .data .data-body .data-item > table tbody tr td span {
@@ -8425,8 +8425,65 @@
   color: #0000FF;
 }
 
-.multi-edit .data .data-body .data-item table tbody tr td.multi-actions {
-  border-right: none;
+div#details-tab-aclRules table.multi-edit tr th.number,
+div#details-tab-aclRules div.data-item table tr td.number {
+  width: 45px !important;
+  min-width: 45px !important;
+  max-width: 45px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.action,
+div#details-tab-aclRules div.multi-edit table tr td.action {
+    width: 40px !important;
+    min-width: 40px !important;
+    max-width: 40px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.protocol,
+div#details-tab-aclRules div.multi-edit table tr td.protocol {
+    width: 50px !important;
+    min-width: 50px !important;
+    max-width: 50px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.protocolnumber,
+div#details-tab-aclRules div.multi-edit table tr td.protocolnumber {
+    width: 60px !important;
+    min-width: 60px !important;
+    max-width: 60px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.traffictype,
+div#details-tab-aclRules div.multi-edit table tr td.traffictype {
+    width: 60px !important;
+    min-width: 60px !important;
+    max-width: 60px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.reason,
+div#details-tab-aclRules div.multi-edit table tr td.reason {
+    width: 60px !important;
+    min-width: 60px !important;
+    max-width: 60px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.icmptype, div#details-tab-aclRules div.multi-edit table tr td.icmptype,
+div#details-tab-aclRules div.multi-edit table tr th.icmpcode, div#details-tab-aclRules div.multi-edit table tr td.icmpcode {
+    width: 60px !important;
+    min-width: 60px !important;
+    max-width: 60px !important;
+}
+
+div#details-tab-aclRules div.multi-edit table tr th.startport, div#details-tab-aclRules div.multi-edit table tr td.startport,
+div#details-tab-aclRules div.multi-edit table tr th.endport, div#details-tab-aclRules div.multi-edit table tr td.endport {
+    width: 60px !important;
+    min-width: 60px !important;
+    max-width: 60px !important;
+}
+
+div#details-tab-aclRules td.cidrlist span {
+	text-align: center;
+	width: 100%;
 }
 
 .multi-edit .data .data-body .data-item table tbody tr td.multi-actions .action {
@@ -8547,17 +8604,18 @@
 
 .detail-view .multi-edit table tr th,
 .detail-view .multi-edit table tr td {
-  width: 87px !important;
-  min-width: 87px !important;
-  max-width: 87px !important;
+  width: 84px !important;
+  min-width: 84px !important;
+  max-width: 84px !important;
   font-size: 10px;
 }
 
 /* special case for 'Source CIDR' column - make it wide enough to fit a CIDR without ellipsizing*/
 .detail-view .multi-edit table tr th.cidrlist,
 .detail-view .multi-edit table tr td.cidrlist {
-  min-width: 112px !important;
-  max-width: 112px !important;
+  min-width: 118px !important;
+  max-width: 118px !important;
+  padding: 0 0 0 0;
 }
 .detail-view .multi-edit td.cidrlist input {
   width: 85%;
@@ -8614,9 +8672,9 @@
 /*Sortable*/
 .multi-edit table tbody tr td.reorder,
 .multi-edit table thead tr th.reorder {
-  width: 30px !important;
-  min-width: 30px !important;
-  max-width: 30px !important;
+  width: 16px !important;
+  min-width: 16px !important;
+  max-width: 16px !important;
 }
 
 /*Security Rules*/
@@ -13038,7 +13096,7 @@
   -khtml-border-radius: 10px;
   border-radius: 10px;
   border-radius: 10px 10px 10px 10px;
-  background-position: -74px -162px;
+  background-position: -82px -162px;
 }
 
 .moveDrag:hover .icon {
@@ -13359,3 +13417,31 @@
     left: 310px;
 }
 
+div.button.export {
+	position: relative;
+	left: 0px;
+	top: 5px;
+	font-size: 12px;
+	font-weight: 100;
+	color: #000000;
+	margin: 0 10px 0 0;
+	cursor: pointer;
+	text-shadow: 0px 1px 1px #DEE5EA;
+	padding: 5px 5px 5px 5px;
+	background: linear-gradient(to bottom, rgba(247,247,247,1) 1%,rgba(234,234,234,1) 100%);
+	border: 1px solid #B7B7B7;
+	float: right;
+	border-radius: 4px 4px 4px 4px;
+	height: 12px;
+}
+
+div.button.export a {
+	padding: 0px 0 3px 20px;
+	background: url(../images/exportCsvIcon.png) no-repeat;
+	position: relative;
+	left: 0px;
+	top: 0px;
+	background-size: 15.5px;
+	text-decoration: none;
+	color: black;
+}
\ No newline at end of file
diff --git a/ui/images/exportCsvIcon.png b/ui/images/exportCsvIcon.png
new file mode 100644
index 0000000..cc486ec
--- /dev/null
+++ b/ui/images/exportCsvIcon.png
Binary files differ
diff --git a/ui/l10n/ar.js b/ui/l10n/ar.js
index 3b560a8..87c1193 100644
--- a/ui/l10n/ar.js
+++ b/ui/l10n/ar.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP Code",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP Type",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "تغير خصائص العنصر",
     "confirm.enable.s3": "فضلا قم بتعبئة البيانات القادمة لتمكين التخزين S3 للذاكرة الثانوية.",
     "confirm.enable.swift": "Please fill in the following information to enable support for Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Accounts",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL Name",
     "label.acl.replaced": "ACL replaced",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Acquire New IP",
     "label.acquire.new.secondary.ip": "Acquire new secondary IP",
     "label.action": "Action",
@@ -313,6 +318,7 @@
     "label.add.accounts": "إضافة حسابات",
     "label.add.accounts.to": "إضافة حسابات إلى",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "إضافة مسار",
     "label.add.rule": "إضافة قاعدة",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Add Secondary Storage",
     "label.add.security.group": "Add Security Group",
     "label.add.service.offering": "Add Service Offering",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Disk Write Rate (IOPS)",
     "label.disk.offering": "Disk Offering",
     "label.disk.offering.details": "Disk offering details",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisioning Type",
     "label.disk.read.bytes": "Disk Read (Bytes)",
@@ -1084,6 +1093,8 @@
     "label.migrate.to.host": "التحول إلى المضيف",
     "label.migrate.to.storage": "التحول إلى التخزين",
     "label.migrate.volume": "Migrate Volume",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.migrate.volume.to.primary.storage": "Migrate volume to another primary storage",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min past the hr",
@@ -1140,6 +1151,7 @@
     "label.networks": "الشبكات",
     "label.new": "جديد",
     "label.new.password": "New Password",
+    "label.current.password": "Current Password",
     "label.new.project": "مشروع جديد",
     "label.new.ssh.key.pair": "New SSH Key Pair",
     "label.new.vm": "New VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "المشاريع",
     "label.protocol": "Protocol",
     "label.protocol.number": "Protocol Number",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Provider",
     "label.providers": "Providers",
     "label.public": "Public",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routing",
     "label.routing.host": "Routing Host",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Rule Number",
     "label.rules": "Rules",
     "label.running.vms": "Running VMs",
diff --git a/ui/l10n/ca.js b/ui/l10n/ca.js
index f6ae80f..2580301 100644
--- a/ui/l10n/ca.js
+++ b/ui/l10n/ca.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP Code",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP Type",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Changed item properties",
     "confirm.enable.s3": "Please fill in the following information to enable support for S3-backed Secondary Storage",
     "confirm.enable.swift": "Si us plau ompliu la següent informació per habilitar el suport per a Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Accounts",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL Name",
     "label.acl.replaced": "ACL replaced",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Acquire New IP",
     "label.acquire.new.secondary.ip": "Acquire new secondary IP",
     "label.action": "Action",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Afegir comptes",
     "label.add.accounts.to": "Afegir comptes a",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Add route",
     "label.add.rule": "Afegir regla",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Add Secondary Storage",
     "label.add.security.group": "Add Security Group",
     "label.add.service.offering": "Add Service Offering",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Disk Write Rate (IOPS)",
     "label.disk.offering": "Disk Offering",
     "label.disk.offering.details": "Disk offering details",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisioning Type",
     "label.disk.read.bytes": "Disk Read (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrate to storage",
     "label.migrate.volume": "Migrate Volume",
     "label.migrate.volume.to.primary.storage": "Migrate volume to another primary storage",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min past the hr",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Xarxes",
     "label.new": "Nou",
     "label.new.password": "New Password",
+    "label.current.password": "Current Password",
     "label.new.project": "Nou projecte",
     "label.new.ssh.key.pair": "New SSH Key Pair",
     "label.new.vm": "Nova MV",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projectes",
     "label.protocol": "Protocol",
     "label.protocol.number": "Protocol Number",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Provider",
     "label.providers": "Proveïdors",
     "label.public": "Public",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routing",
     "label.routing.host": "Routing Host",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Rule Number",
     "label.rules": "Rules",
     "label.running.vms": "Running VMs",
diff --git a/ui/l10n/de_DE.js b/ui/l10n/de_DE.js
index 934f8f9..e09062f 100644
--- a/ui/l10n/de_DE.js
+++ b/ui/l10n/de_DE.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP-Code",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP-Typ",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Geänderte Eintragseigenschaften",
     "confirm.enable.s3": "Bitte fügen Sie die folgenden Informationen hinzu, um die Unterstützung für \"S3-backed Secondary Storage\" hinzuzufügen",
     "confirm.enable.swift": "Bitte fügen Sie die folgenden Informationen hinzu, um die Unterstützung für Swift zu ermöglichen.",
@@ -99,9 +101,12 @@
     "label.accounts": "Benutzerkonten",
     "label.acl": "ACL",
     "label.acl.id": "ACL-Kennung",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL-Listenregeln",
     "label.acl.name": "ACL-Name",
     "label.acl.replaced": "ACL ersetzt",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Neue IP erwerben",
     "label.acquire.new.secondary.ip": "Neue sekundäre IP erwerben",
     "label.action": "Aktion",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Konten hinzufügen",
     "label.add.accounts.to": "Konten hinzufügen zu",
     "label.add.acl.list": "ACL-Liste hinzufügen",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Neue Affinitätsgruppe hinzufügen",
     "label.add.baremetal.dhcp.device": "Baremetal DHCP-Gerät hinzufügen",
     "label.add.baremetal.rack.configuration": "Baremetal Rackkonfiguration hinzufügen",
@@ -367,6 +373,7 @@
     "label.add.role": "Rolle hinzufügen",
     "label.add.route": "Route hinzufügen",
     "label.add.rule": "Regel hinzufügen",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Sekundärspeicher hinzufügen",
     "label.add.security.group": "Sicherheitsgruppe hinzufügen",
     "label.add.service.offering": "Dienstangebot hinzufügen",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Festplatten-Schreibrate (IOPS)",
     "label.disk.offering": "Festplattenangebot",
     "label.disk.offering.details": "Festplattenangebotdetails",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisionierungstyp",
     "label.disk.read.bytes": "Festplatte Lesen (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Zu Speicher migrieren",
     "label.migrate.volume": "Volumen migrieren",
     "label.migrate.volume.to.primary.storage": "Migriere ein Speichervolumen zu einem anderen Hauptspeicher",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instanzen",
     "label.min.past.the.hr": "min seit Std. vergangen",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Netzwerke",
     "label.new": "Neu",
     "label.new.password": "Neues Passwort",
+    "label.current.password": "Current Password",
     "label.new.project": "Neues Projekt",
     "label.new.ssh.key.pair": "Neues SSH-Schlüsselpaar",
     "label.new.vm": "Neue VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projekte",
     "label.protocol": "Protokoll",
     "label.protocol.number": "Protokollnummer",
+    "label.protocol.number.short" : "#Protokoll",
     "label.provider": "Anbieter",
     "label.providers": "Anbieter",
     "label.public": "Öffentlich",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routing",
     "label.routing.host": "Routing Host",
     "label.rule": "Regel",
+    "label.rule.number.short": "#Regel",
     "label.rule.number": "Regelnummer",
     "label.rules": "Regeln",
     "label.running.vms": "Laufende VMs",
diff --git a/ui/l10n/en.js b/ui/l10n/en.js
index 86a8606..e16031d 100644
--- a/ui/l10n/en.js
+++ b/ui/l10n/en.js
@@ -14,8 +14,11 @@
 // KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
-var dictionary = {"ICMP.code":"ICMP Code",
+var dictionary = {
+"ICMP.code":"ICMP Code",
+"ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
 "ICMP.type":"ICMP Type",
+"ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
 "changed.item.properties":"Changed item properties",
 "confirm.enable.s3":"Please fill in the following information to enable support for S3-backed Secondary Storage",
 "confirm.enable.swift":"Please fill in the following information to enable support for Swift",
@@ -99,9 +102,12 @@
 "label.accounts":"Accounts",
 "label.acl":"ACL",
 "label.acl.id":"ACL ID",
+"label.acl.export": "Export ACLs",
 "label.acl.list.rules":"ACL List Rules",
 "label.acl.name":"ACL Name",
 "label.acl.replaced":"ACL replaced",
+"label.acl.reason": "Reason",
+"label.acl.reason.description": "Enter the reason behind an ACL rule.",
 "label.acquire.new.ip":"Acquire New IP",
 "label.acquire.new.secondary.ip":"Acquire new secondary IP",
 "label.action":"Action",
@@ -315,6 +321,7 @@
 "label.add.accounts":"Add accounts",
 "label.add.accounts.to":"Add accounts to",
 "label.add.acl.list":"Add ACL List",
+"label.edit.acl.list": "Edit ACL List",
 "label.add.affinity.group":"Add new affinity group",
 "label.add.baremetal.dhcp.device":"Add Baremetal DHCP Device",
 "label.add.baremetal.rack.configuration":"Add Baremetal Rack Configuration",
@@ -371,6 +378,7 @@
 "label.add.role":"Add Role",
 "label.add.route":"Add route",
 "label.add.rule":"Add rule",
+"label.add.rule.desc": "Create a new ACL rule",
 "label.add.secondary.storage":"Add Secondary Storage",
 "label.add.security.group":"Add Security Group",
 "label.add.service.offering":"Add Service Offering",
@@ -672,6 +680,8 @@
 "label.disk.iops.write.rate":"Disk Write Rate (IOPS)",
 "label.disk.offering":"Disk Offering",
 "label.disk.offering.details":"Disk offering details",
+"label.disk.newOffering": "New Disk Offering",
+"label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
 "label.disk.physicalsize":"Physical Size",
 "label.disk.provisioningtype":"Provisioning Type",
 "label.disk.read.bytes":"Disk Read (Bytes)",
@@ -1114,6 +1124,8 @@
 "label.migrate.to.storage":"Migrate to storage",
 "label.migrate.volume":"Migrate Volume",
 "label.migrate.volume.to.primary.storage":"Migrate volume to another primary storage",
+"label.migrate.volume.newDiskOffering": "Replace disk offering?",
+"label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
 "label.min.instances":"Min Instances",
 "label.min.past.the.hr":"min past the hr",
 "label.minimum":"Minimum",
@@ -1174,6 +1186,7 @@
 "label.networks":"Networks",
 "label.new":"New",
 "label.new.password":"New Password",
+"label.current.password": "Current Password",
 "label.new.project":"New Project",
 "label.new.ssh.key.pair":"New SSH Key Pair",
 "label.new.vm":"New VM",
@@ -1317,6 +1330,7 @@
 "label.promiscuous.mode":"Promiscuous Mode",
 "label.protocol":"Protocol",
 "label.protocol.number":"Protocol Number",
+"label.protocol.number.short" : "#Protocol",
 "label.provider":"Provider",
 "label.providers":"Providers",
 "label.public":"Public",
@@ -1468,6 +1482,7 @@
 "label.routing.host":"Routing Host",
 "label.rule":"Rule",
 "label.rule.number":"Rule Number",
+"label.rule.number.short": "#Rule",
 "label.rules":"Rules",
 "label.running.vms":"Running VMs",
 "label.s3.access_key":"Access Key",
diff --git a/ui/l10n/es.js b/ui/l10n/es.js
index 35257d4..285df3d 100644
--- a/ui/l10n/es.js
+++ b/ui/l10n/es.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "Código ICMP",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "Tipo ICMP",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Cambiadas las propiedades del elemento",
     "confirm.enable.s3": "Por favor, complete la siguiente información para habilitar el soporte del Almacenamiento Secundario sobre S3",
     "confirm.enable.swift": "Por favor, complete la siguiente información para habilitar el soporte para Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Cuentas",
     "label.acl": "ACL",
     "label.acl.id": "ID de ACL",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "Lista de Reglas ACL",
     "label.acl.name": "Nombre de ACL",
     "label.acl.replaced": "ACL reemplazada",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Adquirir nueva IP",
     "label.acquire.new.secondary.ip": "Adquirir nueva IP secundaria",
     "label.action": "Acción",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Agregar Cuentas",
     "label.add.accounts.to": "Agregar Cuentas a",
     "label.add.acl.list": "Agregar Lista ACL",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Agregar un nuevo grupo de afinidad",
     "label.add.baremetal.dhcp.device": "Agregar dispositivo DHCP Baremetal",
     "label.add.baremetal.rack.configuration": "Agregar Configuración de Rack Baremetal",
@@ -367,6 +373,7 @@
     "label.add.role": "Agregar Rol",
     "label.add.route": "Agregar ruta",
     "label.add.rule": "Agregar regla",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Añadir almacenamiento secundario",
     "label.add.security.group": "Agregar grupo de seguridad",
     "label.add.service.offering": "Añadir Oferta de Servicio",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Tasa Escritura de Disco (IOPS)",
     "label.disk.offering": "Oferta de Disco",
     "label.disk.offering.details": "Detalles de Oferta de Disco",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Tipo de Aprovisionamiento",
     "label.disk.read.bytes": "Lectura Disco (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrar a almacenamiento",
     "label.migrate.volume": "Migrar Volumen",
     "label.migrate.volume.to.primary.storage": "Migrar volumen a otro almacenamiento primario",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Instancias Mínimas",
     "label.min.past.the.hr": "minuto(s) después de la hora",
     "label.minimum": "Mínimo",
@@ -1140,6 +1151,7 @@
     "label.networks": "Redes",
     "label.new": "Nuevo",
     "label.new.password": "Nueva contraseña",
+    "label.current.password": "Current Password",
     "label.new.project": "Nuevo Proyecto",
     "label.new.ssh.key.pair": "Nuevo Par de Claves SSH",
     "label.new.vm": "Nueva MV",
@@ -1278,6 +1290,7 @@
     "label.projects": "Proyectos",
     "label.protocol": "Protocolo",
     "label.protocol.number": "Número de Protocolo",
+    "label.protocol.number.short" : "#Protocolo",
     "label.provider": "Proveedor",
     "label.providers": "Proveedores",
     "label.public": "Pública",
@@ -1427,6 +1440,7 @@
     "label.routing": "Enrutamiento",
     "label.routing.host": "Servidor de Routeo",
     "label.rule": "Regla",
+    "label.rule.number.short": "#Regla",
     "label.rule.number": "Número de Regla",
     "label.rules": "Reglas",
     "label.running.vms": "MVs corriendo",
diff --git a/ui/l10n/fr_FR.js b/ui/l10n/fr_FR.js
index 9935a81..8ecf80d 100644
--- a/ui/l10n/fr_FR.js
+++ b/ui/l10n/fr_FR.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "Code ICMP",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "Type ICMP",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Propriétés de l'élément modifiées",
     "confirm.enable.s3": "Remplir les informations suivantes pour activer le support de stockage secondaire S3",
     "confirm.enable.swift": "Remplir les informations suivantes pour activer Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Comptes",
     "label.acl": "ACL",
     "label.acl.id": "ID ACL",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "Liste règles ACL",
     "label.acl.name": "Nom ACL",
     "label.acl.replaced": "ACL remplacée",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Acquérir nouvelle adr. IP",
     "label.acquire.new.secondary.ip": "Acquérir nouvelle IP secondaire",
     "label.action": "Action",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Ajouter des comptes",
     "label.add.accounts.to": "Ajouter des comptes sur",
     "label.add.acl.list": "Ajouter Liste ACL",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Ajouter nouveau groupe d'affinité",
     "label.add.baremetal.dhcp.device": "Ajouter un DHCP Baremetal",
     "label.add.baremetal.rack.configuration": "Ajouter Configuration Rack Baremetal",
@@ -367,6 +373,7 @@
     "label.add.role": "Ajouter Rôle",
     "label.add.route": "Ajouter route",
     "label.add.rule": "Ajouter règle",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Ajouter un stockage secondaire",
     "label.add.security.group": "Ajouter un groupe de sécurité",
     "label.add.service.offering": "Ajouter Offre Service",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Débit écriture disque (IOPS)",
     "label.disk.offering": "Offre de Disque",
     "label.disk.offering.details": "Détails offre de disque",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Type de provisionnement",
     "label.disk.read.bytes": "Lecture Disque (Octets)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrer vers un stockage",
     "label.migrate.volume": "Volume Migré",
     "label.migrate.volume.to.primary.storage": "Migration du volume vers un autre stockage primaire",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Instances Min.",
     "label.min.past.the.hr": "min ap. l'heure",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Réseaux",
     "label.new": "Nouveau",
     "label.new.password": "Nouveau mot de passe",
+    "label.current.password": "Current Password",
     "label.new.project": "Nouveau projet",
     "label.new.ssh.key.pair": "Nouvelle bi-clé SSH",
     "label.new.vm": "Nouvelle VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projets",
     "label.protocol": "Protocole",
     "label.protocol.number": "Numéro Protocole",
+    "label.protocol.number.short" : "#Protocole",
     "label.provider": "Fournisseur",
     "label.providers": "Fournisseurs",
     "label.public": "Publique",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routage",
     "label.routing.host": "Hôte de routage",
     "label.rule": "Règle",
+    "label.rule.number.short": "#Règle",
     "label.rule.number": "Numéro règle",
     "label.rules": "Règles",
     "label.running.vms": "VMs actives",
diff --git a/ui/l10n/hu.js b/ui/l10n/hu.js
index 912ecf9..2ed1f34 100644
--- a/ui/l10n/hu.js
+++ b/ui/l10n/hu.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP kód",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP típus",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Az elem tulajdonságai megváltoztak",
     "confirm.enable.s3": "Töltsd ki a következő információkat az S3 másodlagos tár bekapcsolásához!",
     "confirm.enable.swift": "Töltsd ki a következő információkat a Swift támogatás bekapcsolásához!",
@@ -99,9 +101,12 @@
     "label.accounts": "Számlák",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL név",
     "label.acl.replaced": "ACL lehelyettesítve",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Új IP cím beszerzése",
     "label.acquire.new.secondary.ip": "Új másodlagos IP cím beszerzése",
     "label.action": "Művelet",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Számlák felvétele",
     "label.add.accounts.to": "Számla felvétele:",
     "label.add.acl.list": "ACL lista felvétele",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Új affinítási csoport felvétele",
     "label.add.baremetal.dhcp.device": "Baremetal DHCP eszköz felvétele",
     "label.add.baremetal.rack.configuration": "Baremetal rack konfiguráció felvétele",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Útvonal felvétele",
     "label.add.rule": "Szabály felvétele",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Másodlagos tár felvétele",
     "label.add.security.group": "Biztonsági csoport felvétele",
     "label.add.service.offering": "Szolgáltatás ajánlat felvétele",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Írási ráta (IOPS)",
     "label.disk.offering": "Merevlemez ajánlat",
     "label.disk.offering.details": "Merevlemez ajánlat részletei",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Létrehozás típusa",
     "label.disk.read.bytes": "Merevlemez olvasás (Byte)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Mozgatás tárra",
     "label.migrate.volume": "Kötet mozgatása",
     "label.migrate.volume.to.primary.storage": "Kötet mozgatása másik elsődleges tárra",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Példányok minimális száma",
     "label.min.past.the.hr": "percben",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Hálózatok",
     "label.new": "Új",
     "label.new.password": "Új jelszó",
+    "label.current.password": "Current Password",
     "label.new.project": "Új projekt",
     "label.new.ssh.key.pair": "Új SSH kulcspár",
     "label.new.vm": "Új VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projektek",
     "label.protocol": "Protokol",
     "label.protocol.number": "Protokoll szám",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Szolgáltató",
     "label.providers": "Szolgáltatók",
     "label.public": "Publikus",
@@ -1427,6 +1440,7 @@
     "label.routing": "Útvonalválasztás",
     "label.routing.host": "Routing kiszolgáló",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Szabály szám",
     "label.rules": "Szabályok",
     "label.running.vms": "Futó VM-ek",
diff --git a/ui/l10n/it_IT.js b/ui/l10n/it_IT.js
index f725584..c2210ca 100644
--- a/ui/l10n/it_IT.js
+++ b/ui/l10n/it_IT.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "Codice ICMP",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "Tipo ICMP",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Elementi delle proprietà modificati",
     "confirm.enable.s3": "Si prega di inserire i valori richiesti per abilitare il supporto per il Secondary Storage di tipo S3",
     "confirm.enable.swift": "Si prega di inserire i valori richiesti per abilitare il supporto per Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Utenti",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL Name",
     "label.acl.replaced": "ACL replaced",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Acquisizione nuovo indirizzo IP",
     "label.acquire.new.secondary.ip": "Acquisizione nuovo IP secondario",
     "label.action": "Action",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Aggiungere utenti",
     "label.add.accounts.to": "Aggiungere utenti a",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Aggiungere un nuovo gruppo di affinità",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Aggiungere una rotta",
     "label.add.rule": "Aggiungere regola",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Aggiungere uno Storage Secondario",
     "label.add.security.group": "Aggiungere un Gruppo di Sicurezza",
     "label.add.service.offering": "Aggiungere un'Offerta di Servizio",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Disk Write Rate (IOPS)",
     "label.disk.offering": "Offerta Disco",
     "label.disk.offering.details": "Disk offering details",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Tipo di Provisioning",
     "label.disk.read.bytes": "Disk Read (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrare verso uno storage",
     "label.migrate.volume": "Migrate Volume",
     "label.migrate.volume.to.primary.storage": "Migrare un volume verso un altro primary storage",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min past the hr",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Reti",
     "label.new": "Nuovo",
     "label.new.password": "New Password",
+    "label.current.password": "Current Password",
     "label.new.project": "Nuovo Progetto",
     "label.new.ssh.key.pair": "New SSH Key Pair",
     "label.new.vm": "Nuova VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Progetti",
     "label.protocol": "Protocol",
     "label.protocol.number": "Protocol Number",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Provider",
     "label.providers": "Fornitori",
     "label.public": "Public",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routing",
     "label.routing.host": "Routing Host",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Rule Number",
     "label.rules": "Regole",
     "label.running.vms": "Running VMs",
diff --git a/ui/l10n/ja_JP.js b/ui/l10n/ja_JP.js
index 40cf38f..db94ca8 100644
--- a/ui/l10n/ja_JP.js
+++ b/ui/l10n/ja_JP.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP コード",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP の種類",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "項目のプロパティの変更",
     "confirm.enable.s3": "S3 ベースのセカンダリ ストレージのサポートを有効にするには、次の情報を入力してください。",
     "confirm.enable.swift": "Swift のサポートを有効にするには、次の情報を入力してください。",
@@ -99,9 +101,12 @@
     "label.accounts": "アカウント",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL ルールのリスト",
     "label.acl.name": "ACL 名",
     "label.acl.replaced": "ACL が置き換えられました",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "新しい IP アドレスの取得",
     "label.acquire.new.secondary.ip": "セカンダリ IP アドレスの取得",
     "label.action": "操作",
@@ -313,6 +318,7 @@
     "label.add.accounts": "アカウントの追加",
     "label.add.accounts.to": "アカウントの追加先:",
     "label.add.acl.list": "ACL 一覧の追加",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "新しいアフィニティ グループの追加",
     "label.add.baremetal.dhcp.device": "ベアメタル DHCP デバイスの追加",
     "label.add.baremetal.rack.configuration": "ベアメタルラック設定の追加",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "ルートの追加",
     "label.add.rule": "規則の追加",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "セカンダリ ストレージの追加",
     "label.add.security.group": "セキュリティ グループの追加",
     "label.add.service.offering": "サービス オファリングの追加",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "ディスク書き込み速度 (IOPS)",
     "label.disk.offering": "ディスク オファリング",
     "label.disk.offering.details": "ディスクオファリングの詳細",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "プロビジョニングの種類",
     "label.disk.read.bytes": "ディスク読み取り (バイト)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "ストレージへ移行",
     "label.migrate.volume": "ボリュームの移行",
     "label.migrate.volume.to.primary.storage": "別のプライマリ ストレージへのボリュームの移行",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "最小インスタンス数",
     "label.min.past.the.hr": "分(毎時)",
     "label.minimum": "最小",
@@ -1140,6 +1151,7 @@
     "label.networks": "ネットワーク",
     "label.new": "新規",
     "label.new.password": "新しいパスワード",
+    "label.current.password": "Current Password",
     "label.new.project": "新しいプロジェクト",
     "label.new.ssh.key.pair": "新しい SSH キーペア",
     "label.new.vm": "新しい VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "プロジェクト",
     "label.protocol": "プロトコル",
     "label.protocol.number": "プロトコル番号",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "プロバイダー",
     "label.providers": "プロバイダー",
     "label.public": "パブリック",
@@ -1427,6 +1440,7 @@
     "label.routing": "ルーティング",
     "label.routing.host": "ルーティング ホスト",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "規則番号",
     "label.rules": "規則",
     "label.running.vms": "実行中の VM",
diff --git a/ui/l10n/ko_KR.js b/ui/l10n/ko_KR.js
index f6980bc..52cd183 100644
--- a/ui/l10n/ko_KR.js
+++ b/ui/l10n/ko_KR.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP 코드",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP 종류",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "항목 속성 변경",
     "confirm.enable.s3": "S3 기반 2차 저장소 지원을 하려면 아래 정보를 입력해 주십시오.",
     "confirm.enable.swift": "Swift 기술 지원를 사용 하려면 다음 정보를 입력해 주십시오.",
@@ -99,9 +101,12 @@
     "label.accounts": "계정 정보",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL Name",
     "label.acl.replaced": "ACL replaced",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "새로운 IP 주소 취득",
     "label.acquire.new.secondary.ip": "새로운 두번째 IP 주소 취득",
     "label.action": "Action",
@@ -313,6 +318,7 @@
     "label.add.accounts": "계정 정보 추가",
     "label.add.accounts.to": "계정 정보 추가:",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "라우트 추가",
     "label.add.rule": "규칙 추가",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "2차 스토리지 추가",
     "label.add.security.group": "보안 그룹 추가",
     "label.add.service.offering": "서비스제공 추가",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Disk Write Rate (IOPS)",
     "label.disk.offering": "디스크 제공",
     "label.disk.offering.details": "Disk offering details",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisioning Type",
     "label.disk.read.bytes": "Disk Read (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrate to storage",
     "label.migrate.volume": "Migrate Volume",
     "label.migrate.volume.to.primary.storage": "다른 기본 스토리지에 볼륨 이전",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min past the hr",
     "label.minimum": "최소",
@@ -1140,6 +1151,7 @@
     "label.networks": "네트워크",
     "label.new": "신규",
     "label.new.password": "새로운 암호",
+    "label.current.password": "Current Password",
     "label.new.project": "새 프로젝트",
     "label.new.ssh.key.pair": "New SSH Key Pair",
     "label.new.vm": "새 VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "프로젝트",
     "label.protocol": "프로토콜",
     "label.protocol.number": "Protocol Number",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Provider",
     "label.providers": "제공자",
     "label.public": "공개",
@@ -1427,6 +1440,7 @@
     "label.routing": "라우팅",
     "label.routing.host": "Routing Host",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Rule Number",
     "label.rules": "규칙",
     "label.running.vms": "실행중 VM",
diff --git a/ui/l10n/nb_NO.js b/ui/l10n/nb_NO.js
index 28cd09c..fbe3bba 100644
--- a/ui/l10n/nb_NO.js
+++ b/ui/l10n/nb_NO.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP-kode",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP-type",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Endrede egenskaper",
     "confirm.enable.s3": "Vennligst fyll inn følgende informasjon for å aktivere støtte for S3-støttet sekundærlagring",
     "confirm.enable.swift": "Vennligst fyll inn følgende informasjon for å aktivere støtte for Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Kontoer",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL Liste Regler",
     "label.acl.name": "ACL Navn",
     "label.acl.replaced": "ACL erstattet",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Tilegne ny IP",
     "label.acquire.new.secondary.ip": "Tilegne ny sekundær IP",
     "label.action": "Handling",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Legg til kontoer",
     "label.add.accounts.to": "Legg kontoer til",
     "label.add.acl.list": "Legg til ACL liste",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Legg til affinitetsgruppe",
     "label.add.baremetal.dhcp.device": "Legg Til Barmetall DHCP Enhet",
     "label.add.baremetal.rack.configuration": "Legg Til Barmetall Rack Konfigurering",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Legg til rute",
     "label.add.rule": "Legg til regel",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Legg til sekundærlagring",
     "label.add.security.group": "Legg til sikkerhetsgruppe",
     "label.add.service.offering": "Legg til tjenestetilbud",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Diskskrivehastighet (IOPS)",
     "label.disk.offering": "Disktilbud",
     "label.disk.offering.details": "Disktilbud detaljer",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisjoneringstype",
     "label.disk.read.bytes": "Disk lese (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrer til lagring",
     "label.migrate.volume": "Migrer volum",
     "label.migrate.volume.to.primary.storage": "Migrer volumet til en annen primærlagring.",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instanser",
     "label.min.past.the.hr": "minutter etter time",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Nettverk",
     "label.new": "Ny",
     "label.new.password": "Nytt passord",
+    "label.current.password": "Current Password",
     "label.new.project": "Nytt prosjekt",
     "label.new.ssh.key.pair": "Nytt SSH-nøkkelpar",
     "label.new.vm": "Ny VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Prosjekter",
     "label.protocol": "Protokoll",
     "label.protocol.number": "Protokollnummer",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Tilbyder",
     "label.providers": "Tilbydere",
     "label.public": "Offentlig",
@@ -1427,6 +1440,7 @@
     "label.routing": "Ruting",
     "label.routing.host": "Ruter Vert",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Regel",
     "label.rule.number": "Regelnummer",
     "label.rules": "Regler",
     "label.running.vms": "Kjørende VMer",
diff --git a/ui/l10n/nl_NL.js b/ui/l10n/nl_NL.js
index 4508241..d1a96da 100644
--- a/ui/l10n/nl_NL.js
+++ b/ui/l10n/nl_NL.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP Code",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP Type",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Item eigenschappen gewijzigd",
     "confirm.enable.s3": "Vul de volgende informatie in om ondersteuning voor S3-aangestuurde Secundaire Opslag te activeren",
     "confirm.enable.swift": "Vul de volgende informatie in om ondersteuning voor Swift te activeren",
@@ -99,9 +101,12 @@
     "label.accounts": "Accounts",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL lijst regels",
     "label.acl.name": "ACL naam",
     "label.acl.replaced": "ACL vervangen",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Bemachtig nieuw IP",
     "label.acquire.new.secondary.ip": "Verkrijg nieuw secundair IP",
     "label.action": "Actie",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Voeg accounts toe",
     "label.add.accounts.to": "Voeg accounts toe aan",
     "label.add.acl.list": "voeg een ACL lijst toe",
+    "label.edit.acl.list": "Verander een ACL lijst",
     "label.add.affinity.group": "Nieuwe affinity groep toevoegen",
     "label.add.baremetal.dhcp.device": "Voeg Baremetal DHCP Apparaat toe",
     "label.add.baremetal.rack.configuration": "voeg baremetal rek configuratie toe",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Route toevoegen",
     "label.add.rule": "Regel toevoegen",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Secundaire Opslag toevoegen",
     "label.add.security.group": "Security Group toevoegen",
     "label.add.service.offering": "Service Aanbieding toevoegen",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Schrijf snelheid Schijf (IOPS)",
     "label.disk.offering": "Schijf Aanbieding",
     "label.disk.offering.details": "schijfe offerte gegevens",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisioning type",
     "label.disk.read.bytes": "Schijf lezen (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migreer naar opslag",
     "label.migrate.volume": "Migreer volume",
     "label.migrate.volume.to.primary.storage": "Migreer volume naar andere primaire opslag",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min na het uur",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Netwerken",
     "label.new": "Nieuw",
     "label.new.password": "Nieuw wachtwoord",
+    "label.current.password": "Current Password",
     "label.new.project": "Nieuw Project",
     "label.new.ssh.key.pair": "nieuw SSH sleutelpaar",
     "label.new.vm": "Nieuwe VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projecten",
     "label.protocol": "Protocol",
     "label.protocol.number": "protocol nummer",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Provider",
     "label.providers": "Providers",
     "label.public": "Publiek",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routing",
     "label.routing.host": "routeer machine",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Regel Nummer",
     "label.rules": "Regels",
     "label.running.vms": "Draaiende VMs",
diff --git a/ui/l10n/pl.js b/ui/l10n/pl.js
index 30c04b9..ccac03c 100644
--- a/ui/l10n/pl.js
+++ b/ui/l10n/pl.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP Code",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP Type",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Changed item properties",
     "confirm.enable.s3": "Please fill in the following information to enable support for S3-backed Secondary Storage",
     "confirm.enable.swift": "Please fill in the following information to enable support for Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Konta",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL Name",
     "label.acl.replaced": "ACL replaced",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Acquire New IP",
     "label.acquire.new.secondary.ip": "Acquire new secondary IP",
     "label.action": "Action",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Dodaj konta",
     "label.add.accounts.to": "Dodaj konto do",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Add new affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Add route",
     "label.add.rule": "Dodaj regułę",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Add Secondary Storage",
     "label.add.security.group": "Add Security Group",
     "label.add.service.offering": "Add Service Offering",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Disk Write Rate (IOPS)",
     "label.disk.offering": "Disk Offering",
     "label.disk.offering.details": "Disk offering details",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisioning Type",
     "label.disk.read.bytes": "Disk Read (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrate to storage",
     "label.migrate.volume": "Migrate Volume",
     "label.migrate.volume.to.primary.storage": "Migrate volume to another primary storage",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min past the hr",
     "label.minimum": "Minimum",
@@ -1140,6 +1151,7 @@
     "label.networks": "Sieci",
     "label.new": "Nowy",
     "label.new.password": "New Password",
+    "label.current.password": "Current Password",
     "label.new.project": "Nowy projekt",
     "label.new.ssh.key.pair": "New SSH Key Pair",
     "label.new.vm": "New VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projekty",
     "label.protocol": "Protokół",
     "label.protocol.number": "Protocol Number",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Provider",
     "label.providers": "Dostawcy",
     "label.public": "Pobliczny",
@@ -1427,6 +1440,7 @@
     "label.routing": "Routing",
     "label.routing.host": "Routing Host",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Rule Number",
     "label.rules": "Zasady",
     "label.running.vms": "Running VMs",
diff --git a/ui/l10n/pt_BR.js b/ui/l10n/pt_BR.js
index ccfa59a..06b8553 100644
--- a/ui/l10n/pt_BR.js
+++ b/ui/l10n/pt_BR.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "Código ICMP",
+    "ICMP.code.desc": "Informe -1, se vocês quiser permitir todos os códigos ICMP.",
     "ICMP.type": "Tipo ICMP",
+    "ICMP.type.desc": "Informe -1, se vocês quiser permitir todos os tipos ICMP.",
     "changed.item.properties": "Propriedades do item alteradas",
     "confirm.enable.s3": "Por favor, preencha as informações abaixo para habilitar suporte o Storage Secundário fornecido por S3",
     "confirm.enable.swift": "Por favor, preencha as informações abaixo para habilitar suporte ao Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Contas",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "Lista de regas de ACL",
     "label.acl.name": "Nome da ACL",
     "label.acl.replaced": "ACL trocado",
+    "label.acl.reason": "Motivo",
+    "label.acl.reason.description": "Motivo para se utilizar a regra.",
     "label.acquire.new.ip": "Adquirir novo IP",
     "label.acquire.new.secondary.ip": "Adquira um novo IP secundário",
     "label.action": "Ação",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Adicionar contas",
     "label.add.accounts.to": "Adicionar contas para",
     "label.add.acl.list": "Adiciona Lista ACL",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Adicionar um grupo de afinidade",
     "label.add.baremetal.dhcp.device": "Adiciona Dispositivo DHCP Baremetal",
     "label.add.baremetal.rack.configuration": "Adicionar Configuração de Rack de Baremetal",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Adicionar rota",
     "label.add.rule": "Adicionar regra",
+    "label.add.rule.desc": "Criar nova regra ACL",
     "label.add.secondary.storage": "Adicionar Storage Secundário",
     "label.add.security.group": "Adicionar Security Group",
     "label.add.service.offering": "Adicionar Plano",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Taxa de Escrita no Disco (IOPS)",
     "label.disk.offering": "Oferta de Disco",
     "label.disk.offering.details": "Detalhes da oferta de disco",
+    "label.disk.newOffering": "Nova oferta de disco",
+    "label.disk.newOffering.description": "Oferta de disco a ser aplicada no volume após migração.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Tipo de Provisionamento",
     "label.disk.read.bytes": "Leitura do Disco (Bytes)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Migrar para storage",
     "label.migrate.volume": "Migrar Volume",
     "label.migrate.volume.to.primary.storage": "Migrar volume para outro storage primário",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Instâncias Min",
     "label.min.past.the.hr": "minutos passados da última hora",
     "label.minimum": "Mí­nimo",
@@ -1140,6 +1151,7 @@
     "label.networks": "Redes",
     "label.new": "Novo",
     "label.new.password": "Nova Senha",
+    "label.current.password": "Senha Antiga",
     "label.new.project": "Novo Projeto",
     "label.new.ssh.key.pair": "Novo par de chaves SSH",
     "label.new.vm": "Nova VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "Projetos",
     "label.protocol": "Protocolo",
     "label.protocol.number": "Número do Protocolo",
+    "label.protocol.number.short" : "#Protocolo",
     "label.provider": "Provedor",
     "label.providers": "Providers",
     "label.public": "Público",
@@ -1427,6 +1440,7 @@
     "label.routing": "Roteamento",
     "label.routing.host": "Host de Roteamento",
     "label.rule": "Regra",
+    "label.rule.number.short": "#Regra",
     "label.rule.number": "Regra Número",
     "label.rules": "Regras",
     "label.running.vms": "VMs Rodando",
diff --git a/ui/l10n/ru_RU.js b/ui/l10n/ru_RU.js
index 6a11b38..a61fe1e 100644
--- a/ui/l10n/ru_RU.js
+++ b/ui/l10n/ru_RU.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "Код ICMP",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "Тип ICMP",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "Параметры элемента изменены",
     "confirm.enable.s3": "Заполните информацию для включения  S3-совместимого дополнительного хранилища",
     "confirm.enable.swift": "Заполните нижеследующую информацию для включения поддержи Swift",
@@ -99,9 +101,12 @@
     "label.accounts": "Учётные записи",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL List Rules",
     "label.acl.name": "ACL Name",
     "label.acl.replaced": "ACL replaced",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "Получить новый IP",
     "label.acquire.new.secondary.ip": "Запросить дополнительный IP-адрес",
     "label.action": "Действия",
@@ -313,6 +318,7 @@
     "label.add.accounts": "Добавить учётные записи",
     "label.add.accounts.to": "Добавить учётные записи",
     "label.add.acl.list": "Add ACL List",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "Добавить новую affinity group",
     "label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
     "label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "Добавить маршрут",
     "label.add.rule": "Добавить правило",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "Добавить дополнительное хранилище",
     "label.add.security.group": "Добавить группу безопасности",
     "label.add.service.offering": "Добавить службу",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "Скорость записи диска (IOPS)",
     "label.disk.offering": "Услуга дискового пространства",
     "label.disk.offering.details": "Disk offering details",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "Provisioning Type",
     "label.disk.read.bytes": "Прочитано с диска (Байт)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "Перенести на хранилище",
     "label.migrate.volume": "Перенос диска",
     "label.migrate.volume.to.primary.storage": "Перенести диск в другое основное хранилище",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "Min Instances",
     "label.min.past.the.hr": "min past the hr",
     "label.minimum": "Минимум",
@@ -1140,6 +1151,7 @@
     "label.networks": "Сети",
     "label.new": "Создать",
     "label.new.password": "Новый пароль",
+    "label.current.password": "Current Password",
     "label.new.project": "Новый проект",
     "label.new.ssh.key.pair": "New SSH Key Pair",
     "label.new.vm": "Новая ВМ",
@@ -1278,6 +1290,7 @@
     "label.projects": "Проекты",
     "label.protocol": "Протокол",
     "label.protocol.number": "Protocol Number",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "Поставщики",
     "label.providers": "Поставщики",
     "label.public": "Публичный",
@@ -1427,6 +1440,7 @@
     "label.routing": "Маршрутизация",
     "label.routing.host": "Routing Host",
     "label.rule": "Rule",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "Номер правила",
     "label.rules": "Правила",
     "label.running.vms": "Запущенные ВМ",
diff --git a/ui/l10n/zh_CN.js b/ui/l10n/zh_CN.js
index dc44fdb..6015f41 100644
--- a/ui/l10n/zh_CN.js
+++ b/ui/l10n/zh_CN.js
@@ -16,7 +16,9 @@
 // under the License.
 var dictionary = {
     "ICMP.code": "ICMP 代码",
+    "ICMP.code.desc": "Please specify -1 if you want to allow all ICMP codes",
     "ICMP.type": "ICMP 类型",
+    "ICMP.type.desc": "Please specify -1 if you want to allow all ICMP types.",
     "changed.item.properties": "更改项目属性",
     "confirm.enable.s3": "请填写以下信息以启用对 S3 支持的二级存储的支持",
     "confirm.enable.swift": "请填写以下信息以启用对 SWIFT 的支持",
@@ -99,9 +101,12 @@
     "label.accounts": "帐户",
     "label.acl": "ACL",
     "label.acl.id": "ACL ID",
+    "label.acl.export": "Export ACLs",
     "label.acl.list.rules": "ACL列表策略",
     "label.acl.name": "ACL 名称",
     "label.acl.replaced": "ACL 已替换",
+    "label.acl.reason": "Reason",
+    "label.acl.reason.description": "Enter the reason behind an ACL rule.",
     "label.acquire.new.ip": "获取新 IP",
     "label.acquire.new.secondary.ip": "获取新二级 IP",
     "label.action": "操作",
@@ -313,6 +318,7 @@
     "label.add.accounts": "添加帐户",
     "label.add.accounts.to": "添加帐户至",
     "label.add.acl.list": "添加 ACL 列表",
+    "label.edit.acl.list": "Edit ACL List",
     "label.add.affinity.group": "添加新关联性组",
     "label.add.baremetal.dhcp.device": "添加裸机 DHCP 设备",
     "label.add.baremetal.rack.configuration": "添加 Baremetal Rack 配置",
@@ -367,6 +373,7 @@
     "label.add.role": "Add Role",
     "label.add.route": "添加路由",
     "label.add.rule": "添加规则",
+    "label.add.rule.desc": "Create a new ACL rule",
     "label.add.secondary.storage": "添加二级存储",
     "label.add.security.group": "添加安全组",
     "label.add.service.offering": "添加服务方案",
@@ -659,6 +666,8 @@
     "label.disk.iops.write.rate": "磁盘写入速度(IOPS)",
     "label.disk.offering": "磁盘方案",
     "label.disk.offering.details": "磁盘方案详情",
+    "label.disk.newOffering": "New Disk Offering",
+    "label.disk.newOffering.description": "New disk offering to be used by this volume after the migration.",
     "label.disk.physicalsize":"Physical Size",
     "label.disk.provisioningtype": "置备类型",
     "label.disk.read.bytes": "磁盘读取(字节)",
@@ -1085,6 +1094,8 @@
     "label.migrate.to.storage": "迁移到存储",
     "label.migrate.volume": "迁移卷",
     "label.migrate.volume.to.primary.storage": "将卷迁移到其他主存储",
+    "label.migrate.volume.newDiskOffering": "Replace disk offering?",
+    "label.migrate.volume.newDiskOffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
     "label.min.instances": "最小实例数",
     "label.min.past.the.hr": "分 每小时",
     "label.minimum": "最小值",
@@ -1140,6 +1151,7 @@
     "label.networks": "网络",
     "label.new": "新建",
     "label.new.password": "新密码",
+    "label.current.password": "Current Password",
     "label.new.project": "新建项目",
     "label.new.ssh.key.pair": "新SSH密钥对",
     "label.new.vm": "新建 VM",
@@ -1278,6 +1290,7 @@
     "label.projects": "项目",
     "label.protocol": "协议",
     "label.protocol.number": "协议编号",
+    "label.protocol.number.short" : "#Protocol",
     "label.provider": "提供程序",
     "label.providers": "提供程序",
     "label.public": "公用",
@@ -1427,6 +1440,7 @@
     "label.routing": "正在路由",
     "label.routing.host": "正在路由主机",
     "label.rule": "规则",
+    "label.rule.number.short": "#Rule",
     "label.rule.number": "规则编号",
     "label.rules": "规则",
     "label.running.vms": "正在运行的 VM",
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/ui/lib/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100755
index 5b5dab2..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_flat_75_ffffff_40x100.png b/ui/lib/jquery-ui/css/images/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100755
index ac8b229..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_flat_75_ffffff_40x100.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/ui/lib/jquery-ui/css/images/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100755
index ad3d634..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_glass_55_fbf9ee_1x400.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png b/ui/lib/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100755
index 42ccba2..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_glass_75_dadada_1x400.png b/ui/lib/jquery-ui/css/images/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100755
index 5a46b47..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_glass_75_dadada_1x400.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/ui/lib/jquery-ui/css/images/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100755
index 86c2baa..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_glass_75_e6e6e6_1x400.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_highlight-hard_75_a7c1d2_1x100.png b/ui/lib/jquery-ui/css/images/ui-bg_highlight-hard_75_a7c1d2_1x100.png
deleted file mode 100755
index 7f5be8a..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_highlight-hard_75_a7c1d2_1x100.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png b/ui/lib/jquery-ui/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png
deleted file mode 100755
index 0e05810..0000000
--- a/ui/lib/jquery-ui/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-icons_222222_256x240.png b/ui/lib/jquery-ui/css/images/ui-icons_222222_256x240.png
deleted file mode 100755
index b273ff1..0000000
--- a/ui/lib/jquery-ui/css/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-icons_2e83ff_256x240.png b/ui/lib/jquery-ui/css/images/ui-icons_2e83ff_256x240.png
deleted file mode 100755
index 09d1cdc..0000000
--- a/ui/lib/jquery-ui/css/images/ui-icons_2e83ff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-icons_454545_256x240.png b/ui/lib/jquery-ui/css/images/ui-icons_454545_256x240.png
deleted file mode 100755
index 59bd45b..0000000
--- a/ui/lib/jquery-ui/css/images/ui-icons_454545_256x240.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-icons_888888_256x240.png b/ui/lib/jquery-ui/css/images/ui-icons_888888_256x240.png
deleted file mode 100755
index 6d02426..0000000
--- a/ui/lib/jquery-ui/css/images/ui-icons_888888_256x240.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/images/ui-icons_cd0a0a_256x240.png b/ui/lib/jquery-ui/css/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100755
index 2ab019b..0000000
--- a/ui/lib/jquery-ui/css/images/ui-icons_cd0a0a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/ui/lib/jquery-ui/css/jquery-ui.css b/ui/lib/jquery-ui/css/jquery-ui.css
deleted file mode 100755
index b87bd69..0000000
--- a/ui/lib/jquery-ui/css/jquery-ui.css
+++ /dev/null
@@ -1,568 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=2px&bgColorHeader=a7c1d2&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=75&borderColorHeader=787878&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=05_inset_soft.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
-.ui-widget-content a { color: #222222; }
-.ui-widget-header { border: 1px solid #787878; background: #a7c1d2 url(images/ui-bg_highlight-hard_75_a7c1d2_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 2px; -webkit-border-top-left-radius: 2px; -khtml-border-top-left-radius: 2px; border-top-left-radius: 2px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 2px; -webkit-border-top-right-radius: 2px; -khtml-border-top-right-radius: 2px; border-top-right-radius: 2px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 2px; -webkit-border-bottom-left-radius: 2px; -khtml-border-bottom-left-radius: 2px; border-bottom-left-radius: 2px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 2px; -webkit-border-bottom-right-radius: 2px; -khtml-border-bottom-right-radius: 2px; border-bottom-right-radius: 2px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }	
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.14
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-	list-style:none;
-	padding: 2px;
-	margin: 0;
-	display:block;
-	float: left;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-	margin:0;
-	padding: 0;
-	zoom: 1;
-	float: left;
-	clear: left;
-	width: 100%;
-}
-.ui-menu .ui-menu-item a {
-	text-decoration:none;
-	display:block;
-	padding:.2em .4em;
-	line-height:1.5;
-	zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-	margin: -1px;
-}
-/*
- * jQuery UI Button 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month, 
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/ui/lib/jquery-ui/index.html b/ui/lib/jquery-ui/index.html
deleted file mode 100755
index 904f4dc..0000000
--- a/ui/lib/jquery-ui/index.html
+++ /dev/null
@@ -1,367 +0,0 @@
-<!DOCTYPE html>
-<html>
-	<head>
-		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-		<title>jQuery UI Example Page</title>
-		<link type="text/css" href="css/custom-theme/jquery-ui-1.8.14.custom.css" rel="stylesheet" />	
-		<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
-		<script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
-		<script type="text/javascript">
-			$(function(){
-
-				// Accordion
-				$("#accordion").accordion({ header: "h3" });
-	
-				// Tabs
-				$('#tabs').tabs();
-	
-
-				// Dialog			
-				$('#dialog').dialog({
-					autoOpen: false,
-					width: 600,
-					buttons: {
-						"Ok": function() { 
-							$(this).dialog("close"); 
-						}, 
-						"Cancel": function() { 
-							$(this).dialog("close"); 
-						} 
-					}
-				});
-				
-				// Dialog Link
-				$('#dialog_link').click(function(){
-					$('#dialog').dialog('open');
-					return false;
-				});
-
-				// Datepicker
-				$('#datepicker').datepicker({
-					inline: true
-				});
-				
-				// Slider
-				$('#slider').slider({
-					range: true,
-					values: [17, 67]
-				});
-				
-				// Progressbar
-				$("#progressbar").progressbar({
-					value: 20 
-				});
-				
-				//hover states on the static widgets
-				$('#dialog_link, ul#icons li').hover(
-					function() { $(this).addClass('ui-state-hover'); }, 
-					function() { $(this).removeClass('ui-state-hover'); }
-				);
-				
-			});
-		</script>
-		<style type="text/css">
-			/*demo page css*/
-			body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;}
-			.demoHeaders { margin-top: 2em; }
-			#dialog_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;}
-			#dialog_link span.ui-icon {margin: 0 5px 0 0;position: absolute;left: .2em;top: 50%;margin-top: -8px;}
-			ul#icons {margin: 0; padding: 0;}
-			ul#icons li {margin: 2px; position: relative; padding: 4px 0; cursor: pointer; float: left;  list-style: none;}
-			ul#icons span.ui-icon {float: left; margin: 0 4px;}
-		</style>	
-	</head>
-	<body>
-	<h1>Welcome to jQuery UI!</h1>
-	<p style="font-size: 1.3em; line-height: 1.5; margin: 1em 0; width: 50%;">This page demonstrates the widgets you downloaded using the theme you selected in the download builder. We've included and linked to minified versions of <a href="js/jquery-1.5.1.min.js">jQuery</a>, your personalized copy of <a href="js/jquery-ui-1.8.14.custom.min.js">jQuery UI (js/jquery-ui-1.8.14.custom.min.js)</a>, and <a href="css/custom-theme/jquery-ui-1.8.14.custom.css">css/custom-theme/jquery-ui-1.8.14.custom.css</a> which imports the entire jQuery UI CSS Framework. You can choose to link a subset of the CSS Framework depending on your needs. </p>
-	<p style="font-size: 1.2em; line-height: 1.5; margin: 1em 0; width: 50%;">You've downloaded components and a theme that are compatible with jQuery 1.3+. Please make sure you are using jQuery 1.3+ in your production environment.</p>	
-
-	<p style="font-weight: bold; margin: 2em 0 1em; font-size: 1.3em;">YOUR COMPONENTS:</p>
-		
-		<!-- Accordion -->
-		<h2 class="demoHeaders">Accordion</h2>
-		<div id="accordion">
-			<div>
-				<h3><a href="#">First</a></h3>
-				<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
-			</div>
-			<div>
-				<h3><a href="#">Second</a></h3>
-				<div>Phasellus mattis tincidunt nibh.</div>
-			</div>
-			<div>
-				<h3><a href="#">Third</a></h3>
-				<div>Nam dui erat, auctor a, dignissim quis.</div>
-			</div>
-		</div>
-	
-		<!-- Tabs -->
-		<h2 class="demoHeaders">Tabs</h2>
-		<div id="tabs">
-			<ul>
-				<li><a href="#tabs-1">First</a></li>
-				<li><a href="#tabs-2">Second</a></li>
-				<li><a href="#tabs-3">Third</a></li>
-			</ul>
-			<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
-			<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
-			<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
-		</div>
-	
-		<!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->
-		<h2 class="demoHeaders">Dialog</h2>
-		<p><a href="#" id="dialog_link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open Dialog</a></p>
-		
-		
-		<h2 class="demoHeaders">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2>
-		<div style="position: relative; width: 96%; height: 200px; padding:1% 4%; overflow:hidden;" class="fakewindowcontain">
-			<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
-			
-			<!-- ui-dialog -->
-			<div class="ui-overlay"><div class="ui-widget-overlay"></div><div class="ui-widget-shadow ui-corner-all" style="width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;"></div></div>
-			<div style="position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;" class="ui-widget ui-widget-content ui-corner-all">
-				<div class="ui-dialog-content ui-widget-content" style="background: none; border: 0;">
-					<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
-				</div>
-			</div>
-		
-		</div>
-
-		
-		<!-- ui-dialog -->
-		<div id="dialog" title="Dialog Title">
-			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
-		</div>
-			
-				
-				
-		<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
-		<ul id="icons" class="ui-widget ui-helper-clearfix">
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-n"><span class="ui-icon ui-icon-carat-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-ne"><span class="ui-icon ui-icon-carat-1-ne"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-e"><span class="ui-icon ui-icon-carat-1-e"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-se"><span class="ui-icon ui-icon-carat-1-se"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-s"><span class="ui-icon ui-icon-carat-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-sw"><span class="ui-icon ui-icon-carat-1-sw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-w"><span class="ui-icon ui-icon-carat-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-nw"><span class="ui-icon ui-icon-carat-1-nw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-n-s"><span class="ui-icon ui-icon-carat-2-n-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-e-w"><span class="ui-icon ui-icon-carat-2-e-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
-		
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
-		<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
-		</ul>
-
-	
-		<!-- Slider -->
-		<h2 class="demoHeaders">Slider</h2>
-		<div id="slider"></div>
-	
-		<!-- Datepicker -->
-		<h2 class="demoHeaders">Datepicker</h2>
-		<div id="datepicker"></div>
-	
-		<!-- Progressbar -->
-		<h2 class="demoHeaders">Progressbar</h2>	
-		<div id="progressbar"></div>
-			
-		<!-- Highlight / Error -->
-		<h2 class="demoHeaders">Highlight / Error</h2>
-		<div class="ui-widget">
-			<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;"> 
-				<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
-				<strong>Hey!</strong> Sample ui-state-highlight style.</p>
-			</div>
-		</div>
-		<br/>
-		<div class="ui-widget">
-			<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"> 
-				<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> 
-				<strong>Alert:</strong> Sample ui-state-error style.</p>
-			</div>
-		</div>
-
-	</body>
-</html>
-
-
diff --git a/ui/lib/jquery-ui/js/jquery-ui.js b/ui/lib/jquery-ui/js/jquery-ui.js
index 7ec85a5..31ee9cd 100755
--- a/ui/lib/jquery-ui/js/jquery-ui.js
+++ b/ui/lib/jquery-ui/js/jquery-ui.js
@@ -1,789 +1,16617 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+	if ( typeof define === "function" && define.amd ) {
+
+		// AMD. Register as an anonymous module.
+		define([ "jquery" ], factory );
+	} else {
+
+		// Browser globals
+		factory( jQuery );
+	}
+}(function( $ ) {
 /*!
- * jQuery UI 1.8.14
+ * jQuery UI Core 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI
+ * http://api.jqueryui.com/category/ui-core/
  */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.14",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
-b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
-"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
-function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
-outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
-return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
-0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.14
+
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+	version: "1.11.4",
+
+	keyCode: {
+		BACKSPACE: 8,
+		COMMA: 188,
+		DELETE: 46,
+		DOWN: 40,
+		END: 35,
+		ENTER: 13,
+		ESCAPE: 27,
+		HOME: 36,
+		LEFT: 37,
+		PAGE_DOWN: 34,
+		PAGE_UP: 33,
+		PERIOD: 190,
+		RIGHT: 39,
+		SPACE: 32,
+		TAB: 9,
+		UP: 38
+	}
+});
+
+// plugins
+$.fn.extend({
+	scrollParent: function( includeHidden ) {
+		var position = this.css( "position" ),
+			excludeStaticParent = position === "absolute",
+			overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+			scrollParent = this.parents().filter( function() {
+				var parent = $( this );
+				if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+					return false;
+				}
+				return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+			}).eq( 0 );
+
+		return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
+	},
+
+	uniqueId: (function() {
+		var uuid = 0;
+
+		return function() {
+			return this.each(function() {
+				if ( !this.id ) {
+					this.id = "ui-id-" + ( ++uuid );
+				}
+			});
+		};
+	})(),
+
+	removeUniqueId: function() {
+		return this.each(function() {
+			if ( /^ui-id-\d+$/.test( this.id ) ) {
+				$( this ).removeAttr( "id" );
+			}
+		});
+	}
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+	var map, mapName, img,
+		nodeName = element.nodeName.toLowerCase();
+	if ( "area" === nodeName ) {
+		map = element.parentNode;
+		mapName = map.name;
+		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+			return false;
+		}
+		img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
+		return !!img && visible( img );
+	}
+	return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
+		!element.disabled :
+		"a" === nodeName ?
+			element.href || isTabIndexNotNaN :
+			isTabIndexNotNaN) &&
+		// the element and all of its ancestors must be visible
+		visible( element );
+}
+
+function visible( element ) {
+	return $.expr.filters.visible( element ) &&
+		!$( element ).parents().addBack().filter(function() {
+			return $.css( this, "visibility" ) === "hidden";
+		}).length;
+}
+
+$.extend( $.expr[ ":" ], {
+	data: $.expr.createPseudo ?
+		$.expr.createPseudo(function( dataName ) {
+			return function( elem ) {
+				return !!$.data( elem, dataName );
+			};
+		}) :
+		// support: jQuery <1.8
+		function( elem, i, match ) {
+			return !!$.data( elem, match[ 3 ] );
+		},
+
+	focusable: function( element ) {
+		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+	},
+
+	tabbable: function( element ) {
+		var tabIndex = $.attr( element, "tabindex" ),
+			isTabIndexNaN = isNaN( tabIndex );
+		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+	}
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+	$.each( [ "Width", "Height" ], function( i, name ) {
+		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+			type = name.toLowerCase(),
+			orig = {
+				innerWidth: $.fn.innerWidth,
+				innerHeight: $.fn.innerHeight,
+				outerWidth: $.fn.outerWidth,
+				outerHeight: $.fn.outerHeight
+			};
+
+		function reduce( elem, size, border, margin ) {
+			$.each( side, function() {
+				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+				if ( border ) {
+					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+				}
+				if ( margin ) {
+					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+				}
+			});
+			return size;
+		}
+
+		$.fn[ "inner" + name ] = function( size ) {
+			if ( size === undefined ) {
+				return orig[ "inner" + name ].call( this );
+			}
+
+			return this.each(function() {
+				$( this ).css( type, reduce( this, size ) + "px" );
+			});
+		};
+
+		$.fn[ "outer" + name] = function( size, margin ) {
+			if ( typeof size !== "number" ) {
+				return orig[ "outer" + name ].call( this, size );
+			}
+
+			return this.each(function() {
+				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+			});
+		};
+	});
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+	$.fn.addBack = function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	};
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+	$.fn.removeData = (function( removeData ) {
+		return function( key ) {
+			if ( arguments.length ) {
+				return removeData.call( this, $.camelCase( key ) );
+			} else {
+				return removeData.call( this );
+			}
+		};
+	})( $.fn.removeData );
+}
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.fn.extend({
+	focus: (function( orig ) {
+		return function( delay, fn ) {
+			return typeof delay === "number" ?
+				this.each(function() {
+					var elem = this;
+					setTimeout(function() {
+						$( elem ).focus();
+						if ( fn ) {
+							fn.call( elem );
+						}
+					}, delay );
+				}) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.focus ),
+
+	disableSelection: (function() {
+		var eventType = "onselectstart" in document.createElement( "div" ) ?
+			"selectstart" :
+			"mousedown";
+
+		return function() {
+			return this.bind( eventType + ".ui-disableSelection", function( event ) {
+				event.preventDefault();
+			});
+		};
+	})(),
+
+	enableSelection: function() {
+		return this.unbind( ".ui-disableSelection" );
+	},
+
+	zIndex: function( zIndex ) {
+		if ( zIndex !== undefined ) {
+			return this.css( "zIndex", zIndex );
+		}
+
+		if ( this.length ) {
+			var elem = $( this[ 0 ] ), position, value;
+			while ( elem.length && elem[ 0 ] !== document ) {
+				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+				// This makes behavior of this function consistent across browsers
+				// WebKit always returns auto if the element is positioned
+				position = elem.css( "position" );
+				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+					// IE returns 0 when zIndex is not specified
+					// other browsers return a string
+					// we ignore the case of nested elements with an explicit value of 0
+					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+					value = parseInt( elem.css( "zIndex" ), 10 );
+					if ( !isNaN( value ) && value !== 0 ) {
+						return value;
+					}
+				}
+				elem = elem.parent();
+			}
+		}
+
+		return 0;
+	}
+});
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+$.ui.plugin = {
+	add: function( module, option, set ) {
+		var i,
+			proto = $.ui[ module ].prototype;
+		for ( i in set ) {
+			proto.plugins[ i ] = proto.plugins[ i ] || [];
+			proto.plugins[ i ].push( [ option, set[ i ] ] );
+		}
+	},
+	call: function( instance, name, args, allowDisconnected ) {
+		var i,
+			set = instance.plugins[ name ];
+
+		if ( !set ) {
+			return;
+		}
+
+		if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+			return;
+		}
+
+		for ( i = 0; i < set.length; i++ ) {
+			if ( instance.options[ set[ i ][ 0 ] ] ) {
+				set[ i ][ 1 ].apply( instance.element, args );
+			}
+		}
+	}
+};
+
+
+/*!
+ * jQuery UI Widget 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Widget
+ * http://api.jqueryui.com/jQuery.widget/
  */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.14
+
+
+var widget_uuid = 0,
+	widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+	return function( elems ) {
+		var events, elem, i;
+		for ( i = 0; (elem = elems[i]) != null; i++ ) {
+			try {
+
+				// Only trigger remove when necessary to save time
+				events = $._data( elem, "events" );
+				if ( events && events.remove ) {
+					$( elem ).triggerHandler( "remove" );
+				}
+
+			// http://bugs.jquery.com/ticket/8235
+			} catch ( e ) {}
+		}
+		orig( elems );
+	};
+})( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+	var fullName, existingConstructor, constructor, basePrototype,
+		// proxiedPrototype allows the provided prototype to remain unmodified
+		// so that it can be used as a mixin for multiple widgets (#8876)
+		proxiedPrototype = {},
+		namespace = name.split( "." )[ 0 ];
+
+	name = name.split( "." )[ 1 ];
+	fullName = namespace + "-" + name;
+
+	if ( !prototype ) {
+		prototype = base;
+		base = $.Widget;
+	}
+
+	// create selector for plugin
+	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+		return !!$.data( elem, fullName );
+	};
+
+	$[ namespace ] = $[ namespace ] || {};
+	existingConstructor = $[ namespace ][ name ];
+	constructor = $[ namespace ][ name ] = function( options, element ) {
+		// allow instantiation without "new" keyword
+		if ( !this._createWidget ) {
+			return new constructor( options, element );
+		}
+
+		// allow instantiation without initializing for simple inheritance
+		// must use "new" keyword (the code above always passes args)
+		if ( arguments.length ) {
+			this._createWidget( options, element );
+		}
+	};
+	// extend with the existing constructor to carry over any static properties
+	$.extend( constructor, existingConstructor, {
+		version: prototype.version,
+		// copy the object used to create the prototype in case we need to
+		// redefine the widget later
+		_proto: $.extend( {}, prototype ),
+		// track widgets that inherit from this widget in case this widget is
+		// redefined after a widget inherits from it
+		_childConstructors: []
+	});
+
+	basePrototype = new base();
+	// we need to make the options hash a property directly on the new instance
+	// otherwise we'll modify the options hash on the prototype that we're
+	// inheriting from
+	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+	$.each( prototype, function( prop, value ) {
+		if ( !$.isFunction( value ) ) {
+			proxiedPrototype[ prop ] = value;
+			return;
+		}
+		proxiedPrototype[ prop ] = (function() {
+			var _super = function() {
+					return base.prototype[ prop ].apply( this, arguments );
+				},
+				_superApply = function( args ) {
+					return base.prototype[ prop ].apply( this, args );
+				};
+			return function() {
+				var __super = this._super,
+					__superApply = this._superApply,
+					returnValue;
+
+				this._super = _super;
+				this._superApply = _superApply;
+
+				returnValue = value.apply( this, arguments );
+
+				this._super = __super;
+				this._superApply = __superApply;
+
+				return returnValue;
+			};
+		})();
+	});
+	constructor.prototype = $.widget.extend( basePrototype, {
+		// TODO: remove support for widgetEventPrefix
+		// always use the name + a colon as the prefix, e.g., draggable:start
+		// don't prefix for widgets that aren't DOM-based
+		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+	}, proxiedPrototype, {
+		constructor: constructor,
+		namespace: namespace,
+		widgetName: name,
+		widgetFullName: fullName
+	});
+
+	// If this widget is being redefined then we need to find all widgets that
+	// are inheriting from it and redefine all of them so that they inherit from
+	// the new version of this widget. We're essentially trying to replace one
+	// level in the prototype chain.
+	if ( existingConstructor ) {
+		$.each( existingConstructor._childConstructors, function( i, child ) {
+			var childPrototype = child.prototype;
+
+			// redefine the child widget using the same prototype that was
+			// originally used, but inherit from the new version of the base
+			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+		});
+		// remove the list of existing child constructors from the old constructor
+		// so the old child constructors can be garbage collected
+		delete existingConstructor._childConstructors;
+	} else {
+		base._childConstructors.push( constructor );
+	}
+
+	$.widget.bridge( name, constructor );
+
+	return constructor;
+};
+
+$.widget.extend = function( target ) {
+	var input = widget_slice.call( arguments, 1 ),
+		inputIndex = 0,
+		inputLength = input.length,
+		key,
+		value;
+	for ( ; inputIndex < inputLength; inputIndex++ ) {
+		for ( key in input[ inputIndex ] ) {
+			value = input[ inputIndex ][ key ];
+			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+				// Clone objects
+				if ( $.isPlainObject( value ) ) {
+					target[ key ] = $.isPlainObject( target[ key ] ) ?
+						$.widget.extend( {}, target[ key ], value ) :
+						// Don't extend strings, arrays, etc. with objects
+						$.widget.extend( {}, value );
+				// Copy everything else by reference
+				} else {
+					target[ key ] = value;
+				}
+			}
+		}
+	}
+	return target;
+};
+
+$.widget.bridge = function( name, object ) {
+	var fullName = object.prototype.widgetFullName || name;
+	$.fn[ name ] = function( options ) {
+		var isMethodCall = typeof options === "string",
+			args = widget_slice.call( arguments, 1 ),
+			returnValue = this;
+
+		if ( isMethodCall ) {
+			this.each(function() {
+				var methodValue,
+					instance = $.data( this, fullName );
+				if ( options === "instance" ) {
+					returnValue = instance;
+					return false;
+				}
+				if ( !instance ) {
+					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+						"attempted to call method '" + options + "'" );
+				}
+				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+				}
+				methodValue = instance[ options ].apply( instance, args );
+				if ( methodValue !== instance && methodValue !== undefined ) {
+					returnValue = methodValue && methodValue.jquery ?
+						returnValue.pushStack( methodValue.get() ) :
+						methodValue;
+					return false;
+				}
+			});
+		} else {
+
+			// Allow multiple hashes to be passed on init
+			if ( args.length ) {
+				options = $.widget.extend.apply( null, [ options ].concat(args) );
+			}
+
+			this.each(function() {
+				var instance = $.data( this, fullName );
+				if ( instance ) {
+					instance.option( options || {} );
+					if ( instance._init ) {
+						instance._init();
+					}
+				} else {
+					$.data( this, fullName, new object( options, this ) );
+				}
+			});
+		}
+
+		return returnValue;
+	};
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+	widgetName: "widget",
+	widgetEventPrefix: "",
+	defaultElement: "<div>",
+	options: {
+		disabled: false,
+
+		// callbacks
+		create: null
+	},
+	_createWidget: function( options, element ) {
+		element = $( element || this.defaultElement || this )[ 0 ];
+		this.element = $( element );
+		this.uuid = widget_uuid++;
+		this.eventNamespace = "." + this.widgetName + this.uuid;
+
+		this.bindings = $();
+		this.hoverable = $();
+		this.focusable = $();
+
+		if ( element !== this ) {
+			$.data( element, this.widgetFullName, this );
+			this._on( true, this.element, {
+				remove: function( event ) {
+					if ( event.target === element ) {
+						this.destroy();
+					}
+				}
+			});
+			this.document = $( element.style ?
+				// element within the document
+				element.ownerDocument :
+				// element is window or document
+				element.document || element );
+			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+		}
+
+		this.options = $.widget.extend( {},
+			this.options,
+			this._getCreateOptions(),
+			options );
+
+		this._create();
+		this._trigger( "create", null, this._getCreateEventData() );
+		this._init();
+	},
+	_getCreateOptions: $.noop,
+	_getCreateEventData: $.noop,
+	_create: $.noop,
+	_init: $.noop,
+
+	destroy: function() {
+		this._destroy();
+		// we can probably remove the unbind calls in 2.0
+		// all event bindings should go through this._on()
+		this.element
+			.unbind( this.eventNamespace )
+			.removeData( this.widgetFullName )
+			// support: jquery <1.6.3
+			// http://bugs.jquery.com/ticket/9413
+			.removeData( $.camelCase( this.widgetFullName ) );
+		this.widget()
+			.unbind( this.eventNamespace )
+			.removeAttr( "aria-disabled" )
+			.removeClass(
+				this.widgetFullName + "-disabled " +
+				"ui-state-disabled" );
+
+		// clean up events and states
+		this.bindings.unbind( this.eventNamespace );
+		this.hoverable.removeClass( "ui-state-hover" );
+		this.focusable.removeClass( "ui-state-focus" );
+	},
+	_destroy: $.noop,
+
+	widget: function() {
+		return this.element;
+	},
+
+	option: function( key, value ) {
+		var options = key,
+			parts,
+			curOption,
+			i;
+
+		if ( arguments.length === 0 ) {
+			// don't return a reference to the internal hash
+			return $.widget.extend( {}, this.options );
+		}
+
+		if ( typeof key === "string" ) {
+			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+			options = {};
+			parts = key.split( "." );
+			key = parts.shift();
+			if ( parts.length ) {
+				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+				for ( i = 0; i < parts.length - 1; i++ ) {
+					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+					curOption = curOption[ parts[ i ] ];
+				}
+				key = parts.pop();
+				if ( arguments.length === 1 ) {
+					return curOption[ key ] === undefined ? null : curOption[ key ];
+				}
+				curOption[ key ] = value;
+			} else {
+				if ( arguments.length === 1 ) {
+					return this.options[ key ] === undefined ? null : this.options[ key ];
+				}
+				options[ key ] = value;
+			}
+		}
+
+		this._setOptions( options );
+
+		return this;
+	},
+	_setOptions: function( options ) {
+		var key;
+
+		for ( key in options ) {
+			this._setOption( key, options[ key ] );
+		}
+
+		return this;
+	},
+	_setOption: function( key, value ) {
+		this.options[ key ] = value;
+
+		if ( key === "disabled" ) {
+			this.widget()
+				.toggleClass( this.widgetFullName + "-disabled", !!value );
+
+			// If the widget is becoming disabled, then nothing is interactive
+			if ( value ) {
+				this.hoverable.removeClass( "ui-state-hover" );
+				this.focusable.removeClass( "ui-state-focus" );
+			}
+		}
+
+		return this;
+	},
+
+	enable: function() {
+		return this._setOptions({ disabled: false });
+	},
+	disable: function() {
+		return this._setOptions({ disabled: true });
+	},
+
+	_on: function( suppressDisabledCheck, element, handlers ) {
+		var delegateElement,
+			instance = this;
+
+		// no suppressDisabledCheck flag, shuffle arguments
+		if ( typeof suppressDisabledCheck !== "boolean" ) {
+			handlers = element;
+			element = suppressDisabledCheck;
+			suppressDisabledCheck = false;
+		}
+
+		// no element argument, shuffle and use this.element
+		if ( !handlers ) {
+			handlers = element;
+			element = this.element;
+			delegateElement = this.widget();
+		} else {
+			element = delegateElement = $( element );
+			this.bindings = this.bindings.add( element );
+		}
+
+		$.each( handlers, function( event, handler ) {
+			function handlerProxy() {
+				// allow widgets to customize the disabled handling
+				// - disabled as an array instead of boolean
+				// - disabled class as method for disabling individual parts
+				if ( !suppressDisabledCheck &&
+						( instance.options.disabled === true ||
+							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+					return;
+				}
+				return ( typeof handler === "string" ? instance[ handler ] : handler )
+					.apply( instance, arguments );
+			}
+
+			// copy the guid so direct unbinding works
+			if ( typeof handler !== "string" ) {
+				handlerProxy.guid = handler.guid =
+					handler.guid || handlerProxy.guid || $.guid++;
+			}
+
+			var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+				eventName = match[1] + instance.eventNamespace,
+				selector = match[2];
+			if ( selector ) {
+				delegateElement.delegate( selector, eventName, handlerProxy );
+			} else {
+				element.bind( eventName, handlerProxy );
+			}
+		});
+	},
+
+	_off: function( element, eventName ) {
+		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+			this.eventNamespace;
+		element.unbind( eventName ).undelegate( eventName );
+
+		// Clear the stack to avoid memory leaks (#10056)
+		this.bindings = $( this.bindings.not( element ).get() );
+		this.focusable = $( this.focusable.not( element ).get() );
+		this.hoverable = $( this.hoverable.not( element ).get() );
+	},
+
+	_delay: function( handler, delay ) {
+		function handlerProxy() {
+			return ( typeof handler === "string" ? instance[ handler ] : handler )
+				.apply( instance, arguments );
+		}
+		var instance = this;
+		return setTimeout( handlerProxy, delay || 0 );
+	},
+
+	_hoverable: function( element ) {
+		this.hoverable = this.hoverable.add( element );
+		this._on( element, {
+			mouseenter: function( event ) {
+				$( event.currentTarget ).addClass( "ui-state-hover" );
+			},
+			mouseleave: function( event ) {
+				$( event.currentTarget ).removeClass( "ui-state-hover" );
+			}
+		});
+	},
+
+	_focusable: function( element ) {
+		this.focusable = this.focusable.add( element );
+		this._on( element, {
+			focusin: function( event ) {
+				$( event.currentTarget ).addClass( "ui-state-focus" );
+			},
+			focusout: function( event ) {
+				$( event.currentTarget ).removeClass( "ui-state-focus" );
+			}
+		});
+	},
+
+	_trigger: function( type, event, data ) {
+		var prop, orig,
+			callback = this.options[ type ];
+
+		data = data || {};
+		event = $.Event( event );
+		event.type = ( type === this.widgetEventPrefix ?
+			type :
+			this.widgetEventPrefix + type ).toLowerCase();
+		// the original event may come from any element
+		// so we need to reset the target on the new event
+		event.target = this.element[ 0 ];
+
+		// copy original event properties over to the new event
+		orig = event.originalEvent;
+		if ( orig ) {
+			for ( prop in orig ) {
+				if ( !( prop in event ) ) {
+					event[ prop ] = orig[ prop ];
+				}
+			}
+		}
+
+		this.element.trigger( event, data );
+		return !( $.isFunction( callback ) &&
+			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+			event.isDefaultPrevented() );
+	}
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+		if ( typeof options === "string" ) {
+			options = { effect: options };
+		}
+		var hasOptions,
+			effectName = !options ?
+				method :
+				options === true || typeof options === "number" ?
+					defaultEffect :
+					options.effect || defaultEffect;
+		options = options || {};
+		if ( typeof options === "number" ) {
+			options = { duration: options };
+		}
+		hasOptions = !$.isEmptyObject( options );
+		options.complete = callback;
+		if ( options.delay ) {
+			element.delay( options.delay );
+		}
+		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+			element[ method ]( options );
+		} else if ( effectName !== method && element[ effectName ] ) {
+			element[ effectName ]( options.duration, options.easing, callback );
+		} else {
+			element.queue(function( next ) {
+				$( this )[ method ]();
+				if ( callback ) {
+					callback.call( element[ 0 ] );
+				}
+				next();
+			});
+		}
+	};
+});
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/mouse/
  */
-(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==
-false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.14
+
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+	mouseHandled = false;
+});
+
+var mouse = $.widget("ui.mouse", {
+	version: "1.11.4",
+	options: {
+		cancel: "input,textarea,button,select,option",
+		distance: 1,
+		delay: 0
+	},
+	_mouseInit: function() {
+		var that = this;
+
+		this.element
+			.bind("mousedown." + this.widgetName, function(event) {
+				return that._mouseDown(event);
+			})
+			.bind("click." + this.widgetName, function(event) {
+				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+					event.stopImmediatePropagation();
+					return false;
+				}
+			});
+
+		this.started = false;
+	},
+
+	// TODO: make sure destroying one instance of mouse doesn't mess with
+	// other instances of mouse
+	_mouseDestroy: function() {
+		this.element.unbind("." + this.widgetName);
+		if ( this._mouseMoveDelegate ) {
+			this.document
+				.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+				.unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+		}
+	},
+
+	_mouseDown: function(event) {
+		// don't let more than one widget handle mouseStart
+		if ( mouseHandled ) {
+			return;
+		}
+
+		this._mouseMoved = false;
+
+		// we may have missed mouseup (out of window)
+		(this._mouseStarted && this._mouseUp(event));
+
+		this._mouseDownEvent = event;
+
+		var that = this,
+			btnIsLeft = (event.which === 1),
+			// event.target.nodeName works around a bug in IE 8 with
+			// disabled inputs (#7620)
+			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+			return true;
+		}
+
+		this.mouseDelayMet = !this.options.delay;
+		if (!this.mouseDelayMet) {
+			this._mouseDelayTimer = setTimeout(function() {
+				that.mouseDelayMet = true;
+			}, this.options.delay);
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted = (this._mouseStart(event) !== false);
+			if (!this._mouseStarted) {
+				event.preventDefault();
+				return true;
+			}
+		}
+
+		// Click event may never have fired (Gecko & Opera)
+		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+		}
+
+		// these delegates are required to keep context
+		this._mouseMoveDelegate = function(event) {
+			return that._mouseMove(event);
+		};
+		this._mouseUpDelegate = function(event) {
+			return that._mouseUp(event);
+		};
+
+		this.document
+			.bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+			.bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+		event.preventDefault();
+
+		mouseHandled = true;
+		return true;
+	},
+
+	_mouseMove: function(event) {
+		// Only check for mouseups outside the document if you've moved inside the document
+		// at least once. This prevents the firing of mouseup in the case of IE<9, which will
+		// fire a mousemove event if content is placed under the cursor. See #7778
+		// Support: IE <9
+		if ( this._mouseMoved ) {
+			// IE mouseup check - mouseup happened when mouse was out of window
+			if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+				return this._mouseUp(event);
+
+			// Iframe mouseup check - mouseup occurred in another document
+			} else if ( !event.which ) {
+				return this._mouseUp( event );
+			}
+		}
+
+		if ( event.which || event.button ) {
+			this._mouseMoved = true;
+		}
+
+		if (this._mouseStarted) {
+			this._mouseDrag(event);
+			return event.preventDefault();
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted =
+				(this._mouseStart(this._mouseDownEvent, event) !== false);
+			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+		}
+
+		return !this._mouseStarted;
+	},
+
+	_mouseUp: function(event) {
+		this.document
+			.unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+			.unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+		if (this._mouseStarted) {
+			this._mouseStarted = false;
+
+			if (event.target === this._mouseDownEvent.target) {
+				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+			}
+
+			this._mouseStop(event);
+		}
+
+		mouseHandled = false;
+		return false;
+	},
+
+	_mouseDistanceMet: function(event) {
+		return (Math.max(
+				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+			) >= this.options.distance
+		);
+	},
+
+	_mouseDelayMet: function(/* event */) {
+		return this.mouseDelayMet;
+	},
+
+	// These are placeholder methods, to be overriden by extending plugin
+	_mouseStart: function(/* event */) {},
+	_mouseDrag: function(/* event */) {},
+	_mouseStop: function(/* event */) {},
+	_mouseCapture: function(/* event */) { return true; }
+});
+
+
+/*!
+ * jQuery UI Position 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Position
+ * http://api.jqueryui.com/position/
  */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.14
+
+(function() {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth, supportsOffsetFractions,
+	max = Math.max,
+	abs = Math.abs,
+	round = Math.round,
+	rhorizontal = /left|center|right/,
+	rvertical = /top|center|bottom/,
+	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+	rposition = /^\w+/,
+	rpercent = /%$/,
+	_position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+	return [
+		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+	];
+}
+
+function parseCss( element, property ) {
+	return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+	var raw = elem[0];
+	if ( raw.nodeType === 9 ) {
+		return {
+			width: elem.width(),
+			height: elem.height(),
+			offset: { top: 0, left: 0 }
+		};
+	}
+	if ( $.isWindow( raw ) ) {
+		return {
+			width: elem.width(),
+			height: elem.height(),
+			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+		};
+	}
+	if ( raw.preventDefault ) {
+		return {
+			width: 0,
+			height: 0,
+			offset: { top: raw.pageY, left: raw.pageX }
+		};
+	}
+	return {
+		width: elem.outerWidth(),
+		height: elem.outerHeight(),
+		offset: elem.offset()
+	};
+}
+
+$.position = {
+	scrollbarWidth: function() {
+		if ( cachedScrollbarWidth !== undefined ) {
+			return cachedScrollbarWidth;
+		}
+		var w1, w2,
+			div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+			innerDiv = div.children()[0];
+
+		$( "body" ).append( div );
+		w1 = innerDiv.offsetWidth;
+		div.css( "overflow", "scroll" );
+
+		w2 = innerDiv.offsetWidth;
+
+		if ( w1 === w2 ) {
+			w2 = div[0].clientWidth;
+		}
+
+		div.remove();
+
+		return (cachedScrollbarWidth = w1 - w2);
+	},
+	getScrollInfo: function( within ) {
+		var overflowX = within.isWindow || within.isDocument ? "" :
+				within.element.css( "overflow-x" ),
+			overflowY = within.isWindow || within.isDocument ? "" :
+				within.element.css( "overflow-y" ),
+			hasOverflowX = overflowX === "scroll" ||
+				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+			hasOverflowY = overflowY === "scroll" ||
+				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+		return {
+			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+		};
+	},
+	getWithinInfo: function( element ) {
+		var withinElement = $( element || window ),
+			isWindow = $.isWindow( withinElement[0] ),
+			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
+		return {
+			element: withinElement,
+			isWindow: isWindow,
+			isDocument: isDocument,
+			offset: withinElement.offset() || { left: 0, top: 0 },
+			scrollLeft: withinElement.scrollLeft(),
+			scrollTop: withinElement.scrollTop(),
+
+			// support: jQuery 1.6.x
+			// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+			width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+			height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
+		};
+	}
+};
+
+$.fn.position = function( options ) {
+	if ( !options || !options.of ) {
+		return _position.apply( this, arguments );
+	}
+
+	// make a copy, we don't want to modify arguments
+	options = $.extend( {}, options );
+
+	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+		target = $( options.of ),
+		within = $.position.getWithinInfo( options.within ),
+		scrollInfo = $.position.getScrollInfo( within ),
+		collision = ( options.collision || "flip" ).split( " " ),
+		offsets = {};
+
+	dimensions = getDimensions( target );
+	if ( target[0].preventDefault ) {
+		// force left top to allow flipping
+		options.at = "left top";
+	}
+	targetWidth = dimensions.width;
+	targetHeight = dimensions.height;
+	targetOffset = dimensions.offset;
+	// clone to reuse original targetOffset later
+	basePosition = $.extend( {}, targetOffset );
+
+	// force my and at to have valid horizontal and vertical positions
+	// if a value is missing or invalid, it will be converted to center
+	$.each( [ "my", "at" ], function() {
+		var pos = ( options[ this ] || "" ).split( " " ),
+			horizontalOffset,
+			verticalOffset;
+
+		if ( pos.length === 1) {
+			pos = rhorizontal.test( pos[ 0 ] ) ?
+				pos.concat( [ "center" ] ) :
+				rvertical.test( pos[ 0 ] ) ?
+					[ "center" ].concat( pos ) :
+					[ "center", "center" ];
+		}
+		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+		// calculate offsets
+		horizontalOffset = roffset.exec( pos[ 0 ] );
+		verticalOffset = roffset.exec( pos[ 1 ] );
+		offsets[ this ] = [
+			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+			verticalOffset ? verticalOffset[ 0 ] : 0
+		];
+
+		// reduce to just the positions without the offsets
+		options[ this ] = [
+			rposition.exec( pos[ 0 ] )[ 0 ],
+			rposition.exec( pos[ 1 ] )[ 0 ]
+		];
+	});
+
+	// normalize collision option
+	if ( collision.length === 1 ) {
+		collision[ 1 ] = collision[ 0 ];
+	}
+
+	if ( options.at[ 0 ] === "right" ) {
+		basePosition.left += targetWidth;
+	} else if ( options.at[ 0 ] === "center" ) {
+		basePosition.left += targetWidth / 2;
+	}
+
+	if ( options.at[ 1 ] === "bottom" ) {
+		basePosition.top += targetHeight;
+	} else if ( options.at[ 1 ] === "center" ) {
+		basePosition.top += targetHeight / 2;
+	}
+
+	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+	basePosition.left += atOffset[ 0 ];
+	basePosition.top += atOffset[ 1 ];
+
+	return this.each(function() {
+		var collisionPosition, using,
+			elem = $( this ),
+			elemWidth = elem.outerWidth(),
+			elemHeight = elem.outerHeight(),
+			marginLeft = parseCss( this, "marginLeft" ),
+			marginTop = parseCss( this, "marginTop" ),
+			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+			position = $.extend( {}, basePosition ),
+			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+		if ( options.my[ 0 ] === "right" ) {
+			position.left -= elemWidth;
+		} else if ( options.my[ 0 ] === "center" ) {
+			position.left -= elemWidth / 2;
+		}
+
+		if ( options.my[ 1 ] === "bottom" ) {
+			position.top -= elemHeight;
+		} else if ( options.my[ 1 ] === "center" ) {
+			position.top -= elemHeight / 2;
+		}
+
+		position.left += myOffset[ 0 ];
+		position.top += myOffset[ 1 ];
+
+		// if the browser doesn't support fractions, then round for consistent results
+		if ( !supportsOffsetFractions ) {
+			position.left = round( position.left );
+			position.top = round( position.top );
+		}
+
+		collisionPosition = {
+			marginLeft: marginLeft,
+			marginTop: marginTop
+		};
+
+		$.each( [ "left", "top" ], function( i, dir ) {
+			if ( $.ui.position[ collision[ i ] ] ) {
+				$.ui.position[ collision[ i ] ][ dir ]( position, {
+					targetWidth: targetWidth,
+					targetHeight: targetHeight,
+					elemWidth: elemWidth,
+					elemHeight: elemHeight,
+					collisionPosition: collisionPosition,
+					collisionWidth: collisionWidth,
+					collisionHeight: collisionHeight,
+					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+					my: options.my,
+					at: options.at,
+					within: within,
+					elem: elem
+				});
+			}
+		});
+
+		if ( options.using ) {
+			// adds feedback as second argument to using callback, if present
+			using = function( props ) {
+				var left = targetOffset.left - position.left,
+					right = left + targetWidth - elemWidth,
+					top = targetOffset.top - position.top,
+					bottom = top + targetHeight - elemHeight,
+					feedback = {
+						target: {
+							element: target,
+							left: targetOffset.left,
+							top: targetOffset.top,
+							width: targetWidth,
+							height: targetHeight
+						},
+						element: {
+							element: elem,
+							left: position.left,
+							top: position.top,
+							width: elemWidth,
+							height: elemHeight
+						},
+						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+					};
+				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+					feedback.horizontal = "center";
+				}
+				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+					feedback.vertical = "middle";
+				}
+				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+					feedback.important = "horizontal";
+				} else {
+					feedback.important = "vertical";
+				}
+				options.using.call( this, props, feedback );
+			};
+		}
+
+		elem.offset( $.extend( position, { using: using } ) );
+	});
+};
+
+$.ui.position = {
+	fit: {
+		left: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+				outerWidth = within.width,
+				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+				overLeft = withinOffset - collisionPosLeft,
+				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+				newOverRight;
+
+			// element is wider than within
+			if ( data.collisionWidth > outerWidth ) {
+				// element is initially over the left side of within
+				if ( overLeft > 0 && overRight <= 0 ) {
+					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+					position.left += overLeft - newOverRight;
+				// element is initially over right side of within
+				} else if ( overRight > 0 && overLeft <= 0 ) {
+					position.left = withinOffset;
+				// element is initially over both left and right sides of within
+				} else {
+					if ( overLeft > overRight ) {
+						position.left = withinOffset + outerWidth - data.collisionWidth;
+					} else {
+						position.left = withinOffset;
+					}
+				}
+			// too far left -> align with left edge
+			} else if ( overLeft > 0 ) {
+				position.left += overLeft;
+			// too far right -> align with right edge
+			} else if ( overRight > 0 ) {
+				position.left -= overRight;
+			// adjust based on position and margin
+			} else {
+				position.left = max( position.left - collisionPosLeft, position.left );
+			}
+		},
+		top: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+				outerHeight = data.within.height,
+				collisionPosTop = position.top - data.collisionPosition.marginTop,
+				overTop = withinOffset - collisionPosTop,
+				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+				newOverBottom;
+
+			// element is taller than within
+			if ( data.collisionHeight > outerHeight ) {
+				// element is initially over the top of within
+				if ( overTop > 0 && overBottom <= 0 ) {
+					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+					position.top += overTop - newOverBottom;
+				// element is initially over bottom of within
+				} else if ( overBottom > 0 && overTop <= 0 ) {
+					position.top = withinOffset;
+				// element is initially over both top and bottom of within
+				} else {
+					if ( overTop > overBottom ) {
+						position.top = withinOffset + outerHeight - data.collisionHeight;
+					} else {
+						position.top = withinOffset;
+					}
+				}
+			// too far up -> align with top
+			} else if ( overTop > 0 ) {
+				position.top += overTop;
+			// too far down -> align with bottom edge
+			} else if ( overBottom > 0 ) {
+				position.top -= overBottom;
+			// adjust based on position and margin
+			} else {
+				position.top = max( position.top - collisionPosTop, position.top );
+			}
+		}
+	},
+	flip: {
+		left: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.offset.left + within.scrollLeft,
+				outerWidth = within.width,
+				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+				overLeft = collisionPosLeft - offsetLeft,
+				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+				myOffset = data.my[ 0 ] === "left" ?
+					-data.elemWidth :
+					data.my[ 0 ] === "right" ?
+						data.elemWidth :
+						0,
+				atOffset = data.at[ 0 ] === "left" ?
+					data.targetWidth :
+					data.at[ 0 ] === "right" ?
+						-data.targetWidth :
+						0,
+				offset = -2 * data.offset[ 0 ],
+				newOverRight,
+				newOverLeft;
+
+			if ( overLeft < 0 ) {
+				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+					position.left += myOffset + atOffset + offset;
+				}
+			} else if ( overRight > 0 ) {
+				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+					position.left += myOffset + atOffset + offset;
+				}
+			}
+		},
+		top: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.offset.top + within.scrollTop,
+				outerHeight = within.height,
+				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+				collisionPosTop = position.top - data.collisionPosition.marginTop,
+				overTop = collisionPosTop - offsetTop,
+				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+				top = data.my[ 1 ] === "top",
+				myOffset = top ?
+					-data.elemHeight :
+					data.my[ 1 ] === "bottom" ?
+						data.elemHeight :
+						0,
+				atOffset = data.at[ 1 ] === "top" ?
+					data.targetHeight :
+					data.at[ 1 ] === "bottom" ?
+						-data.targetHeight :
+						0,
+				offset = -2 * data.offset[ 1 ],
+				newOverTop,
+				newOverBottom;
+			if ( overTop < 0 ) {
+				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+				if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+					position.top += myOffset + atOffset + offset;
+				}
+			} else if ( overBottom > 0 ) {
+				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+				if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+					position.top += myOffset + atOffset + offset;
+				}
+			}
+		}
+	},
+	flipfit: {
+		left: function() {
+			$.ui.position.flip.left.apply( this, arguments );
+			$.ui.position.fit.left.apply( this, arguments );
+		},
+		top: function() {
+			$.ui.position.flip.top.apply( this, arguments );
+			$.ui.position.fit.top.apply( this, arguments );
+		}
+	}
+};
+
+// fraction support test
+(function() {
+	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+		body = document.getElementsByTagName( "body" )[ 0 ],
+		div = document.createElement( "div" );
+
+	//Create a "fake body" for testing based on method used in jQuery.support
+	testElement = document.createElement( body ? "div" : "body" );
+	testElementStyle = {
+		visibility: "hidden",
+		width: 0,
+		height: 0,
+		border: 0,
+		margin: 0,
+		background: "none"
+	};
+	if ( body ) {
+		$.extend( testElementStyle, {
+			position: "absolute",
+			left: "-1000px",
+			top: "-1000px"
+		});
+	}
+	for ( i in testElementStyle ) {
+		testElement.style[ i ] = testElementStyle[ i ];
+	}
+	testElement.appendChild( div );
+	testElementParent = body || document.documentElement;
+	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+	div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+	offsetLeft = $( div ).offset().left;
+	supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+	testElement.innerHTML = "";
+	testElementParent.removeChild( testElement );
+})();
+
+})();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Accordion 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/accordion/
  */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
-this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
-_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
-false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
-10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
-!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
-a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
-this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
-(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
-"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
-10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
-this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
-!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
-if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
-b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
-c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.14"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
-h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){alert($(this).data("draggable"));var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
-false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
-c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
-this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){if( $(this).data("draggable") ){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
-a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
-"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
-c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
-o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.14
+
+
+var accordion = $.widget( "ui.accordion", {
+	version: "1.11.4",
+	options: {
+		active: 0,
+		animate: {},
+		collapsible: false,
+		event: "click",
+		header: "> li > :first-child,> :not(li):even",
+		heightStyle: "auto",
+		icons: {
+			activeHeader: "ui-icon-triangle-1-s",
+			header: "ui-icon-triangle-1-e"
+		},
+
+		// callbacks
+		activate: null,
+		beforeActivate: null
+	},
+
+	hideProps: {
+		borderTopWidth: "hide",
+		borderBottomWidth: "hide",
+		paddingTop: "hide",
+		paddingBottom: "hide",
+		height: "hide"
+	},
+
+	showProps: {
+		borderTopWidth: "show",
+		borderBottomWidth: "show",
+		paddingTop: "show",
+		paddingBottom: "show",
+		height: "show"
+	},
+
+	_create: function() {
+		var options = this.options;
+		this.prevShow = this.prevHide = $();
+		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+			// ARIA
+			.attr( "role", "tablist" );
+
+		// don't allow collapsible: false and active: false / null
+		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+			options.active = 0;
+		}
+
+		this._processPanels();
+		// handle negative values
+		if ( options.active < 0 ) {
+			options.active += this.headers.length;
+		}
+		this._refresh();
+	},
+
+	_getCreateEventData: function() {
+		return {
+			header: this.active,
+			panel: !this.active.length ? $() : this.active.next()
+		};
+	},
+
+	_createIcons: function() {
+		var icons = this.options.icons;
+		if ( icons ) {
+			$( "<span>" )
+				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+				.prependTo( this.headers );
+			this.active.children( ".ui-accordion-header-icon" )
+				.removeClass( icons.header )
+				.addClass( icons.activeHeader );
+			this.headers.addClass( "ui-accordion-icons" );
+		}
+	},
+
+	_destroyIcons: function() {
+		this.headers
+			.removeClass( "ui-accordion-icons" )
+			.children( ".ui-accordion-header-icon" )
+				.remove();
+	},
+
+	_destroy: function() {
+		var contents;
+
+		// clean up main element
+		this.element
+			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+			.removeAttr( "role" );
+
+		// clean up headers
+		this.headers
+			.removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " +
+				"ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-expanded" )
+			.removeAttr( "aria-selected" )
+			.removeAttr( "aria-controls" )
+			.removeAttr( "tabIndex" )
+			.removeUniqueId();
+
+		this._destroyIcons();
+
+		// clean up content panels
+		contents = this.headers.next()
+			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " +
+				"ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+			.css( "display", "" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-hidden" )
+			.removeAttr( "aria-labelledby" )
+			.removeUniqueId();
+
+		if ( this.options.heightStyle !== "content" ) {
+			contents.css( "height", "" );
+		}
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "active" ) {
+			// _activate() will handle invalid values and update this.options
+			this._activate( value );
+			return;
+		}
+
+		if ( key === "event" ) {
+			if ( this.options.event ) {
+				this._off( this.headers, this.options.event );
+			}
+			this._setupEvents( value );
+		}
+
+		this._super( key, value );
+
+		// setting collapsible: false while collapsed; open first panel
+		if ( key === "collapsible" && !value && this.options.active === false ) {
+			this._activate( 0 );
+		}
+
+		if ( key === "icons" ) {
+			this._destroyIcons();
+			if ( value ) {
+				this._createIcons();
+			}
+		}
+
+		// #5332 - opacity doesn't cascade to positioned elements in IE
+		// so we need to add the disabled class to the headers and panels
+		if ( key === "disabled" ) {
+			this.element
+				.toggleClass( "ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+			this.headers.add( this.headers.next() )
+				.toggleClass( "ui-state-disabled", !!value );
+		}
+	},
+
+	_keydown: function( event ) {
+		if ( event.altKey || event.ctrlKey ) {
+			return;
+		}
+
+		var keyCode = $.ui.keyCode,
+			length = this.headers.length,
+			currentIndex = this.headers.index( event.target ),
+			toFocus = false;
+
+		switch ( event.keyCode ) {
+			case keyCode.RIGHT:
+			case keyCode.DOWN:
+				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+				break;
+			case keyCode.LEFT:
+			case keyCode.UP:
+				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+				break;
+			case keyCode.SPACE:
+			case keyCode.ENTER:
+				this._eventHandler( event );
+				break;
+			case keyCode.HOME:
+				toFocus = this.headers[ 0 ];
+				break;
+			case keyCode.END:
+				toFocus = this.headers[ length - 1 ];
+				break;
+		}
+
+		if ( toFocus ) {
+			$( event.target ).attr( "tabIndex", -1 );
+			$( toFocus ).attr( "tabIndex", 0 );
+			toFocus.focus();
+			event.preventDefault();
+		}
+	},
+
+	_panelKeyDown: function( event ) {
+		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+			$( event.currentTarget ).prev().focus();
+		}
+	},
+
+	refresh: function() {
+		var options = this.options;
+		this._processPanels();
+
+		// was collapsed or no panel
+		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+			options.active = false;
+			this.active = $();
+		// active false only when collapsible is true
+		} else if ( options.active === false ) {
+			this._activate( 0 );
+		// was active, but active panel is gone
+		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+			// all remaining panel are disabled
+			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+				options.active = false;
+				this.active = $();
+			// activate previous panel
+			} else {
+				this._activate( Math.max( 0, options.active - 1 ) );
+			}
+		// was active, active panel still exists
+		} else {
+			// make sure active index is correct
+			options.active = this.headers.index( this.active );
+		}
+
+		this._destroyIcons();
+
+		this._refresh();
+	},
+
+	_processPanels: function() {
+		var prevHeaders = this.headers,
+			prevPanels = this.panels;
+
+		this.headers = this.element.find( this.options.header )
+			.addClass( "ui-accordion-header ui-state-default ui-corner-all" );
+
+		this.panels = this.headers.next()
+			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+			.filter( ":not(.ui-accordion-content-active)" )
+			.hide();
+
+		// Avoid memory leaks (#10056)
+		if ( prevPanels ) {
+			this._off( prevHeaders.not( this.headers ) );
+			this._off( prevPanels.not( this.panels ) );
+		}
+	},
+
+	_refresh: function() {
+		var maxHeight,
+			options = this.options,
+			heightStyle = options.heightStyle,
+			parent = this.element.parent();
+
+		this.active = this._findActive( options.active )
+			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+			.removeClass( "ui-corner-all" );
+		this.active.next()
+			.addClass( "ui-accordion-content-active" )
+			.show();
+
+		this.headers
+			.attr( "role", "tab" )
+			.each(function() {
+				var header = $( this ),
+					headerId = header.uniqueId().attr( "id" ),
+					panel = header.next(),
+					panelId = panel.uniqueId().attr( "id" );
+				header.attr( "aria-controls", panelId );
+				panel.attr( "aria-labelledby", headerId );
+			})
+			.next()
+				.attr( "role", "tabpanel" );
+
+		this.headers
+			.not( this.active )
+			.attr({
+				"aria-selected": "false",
+				"aria-expanded": "false",
+				tabIndex: -1
+			})
+			.next()
+				.attr({
+					"aria-hidden": "true"
+				})
+				.hide();
+
+		// make sure at least one header is in the tab order
+		if ( !this.active.length ) {
+			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+		} else {
+			this.active.attr({
+				"aria-selected": "true",
+				"aria-expanded": "true",
+				tabIndex: 0
+			})
+			.next()
+				.attr({
+					"aria-hidden": "false"
+				});
+		}
+
+		this._createIcons();
+
+		this._setupEvents( options.event );
+
+		if ( heightStyle === "fill" ) {
+			maxHeight = parent.height();
+			this.element.siblings( ":visible" ).each(function() {
+				var elem = $( this ),
+					position = elem.css( "position" );
+
+				if ( position === "absolute" || position === "fixed" ) {
+					return;
+				}
+				maxHeight -= elem.outerHeight( true );
+			});
+
+			this.headers.each(function() {
+				maxHeight -= $( this ).outerHeight( true );
+			});
+
+			this.headers.next()
+				.each(function() {
+					$( this ).height( Math.max( 0, maxHeight -
+						$( this ).innerHeight() + $( this ).height() ) );
+				})
+				.css( "overflow", "auto" );
+		} else if ( heightStyle === "auto" ) {
+			maxHeight = 0;
+			this.headers.next()
+				.each(function() {
+					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+				})
+				.height( maxHeight );
+		}
+	},
+
+	_activate: function( index ) {
+		var active = this._findActive( index )[ 0 ];
+
+		// trying to activate the already active panel
+		if ( active === this.active[ 0 ] ) {
+			return;
+		}
+
+		// trying to collapse, simulate a click on the currently active header
+		active = active || this.active[ 0 ];
+
+		this._eventHandler({
+			target: active,
+			currentTarget: active,
+			preventDefault: $.noop
+		});
+	},
+
+	_findActive: function( selector ) {
+		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+	},
+
+	_setupEvents: function( event ) {
+		var events = {
+			keydown: "_keydown"
+		};
+		if ( event ) {
+			$.each( event.split( " " ), function( index, eventName ) {
+				events[ eventName ] = "_eventHandler";
+			});
+		}
+
+		this._off( this.headers.add( this.headers.next() ) );
+		this._on( this.headers, events );
+		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+		this._hoverable( this.headers );
+		this._focusable( this.headers );
+	},
+
+	_eventHandler: function( event ) {
+		var options = this.options,
+			active = this.active,
+			clicked = $( event.currentTarget ),
+			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+			collapsing = clickedIsActive && options.collapsible,
+			toShow = collapsing ? $() : clicked.next(),
+			toHide = active.next(),
+			eventData = {
+				oldHeader: active,
+				oldPanel: toHide,
+				newHeader: collapsing ? $() : clicked,
+				newPanel: toShow
+			};
+
+		event.preventDefault();
+
+		if (
+				// click on active header, but not collapsible
+				( clickedIsActive && !options.collapsible ) ||
+				// allow canceling activation
+				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+			return;
+		}
+
+		options.active = collapsing ? false : this.headers.index( clicked );
+
+		// when the call to ._toggle() comes after the class changes
+		// it causes a very odd bug in IE 8 (see #6720)
+		this.active = clickedIsActive ? $() : clicked;
+		this._toggle( eventData );
+
+		// switch classes
+		// corner classes on the previously active header stay after the animation
+		active.removeClass( "ui-accordion-header-active ui-state-active" );
+		if ( options.icons ) {
+			active.children( ".ui-accordion-header-icon" )
+				.removeClass( options.icons.activeHeader )
+				.addClass( options.icons.header );
+		}
+
+		if ( !clickedIsActive ) {
+			clicked
+				.removeClass( "ui-corner-all" )
+				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+			if ( options.icons ) {
+				clicked.children( ".ui-accordion-header-icon" )
+					.removeClass( options.icons.header )
+					.addClass( options.icons.activeHeader );
+			}
+
+			clicked
+				.next()
+				.addClass( "ui-accordion-content-active" );
+		}
+	},
+
+	_toggle: function( data ) {
+		var toShow = data.newPanel,
+			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+		// handle activating a panel during the animation for another activation
+		this.prevShow.add( this.prevHide ).stop( true, true );
+		this.prevShow = toShow;
+		this.prevHide = toHide;
+
+		if ( this.options.animate ) {
+			this._animate( toShow, toHide, data );
+		} else {
+			toHide.hide();
+			toShow.show();
+			this._toggleComplete( data );
+		}
+
+		toHide.attr({
+			"aria-hidden": "true"
+		});
+		toHide.prev().attr({
+			"aria-selected": "false",
+			"aria-expanded": "false"
+		});
+		// if we're switching panels, remove the old header from the tab order
+		// if we're opening from collapsed state, remove the previous header from the tab order
+		// if we're collapsing, then keep the collapsing header in the tab order
+		if ( toShow.length && toHide.length ) {
+			toHide.prev().attr({
+				"tabIndex": -1,
+				"aria-expanded": "false"
+			});
+		} else if ( toShow.length ) {
+			this.headers.filter(function() {
+				return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+			})
+			.attr( "tabIndex", -1 );
+		}
+
+		toShow
+			.attr( "aria-hidden", "false" )
+			.prev()
+				.attr({
+					"aria-selected": "true",
+					"aria-expanded": "true",
+					tabIndex: 0
+				});
+	},
+
+	_animate: function( toShow, toHide, data ) {
+		var total, easing, duration,
+			that = this,
+			adjust = 0,
+			boxSizing = toShow.css( "box-sizing" ),
+			down = toShow.length &&
+				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+			animate = this.options.animate || {},
+			options = down && animate.down || animate,
+			complete = function() {
+				that._toggleComplete( data );
+			};
+
+		if ( typeof options === "number" ) {
+			duration = options;
+		}
+		if ( typeof options === "string" ) {
+			easing = options;
+		}
+		// fall back from options to animation in case of partial down settings
+		easing = easing || options.easing || animate.easing;
+		duration = duration || options.duration || animate.duration;
+
+		if ( !toHide.length ) {
+			return toShow.animate( this.showProps, duration, easing, complete );
+		}
+		if ( !toShow.length ) {
+			return toHide.animate( this.hideProps, duration, easing, complete );
+		}
+
+		total = toShow.show().outerHeight();
+		toHide.animate( this.hideProps, {
+			duration: duration,
+			easing: easing,
+			step: function( now, fx ) {
+				fx.now = Math.round( now );
+			}
+		});
+		toShow
+			.hide()
+			.animate( this.showProps, {
+				duration: duration,
+				easing: easing,
+				complete: complete,
+				step: function( now, fx ) {
+					fx.now = Math.round( now );
+					if ( fx.prop !== "height" ) {
+						if ( boxSizing === "content-box" ) {
+							adjust += fx.now;
+						}
+					} else if ( that.options.heightStyle !== "content" ) {
+						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+						adjust = 0;
+					}
+				}
+			});
+	},
+
+	_toggleComplete: function( data ) {
+		var toHide = data.oldPanel;
+
+		toHide
+			.removeClass( "ui-accordion-content-active" )
+			.prev()
+				.removeClass( "ui-corner-top" )
+				.addClass( "ui-corner-all" );
+
+		// Work around for rendering bug in IE (#5421)
+		if ( toHide.length ) {
+			toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+		}
+		this._trigger( "activate", null, data );
+	}
+});
+
+
+/*!
+ * jQuery UI Menu 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.mouse.js
- *	jquery.ui.draggable.js
+ * http://api.jqueryui.com/menu/
  */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.14"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parentsUntil("body").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=
-!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parentsUntil("body").unbind("scroll.droppable");
-a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.14
+
+
+var menu = $.widget( "ui.menu", {
+	version: "1.11.4",
+	defaultElement: "<ul>",
+	delay: 300,
+	options: {
+		icons: {
+			submenu: "ui-icon-carat-1-e"
+		},
+		items: "> *",
+		menus: "ul",
+		position: {
+			my: "left-1 top",
+			at: "right top"
+		},
+		role: "menu",
+
+		// callbacks
+		blur: null,
+		focus: null,
+		select: null
+	},
+
+	_create: function() {
+		this.activeMenu = this.element;
+
+		// Flag used to prevent firing of the click handler
+		// as the event bubbles up through nested menus
+		this.mouseHandled = false;
+		this.element
+			.uniqueId()
+			.addClass( "ui-menu ui-widget ui-widget-content" )
+			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+			.attr({
+				role: this.options.role,
+				tabIndex: 0
+			});
+
+		if ( this.options.disabled ) {
+			this.element
+				.addClass( "ui-state-disabled" )
+				.attr( "aria-disabled", "true" );
+		}
+
+		this._on({
+			// Prevent focus from sticking to links inside menu after clicking
+			// them (focus should always stay on UL during navigation).
+			"mousedown .ui-menu-item": function( event ) {
+				event.preventDefault();
+			},
+			"click .ui-menu-item": function( event ) {
+				var target = $( event.target );
+				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+					this.select( event );
+
+					// Only set the mouseHandled flag if the event will bubble, see #9469.
+					if ( !event.isPropagationStopped() ) {
+						this.mouseHandled = true;
+					}
+
+					// Open submenu on click
+					if ( target.has( ".ui-menu" ).length ) {
+						this.expand( event );
+					} else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+						// Redirect focus to the menu
+						this.element.trigger( "focus", [ true ] );
+
+						// If the active item is on the top level, let it stay active.
+						// Otherwise, blur the active item since it is no longer visible.
+						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+							clearTimeout( this.timer );
+						}
+					}
+				}
+			},
+			"mouseenter .ui-menu-item": function( event ) {
+				// Ignore mouse events while typeahead is active, see #10458.
+				// Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+				// is over an item in the menu
+				if ( this.previousFilter ) {
+					return;
+				}
+				var target = $( event.currentTarget );
+				// Remove ui-state-active class from siblings of the newly focused menu item
+				// to avoid a jump caused by adjacent elements both having a class with a border
+				target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+				this.focus( event, target );
+			},
+			mouseleave: "collapseAll",
+			"mouseleave .ui-menu": "collapseAll",
+			focus: function( event, keepActiveItem ) {
+				// If there's already an active item, keep it active
+				// If not, activate the first item
+				var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+				if ( !keepActiveItem ) {
+					this.focus( event, item );
+				}
+			},
+			blur: function( event ) {
+				this._delay(function() {
+					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+						this.collapseAll( event );
+					}
+				});
+			},
+			keydown: "_keydown"
+		});
+
+		this.refresh();
+
+		// Clicks outside of a menu collapse any open menus
+		this._on( this.document, {
+			click: function( event ) {
+				if ( this._closeOnDocumentClick( event ) ) {
+					this.collapseAll( event );
+				}
+
+				// Reset the mouseHandled flag
+				this.mouseHandled = false;
+			}
+		});
+	},
+
+	_destroy: function() {
+		// Destroy (sub)menus
+		this.element
+			.removeAttr( "aria-activedescendant" )
+			.find( ".ui-menu" ).addBack()
+				.removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+				.removeAttr( "role" )
+				.removeAttr( "tabIndex" )
+				.removeAttr( "aria-labelledby" )
+				.removeAttr( "aria-expanded" )
+				.removeAttr( "aria-hidden" )
+				.removeAttr( "aria-disabled" )
+				.removeUniqueId()
+				.show();
+
+		// Destroy menu items
+		this.element.find( ".ui-menu-item" )
+			.removeClass( "ui-menu-item" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-disabled" )
+			.removeUniqueId()
+			.removeClass( "ui-state-hover" )
+			.removeAttr( "tabIndex" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-haspopup" )
+			.children().each( function() {
+				var elem = $( this );
+				if ( elem.data( "ui-menu-submenu-carat" ) ) {
+					elem.remove();
+				}
+			});
+
+		// Destroy menu dividers
+		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+	},
+
+	_keydown: function( event ) {
+		var match, prev, character, skip,
+			preventDefault = true;
+
+		switch ( event.keyCode ) {
+		case $.ui.keyCode.PAGE_UP:
+			this.previousPage( event );
+			break;
+		case $.ui.keyCode.PAGE_DOWN:
+			this.nextPage( event );
+			break;
+		case $.ui.keyCode.HOME:
+			this._move( "first", "first", event );
+			break;
+		case $.ui.keyCode.END:
+			this._move( "last", "last", event );
+			break;
+		case $.ui.keyCode.UP:
+			this.previous( event );
+			break;
+		case $.ui.keyCode.DOWN:
+			this.next( event );
+			break;
+		case $.ui.keyCode.LEFT:
+			this.collapse( event );
+			break;
+		case $.ui.keyCode.RIGHT:
+			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+				this.expand( event );
+			}
+			break;
+		case $.ui.keyCode.ENTER:
+		case $.ui.keyCode.SPACE:
+			this._activate( event );
+			break;
+		case $.ui.keyCode.ESCAPE:
+			this.collapse( event );
+			break;
+		default:
+			preventDefault = false;
+			prev = this.previousFilter || "";
+			character = String.fromCharCode( event.keyCode );
+			skip = false;
+
+			clearTimeout( this.filterTimer );
+
+			if ( character === prev ) {
+				skip = true;
+			} else {
+				character = prev + character;
+			}
+
+			match = this._filterMenuItems( character );
+			match = skip && match.index( this.active.next() ) !== -1 ?
+				this.active.nextAll( ".ui-menu-item" ) :
+				match;
+
+			// If no matches on the current filter, reset to the last character pressed
+			// to move down the menu to the first item that starts with that character
+			if ( !match.length ) {
+				character = String.fromCharCode( event.keyCode );
+				match = this._filterMenuItems( character );
+			}
+
+			if ( match.length ) {
+				this.focus( event, match );
+				this.previousFilter = character;
+				this.filterTimer = this._delay(function() {
+					delete this.previousFilter;
+				}, 1000 );
+			} else {
+				delete this.previousFilter;
+			}
+		}
+
+		if ( preventDefault ) {
+			event.preventDefault();
+		}
+	},
+
+	_activate: function( event ) {
+		if ( !this.active.is( ".ui-state-disabled" ) ) {
+			if ( this.active.is( "[aria-haspopup='true']" ) ) {
+				this.expand( event );
+			} else {
+				this.select( event );
+			}
+		}
+	},
+
+	refresh: function() {
+		var menus, items,
+			that = this,
+			icon = this.options.icons.submenu,
+			submenus = this.element.find( this.options.menus );
+
+		this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+		// Initialize nested menus
+		submenus.filter( ":not(.ui-menu)" )
+			.addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+			.hide()
+			.attr({
+				role: this.options.role,
+				"aria-hidden": "true",
+				"aria-expanded": "false"
+			})
+			.each(function() {
+				var menu = $( this ),
+					item = menu.parent(),
+					submenuCarat = $( "<span>" )
+						.addClass( "ui-menu-icon ui-icon " + icon )
+						.data( "ui-menu-submenu-carat", true );
+
+				item
+					.attr( "aria-haspopup", "true" )
+					.prepend( submenuCarat );
+				menu.attr( "aria-labelledby", item.attr( "id" ) );
+			});
+
+		menus = submenus.add( this.element );
+		items = menus.find( this.options.items );
+
+		// Initialize menu-items containing spaces and/or dashes only as dividers
+		items.not( ".ui-menu-item" ).each(function() {
+			var item = $( this );
+			if ( that._isDivider( item ) ) {
+				item.addClass( "ui-widget-content ui-menu-divider" );
+			}
+		});
+
+		// Don't refresh list items that are already adapted
+		items.not( ".ui-menu-item, .ui-menu-divider" )
+			.addClass( "ui-menu-item" )
+			.uniqueId()
+			.attr({
+				tabIndex: -1,
+				role: this._itemRole()
+			});
+
+		// Add aria-disabled attribute to any disabled menu item
+		items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+		// If the active item has been removed, blur the menu
+		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+			this.blur();
+		}
+	},
+
+	_itemRole: function() {
+		return {
+			menu: "menuitem",
+			listbox: "option"
+		}[ this.options.role ];
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "icons" ) {
+			this.element.find( ".ui-menu-icon" )
+				.removeClass( this.options.icons.submenu )
+				.addClass( value.submenu );
+		}
+		if ( key === "disabled" ) {
+			this.element
+				.toggleClass( "ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+		}
+		this._super( key, value );
+	},
+
+	focus: function( event, item ) {
+		var nested, focused;
+		this.blur( event, event && event.type === "focus" );
+
+		this._scrollIntoView( item );
+
+		this.active = item.first();
+		focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+		// Only update aria-activedescendant if there's a role
+		// otherwise we assume focus is managed elsewhere
+		if ( this.options.role ) {
+			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+		}
+
+		// Highlight active parent menu item, if any
+		this.active
+			.parent()
+			.closest( ".ui-menu-item" )
+			.addClass( "ui-state-active" );
+
+		if ( event && event.type === "keydown" ) {
+			this._close();
+		} else {
+			this.timer = this._delay(function() {
+				this._close();
+			}, this.delay );
+		}
+
+		nested = item.children( ".ui-menu" );
+		if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+			this._startOpening(nested);
+		}
+		this.activeMenu = item.parent();
+
+		this._trigger( "focus", event, { item: item } );
+	},
+
+	_scrollIntoView: function( item ) {
+		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+		if ( this._hasScroll() ) {
+			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+			scroll = this.activeMenu.scrollTop();
+			elementHeight = this.activeMenu.height();
+			itemHeight = item.outerHeight();
+
+			if ( offset < 0 ) {
+				this.activeMenu.scrollTop( scroll + offset );
+			} else if ( offset + itemHeight > elementHeight ) {
+				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+			}
+		}
+	},
+
+	blur: function( event, fromFocus ) {
+		if ( !fromFocus ) {
+			clearTimeout( this.timer );
+		}
+
+		if ( !this.active ) {
+			return;
+		}
+
+		this.active.removeClass( "ui-state-focus" );
+		this.active = null;
+
+		this._trigger( "blur", event, { item: this.active } );
+	},
+
+	_startOpening: function( submenu ) {
+		clearTimeout( this.timer );
+
+		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+		// shift in the submenu position when mousing over the carat icon
+		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+			return;
+		}
+
+		this.timer = this._delay(function() {
+			this._close();
+			this._open( submenu );
+		}, this.delay );
+	},
+
+	_open: function( submenu ) {
+		var position = $.extend({
+			of: this.active
+		}, this.options.position );
+
+		clearTimeout( this.timer );
+		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+			.hide()
+			.attr( "aria-hidden", "true" );
+
+		submenu
+			.show()
+			.removeAttr( "aria-hidden" )
+			.attr( "aria-expanded", "true" )
+			.position( position );
+	},
+
+	collapseAll: function( event, all ) {
+		clearTimeout( this.timer );
+		this.timer = this._delay(function() {
+			// If we were passed an event, look for the submenu that contains the event
+			var currentMenu = all ? this.element :
+				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+			if ( !currentMenu.length ) {
+				currentMenu = this.element;
+			}
+
+			this._close( currentMenu );
+
+			this.blur( event );
+			this.activeMenu = currentMenu;
+		}, this.delay );
+	},
+
+	// With no arguments, closes the currently active menu - if nothing is active
+	// it closes all menus.  If passed an argument, it will search for menus BELOW
+	_close: function( startMenu ) {
+		if ( !startMenu ) {
+			startMenu = this.active ? this.active.parent() : this.element;
+		}
+
+		startMenu
+			.find( ".ui-menu" )
+				.hide()
+				.attr( "aria-hidden", "true" )
+				.attr( "aria-expanded", "false" )
+			.end()
+			.find( ".ui-state-active" ).not( ".ui-state-focus" )
+				.removeClass( "ui-state-active" );
+	},
+
+	_closeOnDocumentClick: function( event ) {
+		return !$( event.target ).closest( ".ui-menu" ).length;
+	},
+
+	_isDivider: function( item ) {
+
+		// Match hyphen, em dash, en dash
+		return !/[^\-\u2014\u2013\s]/.test( item.text() );
+	},
+
+	collapse: function( event ) {
+		var newItem = this.active &&
+			this.active.parent().closest( ".ui-menu-item", this.element );
+		if ( newItem && newItem.length ) {
+			this._close();
+			this.focus( event, newItem );
+		}
+	},
+
+	expand: function( event ) {
+		var newItem = this.active &&
+			this.active
+				.children( ".ui-menu " )
+				.find( this.options.items )
+				.first();
+
+		if ( newItem && newItem.length ) {
+			this._open( newItem.parent() );
+
+			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+			this._delay(function() {
+				this.focus( event, newItem );
+			});
+		}
+	},
+
+	next: function( event ) {
+		this._move( "next", "first", event );
+	},
+
+	previous: function( event ) {
+		this._move( "prev", "last", event );
+	},
+
+	isFirstItem: function() {
+		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+	},
+
+	isLastItem: function() {
+		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+	},
+
+	_move: function( direction, filter, event ) {
+		var next;
+		if ( this.active ) {
+			if ( direction === "first" || direction === "last" ) {
+				next = this.active
+					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+					.eq( -1 );
+			} else {
+				next = this.active
+					[ direction + "All" ]( ".ui-menu-item" )
+					.eq( 0 );
+			}
+		}
+		if ( !next || !next.length || !this.active ) {
+			next = this.activeMenu.find( this.options.items )[ filter ]();
+		}
+
+		this.focus( event, next );
+	},
+
+	nextPage: function( event ) {
+		var item, base, height;
+
+		if ( !this.active ) {
+			this.next( event );
+			return;
+		}
+		if ( this.isLastItem() ) {
+			return;
+		}
+		if ( this._hasScroll() ) {
+			base = this.active.offset().top;
+			height = this.element.height();
+			this.active.nextAll( ".ui-menu-item" ).each(function() {
+				item = $( this );
+				return item.offset().top - base - height < 0;
+			});
+
+			this.focus( event, item );
+		} else {
+			this.focus( event, this.activeMenu.find( this.options.items )
+				[ !this.active ? "first" : "last" ]() );
+		}
+	},
+
+	previousPage: function( event ) {
+		var item, base, height;
+		if ( !this.active ) {
+			this.next( event );
+			return;
+		}
+		if ( this.isFirstItem() ) {
+			return;
+		}
+		if ( this._hasScroll() ) {
+			base = this.active.offset().top;
+			height = this.element.height();
+			this.active.prevAll( ".ui-menu-item" ).each(function() {
+				item = $( this );
+				return item.offset().top - base + height > 0;
+			});
+
+			this.focus( event, item );
+		} else {
+			this.focus( event, this.activeMenu.find( this.options.items ).first() );
+		}
+	},
+
+	_hasScroll: function() {
+		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+	},
+
+	select: function( event ) {
+		// TODO: It should never be possible to not have an active item at this
+		// point, but the tests don't trigger mouseenter before click.
+		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+		var ui = { item: this.active };
+		if ( !this.active.has( ".ui-menu" ).length ) {
+			this.collapseAll( event, true );
+		}
+		this._trigger( "select", event, ui );
+	},
+
+	_filterMenuItems: function(character) {
+		var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+			regex = new RegExp( "^" + escapedCharacter, "i" );
+
+		return this.activeMenu
+			.find( this.options.items )
+
+			// Only match on items, not dividers or other content (#10571)
+			.filter( ".ui-menu-item" )
+			.filter(function() {
+				return regex.test( $.trim( $( this ).text() ) );
+			});
+	}
+});
+
+
+/*!
+ * jQuery UI Autocomplete 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/autocomplete/
  */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
-_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
-{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
-Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
-b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
-a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
-null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
-0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
-a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
-c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
-b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.14"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
-10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
-e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
-e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
-step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
-e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
-var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
-a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
-f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
-display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
-e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
-d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.14
+
+
+$.widget( "ui.autocomplete", {
+	version: "1.11.4",
+	defaultElement: "<input>",
+	options: {
+		appendTo: null,
+		autoFocus: false,
+		delay: 300,
+		minLength: 1,
+		position: {
+			my: "left top",
+			at: "left bottom",
+			collision: "none"
+		},
+		source: null,
+
+		// callbacks
+		change: null,
+		close: null,
+		focus: null,
+		open: null,
+		response: null,
+		search: null,
+		select: null
+	},
+
+	requestIndex: 0,
+	pending: 0,
+
+	_create: function() {
+		// Some browsers only repeat keydown events, not keypress events,
+		// so we use the suppressKeyPress flag to determine if we've already
+		// handled the keydown event. #7269
+		// Unfortunately the code for & in keypress is the same as the up arrow,
+		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+		// events when we know the keydown event was used to modify the
+		// search term. #7799
+		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+			nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+			isTextarea = nodeName === "textarea",
+			isInput = nodeName === "input";
+
+		this.isMultiLine =
+			// Textareas are always multi-line
+			isTextarea ? true :
+			// Inputs are always single-line, even if inside a contentEditable element
+			// IE also treats inputs as contentEditable
+			isInput ? false :
+			// All other element types are determined by whether or not they're contentEditable
+			this.element.prop( "isContentEditable" );
+
+		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+		this.isNewMenu = true;
+
+		this.element
+			.addClass( "ui-autocomplete-input" )
+			.attr( "autocomplete", "off" );
+
+		this._on( this.element, {
+			keydown: function( event ) {
+				if ( this.element.prop( "readOnly" ) ) {
+					suppressKeyPress = true;
+					suppressInput = true;
+					suppressKeyPressRepeat = true;
+					return;
+				}
+
+				suppressKeyPress = false;
+				suppressInput = false;
+				suppressKeyPressRepeat = false;
+				var keyCode = $.ui.keyCode;
+				switch ( event.keyCode ) {
+				case keyCode.PAGE_UP:
+					suppressKeyPress = true;
+					this._move( "previousPage", event );
+					break;
+				case keyCode.PAGE_DOWN:
+					suppressKeyPress = true;
+					this._move( "nextPage", event );
+					break;
+				case keyCode.UP:
+					suppressKeyPress = true;
+					this._keyEvent( "previous", event );
+					break;
+				case keyCode.DOWN:
+					suppressKeyPress = true;
+					this._keyEvent( "next", event );
+					break;
+				case keyCode.ENTER:
+					// when menu is open and has focus
+					if ( this.menu.active ) {
+						// #6055 - Opera still allows the keypress to occur
+						// which causes forms to submit
+						suppressKeyPress = true;
+						event.preventDefault();
+						this.menu.select( event );
+					}
+					break;
+				case keyCode.TAB:
+					if ( this.menu.active ) {
+						this.menu.select( event );
+					}
+					break;
+				case keyCode.ESCAPE:
+					if ( this.menu.element.is( ":visible" ) ) {
+						if ( !this.isMultiLine ) {
+							this._value( this.term );
+						}
+						this.close( event );
+						// Different browsers have different default behavior for escape
+						// Single press can mean undo or clear
+						// Double press in IE means clear the whole form
+						event.preventDefault();
+					}
+					break;
+				default:
+					suppressKeyPressRepeat = true;
+					// search timeout should be triggered before the input value is changed
+					this._searchTimeout( event );
+					break;
+				}
+			},
+			keypress: function( event ) {
+				if ( suppressKeyPress ) {
+					suppressKeyPress = false;
+					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+						event.preventDefault();
+					}
+					return;
+				}
+				if ( suppressKeyPressRepeat ) {
+					return;
+				}
+
+				// replicate some key handlers to allow them to repeat in Firefox and Opera
+				var keyCode = $.ui.keyCode;
+				switch ( event.keyCode ) {
+				case keyCode.PAGE_UP:
+					this._move( "previousPage", event );
+					break;
+				case keyCode.PAGE_DOWN:
+					this._move( "nextPage", event );
+					break;
+				case keyCode.UP:
+					this._keyEvent( "previous", event );
+					break;
+				case keyCode.DOWN:
+					this._keyEvent( "next", event );
+					break;
+				}
+			},
+			input: function( event ) {
+				if ( suppressInput ) {
+					suppressInput = false;
+					event.preventDefault();
+					return;
+				}
+				this._searchTimeout( event );
+			},
+			focus: function() {
+				this.selectedItem = null;
+				this.previous = this._value();
+			},
+			blur: function( event ) {
+				if ( this.cancelBlur ) {
+					delete this.cancelBlur;
+					return;
+				}
+
+				clearTimeout( this.searching );
+				this.close( event );
+				this._change( event );
+			}
+		});
+
+		this._initSource();
+		this.menu = $( "<ul>" )
+			.addClass( "ui-autocomplete ui-front" )
+			.appendTo( this._appendTo() )
+			.menu({
+				// disable ARIA support, the live region takes care of that
+				role: null
+			})
+			.hide()
+			.menu( "instance" );
+
+		this._on( this.menu.element, {
+			mousedown: function( event ) {
+				// prevent moving focus out of the text field
+				event.preventDefault();
+
+				// IE doesn't prevent moving focus even with event.preventDefault()
+				// so we set a flag to know when we should ignore the blur event
+				this.cancelBlur = true;
+				this._delay(function() {
+					delete this.cancelBlur;
+				});
+
+				// clicking on the scrollbar causes focus to shift to the body
+				// but we can't detect a mouseup or a click immediately afterward
+				// so we have to track the next mousedown and close the menu if
+				// the user clicks somewhere outside of the autocomplete
+				var menuElement = this.menu.element[ 0 ];
+				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+					this._delay(function() {
+						var that = this;
+						this.document.one( "mousedown", function( event ) {
+							if ( event.target !== that.element[ 0 ] &&
+									event.target !== menuElement &&
+									!$.contains( menuElement, event.target ) ) {
+								that.close();
+							}
+						});
+					});
+				}
+			},
+			menufocus: function( event, ui ) {
+				var label, item;
+				// support: Firefox
+				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+				if ( this.isNewMenu ) {
+					this.isNewMenu = false;
+					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+						this.menu.blur();
+
+						this.document.one( "mousemove", function() {
+							$( event.target ).trigger( event.originalEvent );
+						});
+
+						return;
+					}
+				}
+
+				item = ui.item.data( "ui-autocomplete-item" );
+				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+					// use value to match what will end up in the input, if it was a key event
+					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+						this._value( item.value );
+					}
+				}
+
+				// Announce the value in the liveRegion
+				label = ui.item.attr( "aria-label" ) || item.value;
+				if ( label && $.trim( label ).length ) {
+					this.liveRegion.children().hide();
+					$( "<div>" ).text( label ).appendTo( this.liveRegion );
+				}
+			},
+			menuselect: function( event, ui ) {
+				var item = ui.item.data( "ui-autocomplete-item" ),
+					previous = this.previous;
+
+				// only trigger when focus was lost (click on menu)
+				if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
+					this.element.focus();
+					this.previous = previous;
+					// #6109 - IE triggers two focus events and the second
+					// is asynchronous, so we need to reset the previous
+					// term synchronously and asynchronously :-(
+					this._delay(function() {
+						this.previous = previous;
+						this.selectedItem = item;
+					});
+				}
+
+				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+					this._value( item.value );
+				}
+				// reset the term after the select event
+				// this allows custom select handling to work properly
+				this.term = this._value();
+
+				this.close( event );
+				this.selectedItem = item;
+			}
+		});
+
+		this.liveRegion = $( "<span>", {
+				role: "status",
+				"aria-live": "assertive",
+				"aria-relevant": "additions"
+			})
+			.addClass( "ui-helper-hidden-accessible" )
+			.appendTo( this.document[ 0 ].body );
+
+		// turning off autocomplete prevents the browser from remembering the
+		// value when navigating through history, so we re-enable autocomplete
+		// if the page is unloaded before the widget is destroyed. #7790
+		this._on( this.window, {
+			beforeunload: function() {
+				this.element.removeAttr( "autocomplete" );
+			}
+		});
+	},
+
+	_destroy: function() {
+		clearTimeout( this.searching );
+		this.element
+			.removeClass( "ui-autocomplete-input" )
+			.removeAttr( "autocomplete" );
+		this.menu.element.remove();
+		this.liveRegion.remove();
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+		if ( key === "source" ) {
+			this._initSource();
+		}
+		if ( key === "appendTo" ) {
+			this.menu.element.appendTo( this._appendTo() );
+		}
+		if ( key === "disabled" && value && this.xhr ) {
+			this.xhr.abort();
+		}
+	},
+
+	_appendTo: function() {
+		var element = this.options.appendTo;
+
+		if ( element ) {
+			element = element.jquery || element.nodeType ?
+				$( element ) :
+				this.document.find( element ).eq( 0 );
+		}
+
+		if ( !element || !element[ 0 ] ) {
+			element = this.element.closest( ".ui-front" );
+		}
+
+		if ( !element.length ) {
+			element = this.document[ 0 ].body;
+		}
+
+		return element;
+	},
+
+	_initSource: function() {
+		var array, url,
+			that = this;
+		if ( $.isArray( this.options.source ) ) {
+			array = this.options.source;
+			this.source = function( request, response ) {
+				response( $.ui.autocomplete.filter( array, request.term ) );
+			};
+		} else if ( typeof this.options.source === "string" ) {
+			url = this.options.source;
+			this.source = function( request, response ) {
+				if ( that.xhr ) {
+					that.xhr.abort();
+				}
+				that.xhr = $.ajax({
+					url: url,
+					data: request,
+					dataType: "json",
+					success: function( data ) {
+						response( data );
+					},
+					error: function() {
+						response([]);
+					}
+				});
+			};
+		} else {
+			this.source = this.options.source;
+		}
+	},
+
+	_searchTimeout: function( event ) {
+		clearTimeout( this.searching );
+		this.searching = this._delay(function() {
+
+			// Search if the value has changed, or if the user retypes the same value (see #7434)
+			var equalValues = this.term === this._value(),
+				menuVisible = this.menu.element.is( ":visible" ),
+				modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+			if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+				this.selectedItem = null;
+				this.search( null, event );
+			}
+		}, this.options.delay );
+	},
+
+	search: function( value, event ) {
+		value = value != null ? value : this._value();
+
+		// always save the actual value, not the one passed as an argument
+		this.term = this._value();
+
+		if ( value.length < this.options.minLength ) {
+			return this.close( event );
+		}
+
+		if ( this._trigger( "search", event ) === false ) {
+			return;
+		}
+
+		return this._search( value );
+	},
+
+	_search: function( value ) {
+		this.pending++;
+		this.element.addClass( "ui-autocomplete-loading" );
+		this.cancelSearch = false;
+
+		this.source( { term: value }, this._response() );
+	},
+
+	_response: function() {
+		var index = ++this.requestIndex;
+
+		return $.proxy(function( content ) {
+			if ( index === this.requestIndex ) {
+				this.__response( content );
+			}
+
+			this.pending--;
+			if ( !this.pending ) {
+				this.element.removeClass( "ui-autocomplete-loading" );
+			}
+		}, this );
+	},
+
+	__response: function( content ) {
+		if ( content ) {
+			content = this._normalize( content );
+		}
+		this._trigger( "response", null, { content: content } );
+		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+			this._suggest( content );
+			this._trigger( "open" );
+		} else {
+			// use ._close() instead of .close() so we don't cancel future searches
+			this._close();
+		}
+	},
+
+	close: function( event ) {
+		this.cancelSearch = true;
+		this._close( event );
+	},
+
+	_close: function( event ) {
+		if ( this.menu.element.is( ":visible" ) ) {
+			this.menu.element.hide();
+			this.menu.blur();
+			this.isNewMenu = true;
+			this._trigger( "close", event );
+		}
+	},
+
+	_change: function( event ) {
+		if ( this.previous !== this._value() ) {
+			this._trigger( "change", event, { item: this.selectedItem } );
+		}
+	},
+
+	_normalize: function( items ) {
+		// assume all items have the right format when the first item is complete
+		if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+			return items;
+		}
+		return $.map( items, function( item ) {
+			if ( typeof item === "string" ) {
+				return {
+					label: item,
+					value: item
+				};
+			}
+			return $.extend( {}, item, {
+				label: item.label || item.value,
+				value: item.value || item.label
+			});
+		});
+	},
+
+	_suggest: function( items ) {
+		var ul = this.menu.element.empty();
+		this._renderMenu( ul, items );
+		this.isNewMenu = true;
+		this.menu.refresh();
+
+		// size and position menu
+		ul.show();
+		this._resizeMenu();
+		ul.position( $.extend({
+			of: this.element
+		}, this.options.position ) );
+
+		if ( this.options.autoFocus ) {
+			this.menu.next();
+		}
+	},
+
+	_resizeMenu: function() {
+		var ul = this.menu.element;
+		ul.outerWidth( Math.max(
+			// Firefox wraps long text (possibly a rounding bug)
+			// so we add 1px to avoid the wrapping (#7513)
+			ul.width( "" ).outerWidth() + 1,
+			this.element.outerWidth()
+		) );
+	},
+
+	_renderMenu: function( ul, items ) {
+		var that = this;
+		$.each( items, function( index, item ) {
+			that._renderItemData( ul, item );
+		});
+	},
+
+	_renderItemData: function( ul, item ) {
+		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+	},
+
+	_renderItem: function( ul, item ) {
+		return $( "<li>" ).text( item.label ).appendTo( ul );
+	},
+
+	_move: function( direction, event ) {
+		if ( !this.menu.element.is( ":visible" ) ) {
+			this.search( null, event );
+			return;
+		}
+		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+				this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+			if ( !this.isMultiLine ) {
+				this._value( this.term );
+			}
+
+			this.menu.blur();
+			return;
+		}
+		this.menu[ direction ]( event );
+	},
+
+	widget: function() {
+		return this.menu.element;
+	},
+
+	_value: function() {
+		return this.valueMethod.apply( this.element, arguments );
+	},
+
+	_keyEvent: function( keyEvent, event ) {
+		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+			this._move( keyEvent, event );
+
+			// prevents moving cursor to beginning/end of the text field in some browsers
+			event.preventDefault();
+		}
+	}
+});
+
+$.extend( $.ui.autocomplete, {
+	escapeRegex: function( value ) {
+		return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+	},
+	filter: function( array, term ) {
+		var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+		return $.grep( array, function( value ) {
+			return matcher.test( value.label || value.value || value );
+		});
+	}
+});
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+	options: {
+		messages: {
+			noResults: "No search results.",
+			results: function( amount ) {
+				return amount + ( amount > 1 ? " results are" : " result is" ) +
+					" available, use up and down arrow keys to navigate.";
+			}
+		}
+	},
+
+	__response: function( content ) {
+		var message;
+		this._superApply( arguments );
+		if ( this.options.disabled || this.cancelSearch ) {
+			return;
+		}
+		if ( content && content.length ) {
+			message = this.options.messages.results( content.length );
+		} else {
+			message = this.options.messages.noResults;
+		}
+		this.liveRegion.children().hide();
+		$( "<div>" ).text( message ).appendTo( this.liveRegion );
+	}
+});
+
+var autocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Button 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/button/
  */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.14
+
+
+var lastActive,
+	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+	formResetHandler = function() {
+		var form = $( this );
+		setTimeout(function() {
+			form.find( ":ui-button" ).button( "refresh" );
+		}, 1 );
+	},
+	radioGroup = function( radio ) {
+		var name = radio.name,
+			form = radio.form,
+			radios = $( [] );
+		if ( name ) {
+			name = name.replace( /'/g, "\\'" );
+			if ( form ) {
+				radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+			} else {
+				radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+					.filter(function() {
+						return !this.form;
+					});
+			}
+		}
+		return radios;
+	};
+
+$.widget( "ui.button", {
+	version: "1.11.4",
+	defaultElement: "<button>",
+	options: {
+		disabled: null,
+		text: true,
+		label: null,
+		icons: {
+			primary: null,
+			secondary: null
+		}
+	},
+	_create: function() {
+		this.element.closest( "form" )
+			.unbind( "reset" + this.eventNamespace )
+			.bind( "reset" + this.eventNamespace, formResetHandler );
+
+		if ( typeof this.options.disabled !== "boolean" ) {
+			this.options.disabled = !!this.element.prop( "disabled" );
+		} else {
+			this.element.prop( "disabled", this.options.disabled );
+		}
+
+		this._determineButtonType();
+		this.hasTitle = !!this.buttonElement.attr( "title" );
+
+		var that = this,
+			options = this.options,
+			toggleButton = this.type === "checkbox" || this.type === "radio",
+			activeClass = !toggleButton ? "ui-state-active" : "";
+
+		if ( options.label === null ) {
+			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+		}
+
+		this._hoverable( this.buttonElement );
+
+		this.buttonElement
+			.addClass( baseClasses )
+			.attr( "role", "button" )
+			.bind( "mouseenter" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return;
+				}
+				if ( this === lastActive ) {
+					$( this ).addClass( "ui-state-active" );
+				}
+			})
+			.bind( "mouseleave" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return;
+				}
+				$( this ).removeClass( activeClass );
+			})
+			.bind( "click" + this.eventNamespace, function( event ) {
+				if ( options.disabled ) {
+					event.preventDefault();
+					event.stopImmediatePropagation();
+				}
+			});
+
+		// Can't use _focusable() because the element that receives focus
+		// and the element that gets the ui-state-focus class are different
+		this._on({
+			focus: function() {
+				this.buttonElement.addClass( "ui-state-focus" );
+			},
+			blur: function() {
+				this.buttonElement.removeClass( "ui-state-focus" );
+			}
+		});
+
+		if ( toggleButton ) {
+			this.element.bind( "change" + this.eventNamespace, function() {
+				that.refresh();
+			});
+		}
+
+		if ( this.type === "checkbox" ) {
+			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return false;
+				}
+			});
+		} else if ( this.type === "radio" ) {
+			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return false;
+				}
+				$( this ).addClass( "ui-state-active" );
+				that.buttonElement.attr( "aria-pressed", "true" );
+
+				var radio = that.element[ 0 ];
+				radioGroup( radio )
+					.not( radio )
+					.map(function() {
+						return $( this ).button( "widget" )[ 0 ];
+					})
+					.removeClass( "ui-state-active" )
+					.attr( "aria-pressed", "false" );
+			});
+		} else {
+			this.buttonElement
+				.bind( "mousedown" + this.eventNamespace, function() {
+					if ( options.disabled ) {
+						return false;
+					}
+					$( this ).addClass( "ui-state-active" );
+					lastActive = this;
+					that.document.one( "mouseup", function() {
+						lastActive = null;
+					});
+				})
+				.bind( "mouseup" + this.eventNamespace, function() {
+					if ( options.disabled ) {
+						return false;
+					}
+					$( this ).removeClass( "ui-state-active" );
+				})
+				.bind( "keydown" + this.eventNamespace, function(event) {
+					if ( options.disabled ) {
+						return false;
+					}
+					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+						$( this ).addClass( "ui-state-active" );
+					}
+				})
+				// see #8559, we bind to blur here in case the button element loses
+				// focus between keydown and keyup, it would be left in an "active" state
+				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+					$( this ).removeClass( "ui-state-active" );
+				});
+
+			if ( this.buttonElement.is("a") ) {
+				this.buttonElement.keyup(function(event) {
+					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+						$( this ).click();
+					}
+				});
+			}
+		}
+
+		this._setOption( "disabled", options.disabled );
+		this._resetButton();
+	},
+
+	_determineButtonType: function() {
+		var ancestor, labelSelector, checked;
+
+		if ( this.element.is("[type=checkbox]") ) {
+			this.type = "checkbox";
+		} else if ( this.element.is("[type=radio]") ) {
+			this.type = "radio";
+		} else if ( this.element.is("input") ) {
+			this.type = "input";
+		} else {
+			this.type = "button";
+		}
+
+		if ( this.type === "checkbox" || this.type === "radio" ) {
+			// we don't search against the document in case the element
+			// is disconnected from the DOM
+			ancestor = this.element.parents().last();
+			labelSelector = "label[for='" + this.element.attr("id") + "']";
+			this.buttonElement = ancestor.find( labelSelector );
+			if ( !this.buttonElement.length ) {
+				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+				this.buttonElement = ancestor.filter( labelSelector );
+				if ( !this.buttonElement.length ) {
+					this.buttonElement = ancestor.find( labelSelector );
+				}
+			}
+			this.element.addClass( "ui-helper-hidden-accessible" );
+
+			checked = this.element.is( ":checked" );
+			if ( checked ) {
+				this.buttonElement.addClass( "ui-state-active" );
+			}
+			this.buttonElement.prop( "aria-pressed", checked );
+		} else {
+			this.buttonElement = this.element;
+		}
+	},
+
+	widget: function() {
+		return this.buttonElement;
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-helper-hidden-accessible" );
+		this.buttonElement
+			.removeClass( baseClasses + " ui-state-active " + typeClasses )
+			.removeAttr( "role" )
+			.removeAttr( "aria-pressed" )
+			.html( this.buttonElement.find(".ui-button-text").html() );
+
+		if ( !this.hasTitle ) {
+			this.buttonElement.removeAttr( "title" );
+		}
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+		if ( key === "disabled" ) {
+			this.widget().toggleClass( "ui-state-disabled", !!value );
+			this.element.prop( "disabled", !!value );
+			if ( value ) {
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					this.buttonElement.removeClass( "ui-state-focus" );
+				} else {
+					this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+				}
+			}
+			return;
+		}
+		this._resetButton();
+	},
+
+	refresh: function() {
+		//See #8237 & #8828
+		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+		if ( isDisabled !== this.options.disabled ) {
+			this._setOption( "disabled", isDisabled );
+		}
+		if ( this.type === "radio" ) {
+			radioGroup( this.element[0] ).each(function() {
+				if ( $( this ).is( ":checked" ) ) {
+					$( this ).button( "widget" )
+						.addClass( "ui-state-active" )
+						.attr( "aria-pressed", "true" );
+				} else {
+					$( this ).button( "widget" )
+						.removeClass( "ui-state-active" )
+						.attr( "aria-pressed", "false" );
+				}
+			});
+		} else if ( this.type === "checkbox" ) {
+			if ( this.element.is( ":checked" ) ) {
+				this.buttonElement
+					.addClass( "ui-state-active" )
+					.attr( "aria-pressed", "true" );
+			} else {
+				this.buttonElement
+					.removeClass( "ui-state-active" )
+					.attr( "aria-pressed", "false" );
+			}
+		}
+	},
+
+	_resetButton: function() {
+		if ( this.type === "input" ) {
+			if ( this.options.label ) {
+				this.element.val( this.options.label );
+			}
+			return;
+		}
+		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+			buttonText = $( "<span></span>", this.document[0] )
+				.addClass( "ui-button-text" )
+				.html( this.options.label )
+				.appendTo( buttonElement.empty() )
+				.text(),
+			icons = this.options.icons,
+			multipleIcons = icons.primary && icons.secondary,
+			buttonClasses = [];
+
+		if ( icons.primary || icons.secondary ) {
+			if ( this.options.text ) {
+				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+			}
+
+			if ( icons.primary ) {
+				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+			}
+
+			if ( icons.secondary ) {
+				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+			}
+
+			if ( !this.options.text ) {
+				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+				if ( !this.hasTitle ) {
+					buttonElement.attr( "title", $.trim( buttonText ) );
+				}
+			}
+		} else {
+			buttonClasses.push( "ui-button-text-only" );
+		}
+		buttonElement.addClass( buttonClasses.join( " " ) );
+	}
+});
+
+$.widget( "ui.buttonset", {
+	version: "1.11.4",
+	options: {
+		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+	},
+
+	_create: function() {
+		this.element.addClass( "ui-buttonset" );
+	},
+
+	_init: function() {
+		this.refresh();
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "disabled" ) {
+			this.buttons.button( "option", key, value );
+		}
+
+		this._super( key, value );
+	},
+
+	refresh: function() {
+		var rtl = this.element.css( "direction" ) === "rtl",
+			allButtons = this.element.find( this.options.items ),
+			existingButtons = allButtons.filter( ":ui-button" );
+
+		// Initialize new buttons
+		allButtons.not( ":ui-button" ).button();
+
+		// Refresh existing buttons
+		existingButtons.button( "refresh" );
+
+		this.buttons = allButtons
+			.map(function() {
+				return $( this ).button( "widget" )[ 0 ];
+			})
+				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+				.filter( ":first" )
+					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+				.end()
+				.filter( ":last" )
+					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+				.end()
+			.end();
+	},
+
+	_destroy: function() {
+		this.element.removeClass( "ui-buttonset" );
+		this.buttons
+			.map(function() {
+				return $( this ).button( "widget" )[ 0 ];
+			})
+				.removeClass( "ui-corner-left ui-corner-right" )
+			.end()
+			.button( "destroy" );
+	}
+});
+
+var button = $.ui.button;
+
+
+/*!
+ * jQuery UI Datepicker 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/datepicker/
  */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Accordion 1.8.14
+
+
+$.extend($.ui, { datepicker: { version: "1.11.4" } });
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+	var position, value;
+	while ( elem.length && elem[ 0 ] !== document ) {
+		// Ignore z-index if position is set to a value where z-index is ignored by the browser
+		// This makes behavior of this function consistent across browsers
+		// WebKit always returns auto if the element is positioned
+		position = elem.css( "position" );
+		if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+			// IE returns 0 when zIndex is not specified
+			// other browsers return a string
+			// we ignore the case of nested elements with an explicit value of 0
+			// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+			value = parseInt( elem.css( "zIndex" ), 10 );
+			if ( !isNaN( value ) && value !== 0 ) {
+				return value;
+			}
+		}
+		elem = elem.parent();
+	}
+
+	return 0;
+}
+/* Date picker manager.
+   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+   Settings for (groups of) date pickers are maintained in an instance object,
+   allowing multiple different settings on the same page. */
+
+function Datepicker() {
+	this._curInst = null; // The current instance in use
+	this._keyEvent = false; // If the last event was a key event
+	this._disabledInputs = []; // List of date picker inputs that have been disabled
+	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+	this._inDialog = false; // True if showing within a "dialog", false if not
+	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+	this.regional = []; // Available regional settings, indexed by language code
+	this.regional[""] = { // Default regional settings
+		closeText: "Done", // Display text for close link
+		prevText: "Prev", // Display text for previous month link
+		nextText: "Next", // Display text for next month link
+		currentText: "Today", // Display text for current month link
+		monthNames: ["January","February","March","April","May","June",
+			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+		weekHeader: "Wk", // Column header for week of the year
+		dateFormat: "mm/dd/yy", // See format options on parseDate
+		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+		isRTL: false, // True if right-to-left language, false if left-to-right
+		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+		yearSuffix: "" // Additional text to append to the year in the month headers
+	};
+	this._defaults = { // Global defaults for all the date picker instances
+		showOn: "focus", // "focus" for popup on focus,
+			// "button" for trigger button, or "both" for either
+		showAnim: "fadeIn", // Name of jQuery animation for popup
+		showOptions: {}, // Options for enhanced animations
+		defaultDate: null, // Used when field is blank: actual date,
+			// +/-number for offset from today, null for today
+		appendText: "", // Display text following the input box, e.g. showing the format
+		buttonText: "...", // Text for trigger button
+		buttonImage: "", // URL for trigger button image
+		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+		hideIfNoPrevNext: false, // True to hide next/previous month links
+			// if not applicable, false to just disable them
+		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+		gotoCurrent: false, // True if today link goes back to current selection instead
+		changeMonth: false, // True if month can be selected directly, false if only prev/next
+		changeYear: false, // True if year can be selected directly, false if only prev/next
+		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+			// either relative to today's year (-nn:+nn), relative to currently displayed year
+			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+		showOtherMonths: false, // True to show dates in other months, false to leave blank
+		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+		showWeek: false, // True to show week of the year, false to not show it
+		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+			// takes a Date and returns the number of the week for it
+		shortYearCutoff: "+10", // Short year values < this are in the current century,
+			// > this are in the previous century,
+			// string value starting with "+" for current year + value
+		minDate: null, // The earliest selectable date, or null for no limit
+		maxDate: null, // The latest selectable date, or null for no limit
+		duration: "fast", // Duration of display/closure
+		beforeShowDay: null, // Function that takes a date and returns an array with
+			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+		beforeShow: null, // Function that takes an input field and
+			// returns a set of custom settings for the date picker
+		onSelect: null, // Define a callback function when a date is selected
+		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+		onClose: null, // Define a callback function when the datepicker is closed
+		numberOfMonths: 1, // Number of months to show at a time
+		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+		stepMonths: 1, // Number of months to step back/forward
+		stepBigMonths: 12, // Number of months to step back/forward for the big links
+		altField: "", // Selector for an alternate field to store selected dates into
+		altFormat: "", // The date format to use for the alternate field
+		constrainInput: true, // The input is constrained by the current date format
+		showButtonPanel: false, // True to show button panel, false to not show it
+		autoSize: false, // True to size the input for the date format, false to leave as is
+		disabled: false // The initial disabled state
+	};
+	$.extend(this._defaults, this.regional[""]);
+	this.regional.en = $.extend( true, {}, this.regional[ "" ]);
+	this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+	this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+}
+
+$.extend(Datepicker.prototype, {
+	/* Class name added to elements to indicate already configured with a date picker. */
+	markerClassName: "hasDatepicker",
+
+	//Keep track of the maximum number of rows displayed (see #7043)
+	maxRows: 4,
+
+	// TODO rename to "widget" when switching to widget factory
+	_widgetDatepicker: function() {
+		return this.dpDiv;
+	},
+
+	/* Override the default settings for all instances of the date picker.
+	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+	 * @return the manager object
+	 */
+	setDefaults: function(settings) {
+		datepicker_extendRemove(this._defaults, settings || {});
+		return this;
+	},
+
+	/* Attach the date picker to a jQuery selection.
+	 * @param  target	element - the target input field or division or span
+	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+	 */
+	_attachDatepicker: function(target, settings) {
+		var nodeName, inline, inst;
+		nodeName = target.nodeName.toLowerCase();
+		inline = (nodeName === "div" || nodeName === "span");
+		if (!target.id) {
+			this.uuid += 1;
+			target.id = "dp" + this.uuid;
+		}
+		inst = this._newInst($(target), inline);
+		inst.settings = $.extend({}, settings || {});
+		if (nodeName === "input") {
+			this._connectDatepicker(target, inst);
+		} else if (inline) {
+			this._inlineDatepicker(target, inst);
+		}
+	},
+
+	/* Create a new instance object. */
+	_newInst: function(target, inline) {
+		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+		return {id: id, input: target, // associated target
+			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+			drawMonth: 0, drawYear: 0, // month being drawn
+			inline: inline, // is datepicker inline or not
+			dpDiv: (!inline ? this.dpDiv : // presentation div
+			datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+	},
+
+	/* Attach the date picker to an input field. */
+	_connectDatepicker: function(target, inst) {
+		var input = $(target);
+		inst.append = $([]);
+		inst.trigger = $([]);
+		if (input.hasClass(this.markerClassName)) {
+			return;
+		}
+		this._attachments(input, inst);
+		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+			keypress(this._doKeyPress).keyup(this._doKeyUp);
+		this._autoSize(inst);
+		$.data(target, "datepicker", inst);
+		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+		if( inst.settings.disabled ) {
+			this._disableDatepicker( target );
+		}
+	},
+
+	/* Make attachments based on settings. */
+	_attachments: function(input, inst) {
+		var showOn, buttonText, buttonImage,
+			appendText = this._get(inst, "appendText"),
+			isRTL = this._get(inst, "isRTL");
+
+		if (inst.append) {
+			inst.append.remove();
+		}
+		if (appendText) {
+			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+			input[isRTL ? "before" : "after"](inst.append);
+		}
+
+		input.unbind("focus", this._showDatepicker);
+
+		if (inst.trigger) {
+			inst.trigger.remove();
+		}
+
+		showOn = this._get(inst, "showOn");
+		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+			input.focus(this._showDatepicker);
+		}
+		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+			buttonText = this._get(inst, "buttonText");
+			buttonImage = this._get(inst, "buttonImage");
+			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+				$("<img/>").addClass(this._triggerClass).
+					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+				$("<button type='button'></button>").addClass(this._triggerClass).
+					html(!buttonImage ? buttonText : $("<img/>").attr(
+					{ src:buttonImage, alt:buttonText, title:buttonText })));
+			input[isRTL ? "before" : "after"](inst.trigger);
+			inst.trigger.click(function() {
+				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+					$.datepicker._hideDatepicker();
+				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+					$.datepicker._hideDatepicker();
+					$.datepicker._showDatepicker(input[0]);
+				} else {
+					$.datepicker._showDatepicker(input[0]);
+				}
+				return false;
+			});
+		}
+	},
+
+	/* Apply the maximum length for the date format. */
+	_autoSize: function(inst) {
+		if (this._get(inst, "autoSize") && !inst.inline) {
+			var findMax, max, maxI, i,
+				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+				dateFormat = this._get(inst, "dateFormat");
+
+			if (dateFormat.match(/[DM]/)) {
+				findMax = function(names) {
+					max = 0;
+					maxI = 0;
+					for (i = 0; i < names.length; i++) {
+						if (names[i].length > max) {
+							max = names[i].length;
+							maxI = i;
+						}
+					}
+					return maxI;
+				};
+				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+					"monthNames" : "monthNamesShort"))));
+				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+			}
+			inst.input.attr("size", this._formatDate(inst, date).length);
+		}
+	},
+
+	/* Attach an inline date picker to a div. */
+	_inlineDatepicker: function(target, inst) {
+		var divSpan = $(target);
+		if (divSpan.hasClass(this.markerClassName)) {
+			return;
+		}
+		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+		$.data(target, "datepicker", inst);
+		this._setDate(inst, this._getDefaultDate(inst), true);
+		this._updateDatepicker(inst);
+		this._updateAlternate(inst);
+		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+		if( inst.settings.disabled ) {
+			this._disableDatepicker( target );
+		}
+		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+		inst.dpDiv.css( "display", "block" );
+	},
+
+	/* Pop-up the date picker in a "dialog" box.
+	 * @param  input element - ignored
+	 * @param  date	string or Date - the initial date to display
+	 * @param  onSelect  function - the function to call when a date is selected
+	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+	 *					event - with x/y coordinates or
+	 *					leave empty for default (screen centre)
+	 * @return the manager object
+	 */
+	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+		var id, browserWidth, browserHeight, scrollX, scrollY,
+			inst = this._dialogInst; // internal instance
+
+		if (!inst) {
+			this.uuid += 1;
+			id = "dp" + this.uuid;
+			this._dialogInput = $("<input type='text' id='" + id +
+				"' style='position: absolute; top: -100px; width: 0px;'/>");
+			this._dialogInput.keydown(this._doKeyDown);
+			$("body").append(this._dialogInput);
+			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+			inst.settings = {};
+			$.data(this._dialogInput[0], "datepicker", inst);
+		}
+		datepicker_extendRemove(inst.settings, settings || {});
+		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+		this._dialogInput.val(date);
+
+		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+		if (!this._pos) {
+			browserWidth = document.documentElement.clientWidth;
+			browserHeight = document.documentElement.clientHeight;
+			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+			this._pos = // should use actual width/height below
+				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+		}
+
+		// move input on screen for focus, but hidden behind dialog
+		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+		inst.settings.onSelect = onSelect;
+		this._inDialog = true;
+		this.dpDiv.addClass(this._dialogClass);
+		this._showDatepicker(this._dialogInput[0]);
+		if ($.blockUI) {
+			$.blockUI(this.dpDiv);
+		}
+		$.data(this._dialogInput[0], "datepicker", inst);
+		return this;
+	},
+
+	/* Detach a datepicker from its control.
+	 * @param  target	element - the target input field or division or span
+	 */
+	_destroyDatepicker: function(target) {
+		var nodeName,
+			$target = $(target),
+			inst = $.data(target, "datepicker");
+
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+
+		nodeName = target.nodeName.toLowerCase();
+		$.removeData(target, "datepicker");
+		if (nodeName === "input") {
+			inst.append.remove();
+			inst.trigger.remove();
+			$target.removeClass(this.markerClassName).
+				unbind("focus", this._showDatepicker).
+				unbind("keydown", this._doKeyDown).
+				unbind("keypress", this._doKeyPress).
+				unbind("keyup", this._doKeyUp);
+		} else if (nodeName === "div" || nodeName === "span") {
+			$target.removeClass(this.markerClassName).empty();
+		}
+
+		if ( datepicker_instActive === inst ) {
+			datepicker_instActive = null;
+		}
+	},
+
+	/* Enable the date picker to a jQuery selection.
+	 * @param  target	element - the target input field or division or span
+	 */
+	_enableDatepicker: function(target) {
+		var nodeName, inline,
+			$target = $(target),
+			inst = $.data(target, "datepicker");
+
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+
+		nodeName = target.nodeName.toLowerCase();
+		if (nodeName === "input") {
+			target.disabled = false;
+			inst.trigger.filter("button").
+				each(function() { this.disabled = false; }).end().
+				filter("img").css({opacity: "1.0", cursor: ""});
+		} else if (nodeName === "div" || nodeName === "span") {
+			inline = $target.children("." + this._inlineClass);
+			inline.children().removeClass("ui-state-disabled");
+			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+				prop("disabled", false);
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value === target ? null : value); }); // delete entry
+	},
+
+	/* Disable the date picker to a jQuery selection.
+	 * @param  target	element - the target input field or division or span
+	 */
+	_disableDatepicker: function(target) {
+		var nodeName, inline,
+			$target = $(target),
+			inst = $.data(target, "datepicker");
+
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+
+		nodeName = target.nodeName.toLowerCase();
+		if (nodeName === "input") {
+			target.disabled = true;
+			inst.trigger.filter("button").
+				each(function() { this.disabled = true; }).end().
+				filter("img").css({opacity: "0.5", cursor: "default"});
+		} else if (nodeName === "div" || nodeName === "span") {
+			inline = $target.children("." + this._inlineClass);
+			inline.children().addClass("ui-state-disabled");
+			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+				prop("disabled", true);
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value === target ? null : value); }); // delete entry
+		this._disabledInputs[this._disabledInputs.length] = target;
+	},
+
+	/* Is the first field in a jQuery collection disabled as a datepicker?
+	 * @param  target	element - the target input field or division or span
+	 * @return boolean - true if disabled, false if enabled
+	 */
+	_isDisabledDatepicker: function(target) {
+		if (!target) {
+			return false;
+		}
+		for (var i = 0; i < this._disabledInputs.length; i++) {
+			if (this._disabledInputs[i] === target) {
+				return true;
+			}
+		}
+		return false;
+	},
+
+	/* Retrieve the instance data for the target control.
+	 * @param  target  element - the target input field or division or span
+	 * @return  object - the associated instance data
+	 * @throws  error if a jQuery problem getting data
+	 */
+	_getInst: function(target) {
+		try {
+			return $.data(target, "datepicker");
+		}
+		catch (err) {
+			throw "Missing instance data for this datepicker";
+		}
+	},
+
+	/* Update or retrieve the settings for a date picker attached to an input field or division.
+	 * @param  target  element - the target input field or division or span
+	 * @param  name	object - the new settings to update or
+	 *				string - the name of the setting to change or retrieve,
+	 *				when retrieving also "all" for all instance settings or
+	 *				"defaults" for all global defaults
+	 * @param  value   any - the new value for the setting
+	 *				(omit if above is an object or to retrieve a value)
+	 */
+	_optionDatepicker: function(target, name, value) {
+		var settings, date, minDate, maxDate,
+			inst = this._getInst(target);
+
+		if (arguments.length === 2 && typeof name === "string") {
+			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+				this._get(inst, name)) : null));
+		}
+
+		settings = name || {};
+		if (typeof name === "string") {
+			settings = {};
+			settings[name] = value;
+		}
+
+		if (inst) {
+			if (this._curInst === inst) {
+				this._hideDatepicker();
+			}
+
+			date = this._getDateDatepicker(target, true);
+			minDate = this._getMinMaxDate(inst, "min");
+			maxDate = this._getMinMaxDate(inst, "max");
+			datepicker_extendRemove(inst.settings, settings);
+			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+				inst.settings.minDate = this._formatDate(inst, minDate);
+			}
+			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+				inst.settings.maxDate = this._formatDate(inst, maxDate);
+			}
+			if ( "disabled" in settings ) {
+				if ( settings.disabled ) {
+					this._disableDatepicker(target);
+				} else {
+					this._enableDatepicker(target);
+				}
+			}
+			this._attachments($(target), inst);
+			this._autoSize(inst);
+			this._setDate(inst, date);
+			this._updateAlternate(inst);
+			this._updateDatepicker(inst);
+		}
+	},
+
+	// change method deprecated
+	_changeDatepicker: function(target, name, value) {
+		this._optionDatepicker(target, name, value);
+	},
+
+	/* Redraw the date picker attached to an input field or division.
+	 * @param  target  element - the target input field or division or span
+	 */
+	_refreshDatepicker: function(target) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._updateDatepicker(inst);
+		}
+	},
+
+	/* Set the dates for a jQuery selection.
+	 * @param  target element - the target input field or division or span
+	 * @param  date	Date - the new date
+	 */
+	_setDateDatepicker: function(target, date) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._setDate(inst, date);
+			this._updateDatepicker(inst);
+			this._updateAlternate(inst);
+		}
+	},
+
+	/* Get the date(s) for the first entry in a jQuery selection.
+	 * @param  target element - the target input field or division or span
+	 * @param  noDefault boolean - true if no default date is to be used
+	 * @return Date - the current date
+	 */
+	_getDateDatepicker: function(target, noDefault) {
+		var inst = this._getInst(target);
+		if (inst && !inst.inline) {
+			this._setDateFromField(inst, noDefault);
+		}
+		return (inst ? this._getDate(inst) : null);
+	},
+
+	/* Handle keystrokes. */
+	_doKeyDown: function(event) {
+		var onSelect, dateStr, sel,
+			inst = $.datepicker._getInst(event.target),
+			handled = true,
+			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+		inst._keyEvent = true;
+		if ($.datepicker._datepickerShowing) {
+			switch (event.keyCode) {
+				case 9: $.datepicker._hideDatepicker();
+						handled = false;
+						break; // hide on tab out
+				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+									$.datepicker._currentClass + ")", inst.dpDiv);
+						if (sel[0]) {
+							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+						}
+
+						onSelect = $.datepicker._get(inst, "onSelect");
+						if (onSelect) {
+							dateStr = $.datepicker._formatDate(inst);
+
+							// trigger custom callback
+							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+						} else {
+							$.datepicker._hideDatepicker();
+						}
+
+						return false; // don't submit the form
+				case 27: $.datepicker._hideDatepicker();
+						break; // hide on escape
+				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							-$.datepicker._get(inst, "stepBigMonths") :
+							-$.datepicker._get(inst, "stepMonths")), "M");
+						break; // previous month/year on page up/+ ctrl
+				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							+$.datepicker._get(inst, "stepBigMonths") :
+							+$.datepicker._get(inst, "stepMonths")), "M");
+						break; // next month/year on page down/+ ctrl
+				case 35: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._clearDate(event.target);
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // clear on ctrl or command +end
+				case 36: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._gotoToday(event.target);
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // current on ctrl or command +home
+				case 37: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						// -1 day on ctrl or command +left
+						if (event.originalEvent.altKey) {
+							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+								-$.datepicker._get(inst, "stepBigMonths") :
+								-$.datepicker._get(inst, "stepMonths")), "M");
+						}
+						// next month/year on alt +left on Mac
+						break;
+				case 38: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, -7, "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // -1 week on ctrl or command +up
+				case 39: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						// +1 day on ctrl or command +right
+						if (event.originalEvent.altKey) {
+							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+								+$.datepicker._get(inst, "stepBigMonths") :
+								+$.datepicker._get(inst, "stepMonths")), "M");
+						}
+						// next month/year on alt +right
+						break;
+				case 40: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, +7, "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // +1 week on ctrl or command +down
+				default: handled = false;
+			}
+		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+			$.datepicker._showDatepicker(this);
+		} else {
+			handled = false;
+		}
+
+		if (handled) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+	},
+
+	/* Filter entered characters - based on date format. */
+	_doKeyPress: function(event) {
+		var chars, chr,
+			inst = $.datepicker._getInst(event.target);
+
+		if ($.datepicker._get(inst, "constrainInput")) {
+			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+		}
+	},
+
+	/* Synchronise manual entry and field/alternate field. */
+	_doKeyUp: function(event) {
+		var date,
+			inst = $.datepicker._getInst(event.target);
+
+		if (inst.input.val() !== inst.lastVal) {
+			try {
+				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+					(inst.input ? inst.input.val() : null),
+					$.datepicker._getFormatConfig(inst));
+
+				if (date) { // only if valid
+					$.datepicker._setDateFromField(inst);
+					$.datepicker._updateAlternate(inst);
+					$.datepicker._updateDatepicker(inst);
+				}
+			}
+			catch (err) {
+			}
+		}
+		return true;
+	},
+
+	/* Pop-up the date picker for a given input field.
+	 * If false returned from beforeShow event handler do not show.
+	 * @param  input  element - the input field attached to the date picker or
+	 *					event - if triggered by focus
+	 */
+	_showDatepicker: function(input) {
+		input = input.target || input;
+		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+			input = $("input", input.parentNode)[0];
+		}
+
+		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+			return;
+		}
+
+		var inst, beforeShow, beforeShowSettings, isFixed,
+			offset, showAnim, duration;
+
+		inst = $.datepicker._getInst(input);
+		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+			$.datepicker._curInst.dpDiv.stop(true, true);
+			if ( inst && $.datepicker._datepickerShowing ) {
+				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+			}
+		}
+
+		beforeShow = $.datepicker._get(inst, "beforeShow");
+		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+		if(beforeShowSettings === false){
+			return;
+		}
+		datepicker_extendRemove(inst.settings, beforeShowSettings);
+
+		inst.lastVal = null;
+		$.datepicker._lastInput = input;
+		$.datepicker._setDateFromField(inst);
+
+		if ($.datepicker._inDialog) { // hide cursor
+			input.value = "";
+		}
+		if (!$.datepicker._pos) { // position below input
+			$.datepicker._pos = $.datepicker._findPos(input);
+			$.datepicker._pos[1] += input.offsetHeight; // add the height
+		}
+
+		isFixed = false;
+		$(input).parents().each(function() {
+			isFixed |= $(this).css("position") === "fixed";
+			return !isFixed;
+		});
+
+		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+		$.datepicker._pos = null;
+		//to avoid flashes on Firefox
+		inst.dpDiv.empty();
+		// determine sizing offscreen
+		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+		$.datepicker._updateDatepicker(inst);
+		// fix width for dynamic number of date pickers
+		// and adjust position before showing
+		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+			left: offset.left + "px", top: offset.top + "px"});
+
+		if (!inst.inline) {
+			showAnim = $.datepicker._get(inst, "showAnim");
+			duration = $.datepicker._get(inst, "duration");
+			inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+			$.datepicker._datepickerShowing = true;
+
+			if ( $.effects && $.effects.effect[ showAnim ] ) {
+				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+			} else {
+				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+			}
+
+			if ( $.datepicker._shouldFocusInput( inst ) ) {
+				inst.input.focus();
+			}
+
+			$.datepicker._curInst = inst;
+		}
+	},
+
+	/* Generate the date picker content. */
+	_updateDatepicker: function(inst) {
+		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+		datepicker_instActive = inst; // for delegate hover events
+		inst.dpDiv.empty().append(this._generateHTML(inst));
+		this._attachHandlers(inst);
+
+		var origyearshtml,
+			numMonths = this._getNumberOfMonths(inst),
+			cols = numMonths[1],
+			width = 17,
+			activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+		if ( activeCell.length > 0 ) {
+			datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+		}
+
+		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+		if (cols > 1) {
+			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+		}
+		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+			"Class"]("ui-datepicker-multi");
+		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+			"Class"]("ui-datepicker-rtl");
+
+		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+			inst.input.focus();
+		}
+
+		// deffered render of the years select (to avoid flashes on Firefox)
+		if( inst.yearshtml ){
+			origyearshtml = inst.yearshtml;
+			setTimeout(function(){
+				//assure that inst.yearshtml didn't change.
+				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+				}
+				origyearshtml = inst.yearshtml = null;
+			}, 0);
+		}
+	},
+
+	// #6694 - don't focus the input if it's already focused
+	// this breaks the change event in IE
+	// Support: IE and jQuery <1.9
+	_shouldFocusInput: function( inst ) {
+		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+	},
+
+	/* Check positioning to remain on screen. */
+	_checkOffset: function(inst, offset, isFixed) {
+		var dpWidth = inst.dpDiv.outerWidth(),
+			dpHeight = inst.dpDiv.outerHeight(),
+			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+		// now check if datepicker is showing outside window viewport - move to a better place if so.
+		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+			Math.abs(dpHeight + inputHeight) : 0);
+
+		return offset;
+	},
+
+	/* Find an object's position on the screen. */
+	_findPos: function(obj) {
+		var position,
+			inst = this._getInst(obj),
+			isRTL = this._get(inst, "isRTL");
+
+		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+		}
+
+		position = $(obj).offset();
+		return [position.left, position.top];
+	},
+
+	/* Hide the date picker from view.
+	 * @param  input  element - the input field attached to the date picker
+	 */
+	_hideDatepicker: function(input) {
+		var showAnim, duration, postProcess, onClose,
+			inst = this._curInst;
+
+		if (!inst || (input && inst !== $.data(input, "datepicker"))) {
+			return;
+		}
+
+		if (this._datepickerShowing) {
+			showAnim = this._get(inst, "showAnim");
+			duration = this._get(inst, "duration");
+			postProcess = function() {
+				$.datepicker._tidyDialog(inst);
+			};
+
+			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+			} else {
+				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+			}
+
+			if (!showAnim) {
+				postProcess();
+			}
+			this._datepickerShowing = false;
+
+			onClose = this._get(inst, "onClose");
+			if (onClose) {
+				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+			}
+
+			this._lastInput = null;
+			if (this._inDialog) {
+				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+				if ($.blockUI) {
+					$.unblockUI();
+					$("body").append(this.dpDiv);
+				}
+			}
+			this._inDialog = false;
+		}
+	},
+
+	/* Tidy up after a dialog display. */
+	_tidyDialog: function(inst) {
+		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+	},
+
+	/* Close date picker if clicked elsewhere. */
+	_checkExternalClick: function(event) {
+		if (!$.datepicker._curInst) {
+			return;
+		}
+
+		var $target = $(event.target),
+			inst = $.datepicker._getInst($target[0]);
+
+		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+				!$target.hasClass($.datepicker.markerClassName) &&
+				!$target.closest("." + $.datepicker._triggerClass).length &&
+				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+				$.datepicker._hideDatepicker();
+		}
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustDate: function(id, offset, period) {
+		var target = $(id),
+			inst = this._getInst(target[0]);
+
+		if (this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+		this._adjustInstDate(inst, offset +
+			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+			period);
+		this._updateDatepicker(inst);
+	},
+
+	/* Action for current link. */
+	_gotoToday: function(id) {
+		var date,
+			target = $(id),
+			inst = this._getInst(target[0]);
+
+		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+			inst.selectedDay = inst.currentDay;
+			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+			inst.drawYear = inst.selectedYear = inst.currentYear;
+		} else {
+			date = new Date();
+			inst.selectedDay = date.getDate();
+			inst.drawMonth = inst.selectedMonth = date.getMonth();
+			inst.drawYear = inst.selectedYear = date.getFullYear();
+		}
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Action for selecting a new month/year. */
+	_selectMonthYear: function(id, select, period) {
+		var target = $(id),
+			inst = this._getInst(target[0]);
+
+		inst["selected" + (period === "M" ? "Month" : "Year")] =
+		inst["draw" + (period === "M" ? "Month" : "Year")] =
+			parseInt(select.options[select.selectedIndex].value,10);
+
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Action for selecting a day. */
+	_selectDay: function(id, month, year, td) {
+		var inst,
+			target = $(id);
+
+		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+
+		inst = this._getInst(target[0]);
+		inst.selectedDay = inst.currentDay = $("a", td).html();
+		inst.selectedMonth = inst.currentMonth = month;
+		inst.selectedYear = inst.currentYear = year;
+		this._selectDate(id, this._formatDate(inst,
+			inst.currentDay, inst.currentMonth, inst.currentYear));
+	},
+
+	/* Erase the input field and hide the date picker. */
+	_clearDate: function(id) {
+		var target = $(id);
+		this._selectDate(target, "");
+	},
+
+	/* Update the input field with the selected date. */
+	_selectDate: function(id, dateStr) {
+		var onSelect,
+			target = $(id),
+			inst = this._getInst(target[0]);
+
+		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+		if (inst.input) {
+			inst.input.val(dateStr);
+		}
+		this._updateAlternate(inst);
+
+		onSelect = this._get(inst, "onSelect");
+		if (onSelect) {
+			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+		} else if (inst.input) {
+			inst.input.trigger("change"); // fire the change event
+		}
+
+		if (inst.inline){
+			this._updateDatepicker(inst);
+		} else {
+			this._hideDatepicker();
+			this._lastInput = inst.input[0];
+			if (typeof(inst.input[0]) !== "object") {
+				inst.input.focus(); // restore focus
+			}
+			this._lastInput = null;
+		}
+	},
+
+	/* Update any alternate field to synchronise with the main field. */
+	_updateAlternate: function(inst) {
+		var altFormat, date, dateStr,
+			altField = this._get(inst, "altField");
+
+		if (altField) { // update alternate field too
+			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+			date = this._getDate(inst);
+			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+			$(altField).each(function() { $(this).val(dateStr); });
+		}
+	},
+
+	/* Set as beforeShowDay function to prevent selection of weekends.
+	 * @param  date  Date - the date to customise
+	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+	 */
+	noWeekends: function(date) {
+		var day = date.getDay();
+		return [(day > 0 && day < 6), ""];
+	},
+
+	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+	 * @param  date  Date - the date to get the week for
+	 * @return  number - the number of the week within the year that contains this date
+	 */
+	iso8601Week: function(date) {
+		var time,
+			checkDate = new Date(date.getTime());
+
+		// Find Thursday of this week starting on Monday
+		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+		time = checkDate.getTime();
+		checkDate.setMonth(0); // Compare with Jan 1
+		checkDate.setDate(1);
+		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+	},
+
+	/* Parse a string value into a date object.
+	 * See formatDate below for the possible formats.
+	 *
+	 * @param  format string - the expected format of the date
+	 * @param  value string - the date in the above format
+	 * @param  settings Object - attributes include:
+	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+	 *					dayNames		string[7] - names of the days from Sunday (optional)
+	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+	 *					monthNames		string[12] - names of the months (optional)
+	 * @return  Date - the extracted date value or null if value is blank
+	 */
+	parseDate: function (format, value, settings) {
+		if (format == null || value == null) {
+			throw "Invalid arguments";
+		}
+
+		value = (typeof value === "object" ? value.toString() : value + "");
+		if (value === "") {
+			return null;
+		}
+
+		var iFormat, dim, extra,
+			iValue = 0,
+			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+			year = -1,
+			month = -1,
+			day = -1,
+			doy = -1,
+			literal = false,
+			date,
+			// Check whether a format character is doubled
+			lookAhead = function(match) {
+				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+				if (matches) {
+					iFormat++;
+				}
+				return matches;
+			},
+			// Extract a number from the string value
+			getNumber = function(match) {
+				var isDoubled = lookAhead(match),
+					size = (match === "@" ? 14 : (match === "!" ? 20 :
+					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+					minSize = (match === "y" ? size : 1),
+					digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
+					num = value.substring(iValue).match(digits);
+				if (!num) {
+					throw "Missing number at position " + iValue;
+				}
+				iValue += num[0].length;
+				return parseInt(num[0], 10);
+			},
+			// Extract a name from the string value and convert to an index
+			getName = function(match, shortNames, longNames) {
+				var index = -1,
+					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+						return [ [k, v] ];
+					}).sort(function (a, b) {
+						return -(a[1].length - b[1].length);
+					});
+
+				$.each(names, function (i, pair) {
+					var name = pair[1];
+					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+						index = pair[0];
+						iValue += name.length;
+						return false;
+					}
+				});
+				if (index !== -1) {
+					return index + 1;
+				} else {
+					throw "Unknown name at position " + iValue;
+				}
+			},
+			// Confirm that a literal character matches the string value
+			checkLiteral = function() {
+				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+					throw "Unexpected literal at position " + iValue;
+				}
+				iValue++;
+			};
+
+		for (iFormat = 0; iFormat < format.length; iFormat++) {
+			if (literal) {
+				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+					literal = false;
+				} else {
+					checkLiteral();
+				}
+			} else {
+				switch (format.charAt(iFormat)) {
+					case "d":
+						day = getNumber("d");
+						break;
+					case "D":
+						getName("D", dayNamesShort, dayNames);
+						break;
+					case "o":
+						doy = getNumber("o");
+						break;
+					case "m":
+						month = getNumber("m");
+						break;
+					case "M":
+						month = getName("M", monthNamesShort, monthNames);
+						break;
+					case "y":
+						year = getNumber("y");
+						break;
+					case "@":
+						date = new Date(getNumber("@"));
+						year = date.getFullYear();
+						month = date.getMonth() + 1;
+						day = date.getDate();
+						break;
+					case "!":
+						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+						year = date.getFullYear();
+						month = date.getMonth() + 1;
+						day = date.getDate();
+						break;
+					case "'":
+						if (lookAhead("'")){
+							checkLiteral();
+						} else {
+							literal = true;
+						}
+						break;
+					default:
+						checkLiteral();
+				}
+			}
+		}
+
+		if (iValue < value.length){
+			extra = value.substr(iValue);
+			if (!/^\s+/.test(extra)) {
+				throw "Extra/unparsed characters found in date: " + extra;
+			}
+		}
+
+		if (year === -1) {
+			year = new Date().getFullYear();
+		} else if (year < 100) {
+			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+				(year <= shortYearCutoff ? 0 : -100);
+		}
+
+		if (doy > -1) {
+			month = 1;
+			day = doy;
+			do {
+				dim = this._getDaysInMonth(year, month - 1);
+				if (day <= dim) {
+					break;
+				}
+				month++;
+				day -= dim;
+			} while (true);
+		}
+
+		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+			throw "Invalid date"; // E.g. 31/02/00
+		}
+		return date;
+	},
+
+	/* Standard date formats. */
+	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+	COOKIE: "D, dd M yy",
+	ISO_8601: "yy-mm-dd",
+	RFC_822: "D, d M y",
+	RFC_850: "DD, dd-M-y",
+	RFC_1036: "D, d M y",
+	RFC_1123: "D, d M yy",
+	RFC_2822: "D, d M yy",
+	RSS: "D, d M y", // RFC 822
+	TICKS: "!",
+	TIMESTAMP: "@",
+	W3C: "yy-mm-dd", // ISO 8601
+
+	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+	/* Format a date object into a string value.
+	 * The format can be combinations of the following:
+	 * d  - day of month (no leading zero)
+	 * dd - day of month (two digit)
+	 * o  - day of year (no leading zeros)
+	 * oo - day of year (three digit)
+	 * D  - day name short
+	 * DD - day name long
+	 * m  - month of year (no leading zero)
+	 * mm - month of year (two digit)
+	 * M  - month name short
+	 * MM - month name long
+	 * y  - year (two digit)
+	 * yy - year (four digit)
+	 * @ - Unix timestamp (ms since 01/01/1970)
+	 * ! - Windows ticks (100ns since 01/01/0001)
+	 * "..." - literal text
+	 * '' - single quote
+	 *
+	 * @param  format string - the desired format of the date
+	 * @param  date Date - the date value to format
+	 * @param  settings Object - attributes include:
+	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+	 *					dayNames		string[7] - names of the days from Sunday (optional)
+	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+	 *					monthNames		string[12] - names of the months (optional)
+	 * @return  string - the date in the above format
+	 */
+	formatDate: function (format, date, settings) {
+		if (!date) {
+			return "";
+		}
+
+		var iFormat,
+			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+			// Check whether a format character is doubled
+			lookAhead = function(match) {
+				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+				if (matches) {
+					iFormat++;
+				}
+				return matches;
+			},
+			// Format a number, with leading zero if necessary
+			formatNumber = function(match, value, len) {
+				var num = "" + value;
+				if (lookAhead(match)) {
+					while (num.length < len) {
+						num = "0" + num;
+					}
+				}
+				return num;
+			},
+			// Format a name, short or long as requested
+			formatName = function(match, value, shortNames, longNames) {
+				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+			},
+			output = "",
+			literal = false;
+
+		if (date) {
+			for (iFormat = 0; iFormat < format.length; iFormat++) {
+				if (literal) {
+					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+						literal = false;
+					} else {
+						output += format.charAt(iFormat);
+					}
+				} else {
+					switch (format.charAt(iFormat)) {
+						case "d":
+							output += formatNumber("d", date.getDate(), 2);
+							break;
+						case "D":
+							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+							break;
+						case "o":
+							output += formatNumber("o",
+								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+							break;
+						case "m":
+							output += formatNumber("m", date.getMonth() + 1, 2);
+							break;
+						case "M":
+							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+							break;
+						case "y":
+							output += (lookAhead("y") ? date.getFullYear() :
+								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+							break;
+						case "@":
+							output += date.getTime();
+							break;
+						case "!":
+							output += date.getTime() * 10000 + this._ticksTo1970;
+							break;
+						case "'":
+							if (lookAhead("'")) {
+								output += "'";
+							} else {
+								literal = true;
+							}
+							break;
+						default:
+							output += format.charAt(iFormat);
+					}
+				}
+			}
+		}
+		return output;
+	},
+
+	/* Extract all possible characters from the date format. */
+	_possibleChars: function (format) {
+		var iFormat,
+			chars = "",
+			literal = false,
+			// Check whether a format character is doubled
+			lookAhead = function(match) {
+				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+				if (matches) {
+					iFormat++;
+				}
+				return matches;
+			};
+
+		for (iFormat = 0; iFormat < format.length; iFormat++) {
+			if (literal) {
+				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+					literal = false;
+				} else {
+					chars += format.charAt(iFormat);
+				}
+			} else {
+				switch (format.charAt(iFormat)) {
+					case "d": case "m": case "y": case "@":
+						chars += "0123456789";
+						break;
+					case "D": case "M":
+						return null; // Accept anything
+					case "'":
+						if (lookAhead("'")) {
+							chars += "'";
+						} else {
+							literal = true;
+						}
+						break;
+					default:
+						chars += format.charAt(iFormat);
+				}
+			}
+		}
+		return chars;
+	},
+
+	/* Get a setting value, defaulting if necessary. */
+	_get: function(inst, name) {
+		return inst.settings[name] !== undefined ?
+			inst.settings[name] : this._defaults[name];
+	},
+
+	/* Parse existing date and initialise date picker. */
+	_setDateFromField: function(inst, noDefault) {
+		if (inst.input.val() === inst.lastVal) {
+			return;
+		}
+
+		var dateFormat = this._get(inst, "dateFormat"),
+			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+			defaultDate = this._getDefaultDate(inst),
+			date = defaultDate,
+			settings = this._getFormatConfig(inst);
+
+		try {
+			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+		} catch (event) {
+			dates = (noDefault ? "" : dates);
+		}
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		inst.currentDay = (dates ? date.getDate() : 0);
+		inst.currentMonth = (dates ? date.getMonth() : 0);
+		inst.currentYear = (dates ? date.getFullYear() : 0);
+		this._adjustInstDate(inst);
+	},
+
+	/* Retrieve the default date shown on opening. */
+	_getDefaultDate: function(inst) {
+		return this._restrictMinMax(inst,
+			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+	},
+
+	/* A date may be specified as an exact value or a relative one. */
+	_determineDate: function(inst, date, defaultDate) {
+		var offsetNumeric = function(offset) {
+				var date = new Date();
+				date.setDate(date.getDate() + offset);
+				return date;
+			},
+			offsetString = function(offset) {
+				try {
+					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+						offset, $.datepicker._getFormatConfig(inst));
+				}
+				catch (e) {
+					// Ignore
+				}
+
+				var date = (offset.toLowerCase().match(/^c/) ?
+					$.datepicker._getDate(inst) : null) || new Date(),
+					year = date.getFullYear(),
+					month = date.getMonth(),
+					day = date.getDate(),
+					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+					matches = pattern.exec(offset);
+
+				while (matches) {
+					switch (matches[2] || "d") {
+						case "d" : case "D" :
+							day += parseInt(matches[1],10); break;
+						case "w" : case "W" :
+							day += parseInt(matches[1],10) * 7; break;
+						case "m" : case "M" :
+							month += parseInt(matches[1],10);
+							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+							break;
+						case "y": case "Y" :
+							year += parseInt(matches[1],10);
+							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+							break;
+					}
+					matches = pattern.exec(offset);
+				}
+				return new Date(year, month, day);
+			},
+			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+		if (newDate) {
+			newDate.setHours(0);
+			newDate.setMinutes(0);
+			newDate.setSeconds(0);
+			newDate.setMilliseconds(0);
+		}
+		return this._daylightSavingAdjust(newDate);
+	},
+
+	/* Handle switch to/from daylight saving.
+	 * Hours may be non-zero on daylight saving cut-over:
+	 * > 12 when midnight changeover, but then cannot generate
+	 * midnight datetime, so jump to 1AM, otherwise reset.
+	 * @param  date  (Date) the date to check
+	 * @return  (Date) the corrected date
+	 */
+	_daylightSavingAdjust: function(date) {
+		if (!date) {
+			return null;
+		}
+		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+		return date;
+	},
+
+	/* Set the date(s) directly. */
+	_setDate: function(inst, date, noChange) {
+		var clear = !date,
+			origMonth = inst.selectedMonth,
+			origYear = inst.selectedYear,
+			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+		inst.selectedDay = inst.currentDay = newDate.getDate();
+		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+			this._notifyChange(inst);
+		}
+		this._adjustInstDate(inst);
+		if (inst.input) {
+			inst.input.val(clear ? "" : this._formatDate(inst));
+		}
+	},
+
+	/* Retrieve the date(s) directly. */
+	_getDate: function(inst) {
+		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+			this._daylightSavingAdjust(new Date(
+			inst.currentYear, inst.currentMonth, inst.currentDay)));
+			return startDate;
+	},
+
+	/* Attach the onxxx handlers.  These are declared statically so
+	 * they work with static code transformers like Caja.
+	 */
+	_attachHandlers: function(inst) {
+		var stepMonths = this._get(inst, "stepMonths"),
+			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+		inst.dpDiv.find("[data-handler]").map(function () {
+			var handler = {
+				prev: function () {
+					$.datepicker._adjustDate(id, -stepMonths, "M");
+				},
+				next: function () {
+					$.datepicker._adjustDate(id, +stepMonths, "M");
+				},
+				hide: function () {
+					$.datepicker._hideDatepicker();
+				},
+				today: function () {
+					$.datepicker._gotoToday(id);
+				},
+				selectDay: function () {
+					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+					return false;
+				},
+				selectMonth: function () {
+					$.datepicker._selectMonthYear(id, this, "M");
+					return false;
+				},
+				selectYear: function () {
+					$.datepicker._selectMonthYear(id, this, "Y");
+					return false;
+				}
+			};
+			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+		});
+	},
+
+	/* Generate the HTML for the current state of the date picker. */
+	_generateHTML: function(inst) {
+		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+			tempDate = new Date(),
+			today = this._daylightSavingAdjust(
+				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+			isRTL = this._get(inst, "isRTL"),
+			showButtonPanel = this._get(inst, "showButtonPanel"),
+			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+			numMonths = this._getNumberOfMonths(inst),
+			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+			stepMonths = this._get(inst, "stepMonths"),
+			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+			minDate = this._getMinMaxDate(inst, "min"),
+			maxDate = this._getMinMaxDate(inst, "max"),
+			drawMonth = inst.drawMonth - showCurrentAtPos,
+			drawYear = inst.drawYear;
+
+		if (drawMonth < 0) {
+			drawMonth += 12;
+			drawYear--;
+		}
+		if (maxDate) {
+			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+				drawMonth--;
+				if (drawMonth < 0) {
+					drawMonth = 11;
+					drawYear--;
+				}
+			}
+		}
+		inst.drawMonth = drawMonth;
+		inst.drawYear = drawYear;
+
+		prevText = this._get(inst, "prevText");
+		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+			this._getFormatConfig(inst)));
+
+		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+		nextText = this._get(inst, "nextText");
+		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+			this._getFormatConfig(inst)));
+
+		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+		currentText = this._get(inst, "currentText");
+		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+		currentText = (!navigationAsDateFormat ? currentText :
+			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+			this._get(inst, "closeText") + "</button>" : "");
+
+		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+		firstDay = parseInt(this._get(inst, "firstDay"),10);
+		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+		showWeek = this._get(inst, "showWeek");
+		dayNames = this._get(inst, "dayNames");
+		dayNamesMin = this._get(inst, "dayNamesMin");
+		monthNames = this._get(inst, "monthNames");
+		monthNamesShort = this._get(inst, "monthNamesShort");
+		beforeShowDay = this._get(inst, "beforeShowDay");
+		showOtherMonths = this._get(inst, "showOtherMonths");
+		selectOtherMonths = this._get(inst, "selectOtherMonths");
+		defaultDate = this._getDefaultDate(inst);
+		html = "";
+		dow;
+		for (row = 0; row < numMonths[0]; row++) {
+			group = "";
+			this.maxRows = 4;
+			for (col = 0; col < numMonths[1]; col++) {
+				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+				cornerClass = " ui-corner-all";
+				calender = "";
+				if (isMultiMonth) {
+					calender += "<div class='ui-datepicker-group";
+					if (numMonths[1] > 1) {
+						switch (col) {
+							case 0: calender += " ui-datepicker-group-first";
+								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+						}
+					}
+					calender += "'>";
+				}
+				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+					"</div><table class='ui-datepicker-calendar'><thead>" +
+					"<tr>";
+				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+				for (dow = 0; dow < 7; dow++) { // days of the week
+					day = (dow + firstDay) % 7;
+					thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+				}
+				calender += thead + "</tr></thead><tbody>";
+				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+				}
+				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+				this.maxRows = numRows;
+				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+					calender += "<tr>";
+					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+						this._get(inst, "calculateWeek")(printDate) + "</td>");
+					for (dow = 0; dow < 7; dow++) { // create date picker days
+						daySettings = (beforeShowDay ?
+							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+						otherMonth = (printDate.getMonth() !== drawMonth);
+						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+						tbody += "<td class='" +
+							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+							// or defaultDate is current printedDate and defaultDate is selectedDate
+							" " + this._dayOverClass : "") + // highlight selected day
+							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+						printDate.setDate(printDate.getDate() + 1);
+						printDate = this._daylightSavingAdjust(printDate);
+					}
+					calender += tbody + "</tr>";
+				}
+				drawMonth++;
+				if (drawMonth > 11) {
+					drawMonth = 0;
+					drawYear++;
+				}
+				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+				group += calender;
+			}
+			html += group;
+		}
+		html += buttonPanel;
+		inst._keyEvent = false;
+		return html;
+	},
+
+	/* Generate the month and year header. */
+	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+			secondary, monthNames, monthNamesShort) {
+
+		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+			changeMonth = this._get(inst, "changeMonth"),
+			changeYear = this._get(inst, "changeYear"),
+			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+			html = "<div class='ui-datepicker-title'>",
+			monthHtml = "";
+
+		// month selection
+		if (secondary || !changeMonth) {
+			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+		} else {
+			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+			for ( month = 0; month < 12; month++) {
+				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+					monthHtml += "<option value='" + month + "'" +
+						(month === drawMonth ? " selected='selected'" : "") +
+						">" + monthNamesShort[month] + "</option>";
+				}
+			}
+			monthHtml += "</select>";
+		}
+
+		if (!showMonthAfterYear) {
+			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+		}
+
+		// year selection
+		if ( !inst.yearshtml ) {
+			inst.yearshtml = "";
+			if (secondary || !changeYear) {
+				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+			} else {
+				// determine range of years to display
+				years = this._get(inst, "yearRange").split(":");
+				thisYear = new Date().getFullYear();
+				determineYear = function(value) {
+					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+						parseInt(value, 10)));
+					return (isNaN(year) ? thisYear : year);
+				};
+				year = determineYear(years[0]);
+				endYear = Math.max(year, determineYear(years[1] || ""));
+				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+				for (; year <= endYear; year++) {
+					inst.yearshtml += "<option value='" + year + "'" +
+						(year === drawYear ? " selected='selected'" : "") +
+						">" + year + "</option>";
+				}
+				inst.yearshtml += "</select>";
+
+				html += inst.yearshtml;
+				inst.yearshtml = null;
+			}
+		}
+
+		html += this._get(inst, "yearSuffix");
+		if (showMonthAfterYear) {
+			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+		}
+		html += "</div>"; // Close datepicker_header
+		return html;
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustInstDate: function(inst, offset, period) {
+		var year = inst.drawYear + (period === "Y" ? offset : 0),
+			month = inst.drawMonth + (period === "M" ? offset : 0),
+			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		if (period === "M" || period === "Y") {
+			this._notifyChange(inst);
+		}
+	},
+
+	/* Ensure a date is within any min/max bounds. */
+	_restrictMinMax: function(inst, date) {
+		var minDate = this._getMinMaxDate(inst, "min"),
+			maxDate = this._getMinMaxDate(inst, "max"),
+			newDate = (minDate && date < minDate ? minDate : date);
+		return (maxDate && newDate > maxDate ? maxDate : newDate);
+	},
+
+	/* Notify change of month/year. */
+	_notifyChange: function(inst) {
+		var onChange = this._get(inst, "onChangeMonthYear");
+		if (onChange) {
+			onChange.apply((inst.input ? inst.input[0] : null),
+				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+		}
+	},
+
+	/* Determine the number of months to show. */
+	_getNumberOfMonths: function(inst) {
+		var numMonths = this._get(inst, "numberOfMonths");
+		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+	},
+
+	/* Determine the current maximum date - ensure no time components are set. */
+	_getMinMaxDate: function(inst, minMax) {
+		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+	},
+
+	/* Find the number of days in a given month. */
+	_getDaysInMonth: function(year, month) {
+		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+	},
+
+	/* Find the day of the week of the first of a month. */
+	_getFirstDayOfMonth: function(year, month) {
+		return new Date(year, month, 1).getDay();
+	},
+
+	/* Determines if we should allow a "next/prev" month display change. */
+	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+		var numMonths = this._getNumberOfMonths(inst),
+			date = this._daylightSavingAdjust(new Date(curYear,
+			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+		if (offset < 0) {
+			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+		}
+		return this._isInRange(inst, date);
+	},
+
+	/* Is the given date in the accepted range? */
+	_isInRange: function(inst, date) {
+		var yearSplit, currentYear,
+			minDate = this._getMinMaxDate(inst, "min"),
+			maxDate = this._getMinMaxDate(inst, "max"),
+			minYear = null,
+			maxYear = null,
+			years = this._get(inst, "yearRange");
+			if (years){
+				yearSplit = years.split(":");
+				currentYear = new Date().getFullYear();
+				minYear = parseInt(yearSplit[0], 10);
+				maxYear = parseInt(yearSplit[1], 10);
+				if ( yearSplit[0].match(/[+\-].*/) ) {
+					minYear += currentYear;
+				}
+				if ( yearSplit[1].match(/[+\-].*/) ) {
+					maxYear += currentYear;
+				}
+			}
+
+		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+			(!minYear || date.getFullYear() >= minYear) &&
+			(!maxYear || date.getFullYear() <= maxYear));
+	},
+
+	/* Provide the configuration settings for formatting/parsing. */
+	_getFormatConfig: function(inst) {
+		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+		return {shortYearCutoff: shortYearCutoff,
+			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+	},
+
+	/* Format the given date for display. */
+	_formatDate: function(inst, day, month, year) {
+		if (!day) {
+			inst.currentDay = inst.selectedDay;
+			inst.currentMonth = inst.selectedMonth;
+			inst.currentYear = inst.selectedYear;
+		}
+		var date = (day ? (typeof day === "object" ? day :
+			this._daylightSavingAdjust(new Date(year, month, day))) :
+			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+	}
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover(dpDiv) {
+	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+	return dpDiv.delegate(selector, "mouseout", function() {
+			$(this).removeClass("ui-state-hover");
+			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+				$(this).removeClass("ui-datepicker-prev-hover");
+			}
+			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+				$(this).removeClass("ui-datepicker-next-hover");
+			}
+		})
+		.delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+	if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+		$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+		$(this).addClass("ui-state-hover");
+		if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+			$(this).addClass("ui-datepicker-prev-hover");
+		}
+		if (this.className.indexOf("ui-datepicker-next") !== -1) {
+			$(this).addClass("ui-datepicker-next-hover");
+		}
+	}
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove(target, props) {
+	$.extend(target, props);
+	for (var name in props) {
+		if (props[name] == null) {
+			target[name] = props[name];
+		}
+	}
+	return target;
+}
+
+/* Invoke the datepicker functionality.
+   @param  options  string - a command, optionally followed by additional parameters or
+					Object - settings for attaching new datepicker functionality
+   @return  jQuery object */
+$.fn.datepicker = function(options){
+
+	/* Verify an empty collection wasn't passed - Fixes #6976 */
+	if ( !this.length ) {
+		return this;
+	}
+
+	/* Initialise the date picker. */
+	if (!$.datepicker.initialized) {
+		$(document).mousedown($.datepicker._checkExternalClick);
+		$.datepicker.initialized = true;
+	}
+
+	/* Append datepicker main container to body if not exist. */
+	if ($("#"+$.datepicker._mainDivId).length === 0) {
+		$("body").append($.datepicker.dpDiv);
+	}
+
+	var otherArgs = Array.prototype.slice.call(arguments, 1);
+	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+		return $.datepicker["_" + options + "Datepicker"].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	}
+	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+		return $.datepicker["_" + options + "Datepicker"].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	}
+	return this.each(function() {
+		typeof options === "string" ?
+			$.datepicker["_" + options + "Datepicker"].
+				apply($.datepicker, [this].concat(otherArgs)) :
+			$.datepicker._attachDatepicker(this, options);
+	});
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.11.4";
+
+var datepicker = $.datepicker;
+
+
+/*!
+ * jQuery UI Draggable 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/draggable/
  */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
-function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
-this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
-e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
-e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
-"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.14",
-animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
-f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
-paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.14
+
+
+$.widget("ui.draggable", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "drag",
+	options: {
+		addClasses: true,
+		appendTo: "parent",
+		axis: false,
+		connectToSortable: false,
+		containment: false,
+		cursor: "auto",
+		cursorAt: false,
+		grid: false,
+		handle: false,
+		helper: "original",
+		iframeFix: false,
+		opacity: false,
+		refreshPositions: false,
+		revert: false,
+		revertDuration: 500,
+		scope: "default",
+		scroll: true,
+		scrollSensitivity: 20,
+		scrollSpeed: 20,
+		snap: false,
+		snapMode: "both",
+		snapTolerance: 20,
+		stack: false,
+		zIndex: false,
+
+		// callbacks
+		drag: null,
+		start: null,
+		stop: null
+	},
+	_create: function() {
+
+		if ( this.options.helper === "original" ) {
+			this._setPositionRelative();
+		}
+		if (this.options.addClasses){
+			this.element.addClass("ui-draggable");
+		}
+		if (this.options.disabled){
+			this.element.addClass("ui-draggable-disabled");
+		}
+		this._setHandleClassName();
+
+		this._mouseInit();
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+		if ( key === "handle" ) {
+			this._removeHandleClassName();
+			this._setHandleClassName();
+		}
+	},
+
+	_destroy: function() {
+		if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+			this.destroyOnClear = true;
+			return;
+		}
+		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+		this._removeHandleClassName();
+		this._mouseDestroy();
+	},
+
+	_mouseCapture: function(event) {
+		var o = this.options;
+
+		this._blurActiveElement( event );
+
+		// among others, prevent a drag on a resizable-handle
+		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+			return false;
+		}
+
+		//Quit if we're not on a valid handle
+		this.handle = this._getHandle(event);
+		if (!this.handle) {
+			return false;
+		}
+
+		this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+		return true;
+
+	},
+
+	_blockFrames: function( selector ) {
+		this.iframeBlocks = this.document.find( selector ).map(function() {
+			var iframe = $( this );
+
+			return $( "<div>" )
+				.css( "position", "absolute" )
+				.appendTo( iframe.parent() )
+				.outerWidth( iframe.outerWidth() )
+				.outerHeight( iframe.outerHeight() )
+				.offset( iframe.offset() )[ 0 ];
+		});
+	},
+
+	_unblockFrames: function() {
+		if ( this.iframeBlocks ) {
+			this.iframeBlocks.remove();
+			delete this.iframeBlocks;
+		}
+	},
+
+	_blurActiveElement: function( event ) {
+		var document = this.document[ 0 ];
+
+		// Only need to blur if the event occurred on the draggable itself, see #10527
+		if ( !this.handleElement.is( event.target ) ) {
+			return;
+		}
+
+		// support: IE9
+		// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+		try {
+
+			// Support: IE9, IE10
+			// If the <body> is blurred, IE will switch windows, see #9520
+			if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+				// Blur any element that currently has focus, see #4261
+				$( document.activeElement ).blur();
+			}
+		} catch ( error ) {}
+	},
+
+	_mouseStart: function(event) {
+
+		var o = this.options;
+
+		//Create and append the visible helper
+		this.helper = this._createHelper(event);
+
+		this.helper.addClass("ui-draggable-dragging");
+
+		//Cache the helper size
+		this._cacheHelperProportions();
+
+		//If ddmanager is used for droppables, set the global draggable
+		if ($.ui.ddmanager) {
+			$.ui.ddmanager.current = this;
+		}
+
+		/*
+		 * - Position generation -
+		 * This block generates everything position related - it's the core of draggables.
+		 */
+
+		//Cache the margins of the original element
+		this._cacheMargins();
+
+		//Store the helper's css position
+		this.cssPosition = this.helper.css( "position" );
+		this.scrollParent = this.helper.scrollParent( true );
+		this.offsetParent = this.helper.offsetParent();
+		this.hasFixedAncestor = this.helper.parents().filter(function() {
+				return $( this ).css( "position" ) === "fixed";
+			}).length > 0;
+
+		//The element's absolute position on the page minus margins
+		this.positionAbs = this.element.offset();
+		this._refreshOffsets( event );
+
+		//Generate the original position
+		this.originalPosition = this.position = this._generatePosition( event, false );
+		this.originalPageX = event.pageX;
+		this.originalPageY = event.pageY;
+
+		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+		//Set a containment if given in the options
+		this._setContainment();
+
+		//Trigger event + callbacks
+		if (this._trigger("start", event) === false) {
+			this._clear();
+			return false;
+		}
+
+		//Recache the helper size
+		this._cacheHelperProportions();
+
+		//Prepare the droppable offsets
+		if ($.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(this, event);
+		}
+
+		// Reset helper's right/bottom css if they're set and set explicit width/height instead
+		// as this prevents resizing of elements with right/bottom set (see #7772)
+		this._normalizeRightBottom();
+
+		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+		if ( $.ui.ddmanager ) {
+			$.ui.ddmanager.dragStart(this, event);
+		}
+
+		return true;
+	},
+
+	_refreshOffsets: function( event ) {
+		this.offset = {
+			top: this.positionAbs.top - this.margins.top,
+			left: this.positionAbs.left - this.margins.left,
+			scroll: false,
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset()
+		};
+
+		this.offset.click = {
+			left: event.pageX - this.offset.left,
+			top: event.pageY - this.offset.top
+		};
+	},
+
+	_mouseDrag: function(event, noPropagation) {
+		// reset any necessary cached properties (see #5009)
+		if ( this.hasFixedAncestor ) {
+			this.offset.parent = this._getParentOffset();
+		}
+
+		//Compute the helpers position
+		this.position = this._generatePosition( event, true );
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		//Call plugins and callbacks and use the resulting position if something is returned
+		if (!noPropagation) {
+			var ui = this._uiHash();
+			if (this._trigger("drag", event, ui) === false) {
+				this._mouseUp({});
+				return false;
+			}
+			this.position = ui.position;
+		}
+
+		this.helper[ 0 ].style.left = this.position.left + "px";
+		this.helper[ 0 ].style.top = this.position.top + "px";
+
+		if ($.ui.ddmanager) {
+			$.ui.ddmanager.drag(this, event);
+		}
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		//If we are using droppables, inform the manager about the drop
+		var that = this,
+			dropped = false;
+		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+			dropped = $.ui.ddmanager.drop(this, event);
+		}
+
+		//if a drop comes from outside (a sortable)
+		if (this.dropped) {
+			dropped = this.dropped;
+			this.dropped = false;
+		}
+
+		if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+				if (that._trigger("stop", event) !== false) {
+					that._clear();
+				}
+			});
+		} else {
+			if (this._trigger("stop", event) !== false) {
+				this._clear();
+			}
+		}
+
+		return false;
+	},
+
+	_mouseUp: function( event ) {
+		this._unblockFrames();
+
+		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+		if ( $.ui.ddmanager ) {
+			$.ui.ddmanager.dragStop(this, event);
+		}
+
+		// Only need to focus if the event occurred on the draggable itself, see #10527
+		if ( this.handleElement.is( event.target ) ) {
+			// The interaction is over; whether or not the click resulted in a drag, focus the element
+			this.element.focus();
+		}
+
+		return $.ui.mouse.prototype._mouseUp.call(this, event);
+	},
+
+	cancel: function() {
+
+		if (this.helper.is(".ui-draggable-dragging")) {
+			this._mouseUp({});
+		} else {
+			this._clear();
+		}
+
+		return this;
+
+	},
+
+	_getHandle: function(event) {
+		return this.options.handle ?
+			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+			true;
+	},
+
+	_setHandleClassName: function() {
+		this.handleElement = this.options.handle ?
+			this.element.find( this.options.handle ) : this.element;
+		this.handleElement.addClass( "ui-draggable-handle" );
+	},
+
+	_removeHandleClassName: function() {
+		this.handleElement.removeClass( "ui-draggable-handle" );
+	},
+
+	_createHelper: function(event) {
+
+		var o = this.options,
+			helperIsFunction = $.isFunction( o.helper ),
+			helper = helperIsFunction ?
+				$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+				( o.helper === "clone" ?
+					this.element.clone().removeAttr( "id" ) :
+					this.element );
+
+		if (!helper.parents("body").length) {
+			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+		}
+
+		// http://bugs.jqueryui.com/ticket/9446
+		// a helper function can return the original element
+		// which wouldn't have been set to relative in _create
+		if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+			this._setPositionRelative();
+		}
+
+		if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+			helper.css("position", "absolute");
+		}
+
+		return helper;
+
+	},
+
+	_setPositionRelative: function() {
+		if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+			this.element[ 0 ].style.position = "relative";
+		}
+	},
+
+	_adjustOffsetFromHelper: function(obj) {
+		if (typeof obj === "string") {
+			obj = obj.split(" ");
+		}
+		if ($.isArray(obj)) {
+			obj = { left: +obj[0], top: +obj[1] || 0 };
+		}
+		if ("left" in obj) {
+			this.offset.click.left = obj.left + this.margins.left;
+		}
+		if ("right" in obj) {
+			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+		}
+		if ("top" in obj) {
+			this.offset.click.top = obj.top + this.margins.top;
+		}
+		if ("bottom" in obj) {
+			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+		}
+	},
+
+	_isRootNode: function( element ) {
+		return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+	},
+
+	_getParentOffset: function() {
+
+		//Get the offsetParent and cache its position
+		var po = this.offsetParent.offset(),
+			document = this.document[ 0 ];
+
+		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+		if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+			po.left += this.scrollParent.scrollLeft();
+			po.top += this.scrollParent.scrollTop();
+		}
+
+		if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+			po = { top: 0, left: 0 };
+		}
+
+		return {
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+		};
+
+	},
+
+	_getRelativeOffset: function() {
+		if ( this.cssPosition !== "relative" ) {
+			return { top: 0, left: 0 };
+		}
+
+		var p = this.element.position(),
+			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+		return {
+			top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+			left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+		};
+
+	},
+
+	_cacheMargins: function() {
+		this.margins = {
+			left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+			top: (parseInt(this.element.css("marginTop"), 10) || 0),
+			right: (parseInt(this.element.css("marginRight"), 10) || 0),
+			bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
+		};
+	},
+
+	_cacheHelperProportions: function() {
+		this.helperProportions = {
+			width: this.helper.outerWidth(),
+			height: this.helper.outerHeight()
+		};
+	},
+
+	_setContainment: function() {
+
+		var isUserScrollable, c, ce,
+			o = this.options,
+			document = this.document[ 0 ];
+
+		this.relativeContainer = null;
+
+		if ( !o.containment ) {
+			this.containment = null;
+			return;
+		}
+
+		if ( o.containment === "window" ) {
+			this.containment = [
+				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+			];
+			return;
+		}
+
+		if ( o.containment === "document") {
+			this.containment = [
+				0,
+				0,
+				$( document ).width() - this.helperProportions.width - this.margins.left,
+				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+			];
+			return;
+		}
+
+		if ( o.containment.constructor === Array ) {
+			this.containment = o.containment;
+			return;
+		}
+
+		if ( o.containment === "parent" ) {
+			o.containment = this.helper[ 0 ].parentNode;
+		}
+
+		c = $( o.containment );
+		ce = c[ 0 ];
+
+		if ( !ce ) {
+			return;
+		}
+
+		isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+		this.containment = [
+			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+			( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+				( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+				( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+				this.helperProportions.width -
+				this.margins.left -
+				this.margins.right,
+			( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+				( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+				( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+				this.helperProportions.height -
+				this.margins.top -
+				this.margins.bottom
+		];
+		this.relativeContainer = c;
+	},
+
+	_convertPositionTo: function(d, pos) {
+
+		if (!pos) {
+			pos = this.position;
+		}
+
+		var mod = d === "absolute" ? 1 : -1,
+			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+		return {
+			top: (
+				pos.top	+																// The absolute mouse position
+				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
+			),
+			left: (
+				pos.left +																// The absolute mouse position
+				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
+			)
+		};
+
+	},
+
+	_generatePosition: function( event, constrainPosition ) {
+
+		var containment, co, top, left,
+			o = this.options,
+			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+			pageX = event.pageX,
+			pageY = event.pageY;
+
+		// Cache the scroll
+		if ( !scrollIsRootNode || !this.offset.scroll ) {
+			this.offset.scroll = {
+				top: this.scrollParent.scrollTop(),
+				left: this.scrollParent.scrollLeft()
+			};
+		}
+
+		/*
+		 * - Position constraining -
+		 * Constrain the position to a mix of grid, containment.
+		 */
+
+		// If we are not dragging yet, we won't check for options
+		if ( constrainPosition ) {
+			if ( this.containment ) {
+				if ( this.relativeContainer ){
+					co = this.relativeContainer.offset();
+					containment = [
+						this.containment[ 0 ] + co.left,
+						this.containment[ 1 ] + co.top,
+						this.containment[ 2 ] + co.left,
+						this.containment[ 3 ] + co.top
+					];
+				} else {
+					containment = this.containment;
+				}
+
+				if (event.pageX - this.offset.click.left < containment[0]) {
+					pageX = containment[0] + this.offset.click.left;
+				}
+				if (event.pageY - this.offset.click.top < containment[1]) {
+					pageY = containment[1] + this.offset.click.top;
+				}
+				if (event.pageX - this.offset.click.left > containment[2]) {
+					pageX = containment[2] + this.offset.click.left;
+				}
+				if (event.pageY - this.offset.click.top > containment[3]) {
+					pageY = containment[3] + this.offset.click.top;
+				}
+			}
+
+			if (o.grid) {
+				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+			}
+
+			if ( o.axis === "y" ) {
+				pageX = this.originalPageX;
+			}
+
+			if ( o.axis === "x" ) {
+				pageY = this.originalPageY;
+			}
+		}
+
+		return {
+			top: (
+				pageY -																	// The absolute mouse position
+				this.offset.click.top	-												// Click offset (relative to the element)
+				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+				( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+			),
+			left: (
+				pageX -																	// The absolute mouse position
+				this.offset.click.left -												// Click offset (relative to the element)
+				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+				( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+			)
+		};
+
+	},
+
+	_clear: function() {
+		this.helper.removeClass("ui-draggable-dragging");
+		if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+			this.helper.remove();
+		}
+		this.helper = null;
+		this.cancelHelperRemoval = false;
+		if ( this.destroyOnClear ) {
+			this.destroy();
+		}
+	},
+
+	_normalizeRightBottom: function() {
+		if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+			this.helper.width( this.helper.width() );
+			this.helper.css( "right", "auto" );
+		}
+		if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+			this.helper.height( this.helper.height() );
+			this.helper.css( "bottom", "auto" );
+		}
+	},
+
+	// From now on bulk stuff - mainly helpers
+
+	_trigger: function( type, event, ui ) {
+		ui = ui || this._uiHash();
+		$.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+		// Absolute position and offset (see #6884 ) have to be recalculated after plugins
+		if ( /^(drag|start|stop)/.test( type ) ) {
+			this.positionAbs = this._convertPositionTo( "absolute" );
+			ui.offset = this.positionAbs;
+		}
+		return $.Widget.prototype._trigger.call( this, type, event, ui );
+	},
+
+	plugins: {},
+
+	_uiHash: function() {
+		return {
+			helper: this.helper,
+			position: this.position,
+			originalPosition: this.originalPosition,
+			offset: this.positionAbs
+		};
+	}
+
+});
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+	start: function( event, ui, draggable ) {
+		var uiSortable = $.extend( {}, ui, {
+			item: draggable.element
+		});
+
+		draggable.sortables = [];
+		$( draggable.options.connectToSortable ).each(function() {
+			var sortable = $( this ).sortable( "instance" );
+
+			if ( sortable && !sortable.options.disabled ) {
+				draggable.sortables.push( sortable );
+
+				// refreshPositions is called at drag start to refresh the containerCache
+				// which is used in drag. This ensures it's initialized and synchronized
+				// with any changes that might have happened on the page since initialization.
+				sortable.refreshPositions();
+				sortable._trigger("activate", event, uiSortable);
+			}
+		});
+	},
+	stop: function( event, ui, draggable ) {
+		var uiSortable = $.extend( {}, ui, {
+			item: draggable.element
+		});
+
+		draggable.cancelHelperRemoval = false;
+
+		$.each( draggable.sortables, function() {
+			var sortable = this;
+
+			if ( sortable.isOver ) {
+				sortable.isOver = 0;
+
+				// Allow this sortable to handle removing the helper
+				draggable.cancelHelperRemoval = true;
+				sortable.cancelHelperRemoval = false;
+
+				// Use _storedCSS To restore properties in the sortable,
+				// as this also handles revert (#9675) since the draggable
+				// may have modified them in unexpected ways (#8809)
+				sortable._storedCSS = {
+					position: sortable.placeholder.css( "position" ),
+					top: sortable.placeholder.css( "top" ),
+					left: sortable.placeholder.css( "left" )
+				};
+
+				sortable._mouseStop(event);
+
+				// Once drag has ended, the sortable should return to using
+				// its original helper, not the shared helper from draggable
+				sortable.options.helper = sortable.options._helper;
+			} else {
+				// Prevent this Sortable from removing the helper.
+				// However, don't set the draggable to remove the helper
+				// either as another connected Sortable may yet handle the removal.
+				sortable.cancelHelperRemoval = true;
+
+				sortable._trigger( "deactivate", event, uiSortable );
+			}
+		});
+	},
+	drag: function( event, ui, draggable ) {
+		$.each( draggable.sortables, function() {
+			var innermostIntersecting = false,
+				sortable = this;
+
+			// Copy over variables that sortable's _intersectsWith uses
+			sortable.positionAbs = draggable.positionAbs;
+			sortable.helperProportions = draggable.helperProportions;
+			sortable.offset.click = draggable.offset.click;
+
+			if ( sortable._intersectsWith( sortable.containerCache ) ) {
+				innermostIntersecting = true;
+
+				$.each( draggable.sortables, function() {
+					// Copy over variables that sortable's _intersectsWith uses
+					this.positionAbs = draggable.positionAbs;
+					this.helperProportions = draggable.helperProportions;
+					this.offset.click = draggable.offset.click;
+
+					if ( this !== sortable &&
+							this._intersectsWith( this.containerCache ) &&
+							$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+						innermostIntersecting = false;
+					}
+
+					return innermostIntersecting;
+				});
+			}
+
+			if ( innermostIntersecting ) {
+				// If it intersects, we use a little isOver variable and set it once,
+				// so that the move-in stuff gets fired only once.
+				if ( !sortable.isOver ) {
+					sortable.isOver = 1;
+
+					// Store draggable's parent in case we need to reappend to it later.
+					draggable._parent = ui.helper.parent();
+
+					sortable.currentItem = ui.helper
+						.appendTo( sortable.element )
+						.data( "ui-sortable-item", true );
+
+					// Store helper option to later restore it
+					sortable.options._helper = sortable.options.helper;
+
+					sortable.options.helper = function() {
+						return ui.helper[ 0 ];
+					};
+
+					// Fire the start events of the sortable with our passed browser event,
+					// and our own helper (so it doesn't create a new one)
+					event.target = sortable.currentItem[ 0 ];
+					sortable._mouseCapture( event, true );
+					sortable._mouseStart( event, true, true );
+
+					// Because the browser event is way off the new appended portlet,
+					// modify necessary variables to reflect the changes
+					sortable.offset.click.top = draggable.offset.click.top;
+					sortable.offset.click.left = draggable.offset.click.left;
+					sortable.offset.parent.left -= draggable.offset.parent.left -
+						sortable.offset.parent.left;
+					sortable.offset.parent.top -= draggable.offset.parent.top -
+						sortable.offset.parent.top;
+
+					draggable._trigger( "toSortable", event );
+
+					// Inform draggable that the helper is in a valid drop zone,
+					// used solely in the revert option to handle "valid/invalid".
+					draggable.dropped = sortable.element;
+
+					// Need to refreshPositions of all sortables in the case that
+					// adding to one sortable changes the location of the other sortables (#9675)
+					$.each( draggable.sortables, function() {
+						this.refreshPositions();
+					});
+
+					// hack so receive/update callbacks work (mostly)
+					draggable.currentItem = draggable.element;
+					sortable.fromOutside = draggable;
+				}
+
+				if ( sortable.currentItem ) {
+					sortable._mouseDrag( event );
+					// Copy the sortable's position because the draggable's can potentially reflect
+					// a relative position, while sortable is always absolute, which the dragged
+					// element has now become. (#8809)
+					ui.position = sortable.position;
+				}
+			} else {
+				// If it doesn't intersect with the sortable, and it intersected before,
+				// we fake the drag stop of the sortable, but make sure it doesn't remove
+				// the helper by using cancelHelperRemoval.
+				if ( sortable.isOver ) {
+
+					sortable.isOver = 0;
+					sortable.cancelHelperRemoval = true;
+
+					// Calling sortable's mouseStop would trigger a revert,
+					// so revert must be temporarily false until after mouseStop is called.
+					sortable.options._revert = sortable.options.revert;
+					sortable.options.revert = false;
+
+					sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+					sortable._mouseStop( event, true );
+
+					// restore sortable behaviors that were modfied
+					// when the draggable entered the sortable area (#9481)
+					sortable.options.revert = sortable.options._revert;
+					sortable.options.helper = sortable.options._helper;
+
+					if ( sortable.placeholder ) {
+						sortable.placeholder.remove();
+					}
+
+					// Restore and recalculate the draggable's offset considering the sortable
+					// may have modified them in unexpected ways. (#8809, #10669)
+					ui.helper.appendTo( draggable._parent );
+					draggable._refreshOffsets( event );
+					ui.position = draggable._generatePosition( event, true );
+
+					draggable._trigger( "fromSortable", event );
+
+					// Inform draggable that the helper is no longer in a valid drop zone
+					draggable.dropped = false;
+
+					// Need to refreshPositions of all sortables just in case removing
+					// from one sortable changes the location of other sortables (#9675)
+					$.each( draggable.sortables, function() {
+						this.refreshPositions();
+					});
+				}
+			}
+		});
+	}
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+	start: function( event, ui, instance ) {
+		var t = $( "body" ),
+			o = instance.options;
+
+		if (t.css("cursor")) {
+			o._cursor = t.css("cursor");
+		}
+		t.css("cursor", o.cursor);
+	},
+	stop: function( event, ui, instance ) {
+		var o = instance.options;
+		if (o._cursor) {
+			$("body").css("cursor", o._cursor);
+		}
+	}
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+	start: function( event, ui, instance ) {
+		var t = $( ui.helper ),
+			o = instance.options;
+		if (t.css("opacity")) {
+			o._opacity = t.css("opacity");
+		}
+		t.css("opacity", o.opacity);
+	},
+	stop: function( event, ui, instance ) {
+		var o = instance.options;
+		if (o._opacity) {
+			$(ui.helper).css("opacity", o._opacity);
+		}
+	}
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+	start: function( event, ui, i ) {
+		if ( !i.scrollParentNotHidden ) {
+			i.scrollParentNotHidden = i.helper.scrollParent( false );
+		}
+
+		if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+			i.overflowOffset = i.scrollParentNotHidden.offset();
+		}
+	},
+	drag: function( event, ui, i  ) {
+
+		var o = i.options,
+			scrolled = false,
+			scrollParent = i.scrollParentNotHidden[ 0 ],
+			document = i.document[ 0 ];
+
+		if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+			if ( !o.axis || o.axis !== "x" ) {
+				if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+					scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+				} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+					scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+				}
+			}
+
+			if ( !o.axis || o.axis !== "y" ) {
+				if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+				} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+				}
+			}
+
+		} else {
+
+			if (!o.axis || o.axis !== "x") {
+				if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+				} else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+				}
+			}
+
+			if (!o.axis || o.axis !== "y") {
+				if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+				} else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+				}
+			}
+
+		}
+
+		if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(i, event);
+		}
+
+	}
+});
+
+$.ui.plugin.add("draggable", "snap", {
+	start: function( event, ui, i ) {
+
+		var o = i.options;
+
+		i.snapElements = [];
+
+		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+			var $t = $(this),
+				$o = $t.offset();
+			if (this !== i.element[0]) {
+				i.snapElements.push({
+					item: this,
+					width: $t.outerWidth(), height: $t.outerHeight(),
+					top: $o.top, left: $o.left
+				});
+			}
+		});
+
+	},
+	drag: function( event, ui, inst ) {
+
+		var ts, bs, ls, rs, l, r, t, b, i, first,
+			o = inst.options,
+			d = o.snapTolerance,
+			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+		for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+			l = inst.snapElements[i].left - inst.margins.left;
+			r = l + inst.snapElements[i].width;
+			t = inst.snapElements[i].top - inst.margins.top;
+			b = t + inst.snapElements[i].height;
+
+			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+				if (inst.snapElements[i].snapping) {
+					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+				}
+				inst.snapElements[i].snapping = false;
+				continue;
+			}
+
+			if (o.snapMode !== "inner") {
+				ts = Math.abs(t - y2) <= d;
+				bs = Math.abs(b - y1) <= d;
+				ls = Math.abs(l - x2) <= d;
+				rs = Math.abs(r - x1) <= d;
+				if (ts) {
+					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
+				}
+				if (bs) {
+					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
+				}
+				if (ls) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
+				}
+				if (rs) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
+				}
+			}
+
+			first = (ts || bs || ls || rs);
+
+			if (o.snapMode !== "outer") {
+				ts = Math.abs(t - y1) <= d;
+				bs = Math.abs(b - y2) <= d;
+				ls = Math.abs(l - x1) <= d;
+				rs = Math.abs(r - x2) <= d;
+				if (ts) {
+					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
+				}
+				if (bs) {
+					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
+				}
+				if (ls) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
+				}
+				if (rs) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
+				}
+			}
+
+			if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+			}
+			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+		}
+
+	}
+});
+
+$.ui.plugin.add("draggable", "stack", {
+	start: function( event, ui, instance ) {
+		var min,
+			o = instance.options,
+			group = $.makeArray($(o.stack)).sort(function(a, b) {
+				return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
+			});
+
+		if (!group.length) { return; }
+
+		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+		$(group).each(function(i) {
+			$(this).css("zIndex", min + i);
+		});
+		this.css("zIndex", (min + group.length));
+	}
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+	start: function( event, ui, instance ) {
+		var t = $( ui.helper ),
+			o = instance.options;
+
+		if (t.css("zIndex")) {
+			o._zIndex = t.css("zIndex");
+		}
+		t.css("zIndex", o.zIndex);
+	},
+	stop: function( event, ui, instance ) {
+		var o = instance.options;
+
+		if (o._zIndex) {
+			$(ui.helper).css("zIndex", o._zIndex);
+		}
+	}
+});
+
+var draggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Resizable 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.position.js
+ * http://api.jqueryui.com/resizable/
  */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.14
+
+
+$.widget("ui.resizable", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "resize",
+	options: {
+		alsoResize: false,
+		animate: false,
+		animateDuration: "slow",
+		animateEasing: "swing",
+		aspectRatio: false,
+		autoHide: false,
+		containment: false,
+		ghost: false,
+		grid: false,
+		handles: "e,s,se",
+		helper: false,
+		maxHeight: null,
+		maxWidth: null,
+		minHeight: 10,
+		minWidth: 10,
+		// See #7960
+		zIndex: 90,
+
+		// callbacks
+		resize: null,
+		start: null,
+		stop: null
+	},
+
+	_num: function( value ) {
+		return parseInt( value, 10 ) || 0;
+	},
+
+	_isNumber: function( value ) {
+		return !isNaN( parseInt( value, 10 ) );
+	},
+
+	_hasScroll: function( el, a ) {
+
+		if ( $( el ).css( "overflow" ) === "hidden") {
+			return false;
+		}
+
+		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+			has = false;
+
+		if ( el[ scroll ] > 0 ) {
+			return true;
+		}
+
+		// TODO: determine which cases actually cause this to happen
+		// if the element doesn't have the scroll set, see if it's possible to
+		// set the scroll
+		el[ scroll ] = 1;
+		has = ( el[ scroll ] > 0 );
+		el[ scroll ] = 0;
+		return has;
+	},
+
+	_create: function() {
+
+		var n, i, handle, axis, hname,
+			that = this,
+			o = this.options;
+		this.element.addClass("ui-resizable");
+
+		$.extend(this, {
+			_aspectRatio: !!(o.aspectRatio),
+			aspectRatio: o.aspectRatio,
+			originalElement: this.element,
+			_proportionallyResizeElements: [],
+			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+		});
+
+		// Wrap the element if it cannot hold child nodes
+		if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
+
+			this.element.wrap(
+				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+					position: this.element.css("position"),
+					width: this.element.outerWidth(),
+					height: this.element.outerHeight(),
+					top: this.element.css("top"),
+					left: this.element.css("left")
+				})
+			);
+
+			this.element = this.element.parent().data(
+				"ui-resizable", this.element.resizable( "instance" )
+			);
+
+			this.elementIsWrapper = true;
+
+			this.element.css({
+				marginLeft: this.originalElement.css("marginLeft"),
+				marginTop: this.originalElement.css("marginTop"),
+				marginRight: this.originalElement.css("marginRight"),
+				marginBottom: this.originalElement.css("marginBottom")
+			});
+			this.originalElement.css({
+				marginLeft: 0,
+				marginTop: 0,
+				marginRight: 0,
+				marginBottom: 0
+			});
+			// support: Safari
+			// Prevent Safari textarea resize
+			this.originalResizeStyle = this.originalElement.css("resize");
+			this.originalElement.css("resize", "none");
+
+			this._proportionallyResizeElements.push( this.originalElement.css({
+				position: "static",
+				zoom: 1,
+				display: "block"
+			}) );
+
+			// support: IE9
+			// avoid IE jump (hard set the margin)
+			this.originalElement.css({ margin: this.originalElement.css("margin") });
+
+			this._proportionallyResize();
+		}
+
+		this.handles = o.handles ||
+			( !$(".ui-resizable-handle", this.element).length ?
+				"e,s,se" : {
+					n: ".ui-resizable-n",
+					e: ".ui-resizable-e",
+					s: ".ui-resizable-s",
+					w: ".ui-resizable-w",
+					se: ".ui-resizable-se",
+					sw: ".ui-resizable-sw",
+					ne: ".ui-resizable-ne",
+					nw: ".ui-resizable-nw"
+				} );
+
+		this._handles = $();
+		if ( this.handles.constructor === String ) {
+
+			if ( this.handles === "all") {
+				this.handles = "n,e,s,w,se,sw,ne,nw";
+			}
+
+			n = this.handles.split(",");
+			this.handles = {};
+
+			for (i = 0; i < n.length; i++) {
+
+				handle = $.trim(n[i]);
+				hname = "ui-resizable-" + handle;
+				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+				axis.css({ zIndex: o.zIndex });
+
+				// TODO : What's going on here?
+				if ("se" === handle) {
+					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+				}
+
+				this.handles[handle] = ".ui-resizable-" + handle;
+				this.element.append(axis);
+			}
+
+		}
+
+		this._renderAxis = function(target) {
+
+			var i, axis, padPos, padWrapper;
+
+			target = target || this.element;
+
+			for (i in this.handles) {
+
+				if (this.handles[i].constructor === String) {
+					this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
+				} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+					this.handles[ i ] = $( this.handles[ i ] );
+					this._on( this.handles[ i ], { "mousedown": that._mouseDown });
+				}
+
+				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
+
+					axis = $(this.handles[i], this.element);
+
+					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+					padPos = [ "padding",
+						/ne|nw|n/.test(i) ? "Top" :
+						/se|sw|s/.test(i) ? "Bottom" :
+						/^e$/.test(i) ? "Right" : "Left" ].join("");
+
+					target.css(padPos, padWrapper);
+
+					this._proportionallyResize();
+				}
+
+				this._handles = this._handles.add( this.handles[ i ] );
+			}
+		};
+
+		// TODO: make renderAxis a prototype function
+		this._renderAxis(this.element);
+
+		this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+		this._handles.disableSelection();
+
+		this._handles.mouseover(function() {
+			if (!that.resizing) {
+				if (this.className) {
+					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+				}
+				that.axis = axis && axis[1] ? axis[1] : "se";
+			}
+		});
+
+		if (o.autoHide) {
+			this._handles.hide();
+			$(this.element)
+				.addClass("ui-resizable-autohide")
+				.mouseenter(function() {
+					if (o.disabled) {
+						return;
+					}
+					$(this).removeClass("ui-resizable-autohide");
+					that._handles.show();
+				})
+				.mouseleave(function() {
+					if (o.disabled) {
+						return;
+					}
+					if (!that.resizing) {
+						$(this).addClass("ui-resizable-autohide");
+						that._handles.hide();
+					}
+				});
+		}
+
+		this._mouseInit();
+	},
+
+	_destroy: function() {
+
+		this._mouseDestroy();
+
+		var wrapper,
+			_destroy = function(exp) {
+				$(exp)
+					.removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+					.removeData("resizable")
+					.removeData("ui-resizable")
+					.unbind(".resizable")
+					.find(".ui-resizable-handle")
+						.remove();
+			};
+
+		// TODO: Unwrap at same DOM position
+		if (this.elementIsWrapper) {
+			_destroy(this.element);
+			wrapper = this.element;
+			this.originalElement.css({
+				position: wrapper.css("position"),
+				width: wrapper.outerWidth(),
+				height: wrapper.outerHeight(),
+				top: wrapper.css("top"),
+				left: wrapper.css("left")
+			}).insertAfter( wrapper );
+			wrapper.remove();
+		}
+
+		this.originalElement.css("resize", this.originalResizeStyle);
+		_destroy(this.originalElement);
+
+		return this;
+	},
+
+	_mouseCapture: function(event) {
+		var i, handle,
+			capture = false;
+
+		for (i in this.handles) {
+			handle = $(this.handles[i])[0];
+			if (handle === event.target || $.contains(handle, event.target)) {
+				capture = true;
+			}
+		}
+
+		return !this.options.disabled && capture;
+	},
+
+	_mouseStart: function(event) {
+
+		var curleft, curtop, cursor,
+			o = this.options,
+			el = this.element;
+
+		this.resizing = true;
+
+		this._renderProxy();
+
+		curleft = this._num(this.helper.css("left"));
+		curtop = this._num(this.helper.css("top"));
+
+		if (o.containment) {
+			curleft += $(o.containment).scrollLeft() || 0;
+			curtop += $(o.containment).scrollTop() || 0;
+		}
+
+		this.offset = this.helper.offset();
+		this.position = { left: curleft, top: curtop };
+
+		this.size = this._helper ? {
+				width: this.helper.width(),
+				height: this.helper.height()
+			} : {
+				width: el.width(),
+				height: el.height()
+			};
+
+		this.originalSize = this._helper ? {
+				width: el.outerWidth(),
+				height: el.outerHeight()
+			} : {
+				width: el.width(),
+				height: el.height()
+			};
+
+		this.sizeDiff = {
+			width: el.outerWidth() - el.width(),
+			height: el.outerHeight() - el.height()
+		};
+
+		this.originalPosition = { left: curleft, top: curtop };
+		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+		this.aspectRatio = (typeof o.aspectRatio === "number") ?
+			o.aspectRatio :
+			((this.originalSize.width / this.originalSize.height) || 1);
+
+		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+		el.addClass("ui-resizable-resizing");
+		this._propagate("start", event);
+		return true;
+	},
+
+	_mouseDrag: function(event) {
+
+		var data, props,
+			smp = this.originalMousePosition,
+			a = this.axis,
+			dx = (event.pageX - smp.left) || 0,
+			dy = (event.pageY - smp.top) || 0,
+			trigger = this._change[a];
+
+		this._updatePrevProperties();
+
+		if (!trigger) {
+			return false;
+		}
+
+		data = trigger.apply(this, [ event, dx, dy ]);
+
+		this._updateVirtualBoundaries(event.shiftKey);
+		if (this._aspectRatio || event.shiftKey) {
+			data = this._updateRatio(data, event);
+		}
+
+		data = this._respectSize(data, event);
+
+		this._updateCache(data);
+
+		this._propagate("resize", event);
+
+		props = this._applyChanges();
+
+		if ( !this._helper && this._proportionallyResizeElements.length ) {
+			this._proportionallyResize();
+		}
+
+		if ( !$.isEmptyObject( props ) ) {
+			this._updatePrevProperties();
+			this._trigger( "resize", event, this.ui() );
+			this._applyChanges();
+		}
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		this.resizing = false;
+		var pr, ista, soffseth, soffsetw, s, left, top,
+			o = this.options, that = this;
+
+		if (this._helper) {
+
+			pr = this._proportionallyResizeElements;
+			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+			soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
+			soffsetw = ista ? 0 : that.sizeDiff.width;
+
+			s = {
+				width: (that.helper.width()  - soffsetw),
+				height: (that.helper.height() - soffseth)
+			};
+			left = (parseInt(that.element.css("left"), 10) +
+				(that.position.left - that.originalPosition.left)) || null;
+			top = (parseInt(that.element.css("top"), 10) +
+				(that.position.top - that.originalPosition.top)) || null;
+
+			if (!o.animate) {
+				this.element.css($.extend(s, { top: top, left: left }));
+			}
+
+			that.helper.height(that.size.height);
+			that.helper.width(that.size.width);
+
+			if (this._helper && !o.animate) {
+				this._proportionallyResize();
+			}
+		}
+
+		$("body").css("cursor", "auto");
+
+		this.element.removeClass("ui-resizable-resizing");
+
+		this._propagate("stop", event);
+
+		if (this._helper) {
+			this.helper.remove();
+		}
+
+		return false;
+
+	},
+
+	_updatePrevProperties: function() {
+		this.prevPosition = {
+			top: this.position.top,
+			left: this.position.left
+		};
+		this.prevSize = {
+			width: this.size.width,
+			height: this.size.height
+		};
+	},
+
+	_applyChanges: function() {
+		var props = {};
+
+		if ( this.position.top !== this.prevPosition.top ) {
+			props.top = this.position.top + "px";
+		}
+		if ( this.position.left !== this.prevPosition.left ) {
+			props.left = this.position.left + "px";
+		}
+		if ( this.size.width !== this.prevSize.width ) {
+			props.width = this.size.width + "px";
+		}
+		if ( this.size.height !== this.prevSize.height ) {
+			props.height = this.size.height + "px";
+		}
+
+		this.helper.css( props );
+
+		return props;
+	},
+
+	_updateVirtualBoundaries: function(forceAspectRatio) {
+		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+			o = this.options;
+
+		b = {
+			minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+			maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+			minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+			maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
+		};
+
+		if (this._aspectRatio || forceAspectRatio) {
+			pMinWidth = b.minHeight * this.aspectRatio;
+			pMinHeight = b.minWidth / this.aspectRatio;
+			pMaxWidth = b.maxHeight * this.aspectRatio;
+			pMaxHeight = b.maxWidth / this.aspectRatio;
+
+			if (pMinWidth > b.minWidth) {
+				b.minWidth = pMinWidth;
+			}
+			if (pMinHeight > b.minHeight) {
+				b.minHeight = pMinHeight;
+			}
+			if (pMaxWidth < b.maxWidth) {
+				b.maxWidth = pMaxWidth;
+			}
+			if (pMaxHeight < b.maxHeight) {
+				b.maxHeight = pMaxHeight;
+			}
+		}
+		this._vBoundaries = b;
+	},
+
+	_updateCache: function(data) {
+		this.offset = this.helper.offset();
+		if (this._isNumber(data.left)) {
+			this.position.left = data.left;
+		}
+		if (this._isNumber(data.top)) {
+			this.position.top = data.top;
+		}
+		if (this._isNumber(data.height)) {
+			this.size.height = data.height;
+		}
+		if (this._isNumber(data.width)) {
+			this.size.width = data.width;
+		}
+	},
+
+	_updateRatio: function( data ) {
+
+		var cpos = this.position,
+			csize = this.size,
+			a = this.axis;
+
+		if (this._isNumber(data.height)) {
+			data.width = (data.height * this.aspectRatio);
+		} else if (this._isNumber(data.width)) {
+			data.height = (data.width / this.aspectRatio);
+		}
+
+		if (a === "sw") {
+			data.left = cpos.left + (csize.width - data.width);
+			data.top = null;
+		}
+		if (a === "nw") {
+			data.top = cpos.top + (csize.height - data.height);
+			data.left = cpos.left + (csize.width - data.width);
+		}
+
+		return data;
+	},
+
+	_respectSize: function( data ) {
+
+		var o = this._vBoundaries,
+			a = this.axis,
+			ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+			ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+			isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+			isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+			dw = this.originalPosition.left + this.originalSize.width,
+			dh = this.position.top + this.size.height,
+			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+		if (isminw) {
+			data.width = o.minWidth;
+		}
+		if (isminh) {
+			data.height = o.minHeight;
+		}
+		if (ismaxw) {
+			data.width = o.maxWidth;
+		}
+		if (ismaxh) {
+			data.height = o.maxHeight;
+		}
+
+		if (isminw && cw) {
+			data.left = dw - o.minWidth;
+		}
+		if (ismaxw && cw) {
+			data.left = dw - o.maxWidth;
+		}
+		if (isminh && ch) {
+			data.top = dh - o.minHeight;
+		}
+		if (ismaxh && ch) {
+			data.top = dh - o.maxHeight;
+		}
+
+		// Fixing jump error on top/left - bug #2330
+		if (!data.width && !data.height && !data.left && data.top) {
+			data.top = null;
+		} else if (!data.width && !data.height && !data.top && data.left) {
+			data.left = null;
+		}
+
+		return data;
+	},
+
+	_getPaddingPlusBorderDimensions: function( element ) {
+		var i = 0,
+			widths = [],
+			borders = [
+				element.css( "borderTopWidth" ),
+				element.css( "borderRightWidth" ),
+				element.css( "borderBottomWidth" ),
+				element.css( "borderLeftWidth" )
+			],
+			paddings = [
+				element.css( "paddingTop" ),
+				element.css( "paddingRight" ),
+				element.css( "paddingBottom" ),
+				element.css( "paddingLeft" )
+			];
+
+		for ( ; i < 4; i++ ) {
+			widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+			widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+		}
+
+		return {
+			height: widths[ 0 ] + widths[ 2 ],
+			width: widths[ 1 ] + widths[ 3 ]
+		};
+	},
+
+	_proportionallyResize: function() {
+
+		if (!this._proportionallyResizeElements.length) {
+			return;
+		}
+
+		var prel,
+			i = 0,
+			element = this.helper || this.element;
+
+		for ( ; i < this._proportionallyResizeElements.length; i++) {
+
+			prel = this._proportionallyResizeElements[i];
+
+			// TODO: Seems like a bug to cache this.outerDimensions
+			// considering that we are in a loop.
+			if (!this.outerDimensions) {
+				this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+			}
+
+			prel.css({
+				height: (element.height() - this.outerDimensions.height) || 0,
+				width: (element.width() - this.outerDimensions.width) || 0
+			});
+
+		}
+
+	},
+
+	_renderProxy: function() {
+
+		var el = this.element, o = this.options;
+		this.elementOffset = el.offset();
+
+		if (this._helper) {
+
+			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+			this.helper.addClass(this._helper).css({
+				width: this.element.outerWidth() - 1,
+				height: this.element.outerHeight() - 1,
+				position: "absolute",
+				left: this.elementOffset.left + "px",
+				top: this.elementOffset.top + "px",
+				zIndex: ++o.zIndex //TODO: Don't modify option
+			});
+
+			this.helper
+				.appendTo("body")
+				.disableSelection();
+
+		} else {
+			this.helper = this.element;
+		}
+
+	},
+
+	_change: {
+		e: function(event, dx) {
+			return { width: this.originalSize.width + dx };
+		},
+		w: function(event, dx) {
+			var cs = this.originalSize, sp = this.originalPosition;
+			return { left: sp.left + dx, width: cs.width - dx };
+		},
+		n: function(event, dx, dy) {
+			var cs = this.originalSize, sp = this.originalPosition;
+			return { top: sp.top + dy, height: cs.height - dy };
+		},
+		s: function(event, dx, dy) {
+			return { height: this.originalSize.height + dy };
+		},
+		se: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments),
+				this._change.e.apply(this, [ event, dx, dy ]));
+		},
+		sw: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments),
+				this._change.w.apply(this, [ event, dx, dy ]));
+		},
+		ne: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments),
+				this._change.e.apply(this, [ event, dx, dy ]));
+		},
+		nw: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments),
+				this._change.w.apply(this, [ event, dx, dy ]));
+		}
+	},
+
+	_propagate: function(n, event) {
+		$.ui.plugin.call(this, n, [ event, this.ui() ]);
+		(n !== "resize" && this._trigger(n, event, this.ui()));
+	},
+
+	plugins: {},
+
+	ui: function() {
+		return {
+			originalElement: this.originalElement,
+			element: this.element,
+			helper: this.helper,
+			position: this.position,
+			size: this.size,
+			originalSize: this.originalSize,
+			originalPosition: this.originalPosition
+		};
+	}
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "animate", {
+
+	stop: function( event ) {
+		var that = $(this).resizable( "instance" ),
+			o = that.options,
+			pr = that._proportionallyResizeElements,
+			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+			soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
+			soffsetw = ista ? 0 : that.sizeDiff.width,
+			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+			left = (parseInt(that.element.css("left"), 10) +
+				(that.position.left - that.originalPosition.left)) || null,
+			top = (parseInt(that.element.css("top"), 10) +
+				(that.position.top - that.originalPosition.top)) || null;
+
+		that.element.animate(
+			$.extend(style, top && left ? { top: top, left: left } : {}), {
+				duration: o.animateDuration,
+				easing: o.animateEasing,
+				step: function() {
+
+					var data = {
+						width: parseInt(that.element.css("width"), 10),
+						height: parseInt(that.element.css("height"), 10),
+						top: parseInt(that.element.css("top"), 10),
+						left: parseInt(that.element.css("left"), 10)
+					};
+
+					if (pr && pr.length) {
+						$(pr[0]).css({ width: data.width, height: data.height });
+					}
+
+					// propagating resize, and updating values for each animation step
+					that._updateCache(data);
+					that._propagate("resize", event);
+
+				}
+			}
+		);
+	}
+
+});
+
+$.ui.plugin.add( "resizable", "containment", {
+
+	start: function() {
+		var element, p, co, ch, cw, width, height,
+			that = $( this ).resizable( "instance" ),
+			o = that.options,
+			el = that.element,
+			oc = o.containment,
+			ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+		if ( !ce ) {
+			return;
+		}
+
+		that.containerElement = $( ce );
+
+		if ( /document/.test( oc ) || oc === document ) {
+			that.containerOffset = {
+				left: 0,
+				top: 0
+			};
+			that.containerPosition = {
+				left: 0,
+				top: 0
+			};
+
+			that.parentData = {
+				element: $( document ),
+				left: 0,
+				top: 0,
+				width: $( document ).width(),
+				height: $( document ).height() || document.body.parentNode.scrollHeight
+			};
+		} else {
+			element = $( ce );
+			p = [];
+			$([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) {
+				p[ i ] = that._num( element.css( "padding" + name ) );
+			});
+
+			that.containerOffset = element.offset();
+			that.containerPosition = element.position();
+			that.containerSize = {
+				height: ( element.innerHeight() - p[ 3 ] ),
+				width: ( element.innerWidth() - p[ 1 ] )
+			};
+
+			co = that.containerOffset;
+			ch = that.containerSize.height;
+			cw = that.containerSize.width;
+			width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+			height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+			that.parentData = {
+				element: ce,
+				left: co.left,
+				top: co.top,
+				width: width,
+				height: height
+			};
+		}
+	},
+
+	resize: function( event ) {
+		var woset, hoset, isParent, isOffsetRelative,
+			that = $( this ).resizable( "instance" ),
+			o = that.options,
+			co = that.containerOffset,
+			cp = that.position,
+			pRatio = that._aspectRatio || event.shiftKey,
+			cop = {
+				top: 0,
+				left: 0
+			},
+			ce = that.containerElement,
+			continueResize = true;
+
+		if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+			cop = co;
+		}
+
+		if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+			that.size.width = that.size.width +
+				( that._helper ?
+					( that.position.left - co.left ) :
+					( that.position.left - cop.left ) );
+
+			if ( pRatio ) {
+				that.size.height = that.size.width / that.aspectRatio;
+				continueResize = false;
+			}
+			that.position.left = o.helper ? co.left : 0;
+		}
+
+		if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+			that.size.height = that.size.height +
+				( that._helper ?
+					( that.position.top - co.top ) :
+					that.position.top );
+
+			if ( pRatio ) {
+				that.size.width = that.size.height * that.aspectRatio;
+				continueResize = false;
+			}
+			that.position.top = that._helper ? co.top : 0;
+		}
+
+		isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+		isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+		if ( isParent && isOffsetRelative ) {
+			that.offset.left = that.parentData.left + that.position.left;
+			that.offset.top = that.parentData.top + that.position.top;
+		} else {
+			that.offset.left = that.element.offset().left;
+			that.offset.top = that.element.offset().top;
+		}
+
+		woset = Math.abs( that.sizeDiff.width +
+			(that._helper ?
+				that.offset.left - cop.left :
+				(that.offset.left - co.left)) );
+
+		hoset = Math.abs( that.sizeDiff.height +
+			(that._helper ?
+				that.offset.top - cop.top :
+				(that.offset.top - co.top)) );
+
+		if ( woset + that.size.width >= that.parentData.width ) {
+			that.size.width = that.parentData.width - woset;
+			if ( pRatio ) {
+				that.size.height = that.size.width / that.aspectRatio;
+				continueResize = false;
+			}
+		}
+
+		if ( hoset + that.size.height >= that.parentData.height ) {
+			that.size.height = that.parentData.height - hoset;
+			if ( pRatio ) {
+				that.size.width = that.size.height * that.aspectRatio;
+				continueResize = false;
+			}
+		}
+
+		if ( !continueResize ) {
+			that.position.left = that.prevPosition.left;
+			that.position.top = that.prevPosition.top;
+			that.size.width = that.prevSize.width;
+			that.size.height = that.prevSize.height;
+		}
+	},
+
+	stop: function() {
+		var that = $( this ).resizable( "instance" ),
+			o = that.options,
+			co = that.containerOffset,
+			cop = that.containerPosition,
+			ce = that.containerElement,
+			helper = $( that.helper ),
+			ho = helper.offset(),
+			w = helper.outerWidth() - that.sizeDiff.width,
+			h = helper.outerHeight() - that.sizeDiff.height;
+
+		if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+			$( this ).css({
+				left: ho.left - cop.left - co.left,
+				width: w,
+				height: h
+			});
+		}
+
+		if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+			$( this ).css({
+				left: ho.left - cop.left - co.left,
+				width: w,
+				height: h
+			});
+		}
+	}
+});
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+	start: function() {
+		var that = $(this).resizable( "instance" ),
+			o = that.options;
+
+		$(o.alsoResize).each(function() {
+			var el = $(this);
+			el.data("ui-resizable-alsoresize", {
+				width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+				left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+			});
+		});
+	},
+
+	resize: function(event, ui) {
+		var that = $(this).resizable( "instance" ),
+			o = that.options,
+			os = that.originalSize,
+			op = that.originalPosition,
+			delta = {
+				height: (that.size.height - os.height) || 0,
+				width: (that.size.width - os.width) || 0,
+				top: (that.position.top - op.top) || 0,
+				left: (that.position.left - op.left) || 0
+			};
+
+			$(o.alsoResize).each(function() {
+				var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+					css = el.parents(ui.originalElement[0]).length ?
+							[ "width", "height" ] :
+							[ "width", "height", "top", "left" ];
+
+				$.each(css, function(i, prop) {
+					var sum = (start[prop] || 0) + (delta[prop] || 0);
+					if (sum && sum >= 0) {
+						style[prop] = sum || null;
+					}
+				});
+
+				el.css(style);
+			});
+	},
+
+	stop: function() {
+		$(this).removeData("resizable-alsoresize");
+	}
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+	start: function() {
+
+		var that = $(this).resizable( "instance" ), o = that.options, cs = that.size;
+
+		that.ghost = that.originalElement.clone();
+		that.ghost
+			.css({
+				opacity: 0.25,
+				display: "block",
+				position: "relative",
+				height: cs.height,
+				width: cs.width,
+				margin: 0,
+				left: 0,
+				top: 0
+			})
+			.addClass("ui-resizable-ghost")
+			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+		that.ghost.appendTo(that.helper);
+
+	},
+
+	resize: function() {
+		var that = $(this).resizable( "instance" );
+		if (that.ghost) {
+			that.ghost.css({
+				position: "relative",
+				height: that.size.height,
+				width: that.size.width
+			});
+		}
+	},
+
+	stop: function() {
+		var that = $(this).resizable( "instance" );
+		if (that.ghost && that.helper) {
+			that.helper.get(0).removeChild(that.ghost.get(0));
+		}
+	}
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+	resize: function() {
+		var outerDimensions,
+			that = $(this).resizable( "instance" ),
+			o = that.options,
+			cs = that.size,
+			os = that.originalSize,
+			op = that.originalPosition,
+			a = that.axis,
+			grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+			gridX = (grid[0] || 1),
+			gridY = (grid[1] || 1),
+			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+			newWidth = os.width + ox,
+			newHeight = os.height + oy,
+			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+		o.grid = grid;
+
+		if (isMinWidth) {
+			newWidth += gridX;
+		}
+		if (isMinHeight) {
+			newHeight += gridY;
+		}
+		if (isMaxWidth) {
+			newWidth -= gridX;
+		}
+		if (isMaxHeight) {
+			newHeight -= gridY;
+		}
+
+		if (/^(se|s|e)$/.test(a)) {
+			that.size.width = newWidth;
+			that.size.height = newHeight;
+		} else if (/^(ne)$/.test(a)) {
+			that.size.width = newWidth;
+			that.size.height = newHeight;
+			that.position.top = op.top - oy;
+		} else if (/^(sw)$/.test(a)) {
+			that.size.width = newWidth;
+			that.size.height = newHeight;
+			that.position.left = op.left - ox;
+		} else {
+			if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+				outerDimensions = that._getPaddingPlusBorderDimensions( this );
+			}
+
+			if ( newHeight - gridY > 0 ) {
+				that.size.height = newHeight;
+				that.position.top = op.top - oy;
+			} else {
+				newHeight = gridY - outerDimensions.height;
+				that.size.height = newHeight;
+				that.position.top = op.top + os.height - newHeight;
+			}
+			if ( newWidth - gridX > 0 ) {
+				that.size.width = newWidth;
+				that.position.left = op.left - ox;
+			} else {
+				newWidth = gridX - outerDimensions.width;
+				that.size.width = newWidth;
+				that.position.left = op.left + os.width - newWidth;
+			}
+		}
+	}
+
+});
+
+var resizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Dialog 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/dialog/
  */
-(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!==
-"boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover");
-this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g=
-false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed",true);
-var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE||
-d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
-"radio"){var a=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element},
-widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
-b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",true):
-b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only":
-"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")===
-"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
-b.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.14
+
+
+var dialog = $.widget( "ui.dialog", {
+	version: "1.11.4",
+	options: {
+		appendTo: "body",
+		autoOpen: true,
+		buttons: [],
+		closeOnEscape: true,
+		closeText: "Close",
+		dialogClass: "",
+		draggable: true,
+		hide: null,
+		height: "auto",
+		maxHeight: null,
+		maxWidth: null,
+		minHeight: 150,
+		minWidth: 150,
+		modal: false,
+		position: {
+			my: "center",
+			at: "center",
+			of: window,
+			collision: "fit",
+			// Ensure the titlebar is always visible
+			using: function( pos ) {
+				var topOffset = $( this ).css( pos ).offset().top;
+				if ( topOffset < 0 ) {
+					$( this ).css( "top", pos.top - topOffset );
+				}
+			}
+		},
+		resizable: true,
+		show: null,
+		title: null,
+		width: 300,
+
+		// callbacks
+		beforeClose: null,
+		close: null,
+		drag: null,
+		dragStart: null,
+		dragStop: null,
+		focus: null,
+		open: null,
+		resize: null,
+		resizeStart: null,
+		resizeStop: null
+	},
+
+	sizeRelatedOptions: {
+		buttons: true,
+		height: true,
+		maxHeight: true,
+		maxWidth: true,
+		minHeight: true,
+		minWidth: true,
+		width: true
+	},
+
+	resizableRelatedOptions: {
+		maxHeight: true,
+		maxWidth: true,
+		minHeight: true,
+		minWidth: true
+	},
+
+	_create: function() {
+		this.originalCss = {
+			display: this.element[ 0 ].style.display,
+			width: this.element[ 0 ].style.width,
+			minHeight: this.element[ 0 ].style.minHeight,
+			maxHeight: this.element[ 0 ].style.maxHeight,
+			height: this.element[ 0 ].style.height
+		};
+		this.originalPosition = {
+			parent: this.element.parent(),
+			index: this.element.parent().children().index( this.element )
+		};
+		this.originalTitle = this.element.attr( "title" );
+		this.options.title = this.options.title || this.originalTitle;
+
+		this._createWrapper();
+
+		this.element
+			.show()
+			.removeAttr( "title" )
+			.addClass( "ui-dialog-content ui-widget-content" )
+			.appendTo( this.uiDialog );
+
+		this._createTitlebar();
+		this._createButtonPane();
+
+		if ( this.options.draggable && $.fn.draggable ) {
+			this._makeDraggable();
+		}
+		if ( this.options.resizable && $.fn.resizable ) {
+			this._makeResizable();
+		}
+
+		this._isOpen = false;
+
+		this._trackFocus();
+	},
+
+	_init: function() {
+		if ( this.options.autoOpen ) {
+			this.open();
+		}
+	},
+
+	_appendTo: function() {
+		var element = this.options.appendTo;
+		if ( element && (element.jquery || element.nodeType) ) {
+			return $( element );
+		}
+		return this.document.find( element || "body" ).eq( 0 );
+	},
+
+	_destroy: function() {
+		var next,
+			originalPosition = this.originalPosition;
+
+		this._untrackInstance();
+		this._destroyOverlay();
+
+		this.element
+			.removeUniqueId()
+			.removeClass( "ui-dialog-content ui-widget-content" )
+			.css( this.originalCss )
+			// Without detaching first, the following becomes really slow
+			.detach();
+
+		this.uiDialog.stop( true, true ).remove();
+
+		if ( this.originalTitle ) {
+			this.element.attr( "title", this.originalTitle );
+		}
+
+		next = originalPosition.parent.children().eq( originalPosition.index );
+		// Don't try to place the dialog next to itself (#8613)
+		if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+			next.before( this.element );
+		} else {
+			originalPosition.parent.append( this.element );
+		}
+	},
+
+	widget: function() {
+		return this.uiDialog;
+	},
+
+	disable: $.noop,
+	enable: $.noop,
+
+	close: function( event ) {
+		var activeElement,
+			that = this;
+
+		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+			return;
+		}
+
+		this._isOpen = false;
+		this._focusedElement = null;
+		this._destroyOverlay();
+		this._untrackInstance();
+
+		if ( !this.opener.filter( ":focusable" ).focus().length ) {
+
+			// support: IE9
+			// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+			try {
+				activeElement = this.document[ 0 ].activeElement;
+
+				// Support: IE9, IE10
+				// If the <body> is blurred, IE will switch windows, see #4520
+				if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
+
+					// Hiding a focused element doesn't trigger blur in WebKit
+					// so in case we have nothing to focus on, explicitly blur the active element
+					// https://bugs.webkit.org/show_bug.cgi?id=47182
+					$( activeElement ).blur();
+				}
+			} catch ( error ) {}
+		}
+
+		this._hide( this.uiDialog, this.options.hide, function() {
+			that._trigger( "close", event );
+		});
+	},
+
+	isOpen: function() {
+		return this._isOpen;
+	},
+
+	moveToTop: function() {
+		this._moveToTop();
+	},
+
+	_moveToTop: function( event, silent ) {
+		var moved = false,
+			zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+				return +$( this ).css( "z-index" );
+			}).get(),
+			zIndexMax = Math.max.apply( null, zIndices );
+
+		if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+			this.uiDialog.css( "z-index", zIndexMax + 1 );
+			moved = true;
+		}
+
+		if ( moved && !silent ) {
+			this._trigger( "focus", event );
+		}
+		return moved;
+	},
+
+	open: function() {
+		var that = this;
+		if ( this._isOpen ) {
+			if ( this._moveToTop() ) {
+				this._focusTabbable();
+			}
+			return;
+		}
+
+		this._isOpen = true;
+		this.opener = $( this.document[ 0 ].activeElement );
+
+		this._size();
+		this._position();
+		this._createOverlay();
+		this._moveToTop( null, true );
+
+		// Ensure the overlay is moved to the top with the dialog, but only when
+		// opening. The overlay shouldn't move after the dialog is open so that
+		// modeless dialogs opened after the modal dialog stack properly.
+		if ( this.overlay ) {
+			this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+		}
+
+		this._show( this.uiDialog, this.options.show, function() {
+			that._focusTabbable();
+			that._trigger( "focus" );
+		});
+
+		// Track the dialog immediately upon openening in case a focus event
+		// somehow occurs outside of the dialog before an element inside the
+		// dialog is focused (#10152)
+		this._makeFocusTarget();
+
+		this._trigger( "open" );
+	},
+
+	_focusTabbable: function() {
+		// Set focus to the first match:
+		// 1. An element that was focused previously
+		// 2. First element inside the dialog matching [autofocus]
+		// 3. Tabbable element inside the content element
+		// 4. Tabbable element inside the buttonpane
+		// 5. The close button
+		// 6. The dialog itself
+		var hasFocus = this._focusedElement;
+		if ( !hasFocus ) {
+			hasFocus = this.element.find( "[autofocus]" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.element.find( ":tabbable" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.uiDialog;
+		}
+		hasFocus.eq( 0 ).focus();
+	},
+
+	_keepFocus: function( event ) {
+		function checkFocus() {
+			var activeElement = this.document[0].activeElement,
+				isActive = this.uiDialog[0] === activeElement ||
+					$.contains( this.uiDialog[0], activeElement );
+			if ( !isActive ) {
+				this._focusTabbable();
+			}
+		}
+		event.preventDefault();
+		checkFocus.call( this );
+		// support: IE
+		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+		// so we check again later
+		this._delay( checkFocus );
+	},
+
+	_createWrapper: function() {
+		this.uiDialog = $("<div>")
+			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+				this.options.dialogClass )
+			.hide()
+			.attr({
+				// Setting tabIndex makes the div focusable
+				tabIndex: -1,
+				role: "dialog"
+			})
+			.appendTo( this._appendTo() );
+
+		this._on( this.uiDialog, {
+			keydown: function( event ) {
+				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+						event.keyCode === $.ui.keyCode.ESCAPE ) {
+					event.preventDefault();
+					this.close( event );
+					return;
+				}
+
+				// prevent tabbing out of dialogs
+				if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+					return;
+				}
+				var tabbables = this.uiDialog.find( ":tabbable" ),
+					first = tabbables.filter( ":first" ),
+					last = tabbables.filter( ":last" );
+
+				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+					this._delay(function() {
+						first.focus();
+					});
+					event.preventDefault();
+				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+					this._delay(function() {
+						last.focus();
+					});
+					event.preventDefault();
+				}
+			},
+			mousedown: function( event ) {
+				if ( this._moveToTop( event ) ) {
+					this._focusTabbable();
+				}
+			}
+		});
+
+		// We assume that any existing aria-describedby attribute means
+		// that the dialog content is marked up properly
+		// otherwise we brute force the content as the description
+		if ( !this.element.find( "[aria-describedby]" ).length ) {
+			this.uiDialog.attr({
+				"aria-describedby": this.element.uniqueId().attr( "id" )
+			});
+		}
+	},
+
+	_createTitlebar: function() {
+		var uiDialogTitle;
+
+		this.uiDialogTitlebar = $( "<div>" )
+			.addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
+			.prependTo( this.uiDialog );
+		this._on( this.uiDialogTitlebar, {
+			mousedown: function( event ) {
+				// Don't prevent click on close button (#8838)
+				// Focusing a dialog that is partially scrolled out of view
+				// causes the browser to scroll it into view, preventing the click event
+				if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+					// Dialog isn't getting focus when dragging (#8063)
+					this.uiDialog.focus();
+				}
+			}
+		});
+
+		// support: IE
+		// Use type="button" to prevent enter keypresses in textboxes from closing the
+		// dialog in IE (#9312)
+		this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+			.button({
+				label: this.options.closeText,
+				icons: {
+					primary: "ui-icon-closethick"
+				},
+				text: false
+			})
+			.addClass( "ui-dialog-titlebar-close" )
+			.appendTo( this.uiDialogTitlebar );
+		this._on( this.uiDialogTitlebarClose, {
+			click: function( event ) {
+				event.preventDefault();
+				this.close( event );
+			}
+		});
+
+		uiDialogTitle = $( "<span>" )
+			.uniqueId()
+			.addClass( "ui-dialog-title" )
+			.prependTo( this.uiDialogTitlebar );
+		this._title( uiDialogTitle );
+
+		this.uiDialog.attr({
+			"aria-labelledby": uiDialogTitle.attr( "id" )
+		});
+	},
+
+	_title: function( title ) {
+		if ( !this.options.title ) {
+			title.html( "&#160;" );
+		}
+		title.text( this.options.title );
+	},
+
+	_createButtonPane: function() {
+		this.uiDialogButtonPane = $( "<div>" )
+			.addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
+
+		this.uiButtonSet = $( "<div>" )
+			.addClass( "ui-dialog-buttonset" )
+			.appendTo( this.uiDialogButtonPane );
+
+		this._createButtons();
+	},
+
+	_createButtons: function() {
+		var that = this,
+			buttons = this.options.buttons;
+
+		// if we already have a button pane, remove it
+		this.uiDialogButtonPane.remove();
+		this.uiButtonSet.empty();
+
+		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+			this.uiDialog.removeClass( "ui-dialog-buttons" );
+			return;
+		}
+
+		$.each( buttons, function( name, props ) {
+			var click, buttonOptions;
+			props = $.isFunction( props ) ?
+				{ click: props, text: name } :
+				props;
+			// Default to a non-submitting button
+			props = $.extend( { type: "button" }, props );
+			// Change the context for the click callback to be the main element
+			click = props.click;
+			props.click = function() {
+				click.apply( that.element[ 0 ], arguments );
+			};
+			buttonOptions = {
+				icons: props.icons,
+				text: props.showText
+			};
+			delete props.icons;
+			delete props.showText;
+			$( "<button></button>", props )
+				.button( buttonOptions )
+				.appendTo( that.uiButtonSet );
+		});
+		this.uiDialog.addClass( "ui-dialog-buttons" );
+		this.uiDialogButtonPane.appendTo( this.uiDialog );
+	},
+
+	_makeDraggable: function() {
+		var that = this,
+			options = this.options;
+
+		function filteredUi( ui ) {
+			return {
+				position: ui.position,
+				offset: ui.offset
+			};
+		}
+
+		this.uiDialog.draggable({
+			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+			handle: ".ui-dialog-titlebar",
+			containment: "document",
+			start: function( event, ui ) {
+				$( this ).addClass( "ui-dialog-dragging" );
+				that._blockFrames();
+				that._trigger( "dragStart", event, filteredUi( ui ) );
+			},
+			drag: function( event, ui ) {
+				that._trigger( "drag", event, filteredUi( ui ) );
+			},
+			stop: function( event, ui ) {
+				var left = ui.offset.left - that.document.scrollLeft(),
+					top = ui.offset.top - that.document.scrollTop();
+
+				options.position = {
+					my: "left top",
+					at: "left" + (left >= 0 ? "+" : "") + left + " " +
+						"top" + (top >= 0 ? "+" : "") + top,
+					of: that.window
+				};
+				$( this ).removeClass( "ui-dialog-dragging" );
+				that._unblockFrames();
+				that._trigger( "dragStop", event, filteredUi( ui ) );
+			}
+		});
+	},
+
+	_makeResizable: function() {
+		var that = this,
+			options = this.options,
+			handles = options.resizable,
+			// .ui-resizable has position: relative defined in the stylesheet
+			// but dialogs have to use absolute or fixed positioning
+			position = this.uiDialog.css("position"),
+			resizeHandles = typeof handles === "string" ?
+				handles	:
+				"n,e,s,w,se,sw,ne,nw";
+
+		function filteredUi( ui ) {
+			return {
+				originalPosition: ui.originalPosition,
+				originalSize: ui.originalSize,
+				position: ui.position,
+				size: ui.size
+			};
+		}
+
+		this.uiDialog.resizable({
+			cancel: ".ui-dialog-content",
+			containment: "document",
+			alsoResize: this.element,
+			maxWidth: options.maxWidth,
+			maxHeight: options.maxHeight,
+			minWidth: options.minWidth,
+			minHeight: this._minHeight(),
+			handles: resizeHandles,
+			start: function( event, ui ) {
+				$( this ).addClass( "ui-dialog-resizing" );
+				that._blockFrames();
+				that._trigger( "resizeStart", event, filteredUi( ui ) );
+			},
+			resize: function( event, ui ) {
+				that._trigger( "resize", event, filteredUi( ui ) );
+			},
+			stop: function( event, ui ) {
+				var offset = that.uiDialog.offset(),
+					left = offset.left - that.document.scrollLeft(),
+					top = offset.top - that.document.scrollTop();
+
+				options.height = that.uiDialog.height();
+				options.width = that.uiDialog.width();
+				options.position = {
+					my: "left top",
+					at: "left" + (left >= 0 ? "+" : "") + left + " " +
+						"top" + (top >= 0 ? "+" : "") + top,
+					of: that.window
+				};
+				$( this ).removeClass( "ui-dialog-resizing" );
+				that._unblockFrames();
+				that._trigger( "resizeStop", event, filteredUi( ui ) );
+			}
+		})
+		.css( "position", position );
+	},
+
+	_trackFocus: function() {
+		this._on( this.widget(), {
+			focusin: function( event ) {
+				this._makeFocusTarget();
+				this._focusedElement = $( event.target );
+			}
+		});
+	},
+
+	_makeFocusTarget: function() {
+		this._untrackInstance();
+		this._trackingInstances().unshift( this );
+	},
+
+	_untrackInstance: function() {
+		var instances = this._trackingInstances(),
+			exists = $.inArray( this, instances );
+		if ( exists !== -1 ) {
+			instances.splice( exists, 1 );
+		}
+	},
+
+	_trackingInstances: function() {
+		var instances = this.document.data( "ui-dialog-instances" );
+		if ( !instances ) {
+			instances = [];
+			this.document.data( "ui-dialog-instances", instances );
+		}
+		return instances;
+	},
+
+	_minHeight: function() {
+		var options = this.options;
+
+		return options.height === "auto" ?
+			options.minHeight :
+			Math.min( options.minHeight, options.height );
+	},
+
+	_position: function() {
+		// Need to show the dialog to get the actual offset in the position plugin
+		var isVisible = this.uiDialog.is( ":visible" );
+		if ( !isVisible ) {
+			this.uiDialog.show();
+		}
+		this.uiDialog.position( this.options.position );
+		if ( !isVisible ) {
+			this.uiDialog.hide();
+		}
+	},
+
+	_setOptions: function( options ) {
+		var that = this,
+			resize = false,
+			resizableOptions = {};
+
+		$.each( options, function( key, value ) {
+			that._setOption( key, value );
+
+			if ( key in that.sizeRelatedOptions ) {
+				resize = true;
+			}
+			if ( key in that.resizableRelatedOptions ) {
+				resizableOptions[ key ] = value;
+			}
+		});
+
+		if ( resize ) {
+			this._size();
+			this._position();
+		}
+		if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+			this.uiDialog.resizable( "option", resizableOptions );
+		}
+	},
+
+	_setOption: function( key, value ) {
+		var isDraggable, isResizable,
+			uiDialog = this.uiDialog;
+
+		if ( key === "dialogClass" ) {
+			uiDialog
+				.removeClass( this.options.dialogClass )
+				.addClass( value );
+		}
+
+		if ( key === "disabled" ) {
+			return;
+		}
+
+		this._super( key, value );
+
+		if ( key === "appendTo" ) {
+			this.uiDialog.appendTo( this._appendTo() );
+		}
+
+		if ( key === "buttons" ) {
+			this._createButtons();
+		}
+
+		if ( key === "closeText" ) {
+			this.uiDialogTitlebarClose.button({
+				// Ensure that we always pass a string
+				label: "" + value
+			});
+		}
+
+		if ( key === "draggable" ) {
+			isDraggable = uiDialog.is( ":data(ui-draggable)" );
+			if ( isDraggable && !value ) {
+				uiDialog.draggable( "destroy" );
+			}
+
+			if ( !isDraggable && value ) {
+				this._makeDraggable();
+			}
+		}
+
+		if ( key === "position" ) {
+			this._position();
+		}
+
+		if ( key === "resizable" ) {
+			// currently resizable, becoming non-resizable
+			isResizable = uiDialog.is( ":data(ui-resizable)" );
+			if ( isResizable && !value ) {
+				uiDialog.resizable( "destroy" );
+			}
+
+			// currently resizable, changing handles
+			if ( isResizable && typeof value === "string" ) {
+				uiDialog.resizable( "option", "handles", value );
+			}
+
+			// currently non-resizable, becoming resizable
+			if ( !isResizable && value !== false ) {
+				this._makeResizable();
+			}
+		}
+
+		if ( key === "title" ) {
+			this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+		}
+	},
+
+	_size: function() {
+		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+		// divs will both have width and height set, so we need to reset them
+		var nonContentHeight, minContentHeight, maxContentHeight,
+			options = this.options;
+
+		// Reset content sizing
+		this.element.show().css({
+			width: "auto",
+			minHeight: 0,
+			maxHeight: "none",
+			height: 0
+		});
+
+		if ( options.minWidth > options.width ) {
+			options.width = options.minWidth;
+		}
+
+		// reset wrapper sizing
+		// determine the height of all the non-content elements
+		nonContentHeight = this.uiDialog.css({
+				height: "auto",
+				width: options.width
+			})
+			.outerHeight();
+		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+		maxContentHeight = typeof options.maxHeight === "number" ?
+			Math.max( 0, options.maxHeight - nonContentHeight ) :
+			"none";
+
+		if ( options.height === "auto" ) {
+			this.element.css({
+				minHeight: minContentHeight,
+				maxHeight: maxContentHeight,
+				height: "auto"
+			});
+		} else {
+			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+		}
+
+		if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+		}
+	},
+
+	_blockFrames: function() {
+		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+			var iframe = $( this );
+
+			return $( "<div>" )
+				.css({
+					position: "absolute",
+					width: iframe.outerWidth(),
+					height: iframe.outerHeight()
+				})
+				.appendTo( iframe.parent() )
+				.offset( iframe.offset() )[0];
+		});
+	},
+
+	_unblockFrames: function() {
+		if ( this.iframeBlocks ) {
+			this.iframeBlocks.remove();
+			delete this.iframeBlocks;
+		}
+	},
+
+	_allowInteraction: function( event ) {
+		if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+			return true;
+		}
+
+		// TODO: Remove hack when datepicker implements
+		// the .ui-front logic (#8989)
+		return !!$( event.target ).closest( ".ui-datepicker" ).length;
+	},
+
+	_createOverlay: function() {
+		if ( !this.options.modal ) {
+			return;
+		}
+
+		// We use a delay in case the overlay is created from an
+		// event that we're going to be cancelling (#2804)
+		var isOpening = true;
+		this._delay(function() {
+			isOpening = false;
+		});
+
+		if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+			// Prevent use of anchors and inputs
+			// Using _on() for an event handler shared across many instances is
+			// safe because the dialogs stack and must be closed in reverse order
+			this._on( this.document, {
+				focusin: function( event ) {
+					if ( isOpening ) {
+						return;
+					}
+
+					if ( !this._allowInteraction( event ) ) {
+						event.preventDefault();
+						this._trackingInstances()[ 0 ]._focusTabbable();
+					}
+				}
+			});
+		}
+
+		this.overlay = $( "<div>" )
+			.addClass( "ui-widget-overlay ui-front" )
+			.appendTo( this._appendTo() );
+		this._on( this.overlay, {
+			mousedown: "_keepFocus"
+		});
+		this.document.data( "ui-dialog-overlays",
+			(this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
+	},
+
+	_destroyOverlay: function() {
+		if ( !this.options.modal ) {
+			return;
+		}
+
+		if ( this.overlay ) {
+			var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+			if ( !overlays ) {
+				this.document
+					.unbind( "focusin" )
+					.removeData( "ui-dialog-overlays" );
+			} else {
+				this.document.data( "ui-dialog-overlays", overlays );
+			}
+
+			this.overlay.remove();
+			this.overlay = null;
+		}
+	}
+});
+
+
+/*!
+ * jQuery UI Droppable 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *  jquery.ui.button.js
- *	jquery.ui.draggable.js
- *	jquery.ui.mouse.js
- *	jquery.ui.position.js
- *	jquery.ui.resizable.js
+ * http://api.jqueryui.com/droppable/
  */
-(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
-position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
-b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
-h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
-e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
-a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
-b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
-1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
-f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
-function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
-handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
-originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
-f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
-[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
-if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
-e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
-this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=
-a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.14
+
+
+$.widget( "ui.droppable", {
+	version: "1.11.4",
+	widgetEventPrefix: "drop",
+	options: {
+		accept: "*",
+		activeClass: false,
+		addClasses: true,
+		greedy: false,
+		hoverClass: false,
+		scope: "default",
+		tolerance: "intersect",
+
+		// callbacks
+		activate: null,
+		deactivate: null,
+		drop: null,
+		out: null,
+		over: null
+	},
+	_create: function() {
+
+		var proportions,
+			o = this.options,
+			accept = o.accept;
+
+		this.isover = false;
+		this.isout = true;
+
+		this.accept = $.isFunction( accept ) ? accept : function( d ) {
+			return d.is( accept );
+		};
+
+		this.proportions = function( /* valueToWrite */ ) {
+			if ( arguments.length ) {
+				// Store the droppable's proportions
+				proportions = arguments[ 0 ];
+			} else {
+				// Retrieve or derive the droppable's proportions
+				return proportions ?
+					proportions :
+					proportions = {
+						width: this.element[ 0 ].offsetWidth,
+						height: this.element[ 0 ].offsetHeight
+					};
+			}
+		};
+
+		this._addToManager( o.scope );
+
+		o.addClasses && this.element.addClass( "ui-droppable" );
+
+	},
+
+	_addToManager: function( scope ) {
+		// Add the reference and positions to the manager
+		$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+		$.ui.ddmanager.droppables[ scope ].push( this );
+	},
+
+	_splice: function( drop ) {
+		var i = 0;
+		for ( ; i < drop.length; i++ ) {
+			if ( drop[ i ] === this ) {
+				drop.splice( i, 1 );
+			}
+		}
+	},
+
+	_destroy: function() {
+		var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+		this._splice( drop );
+
+		this.element.removeClass( "ui-droppable ui-droppable-disabled" );
+	},
+
+	_setOption: function( key, value ) {
+
+		if ( key === "accept" ) {
+			this.accept = $.isFunction( value ) ? value : function( d ) {
+				return d.is( value );
+			};
+		} else if ( key === "scope" ) {
+			var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+			this._splice( drop );
+			this._addToManager( value );
+		}
+
+		this._super( key, value );
+	},
+
+	_activate: function( event ) {
+		var draggable = $.ui.ddmanager.current;
+		if ( this.options.activeClass ) {
+			this.element.addClass( this.options.activeClass );
+		}
+		if ( draggable ){
+			this._trigger( "activate", event, this.ui( draggable ) );
+		}
+	},
+
+	_deactivate: function( event ) {
+		var draggable = $.ui.ddmanager.current;
+		if ( this.options.activeClass ) {
+			this.element.removeClass( this.options.activeClass );
+		}
+		if ( draggable ){
+			this._trigger( "deactivate", event, this.ui( draggable ) );
+		}
+	},
+
+	_over: function( event ) {
+
+		var draggable = $.ui.ddmanager.current;
+
+		// Bail if draggable and droppable are same element
+		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+			return;
+		}
+
+		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+			if ( this.options.hoverClass ) {
+				this.element.addClass( this.options.hoverClass );
+			}
+			this._trigger( "over", event, this.ui( draggable ) );
+		}
+
+	},
+
+	_out: function( event ) {
+
+		var draggable = $.ui.ddmanager.current;
+
+		// Bail if draggable and droppable are same element
+		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+			return;
+		}
+
+		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+			if ( this.options.hoverClass ) {
+				this.element.removeClass( this.options.hoverClass );
+			}
+			this._trigger( "out", event, this.ui( draggable ) );
+		}
+
+	},
+
+	_drop: function( event, custom ) {
+
+		var draggable = custom || $.ui.ddmanager.current,
+			childrenIntersection = false;
+
+		// Bail if draggable and droppable are same element
+		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+			return false;
+		}
+
+		this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
+			var inst = $( this ).droppable( "instance" );
+			if (
+				inst.options.greedy &&
+				!inst.options.disabled &&
+				inst.options.scope === draggable.options.scope &&
+				inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
+				$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
+			) { childrenIntersection = true; return false; }
+		});
+		if ( childrenIntersection ) {
+			return false;
+		}
+
+		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+			if ( this.options.activeClass ) {
+				this.element.removeClass( this.options.activeClass );
+			}
+			if ( this.options.hoverClass ) {
+				this.element.removeClass( this.options.hoverClass );
+			}
+			this._trigger( "drop", event, this.ui( draggable ) );
+			return this.element;
+		}
+
+		return false;
+
+	},
+
+	ui: function( c ) {
+		return {
+			draggable: ( c.currentItem || c.element ),
+			helper: c.helper,
+			position: c.position,
+			offset: c.positionAbs
+		};
+	}
+
+});
+
+$.ui.intersect = (function() {
+	function isOverAxis( x, reference, size ) {
+		return ( x >= reference ) && ( x < ( reference + size ) );
+	}
+
+	return function( draggable, droppable, toleranceMode, event ) {
+
+		if ( !droppable.offset ) {
+			return false;
+		}
+
+		var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+			y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+			x2 = x1 + draggable.helperProportions.width,
+			y2 = y1 + draggable.helperProportions.height,
+			l = droppable.offset.left,
+			t = droppable.offset.top,
+			r = l + droppable.proportions().width,
+			b = t + droppable.proportions().height;
+
+		switch ( toleranceMode ) {
+		case "fit":
+			return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+		case "intersect":
+			return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+				x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+				t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+				y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+		case "pointer":
+			return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
+		case "touch":
+			return (
+				( y1 >= t && y1 <= b ) || // Top edge touching
+				( y2 >= t && y2 <= b ) || // Bottom edge touching
+				( y1 < t && y2 > b ) // Surrounded vertically
+			) && (
+				( x1 >= l && x1 <= r ) || // Left edge touching
+				( x2 >= l && x2 <= r ) || // Right edge touching
+				( x1 < l && x2 > r ) // Surrounded horizontally
+			);
+		default:
+			return false;
+		}
+	};
+})();
+
+/*
+	This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+	current: null,
+	droppables: { "default": [] },
+	prepareOffsets: function( t, event ) {
+
+		var i, j,
+			m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+			type = event ? event.type : null, // workaround for #2317
+			list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+		droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+			// No disabled and non-accepted
+			if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {
+				continue;
+			}
+
+			// Filter out elements in the current dragged item
+			for ( j = 0; j < list.length; j++ ) {
+				if ( list[ j ] === m[ i ].element[ 0 ] ) {
+					m[ i ].proportions().height = 0;
+					continue droppablesLoop;
+				}
+			}
+
+			m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+			if ( !m[ i ].visible ) {
+				continue;
+			}
+
+			// Activate the droppable if used directly from draggables
+			if ( type === "mousedown" ) {
+				m[ i ]._activate.call( m[ i ], event );
+			}
+
+			m[ i ].offset = m[ i ].element.offset();
+			m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+		}
+
+	},
+	drop: function( draggable, event ) {
+
+		var dropped = false;
+		// Create a copy of the droppables in case the list changes during the drop (#9116)
+		$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+			if ( !this.options ) {
+				return;
+			}
+			if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
+				dropped = this._drop.call( this, event ) || dropped;
+			}
+
+			if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+				this.isout = true;
+				this.isover = false;
+				this._deactivate.call( this, event );
+			}
+
+		});
+		return dropped;
+
+	},
+	dragStart: function( draggable, event ) {
+		// Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+			if ( !draggable.options.refreshPositions ) {
+				$.ui.ddmanager.prepareOffsets( draggable, event );
+			}
+		});
+	},
+	drag: function( draggable, event ) {
+
+		// If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+		if ( draggable.options.refreshPositions ) {
+			$.ui.ddmanager.prepareOffsets( draggable, event );
+		}
+
+		// Run through all droppables and check their positions based on specific tolerance options
+		$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+			if ( this.options.disabled || this.greedyChild || !this.visible ) {
+				return;
+			}
+
+			var parentInstance, scope, parent,
+				intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
+				c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+			if ( !c ) {
+				return;
+			}
+
+			if ( this.options.greedy ) {
+				// find droppable parents with same scope
+				scope = this.options.scope;
+				parent = this.element.parents( ":data(ui-droppable)" ).filter(function() {
+					return $( this ).droppable( "instance" ).options.scope === scope;
+				});
+
+				if ( parent.length ) {
+					parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+					parentInstance.greedyChild = ( c === "isover" );
+				}
+			}
+
+			// we just moved into a greedy child
+			if ( parentInstance && c === "isover" ) {
+				parentInstance.isover = false;
+				parentInstance.isout = true;
+				parentInstance._out.call( parentInstance, event );
+			}
+
+			this[ c ] = true;
+			this[c === "isout" ? "isover" : "isout"] = false;
+			this[c === "isover" ? "_over" : "_out"].call( this, event );
+
+			// we just moved out of a greedy child
+			if ( parentInstance && c === "isout" ) {
+				parentInstance.isout = false;
+				parentInstance.isover = true;
+				parentInstance._over.call( parentInstance, event );
+			}
+		});
+
+	},
+	dragStop: function( draggable, event ) {
+		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+		// Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+		if ( !draggable.options.refreshPositions ) {
+			$.ui.ddmanager.prepareOffsets( draggable, event );
+		}
+	}
+};
+
+var droppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Effects 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
+ * http://api.jqueryui.com/category/effects-core/
  */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
-(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
-m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
-this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
-this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
-c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
-b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
-this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
-this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
-return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
-_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
-if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
-1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.14
+
+
+var dataSpace = "ui-effects-",
+
+	// Create a local jQuery because jQuery Color relies on it and the
+	// global may not exist with AMD and a custom build (#10199)
+	jQuery = $;
+
+$.effects = {
+	effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
+ * Date: Wed Jan 16 08:47:09 2013 -0600
  */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.14"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.14
+(function( jQuery, undefined ) {
+
+	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+	// plusequals test for += 100 -= 100
+	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+	// a set of RE's that can match strings and generate color tuples.
+	stringParsers = [ {
+			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+			parse: function( execResult ) {
+				return [
+					execResult[ 1 ],
+					execResult[ 2 ],
+					execResult[ 3 ],
+					execResult[ 4 ]
+				];
+			}
+		}, {
+			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+			parse: function( execResult ) {
+				return [
+					execResult[ 1 ] * 2.55,
+					execResult[ 2 ] * 2.55,
+					execResult[ 3 ] * 2.55,
+					execResult[ 4 ]
+				];
+			}
+		}, {
+			// this regex ignores A-F because it's compared against an already lowercased string
+			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+			parse: function( execResult ) {
+				return [
+					parseInt( execResult[ 1 ], 16 ),
+					parseInt( execResult[ 2 ], 16 ),
+					parseInt( execResult[ 3 ], 16 )
+				];
+			}
+		}, {
+			// this regex ignores A-F because it's compared against an already lowercased string
+			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+			parse: function( execResult ) {
+				return [
+					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+				];
+			}
+		}, {
+			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+			space: "hsla",
+			parse: function( execResult ) {
+				return [
+					execResult[ 1 ],
+					execResult[ 2 ] / 100,
+					execResult[ 3 ] / 100,
+					execResult[ 4 ]
+				];
+			}
+		} ],
+
+	// jQuery.Color( )
+	color = jQuery.Color = function( color, green, blue, alpha ) {
+		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+	},
+	spaces = {
+		rgba: {
+			props: {
+				red: {
+					idx: 0,
+					type: "byte"
+				},
+				green: {
+					idx: 1,
+					type: "byte"
+				},
+				blue: {
+					idx: 2,
+					type: "byte"
+				}
+			}
+		},
+
+		hsla: {
+			props: {
+				hue: {
+					idx: 0,
+					type: "degrees"
+				},
+				saturation: {
+					idx: 1,
+					type: "percent"
+				},
+				lightness: {
+					idx: 2,
+					type: "percent"
+				}
+			}
+		}
+	},
+	propTypes = {
+		"byte": {
+			floor: true,
+			max: 255
+		},
+		"percent": {
+			max: 1
+		},
+		"degrees": {
+			mod: 360,
+			floor: true
+		}
+	},
+	support = color.support = {},
+
+	// element for support tests
+	supportElem = jQuery( "<p>" )[ 0 ],
+
+	// colors = jQuery.Color.names
+	colors,
+
+	// local aliases of functions called often
+	each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+	space.cache = "_" + spaceName;
+	space.props.alpha = {
+		idx: 3,
+		type: "percent",
+		def: 1
+	};
+});
+
+function clamp( value, prop, allowEmpty ) {
+	var type = propTypes[ prop.type ] || {};
+
+	if ( value == null ) {
+		return (allowEmpty || !prop.def) ? null : prop.def;
+	}
+
+	// ~~ is an short way of doing floor for positive numbers
+	value = type.floor ? ~~value : parseFloat( value );
+
+	// IE will pass in empty strings as value for alpha,
+	// which will hit this case
+	if ( isNaN( value ) ) {
+		return prop.def;
+	}
+
+	if ( type.mod ) {
+		// we add mod before modding to make sure that negatives values
+		// get converted properly: -10 -> 350
+		return (value + type.mod) % type.mod;
+	}
+
+	// for now all property types without mod have min and max
+	return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+	var inst = color(),
+		rgba = inst._rgba = [];
+
+	string = string.toLowerCase();
+
+	each( stringParsers, function( i, parser ) {
+		var parsed,
+			match = parser.re.exec( string ),
+			values = match && parser.parse( match ),
+			spaceName = parser.space || "rgba";
+
+		if ( values ) {
+			parsed = inst[ spaceName ]( values );
+
+			// if this was an rgba parse the assignment might happen twice
+			// oh well....
+			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+			rgba = inst._rgba = parsed._rgba;
+
+			// exit each( stringParsers ) here because we matched
+			return false;
+		}
+	});
+
+	// Found a stringParser that handled it
+	if ( rgba.length ) {
+
+		// if this came from a parsed string, force "transparent" when alpha is 0
+		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+		if ( rgba.join() === "0,0,0,0" ) {
+			jQuery.extend( rgba, colors.transparent );
+		}
+		return inst;
+	}
+
+	// named colors
+	return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+	parse: function( red, green, blue, alpha ) {
+		if ( red === undefined ) {
+			this._rgba = [ null, null, null, null ];
+			return this;
+		}
+		if ( red.jquery || red.nodeType ) {
+			red = jQuery( red ).css( green );
+			green = undefined;
+		}
+
+		var inst = this,
+			type = jQuery.type( red ),
+			rgba = this._rgba = [];
+
+		// more than 1 argument specified - assume ( red, green, blue, alpha )
+		if ( green !== undefined ) {
+			red = [ red, green, blue, alpha ];
+			type = "array";
+		}
+
+		if ( type === "string" ) {
+			return this.parse( stringParse( red ) || colors._default );
+		}
+
+		if ( type === "array" ) {
+			each( spaces.rgba.props, function( key, prop ) {
+				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+			});
+			return this;
+		}
+
+		if ( type === "object" ) {
+			if ( red instanceof color ) {
+				each( spaces, function( spaceName, space ) {
+					if ( red[ space.cache ] ) {
+						inst[ space.cache ] = red[ space.cache ].slice();
+					}
+				});
+			} else {
+				each( spaces, function( spaceName, space ) {
+					var cache = space.cache;
+					each( space.props, function( key, prop ) {
+
+						// if the cache doesn't exist, and we know how to convert
+						if ( !inst[ cache ] && space.to ) {
+
+							// if the value was null, we don't need to copy it
+							// if the key was alpha, we don't need to copy it either
+							if ( key === "alpha" || red[ key ] == null ) {
+								return;
+							}
+							inst[ cache ] = space.to( inst._rgba );
+						}
+
+						// this is the only case where we allow nulls for ALL properties.
+						// call clamp with alwaysAllowEmpty
+						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+					});
+
+					// everything defined but alpha?
+					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+						// use the default of 1
+						inst[ cache ][ 3 ] = 1;
+						if ( space.from ) {
+							inst._rgba = space.from( inst[ cache ] );
+						}
+					}
+				});
+			}
+			return this;
+		}
+	},
+	is: function( compare ) {
+		var is = color( compare ),
+			same = true,
+			inst = this;
+
+		each( spaces, function( _, space ) {
+			var localCache,
+				isCache = is[ space.cache ];
+			if (isCache) {
+				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+				each( space.props, function( _, prop ) {
+					if ( isCache[ prop.idx ] != null ) {
+						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+						return same;
+					}
+				});
+			}
+			return same;
+		});
+		return same;
+	},
+	_space: function() {
+		var used = [],
+			inst = this;
+		each( spaces, function( spaceName, space ) {
+			if ( inst[ space.cache ] ) {
+				used.push( spaceName );
+			}
+		});
+		return used.pop();
+	},
+	transition: function( other, distance ) {
+		var end = color( other ),
+			spaceName = end._space(),
+			space = spaces[ spaceName ],
+			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+			result = start.slice();
+
+		end = end[ space.cache ];
+		each( space.props, function( key, prop ) {
+			var index = prop.idx,
+				startValue = start[ index ],
+				endValue = end[ index ],
+				type = propTypes[ prop.type ] || {};
+
+			// if null, don't override start value
+			if ( endValue === null ) {
+				return;
+			}
+			// if null - use end
+			if ( startValue === null ) {
+				result[ index ] = endValue;
+			} else {
+				if ( type.mod ) {
+					if ( endValue - startValue > type.mod / 2 ) {
+						startValue += type.mod;
+					} else if ( startValue - endValue > type.mod / 2 ) {
+						startValue -= type.mod;
+					}
+				}
+				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+			}
+		});
+		return this[ spaceName ]( result );
+	},
+	blend: function( opaque ) {
+		// if we are already opaque - return ourself
+		if ( this._rgba[ 3 ] === 1 ) {
+			return this;
+		}
+
+		var rgb = this._rgba.slice(),
+			a = rgb.pop(),
+			blend = color( opaque )._rgba;
+
+		return color( jQuery.map( rgb, function( v, i ) {
+			return ( 1 - a ) * blend[ i ] + a * v;
+		}));
+	},
+	toRgbaString: function() {
+		var prefix = "rgba(",
+			rgba = jQuery.map( this._rgba, function( v, i ) {
+				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+			});
+
+		if ( rgba[ 3 ] === 1 ) {
+			rgba.pop();
+			prefix = "rgb(";
+		}
+
+		return prefix + rgba.join() + ")";
+	},
+	toHslaString: function() {
+		var prefix = "hsla(",
+			hsla = jQuery.map( this.hsla(), function( v, i ) {
+				if ( v == null ) {
+					v = i > 2 ? 1 : 0;
+				}
+
+				// catch 1 and 2
+				if ( i && i < 3 ) {
+					v = Math.round( v * 100 ) + "%";
+				}
+				return v;
+			});
+
+		if ( hsla[ 3 ] === 1 ) {
+			hsla.pop();
+			prefix = "hsl(";
+		}
+		return prefix + hsla.join() + ")";
+	},
+	toHexString: function( includeAlpha ) {
+		var rgba = this._rgba.slice(),
+			alpha = rgba.pop();
+
+		if ( includeAlpha ) {
+			rgba.push( ~~( alpha * 255 ) );
+		}
+
+		return "#" + jQuery.map( rgba, function( v ) {
+
+			// default to 0 when nulls exist
+			v = ( v || 0 ).toString( 16 );
+			return v.length === 1 ? "0" + v : v;
+		}).join("");
+	},
+	toString: function() {
+		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+	}
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+	h = ( h + 1 ) % 1;
+	if ( h * 6 < 1 ) {
+		return p + ( q - p ) * h * 6;
+	}
+	if ( h * 2 < 1) {
+		return q;
+	}
+	if ( h * 3 < 2 ) {
+		return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+	}
+	return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+		return [ null, null, null, rgba[ 3 ] ];
+	}
+	var r = rgba[ 0 ] / 255,
+		g = rgba[ 1 ] / 255,
+		b = rgba[ 2 ] / 255,
+		a = rgba[ 3 ],
+		max = Math.max( r, g, b ),
+		min = Math.min( r, g, b ),
+		diff = max - min,
+		add = max + min,
+		l = add * 0.5,
+		h, s;
+
+	if ( min === max ) {
+		h = 0;
+	} else if ( r === max ) {
+		h = ( 60 * ( g - b ) / diff ) + 360;
+	} else if ( g === max ) {
+		h = ( 60 * ( b - r ) / diff ) + 120;
+	} else {
+		h = ( 60 * ( r - g ) / diff ) + 240;
+	}
+
+	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+	if ( diff === 0 ) {
+		s = 0;
+	} else if ( l <= 0.5 ) {
+		s = diff / add;
+	} else {
+		s = diff / ( 2 - add );
+	}
+	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+		return [ null, null, null, hsla[ 3 ] ];
+	}
+	var h = hsla[ 0 ] / 360,
+		s = hsla[ 1 ],
+		l = hsla[ 2 ],
+		a = hsla[ 3 ],
+		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+		p = 2 * l - q;
+
+	return [
+		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+		Math.round( hue2rgb( p, q, h ) * 255 ),
+		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+		a
+	];
+};
+
+each( spaces, function( spaceName, space ) {
+	var props = space.props,
+		cache = space.cache,
+		to = space.to,
+		from = space.from;
+
+	// makes rgba() and hsla()
+	color.fn[ spaceName ] = function( value ) {
+
+		// generate a cache for this space if it doesn't exist
+		if ( to && !this[ cache ] ) {
+			this[ cache ] = to( this._rgba );
+		}
+		if ( value === undefined ) {
+			return this[ cache ].slice();
+		}
+
+		var ret,
+			type = jQuery.type( value ),
+			arr = ( type === "array" || type === "object" ) ? value : arguments,
+			local = this[ cache ].slice();
+
+		each( props, function( key, prop ) {
+			var val = arr[ type === "object" ? key : prop.idx ];
+			if ( val == null ) {
+				val = local[ prop.idx ];
+			}
+			local[ prop.idx ] = clamp( val, prop );
+		});
+
+		if ( from ) {
+			ret = color( from( local ) );
+			ret[ cache ] = local;
+			return ret;
+		} else {
+			return color( local );
+		}
+	};
+
+	// makes red() green() blue() alpha() hue() saturation() lightness()
+	each( props, function( key, prop ) {
+		// alpha is included in more than one space
+		if ( color.fn[ key ] ) {
+			return;
+		}
+		color.fn[ key ] = function( value ) {
+			var vtype = jQuery.type( value ),
+				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+				local = this[ fn ](),
+				cur = local[ prop.idx ],
+				match;
+
+			if ( vtype === "undefined" ) {
+				return cur;
+			}
+
+			if ( vtype === "function" ) {
+				value = value.call( this, cur );
+				vtype = jQuery.type( value );
+			}
+			if ( value == null && prop.empty ) {
+				return this;
+			}
+			if ( vtype === "string" ) {
+				match = rplusequals.exec( value );
+				if ( match ) {
+					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+				}
+			}
+			local[ prop.idx ] = value;
+			return this[ fn ]( local );
+		};
+	});
+});
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+	var hooks = hook.split( " " );
+	each( hooks, function( i, hook ) {
+		jQuery.cssHooks[ hook ] = {
+			set: function( elem, value ) {
+				var parsed, curElem,
+					backgroundColor = "";
+
+				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+					value = color( parsed || value );
+					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+						while (
+							(backgroundColor === "" || backgroundColor === "transparent") &&
+							curElem && curElem.style
+						) {
+							try {
+								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+								curElem = curElem.parentNode;
+							} catch ( e ) {
+							}
+						}
+
+						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+							backgroundColor :
+							"_default" );
+					}
+
+					value = value.toRgbaString();
+				}
+				try {
+					elem.style[ hook ] = value;
+				} catch ( e ) {
+					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+				}
+			}
+		};
+		jQuery.fx.step[ hook ] = function( fx ) {
+			if ( !fx.colorInit ) {
+				fx.start = color( fx.elem, hook );
+				fx.end = color( fx.end );
+				fx.colorInit = true;
+			}
+			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+		};
+	});
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+	expand: function( value ) {
+		var expanded = {};
+
+		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+			expanded[ "border" + part + "Color" ] = value;
+		});
+		return expanded;
+	}
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+	// 4.1. Basic color keywords
+	aqua: "#00ffff",
+	black: "#000000",
+	blue: "#0000ff",
+	fuchsia: "#ff00ff",
+	gray: "#808080",
+	green: "#008000",
+	lime: "#00ff00",
+	maroon: "#800000",
+	navy: "#000080",
+	olive: "#808000",
+	purple: "#800080",
+	red: "#ff0000",
+	silver: "#c0c0c0",
+	teal: "#008080",
+	white: "#ffffff",
+	yellow: "#ffff00",
+
+	// 4.2.3. "transparent" color keyword
+	transparent: [ null, null, null, 0 ],
+
+	_default: "#ffffff"
+};
+
+})( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+	shorthandStyles = {
+		border: 1,
+		borderBottom: 1,
+		borderColor: 1,
+		borderLeft: 1,
+		borderRight: 1,
+		borderTop: 1,
+		borderWidth: 1,
+		margin: 1,
+		padding: 1
+	};
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+	$.fx.step[ prop ] = function( fx ) {
+		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+			jQuery.style( fx.elem, prop, fx.end );
+			fx.setAttr = true;
+		}
+	};
+});
+
+function getElementStyles( elem ) {
+	var key, len,
+		style = elem.ownerDocument.defaultView ?
+			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+			elem.currentStyle,
+		styles = {};
+
+	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+		len = style.length;
+		while ( len-- ) {
+			key = style[ len ];
+			if ( typeof style[ key ] === "string" ) {
+				styles[ $.camelCase( key ) ] = style[ key ];
+			}
+		}
+	// support: Opera, IE <9
+	} else {
+		for ( key in style ) {
+			if ( typeof style[ key ] === "string" ) {
+				styles[ key ] = style[ key ];
+			}
+		}
+	}
+
+	return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+	var diff = {},
+		name, value;
+
+	for ( name in newStyle ) {
+		value = newStyle[ name ];
+		if ( oldStyle[ name ] !== value ) {
+			if ( !shorthandStyles[ name ] ) {
+				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+					diff[ name ] = value;
+				}
+			}
+		}
+	}
+
+	return diff;
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+	$.fn.addBack = function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	};
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+	var o = $.speed( duration, easing, callback );
+
+	return this.queue( function() {
+		var animated = $( this ),
+			baseClass = animated.attr( "class" ) || "",
+			applyClassChange,
+			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+		// map the animated objects to store the original styles.
+		allAnimations = allAnimations.map(function() {
+			var el = $( this );
+			return {
+				el: el,
+				start: getElementStyles( this )
+			};
+		});
+
+		// apply class change
+		applyClassChange = function() {
+			$.each( classAnimationActions, function(i, action) {
+				if ( value[ action ] ) {
+					animated[ action + "Class" ]( value[ action ] );
+				}
+			});
+		};
+		applyClassChange();
+
+		// map all animated objects again - calculate new styles and diff
+		allAnimations = allAnimations.map(function() {
+			this.end = getElementStyles( this.el[ 0 ] );
+			this.diff = styleDifference( this.start, this.end );
+			return this;
+		});
+
+		// apply original class
+		animated.attr( "class", baseClass );
+
+		// map all animated objects again - this time collecting a promise
+		allAnimations = allAnimations.map(function() {
+			var styleInfo = this,
+				dfd = $.Deferred(),
+				opts = $.extend({}, o, {
+					queue: false,
+					complete: function() {
+						dfd.resolve( styleInfo );
+					}
+				});
+
+			this.el.animate( this.diff, opts );
+			return dfd.promise();
+		});
+
+		// once all animations have completed:
+		$.when.apply( $, allAnimations.get() ).done(function() {
+
+			// set the final class
+			applyClassChange();
+
+			// for each animated element,
+			// clear all css properties that were animated
+			$.each( arguments, function() {
+				var el = this.el;
+				$.each( this.diff, function(key) {
+					el.css( key, "" );
+				});
+			});
+
+			// this is guarnteed to be there if you use jQuery.speed()
+			// it also handles dequeuing the next anim...
+			o.complete.call( animated[ 0 ] );
+		});
+	});
+};
+
+$.fn.extend({
+	addClass: (function( orig ) {
+		return function( classNames, speed, easing, callback ) {
+			return speed ?
+				$.effects.animateClass.call( this,
+					{ add: classNames }, speed, easing, callback ) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.addClass ),
+
+	removeClass: (function( orig ) {
+		return function( classNames, speed, easing, callback ) {
+			return arguments.length > 1 ?
+				$.effects.animateClass.call( this,
+					{ remove: classNames }, speed, easing, callback ) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.removeClass ),
+
+	toggleClass: (function( orig ) {
+		return function( classNames, force, speed, easing, callback ) {
+			if ( typeof force === "boolean" || force === undefined ) {
+				if ( !speed ) {
+					// without speed parameter
+					return orig.apply( this, arguments );
+				} else {
+					return $.effects.animateClass.call( this,
+						(force ? { add: classNames } : { remove: classNames }),
+						speed, easing, callback );
+				}
+			} else {
+				// without force parameter
+				return $.effects.animateClass.call( this,
+					{ toggle: classNames }, force, speed, easing );
+			}
+		};
+	})( $.fn.toggleClass ),
+
+	switchClass: function( remove, add, speed, easing, callback) {
+		return $.effects.animateClass.call( this, {
+			add: add,
+			remove: remove
+		}, speed, easing, callback );
+	}
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+	version: "1.11.4",
+
+	// Saves a set of properties in a data storage
+	save: function( element, set ) {
+		for ( var i = 0; i < set.length; i++ ) {
+			if ( set[ i ] !== null ) {
+				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+			}
+		}
+	},
+
+	// Restores a set of previously saved properties from a data storage
+	restore: function( element, set ) {
+		var val, i;
+		for ( i = 0; i < set.length; i++ ) {
+			if ( set[ i ] !== null ) {
+				val = element.data( dataSpace + set[ i ] );
+				// support: jQuery 1.6.2
+				// http://bugs.jquery.com/ticket/9917
+				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+				// We can't differentiate between "" and 0 here, so we just assume
+				// empty string since it's likely to be a more common value...
+				if ( val === undefined ) {
+					val = "";
+				}
+				element.css( set[ i ], val );
+			}
+		}
+	},
+
+	setMode: function( el, mode ) {
+		if (mode === "toggle") {
+			mode = el.is( ":hidden" ) ? "show" : "hide";
+		}
+		return mode;
+	},
+
+	// Translates a [top,left] array into a baseline value
+	// this should be a little more flexible in the future to handle a string & hash
+	getBaseline: function( origin, original ) {
+		var y, x;
+		switch ( origin[ 0 ] ) {
+			case "top": y = 0; break;
+			case "middle": y = 0.5; break;
+			case "bottom": y = 1; break;
+			default: y = origin[ 0 ] / original.height;
+		}
+		switch ( origin[ 1 ] ) {
+			case "left": x = 0; break;
+			case "center": x = 0.5; break;
+			case "right": x = 1; break;
+			default: x = origin[ 1 ] / original.width;
+		}
+		return {
+			x: x,
+			y: y
+		};
+	},
+
+	// Wraps the element around a wrapper that copies position properties
+	createWrapper: function( element ) {
+
+		// if the element is already wrapped, return it
+		if ( element.parent().is( ".ui-effects-wrapper" )) {
+			return element.parent();
+		}
+
+		// wrap the element
+		var props = {
+				width: element.outerWidth(true),
+				height: element.outerHeight(true),
+				"float": element.css( "float" )
+			},
+			wrapper = $( "<div></div>" )
+				.addClass( "ui-effects-wrapper" )
+				.css({
+					fontSize: "100%",
+					background: "transparent",
+					border: "none",
+					margin: 0,
+					padding: 0
+				}),
+			// Store the size in case width/height are defined in % - Fixes #5245
+			size = {
+				width: element.width(),
+				height: element.height()
+			},
+			active = document.activeElement;
+
+		// support: Firefox
+		// Firefox incorrectly exposes anonymous content
+		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+		try {
+			active.id;
+		} catch ( e ) {
+			active = document.body;
+		}
+
+		element.wrap( wrapper );
+
+		// Fixes #7595 - Elements lose focus when wrapped.
+		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+			$( active ).focus();
+		}
+
+		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+		// transfer positioning properties to the wrapper
+		if ( element.css( "position" ) === "static" ) {
+			wrapper.css({ position: "relative" });
+			element.css({ position: "relative" });
+		} else {
+			$.extend( props, {
+				position: element.css( "position" ),
+				zIndex: element.css( "z-index" )
+			});
+			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+				props[ pos ] = element.css( pos );
+				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+					props[ pos ] = "auto";
+				}
+			});
+			element.css({
+				position: "relative",
+				top: 0,
+				left: 0,
+				right: "auto",
+				bottom: "auto"
+			});
+		}
+		element.css(size);
+
+		return wrapper.css( props ).show();
+	},
+
+	removeWrapper: function( element ) {
+		var active = document.activeElement;
+
+		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+			element.parent().replaceWith( element );
+
+			// Fixes #7595 - Elements lose focus when wrapped.
+			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+				$( active ).focus();
+			}
+		}
+
+		return element;
+	},
+
+	setTransition: function( element, list, factor, value ) {
+		value = value || {};
+		$.each( list, function( i, x ) {
+			var unit = element.cssUnit( x );
+			if ( unit[ 0 ] > 0 ) {
+				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+			}
+		});
+		return value;
+	}
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+	// allow passing all options as the first parameter
+	if ( $.isPlainObject( effect ) ) {
+		options = effect;
+		effect = effect.effect;
+	}
+
+	// convert to an object
+	effect = { effect: effect };
+
+	// catch (effect, null, ...)
+	if ( options == null ) {
+		options = {};
+	}
+
+	// catch (effect, callback)
+	if ( $.isFunction( options ) ) {
+		callback = options;
+		speed = null;
+		options = {};
+	}
+
+	// catch (effect, speed, ?)
+	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+		callback = speed;
+		speed = options;
+		options = {};
+	}
+
+	// catch (effect, options, callback)
+	if ( $.isFunction( speed ) ) {
+		callback = speed;
+		speed = null;
+	}
+
+	// add options to effect
+	if ( options ) {
+		$.extend( effect, options );
+	}
+
+	speed = speed || options.duration;
+	effect.duration = $.fx.off ? 0 :
+		typeof speed === "number" ? speed :
+		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+		$.fx.speeds._default;
+
+	effect.complete = callback || options.complete;
+
+	return effect;
+}
+
+function standardAnimationOption( option ) {
+	// Valid standard speeds (nothing, number, named speed)
+	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+		return true;
+	}
+
+	// Invalid strings - treat as "normal" speed
+	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+		return true;
+	}
+
+	// Complete callback
+	if ( $.isFunction( option ) ) {
+		return true;
+	}
+
+	// Options hash (but not naming an effect)
+	if ( typeof option === "object" && !option.effect ) {
+		return true;
+	}
+
+	// Didn't match any standard API
+	return false;
+}
+
+$.fn.extend({
+	effect: function( /* effect, options, speed, callback */ ) {
+		var args = _normalizeArguments.apply( this, arguments ),
+			mode = args.mode,
+			queue = args.queue,
+			effectMethod = $.effects.effect[ args.effect ];
+
+		if ( $.fx.off || !effectMethod ) {
+			// delegate to the original method (e.g., .show()) if possible
+			if ( mode ) {
+				return this[ mode ]( args.duration, args.complete );
+			} else {
+				return this.each( function() {
+					if ( args.complete ) {
+						args.complete.call( this );
+					}
+				});
+			}
+		}
+
+		function run( next ) {
+			var elem = $( this ),
+				complete = args.complete,
+				mode = args.mode;
+
+			function done() {
+				if ( $.isFunction( complete ) ) {
+					complete.call( elem[0] );
+				}
+				if ( $.isFunction( next ) ) {
+					next();
+				}
+			}
+
+			// If the element already has the correct final state, delegate to
+			// the core methods so the internal tracking of "olddisplay" works.
+			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+				elem[ mode ]();
+				done();
+			} else {
+				effectMethod.call( elem[0], args, done );
+			}
+		}
+
+		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+	},
+
+	show: (function( orig ) {
+		return function( option ) {
+			if ( standardAnimationOption( option ) ) {
+				return orig.apply( this, arguments );
+			} else {
+				var args = _normalizeArguments.apply( this, arguments );
+				args.mode = "show";
+				return this.effect.call( this, args );
+			}
+		};
+	})( $.fn.show ),
+
+	hide: (function( orig ) {
+		return function( option ) {
+			if ( standardAnimationOption( option ) ) {
+				return orig.apply( this, arguments );
+			} else {
+				var args = _normalizeArguments.apply( this, arguments );
+				args.mode = "hide";
+				return this.effect.call( this, args );
+			}
+		};
+	})( $.fn.hide ),
+
+	toggle: (function( orig ) {
+		return function( option ) {
+			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+				return orig.apply( this, arguments );
+			} else {
+				var args = _normalizeArguments.apply( this, arguments );
+				args.mode = "toggle";
+				return this.effect.call( this, args );
+			}
+		};
+	})( $.fn.toggle ),
+
+	// helper functions
+	cssUnit: function(key) {
+		var style = this.css( key ),
+			val = [];
+
+		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+			if ( style.indexOf( unit ) > 0 ) {
+				val = [ parseFloat( style ), unit ];
+			}
+		});
+		return val;
+	}
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+	baseEasings[ name ] = function( p ) {
+		return Math.pow( p, i + 2 );
+	};
+});
+
+$.extend( baseEasings, {
+	Sine: function( p ) {
+		return 1 - Math.cos( p * Math.PI / 2 );
+	},
+	Circ: function( p ) {
+		return 1 - Math.sqrt( 1 - p * p );
+	},
+	Elastic: function( p ) {
+		return p === 0 || p === 1 ? p :
+			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+	},
+	Back: function( p ) {
+		return p * p * ( 3 * p - 2 );
+	},
+	Bounce: function( p ) {
+		var pow2,
+			bounce = 4;
+
+		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+	}
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+	$.easing[ "easeIn" + name ] = easeIn;
+	$.easing[ "easeOut" + name ] = function( p ) {
+		return 1 - easeIn( 1 - p );
+	};
+	$.easing[ "easeInOut" + name ] = function( p ) {
+		return p < 0.5 ?
+			easeIn( p * 2 ) / 2 :
+			1 - easeIn( p * -2 + 2 ) / 2;
+	};
+});
+
+})();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- *	jquery.ui.core.js
+ * http://api.jqueryui.com/blind-effect/
  */
-(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",function(b){b=
-d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");b.addClass("ui-state-hover");
-b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.14"}});var A=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,
-a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,
-selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=
-h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=
-this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,
-"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);
-a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",
-this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",
-this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=
-b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",
-cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},
-_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,
-"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,
-b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);
-c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);
-c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||
-a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=
-d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
-d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=
-d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c=
-{left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");
-if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);
-J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");
-a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||
-c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+
-i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=
-this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",
-left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&
-d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=
-b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=
-!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);
-a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));
-d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%
-100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=B+1<a.length&&a.charAt(B+1)==p)&&B++;return p},m=function(p){var D=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=
-p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=function(){if(b.charAt(q)!=a.charAt(B))throw"Unexpected literal at position "+q;q++},q=0,B=0;B<a.length;B++)if(k)if(a.charAt(B)=="'"&&!o("'"))k=false;
-else s();else switch(a.charAt(B)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);
-if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",
-TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<
-n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,
-c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+=
-"0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=
-f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=
-(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,
-l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
-a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
-b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
-this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+A+'.datepicker._hideDatepicker();">'+this._get(a,
-"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),B=
-this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O="";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":
-"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,B,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":
-"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+
-this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+
-this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+A+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+
-r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),
-l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+A+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+A+".datepicker._clickMonthYear('#"+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+
-n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):
-g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+A+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+A+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c==
-"Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");
-if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
-c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
-"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
-function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,
-[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.14";window["DP_jQuery_"+A]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.14
+
+
+var effectBlind = $.effects.effect.blind = function( o, done ) {
+	// Create element
+	var el = $( this ),
+		rvertical = /up|down|vertical/,
+		rpositivemotion = /up|left|vertical|horizontal/,
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		direction = o.direction || "up",
+		vertical = rvertical.test( direction ),
+		ref = vertical ? "height" : "width",
+		ref2 = vertical ? "top" : "left",
+		motion = rpositivemotion.test( direction ),
+		animation = {},
+		show = mode === "show",
+		wrapper, distance, margin;
+
+	// if already wrapped, the wrapper's properties are my property. #6245
+	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+		$.effects.save( el.parent(), props );
+	} else {
+		$.effects.save( el, props );
+	}
+	el.show();
+	wrapper = $.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+
+	distance = wrapper[ ref ]();
+	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+	animation[ ref ] = show ? distance : 0;
+	if ( !motion ) {
+		el
+			.css( vertical ? "bottom" : "right", 0 )
+			.css( vertical ? "top" : "left", "auto" )
+			.css({ position: "absolute" });
+
+		animation[ ref2 ] = show ? margin : distance + margin;
+	}
+
+	// start at 0 if we are showing
+	if ( show ) {
+		wrapper.css( ref, 0 );
+		if ( !motion ) {
+			wrapper.css( ref2, margin + distance );
+		}
+	}
+
+	// Animate
+	wrapper.animate( animation, {
+		duration: o.duration,
+		easing: o.easing,
+		queue: false,
+		complete: function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Bounce 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- *   jquery.ui.core.js
- *   jquery.ui.widget.js
+ * http://api.jqueryui.com/bounce-effect/
  */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.14
+
+
+var effectBounce = $.effects.effect.bounce = function( o, done ) {
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+		// defaults:
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		hide = mode === "hide",
+		show = mode === "show",
+		direction = o.direction || "up",
+		distance = o.distance,
+		times = o.times || 5,
+
+		// number of internal animations
+		anims = times * 2 + ( show || hide ? 1 : 0 ),
+		speed = o.duration / anims,
+		easing = o.easing,
+
+		// utility:
+		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+		motion = ( direction === "up" || direction === "left" ),
+		i,
+		upAnim,
+		downAnim,
+
+		// we will need to re-assemble the queue to stack our animations in place
+		queue = el.queue(),
+		queuelen = queue.length;
+
+	// Avoid touching opacity to prevent clearType and PNG issues in IE
+	if ( show || hide ) {
+		props.push( "opacity" );
+	}
+
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el ); // Create Wrapper
+
+	// default distance for the BIGGEST bounce is the outer Distance / 3
+	if ( !distance ) {
+		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+	}
+
+	if ( show ) {
+		downAnim = { opacity: 1 };
+		downAnim[ ref ] = 0;
+
+		// if we are showing, force opacity 0 and set the initial position
+		// then do the "first" animation
+		el.css( "opacity", 0 )
+			.css( ref, motion ? -distance * 2 : distance * 2 )
+			.animate( downAnim, speed, easing );
+	}
+
+	// start at the smallest distance if we are hiding
+	if ( hide ) {
+		distance = distance / Math.pow( 2, times - 1 );
+	}
+
+	downAnim = {};
+	downAnim[ ref ] = 0;
+	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+	for ( i = 0; i < times; i++ ) {
+		upAnim = {};
+		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+		el.animate( upAnim, speed, easing )
+			.animate( downAnim, speed, easing );
+
+		distance = hide ? distance * 2 : distance / 2;
+	}
+
+	// Last Bounce when Hiding
+	if ( hide ) {
+		upAnim = { opacity: 0 };
+		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+		el.animate( upAnim, speed, easing );
+	}
+
+	el.queue(function() {
+		if ( hide ) {
+			el.hide();
+		}
+		$.effects.restore( el, props );
+		$.effects.removeWrapper( el );
+		done();
+	});
+
+	// inject all the animations we just queued to be first in line (after "inprogress")
+	if ( queuelen > 1) {
+		queue.splice.apply( queue,
+			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+	}
+	el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Clip 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/
+ * http://api.jqueryui.com/clip-effect/
  */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.14",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
-c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
-a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
-a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
-"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
-((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
-e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
-h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
-e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.14
+
+
+var effectClip = $.effects.effect.clip = function( o, done ) {
+	// Create element
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+		direction = o.direction || "vertical",
+		vert = direction === "vertical",
+		size = vert ? "height" : "width",
+		position = vert ? "top" : "left",
+		animation = {},
+		wrapper, animate, distance;
+
+	// Save & Show
+	$.effects.save( el, props );
+	el.show();
+
+	// Create Wrapper
+	wrapper = $.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+	distance = animate[ size ]();
+
+	// Shift
+	if ( show ) {
+		animate.css( size, 0 );
+		animate.css( position, distance / 2 );
+	}
+
+	// Create Animation Object:
+	animation[ size ] = show ? distance : 0;
+	animation[ position ] = show ? 0 : distance / 2;
+
+	// Animate
+	animate.animate( animation, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( !show ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+
+};
+
+
+/*!
+ * jQuery UI Effects Drop 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/drop-effect/
  */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.14
+
+
+var effectDrop = $.effects.effect.drop = function( o, done ) {
+
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+		direction = o.direction || "left",
+		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+		animation = {
+			opacity: show ? 1 : 0
+		},
+		distance;
+
+	// Adjust
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el );
+
+	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+	if ( show ) {
+		el
+			.css( "opacity", 0 )
+			.css( ref, motion === "pos" ? -distance : distance );
+	}
+
+	// Animation
+	animation[ ref ] = ( show ?
+		( motion === "pos" ? "+=" : "-=" ) :
+		( motion === "pos" ? "-=" : "+=" ) ) +
+		distance;
+
+	// Animate
+	el.animate( animation, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Explode 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/explode-effect/
  */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.14
+
+
+var effectExplode = $.effects.effect.explode = function( o, done ) {
+
+	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+		cells = rows,
+		el = $( this ),
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+
+		// show and then visibility:hidden the element before calculating offset
+		offset = el.show().css( "visibility", "hidden" ).offset(),
+
+		// width and height of a piece
+		width = Math.ceil( el.outerWidth() / cells ),
+		height = Math.ceil( el.outerHeight() / rows ),
+		pieces = [],
+
+		// loop
+		i, j, left, top, mx, my;
+
+	// children animate complete:
+	function childComplete() {
+		pieces.push( this );
+		if ( pieces.length === rows * cells ) {
+			animComplete();
+		}
+	}
+
+	// clone the element for each row and cell.
+	for ( i = 0; i < rows ; i++ ) { // ===>
+		top = offset.top + i * height;
+		my = i - ( rows - 1 ) / 2 ;
+
+		for ( j = 0; j < cells ; j++ ) { // |||
+			left = offset.left + j * width;
+			mx = j - ( cells - 1 ) / 2 ;
+
+			// Create a clone of the now hidden main element that will be absolute positioned
+			// within a wrapper div off the -left and -top equal to size of our pieces
+			el
+				.clone()
+				.appendTo( "body" )
+				.wrap( "<div></div>" )
+				.css({
+					position: "absolute",
+					visibility: "visible",
+					left: -j * width,
+					top: -i * height
+				})
+
+			// select the wrapper - make it overflow: hidden and absolute positioned based on
+			// where the original was located +left and +top equal to the size of pieces
+				.parent()
+				.addClass( "ui-effects-explode" )
+				.css({
+					position: "absolute",
+					overflow: "hidden",
+					width: width,
+					height: height,
+					left: left + ( show ? mx * width : 0 ),
+					top: top + ( show ? my * height : 0 ),
+					opacity: show ? 0 : 1
+				}).animate({
+					left: left + ( show ? 0 : mx * width ),
+					top: top + ( show ? 0 : my * height ),
+					opacity: show ? 1 : 0
+				}, o.duration || 500, o.easing, childComplete );
+		}
+	}
+
+	function animComplete() {
+		el.css({
+			visibility: "visible"
+		});
+		$( pieces ).remove();
+		if ( !show ) {
+			el.hide();
+		}
+		done();
+	}
+};
+
+
+/*!
+ * jQuery UI Effects Fade 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/fade-effect/
  */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.14
+
+
+var effectFade = $.effects.effect.fade = function( o, done ) {
+	var el = $( this ),
+		mode = $.effects.setMode( el, o.mode || "toggle" );
+
+	el.animate({
+		opacity: mode
+	}, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: done
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Fold 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/fold-effect/
  */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.14
+
+
+var effectFold = $.effects.effect.fold = function( o, done ) {
+
+	// Create element
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+		hide = mode === "hide",
+		size = o.size || 15,
+		percent = /([0-9]+)%/.exec( size ),
+		horizFirst = !!o.horizFirst,
+		widthFirst = show !== horizFirst,
+		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+		duration = o.duration / 2,
+		wrapper, distance,
+		animation1 = {},
+		animation2 = {};
+
+	$.effects.save( el, props );
+	el.show();
+
+	// Create Wrapper
+	wrapper = $.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+	distance = widthFirst ?
+		[ wrapper.width(), wrapper.height() ] :
+		[ wrapper.height(), wrapper.width() ];
+
+	if ( percent ) {
+		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+	}
+	if ( show ) {
+		wrapper.css( horizFirst ? {
+			height: 0,
+			width: size
+		} : {
+			height: size,
+			width: 0
+		});
+	}
+
+	// Animation
+	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+	// Animate
+	wrapper
+		.animate( animation1, duration, o.easing )
+		.animate( animation2, duration, o.easing, function() {
+			if ( hide ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		});
+
+};
+
+
+/*!
+ * jQuery UI Effects Highlight 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/highlight-effect/
  */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.14
+
+
+var effectHighlight = $.effects.effect.highlight = function( o, done ) {
+	var elem = $( this ),
+		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+		mode = $.effects.setMode( elem, o.mode || "show" ),
+		animation = {
+			backgroundColor: elem.css( "backgroundColor" )
+		};
+
+	if (mode === "hide") {
+		animation.opacity = 0;
+	}
+
+	$.effects.save( elem, props );
+
+	elem
+		.show()
+		.css({
+			backgroundImage: "none",
+			backgroundColor: o.color || "#ffff99"
+		})
+		.animate( animation, {
+			queue: false,
+			duration: o.duration,
+			easing: o.easing,
+			complete: function() {
+				if ( mode === "hide" ) {
+					elem.hide();
+				}
+				$.effects.restore( elem, props );
+				done();
+			}
+		});
+};
+
+
+/*!
+ * jQuery UI Effects Size 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/size-effect/
  */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.14
+
+
+var effectSize = $.effects.effect.size = function( o, done ) {
+
+	// Create element
+	var original, baseline, factor,
+		el = $( this ),
+		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+		// Always restore
+		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+		// Copy for children
+		props2 = [ "width", "height", "overflow" ],
+		cProps = [ "fontSize" ],
+		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+		// Set options
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		restore = o.restore || mode !== "effect",
+		scale = o.scale || "both",
+		origin = o.origin || [ "middle", "center" ],
+		position = el.css( "position" ),
+		props = restore ? props0 : props1,
+		zero = {
+			height: 0,
+			width: 0,
+			outerHeight: 0,
+			outerWidth: 0
+		};
+
+	if ( mode === "show" ) {
+		el.show();
+	}
+	original = {
+		height: el.height(),
+		width: el.width(),
+		outerHeight: el.outerHeight(),
+		outerWidth: el.outerWidth()
+	};
+
+	if ( o.mode === "toggle" && mode === "show" ) {
+		el.from = o.to || zero;
+		el.to = o.from || original;
+	} else {
+		el.from = o.from || ( mode === "show" ? zero : original );
+		el.to = o.to || ( mode === "hide" ? zero : original );
+	}
+
+	// Set scaling factor
+	factor = {
+		from: {
+			y: el.from.height / original.height,
+			x: el.from.width / original.width
+		},
+		to: {
+			y: el.to.height / original.height,
+			x: el.to.width / original.width
+		}
+	};
+
+	// Scale the css box
+	if ( scale === "box" || scale === "both" ) {
+
+		// Vertical props scaling
+		if ( factor.from.y !== factor.to.y ) {
+			props = props.concat( vProps );
+			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+		}
+
+		// Horizontal props scaling
+		if ( factor.from.x !== factor.to.x ) {
+			props = props.concat( hProps );
+			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+		}
+	}
+
+	// Scale the content
+	if ( scale === "content" || scale === "both" ) {
+
+		// Vertical props scaling
+		if ( factor.from.y !== factor.to.y ) {
+			props = props.concat( cProps ).concat( props2 );
+			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+		}
+	}
+
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el );
+	el.css( "overflow", "hidden" ).css( el.from );
+
+	// Adjust
+	if (origin) { // Calculate baseline shifts
+		baseline = $.effects.getBaseline( origin, original );
+		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+	}
+	el.css( el.from ); // set top & left
+
+	// Animate
+	if ( scale === "content" || scale === "both" ) { // Scale the children
+
+		// Add margins/font-size
+		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+		props2 = props0.concat(vProps).concat(hProps);
+
+		el.find( "*[width]" ).each( function() {
+			var child = $( this ),
+				c_original = {
+					height: child.height(),
+					width: child.width(),
+					outerHeight: child.outerHeight(),
+					outerWidth: child.outerWidth()
+				};
+			if (restore) {
+				$.effects.save(child, props2);
+			}
+
+			child.from = {
+				height: c_original.height * factor.from.y,
+				width: c_original.width * factor.from.x,
+				outerHeight: c_original.outerHeight * factor.from.y,
+				outerWidth: c_original.outerWidth * factor.from.x
+			};
+			child.to = {
+				height: c_original.height * factor.to.y,
+				width: c_original.width * factor.to.x,
+				outerHeight: c_original.height * factor.to.y,
+				outerWidth: c_original.width * factor.to.x
+			};
+
+			// Vertical props scaling
+			if ( factor.from.y !== factor.to.y ) {
+				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+			}
+
+			// Horizontal props scaling
+			if ( factor.from.x !== factor.to.x ) {
+				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+			}
+
+			// Animate children
+			child.css( child.from );
+			child.animate( child.to, o.duration, o.easing, function() {
+
+				// Restore children
+				if ( restore ) {
+					$.effects.restore( child, props2 );
+				}
+			});
+		});
+	}
+
+	// Animate
+	el.animate( el.to, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( el.to.opacity === 0 ) {
+				el.css( "opacity", el.from.opacity );
+			}
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			if ( !restore ) {
+
+				// we need to calculate our new positioning based on the scaling
+				if ( position === "static" ) {
+					el.css({
+						position: "relative",
+						top: el.to.top,
+						left: el.to.left
+					});
+				} else {
+					$.each([ "top", "left" ], function( idx, pos ) {
+						el.css( pos, function( _, str ) {
+							var val = parseInt( str, 10 ),
+								toRef = idx ? el.to.left : el.to.top;
+
+							// if original was "auto", recalculate the new value from wrapper
+							if ( str === "auto" ) {
+								return toRef + "px";
+							}
+
+							return val + toRef + "px";
+						});
+					});
+				}
+			}
+
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+
+};
+
+
+/*!
+ * jQuery UI Effects Scale 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/scale-effect/
  */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.14
+
+
+var effectScale = $.effects.effect.scale = function( o, done ) {
+
+	// Create element
+	var el = $( this ),
+		options = $.extend( true, {}, o ),
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		percent = parseInt( o.percent, 10 ) ||
+			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+		direction = o.direction || "both",
+		origin = o.origin,
+		original = {
+			height: el.height(),
+			width: el.width(),
+			outerHeight: el.outerHeight(),
+			outerWidth: el.outerWidth()
+		},
+		factor = {
+			y: direction !== "horizontal" ? (percent / 100) : 1,
+			x: direction !== "vertical" ? (percent / 100) : 1
+		};
+
+	// We are going to pass this effect to the size effect:
+	options.effect = "size";
+	options.queue = false;
+	options.complete = done;
+
+	// Set default origin and restore for show/hide
+	if ( mode !== "effect" ) {
+		options.origin = origin || [ "middle", "center" ];
+		options.restore = true;
+	}
+
+	options.from = o.from || ( mode === "show" ? {
+		height: 0,
+		width: 0,
+		outerHeight: 0,
+		outerWidth: 0
+	} : original );
+	options.to = {
+		height: original.height * factor.y,
+		width: original.width * factor.x,
+		outerHeight: original.outerHeight * factor.y,
+		outerWidth: original.outerWidth * factor.x
+	};
+
+	// Fade option to support puff
+	if ( options.fade ) {
+		if ( mode === "show" ) {
+			options.from.opacity = 0;
+			options.to.opacity = 1;
+		}
+		if ( mode === "hide" ) {
+			options.from.opacity = 1;
+			options.to.opacity = 0;
+		}
+	}
+
+	// Animate
+	el.effect( options );
+
+};
+
+
+/*!
+ * jQuery UI Effects Puff 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/puff-effect/
  */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.14
+
+
+var effectPuff = $.effects.effect.puff = function( o, done ) {
+	var elem = $( this ),
+		mode = $.effects.setMode( elem, o.mode || "hide" ),
+		hide = mode === "hide",
+		percent = parseInt( o.percent, 10 ) || 150,
+		factor = percent / 100,
+		original = {
+			height: elem.height(),
+			width: elem.width(),
+			outerHeight: elem.outerHeight(),
+			outerWidth: elem.outerWidth()
+		};
+
+	$.extend( o, {
+		effect: "scale",
+		queue: false,
+		fade: true,
+		mode: mode,
+		complete: done,
+		percent: hide ? percent : 100,
+		from: hide ?
+			original :
+			{
+				height: original.height * factor,
+				width: original.width * factor,
+				outerHeight: original.outerHeight * factor,
+				outerWidth: original.outerWidth * factor
+			}
+	});
+
+	elem.effect( o );
+};
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/pulsate-effect/
  */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.14
+
+
+var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
+	var elem = $( this ),
+		mode = $.effects.setMode( elem, o.mode || "show" ),
+		show = mode === "show",
+		hide = mode === "hide",
+		showhide = ( show || mode === "hide" ),
+
+		// showing or hiding leaves of the "last" animation
+		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+		duration = o.duration / anims,
+		animateTo = 0,
+		queue = elem.queue(),
+		queuelen = queue.length,
+		i;
+
+	if ( show || !elem.is(":visible")) {
+		elem.css( "opacity", 0 ).show();
+		animateTo = 1;
+	}
+
+	// anims - 1 opacity "toggles"
+	for ( i = 1; i < anims; i++ ) {
+		elem.animate({
+			opacity: animateTo
+		}, duration, o.easing );
+		animateTo = 1 - animateTo;
+	}
+
+	elem.animate({
+		opacity: animateTo
+	}, duration, o.easing);
+
+	elem.queue(function() {
+		if ( hide ) {
+			elem.hide();
+		}
+		done();
+	});
+
+	// We just queued up "anims" animations, we need to put them next in the queue
+	if ( queuelen > 1 ) {
+		queue.splice.apply( queue,
+			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+	}
+	elem.dequeue();
+};
+
+
+/*!
+ * jQuery UI Effects Shake 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/shake-effect/
  */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.14
+
+
+var effectShake = $.effects.effect.shake = function( o, done ) {
+
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		direction = o.direction || "left",
+		distance = o.distance || 20,
+		times = o.times || 3,
+		anims = times * 2 + 1,
+		speed = Math.round( o.duration / anims ),
+		ref = (direction === "up" || direction === "down") ? "top" : "left",
+		positiveMotion = (direction === "up" || direction === "left"),
+		animation = {},
+		animation1 = {},
+		animation2 = {},
+		i,
+
+		// we will need to re-assemble the queue to stack our animations in place
+		queue = el.queue(),
+		queuelen = queue.length;
+
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el );
+
+	// Animation
+	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+	// Animate
+	el.animate( animation, speed, o.easing );
+
+	// Shakes
+	for ( i = 1; i < times; i++ ) {
+		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+	}
+	el
+		.animate( animation1, speed, o.easing )
+		.animate( animation, speed / 2, o.easing )
+		.queue(function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		});
+
+	// inject all the animations we just queued to be first in line (after "inprogress")
+	if ( queuelen > 1) {
+		queue.splice.apply( queue,
+			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+	}
+	el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Slide 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/slide-effect/
  */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.14
+
+
+var effectSlide = $.effects.effect.slide = function( o, done ) {
+
+	// Create element
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+		mode = $.effects.setMode( el, o.mode || "show" ),
+		show = mode === "show",
+		direction = o.direction || "left",
+		ref = (direction === "up" || direction === "down") ? "top" : "left",
+		positiveMotion = (direction === "up" || direction === "left"),
+		distance,
+		animation = {};
+
+	// Adjust
+	$.effects.save( el, props );
+	el.show();
+	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+	$.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+
+	if ( show ) {
+		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+	}
+
+	// Animation
+	animation[ ref ] = ( show ?
+		( positiveMotion ? "+=" : "-=") :
+		( positiveMotion ? "-=" : "+=")) +
+		distance;
+
+	// Animate
+	el.animate( animation, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Transfer 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/transfer-effect/
  */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.14
+
+
+var effectTransfer = $.effects.effect.transfer = function( o, done ) {
+	var elem = $( this ),
+		target = $( o.to ),
+		targetFixed = target.css( "position" ) === "fixed",
+		body = $("body"),
+		fixTop = targetFixed ? body.scrollTop() : 0,
+		fixLeft = targetFixed ? body.scrollLeft() : 0,
+		endPosition = target.offset(),
+		animation = {
+			top: endPosition.top - fixTop,
+			left: endPosition.left - fixLeft,
+			height: target.innerHeight(),
+			width: target.innerWidth()
+		},
+		startPosition = elem.offset(),
+		transfer = $( "<div class='ui-effects-transfer'></div>" )
+			.appendTo( document.body )
+			.addClass( o.className )
+			.css({
+				top: startPosition.top - fixTop,
+				left: startPosition.left - fixLeft,
+				height: elem.innerHeight(),
+				width: elem.innerWidth(),
+				position: targetFixed ? "fixed" : "absolute"
+			})
+			.animate( animation, o.duration, o.easing, function() {
+				transfer.remove();
+				done();
+			});
+};
+
+
+/*!
+ * jQuery UI Progressbar 1.11.4
+ * http://jqueryui.com
  *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
  * http://jquery.org/license
  *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- *	jquery.effects.core.js
+ * http://api.jqueryui.com/progressbar/
  */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;
\ No newline at end of file
+
+
+var progressbar = $.widget( "ui.progressbar", {
+	version: "1.11.4",
+	options: {
+		max: 100,
+		value: 0,
+
+		change: null,
+		complete: null
+	},
+
+	min: 0,
+
+	_create: function() {
+		// Constrain initial value
+		this.oldValue = this.options.value = this._constrainedValue();
+
+		this.element
+			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+			.attr({
+				// Only set static values, aria-valuenow and aria-valuemax are
+				// set inside _refreshValue()
+				role: "progressbar",
+				"aria-valuemin": this.min
+			});
+
+		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+			.appendTo( this.element );
+
+		this._refreshValue();
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-valuemin" )
+			.removeAttr( "aria-valuemax" )
+			.removeAttr( "aria-valuenow" );
+
+		this.valueDiv.remove();
+	},
+
+	value: function( newValue ) {
+		if ( newValue === undefined ) {
+			return this.options.value;
+		}
+
+		this.options.value = this._constrainedValue( newValue );
+		this._refreshValue();
+	},
+
+	_constrainedValue: function( newValue ) {
+		if ( newValue === undefined ) {
+			newValue = this.options.value;
+		}
+
+		this.indeterminate = newValue === false;
+
+		// sanitize value
+		if ( typeof newValue !== "number" ) {
+			newValue = 0;
+		}
+
+		return this.indeterminate ? false :
+			Math.min( this.options.max, Math.max( this.min, newValue ) );
+	},
+
+	_setOptions: function( options ) {
+		// Ensure "value" option is set after other values (like max)
+		var value = options.value;
+		delete options.value;
+
+		this._super( options );
+
+		this.options.value = this._constrainedValue( value );
+		this._refreshValue();
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "max" ) {
+			// Don't allow a max less than min
+			value = Math.max( this.min, value );
+		}
+		if ( key === "disabled" ) {
+			this.element
+				.toggleClass( "ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+		}
+		this._super( key, value );
+	},
+
+	_percentage: function() {
+		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+	},
+
+	_refreshValue: function() {
+		var value = this.options.value,
+			percentage = this._percentage();
+
+		this.valueDiv
+			.toggle( this.indeterminate || value > this.min )
+			.toggleClass( "ui-corner-right", value === this.options.max )
+			.width( percentage.toFixed(0) + "%" );
+
+		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+
+		if ( this.indeterminate ) {
+			this.element.removeAttr( "aria-valuenow" );
+			if ( !this.overlayDiv ) {
+				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+			}
+		} else {
+			this.element.attr({
+				"aria-valuemax": this.options.max,
+				"aria-valuenow": value
+			});
+			if ( this.overlayDiv ) {
+				this.overlayDiv.remove();
+				this.overlayDiv = null;
+			}
+		}
+
+		if ( this.oldValue !== value ) {
+			this.oldValue = value;
+			this._trigger( "change" );
+		}
+		if ( value === this.options.max ) {
+			this._trigger( "complete" );
+		}
+	}
+});
+
+
+/*!
+ * jQuery UI Selectable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
+
+var selectable = $.widget("ui.selectable", $.ui.mouse, {
+	version: "1.11.4",
+	options: {
+		appendTo: "body",
+		autoRefresh: true,
+		distance: 0,
+		filter: "*",
+		tolerance: "touch",
+
+		// callbacks
+		selected: null,
+		selecting: null,
+		start: null,
+		stop: null,
+		unselected: null,
+		unselecting: null
+	},
+	_create: function() {
+		var selectees,
+			that = this;
+
+		this.element.addClass("ui-selectable");
+
+		this.dragged = false;
+
+		// cache selectee children based on filter
+		this.refresh = function() {
+			selectees = $(that.options.filter, that.element[0]);
+			selectees.addClass("ui-selectee");
+			selectees.each(function() {
+				var $this = $(this),
+					pos = $this.offset();
+				$.data(this, "selectable-item", {
+					element: this,
+					$element: $this,
+					left: pos.left,
+					top: pos.top,
+					right: pos.left + $this.outerWidth(),
+					bottom: pos.top + $this.outerHeight(),
+					startselected: false,
+					selected: $this.hasClass("ui-selected"),
+					selecting: $this.hasClass("ui-selecting"),
+					unselecting: $this.hasClass("ui-unselecting")
+				});
+			});
+		};
+		this.refresh();
+
+		this.selectees = selectees.addClass("ui-selectee");
+
+		this._mouseInit();
+
+		this.helper = $("<div class='ui-selectable-helper'></div>");
+	},
+
+	_destroy: function() {
+		this.selectees
+			.removeClass("ui-selectee")
+			.removeData("selectable-item");
+		this.element
+			.removeClass("ui-selectable ui-selectable-disabled");
+		this._mouseDestroy();
+	},
+
+	_mouseStart: function(event) {
+		var that = this,
+			options = this.options;
+
+		this.opos = [ event.pageX, event.pageY ];
+
+		if (this.options.disabled) {
+			return;
+		}
+
+		this.selectees = $(options.filter, this.element[0]);
+
+		this._trigger("start", event);
+
+		$(options.appendTo).append(this.helper);
+		// position helper (lasso)
+		this.helper.css({
+			"left": event.pageX,
+			"top": event.pageY,
+			"width": 0,
+			"height": 0
+		});
+
+		if (options.autoRefresh) {
+			this.refresh();
+		}
+
+		this.selectees.filter(".ui-selected").each(function() {
+			var selectee = $.data(this, "selectable-item");
+			selectee.startselected = true;
+			if (!event.metaKey && !event.ctrlKey) {
+				selectee.$element.removeClass("ui-selected");
+				selectee.selected = false;
+				selectee.$element.addClass("ui-unselecting");
+				selectee.unselecting = true;
+				// selectable UNSELECTING callback
+				that._trigger("unselecting", event, {
+					unselecting: selectee.element
+				});
+			}
+		});
+
+		$(event.target).parents().addBack().each(function() {
+			var doSelect,
+				selectee = $.data(this, "selectable-item");
+			if (selectee) {
+				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+				selectee.$element
+					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+				selectee.unselecting = !doSelect;
+				selectee.selecting = doSelect;
+				selectee.selected = doSelect;
+				// selectable (UN)SELECTING callback
+				if (doSelect) {
+					that._trigger("selecting", event, {
+						selecting: selectee.element
+					});
+				} else {
+					that._trigger("unselecting", event, {
+						unselecting: selectee.element
+					});
+				}
+				return false;
+			}
+		});
+
+	},
+
+	_mouseDrag: function(event) {
+
+		this.dragged = true;
+
+		if (this.options.disabled) {
+			return;
+		}
+
+		var tmp,
+			that = this,
+			options = this.options,
+			x1 = this.opos[0],
+			y1 = this.opos[1],
+			x2 = event.pageX,
+			y2 = event.pageY;
+
+		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+		this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
+
+		this.selectees.each(function() {
+			var selectee = $.data(this, "selectable-item"),
+				hit = false;
+
+			//prevent helper from being selected if appendTo: selectable
+			if (!selectee || selectee.element === that.element[0]) {
+				return;
+			}
+
+			if (options.tolerance === "touch") {
+				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+			} else if (options.tolerance === "fit") {
+				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+			}
+
+			if (hit) {
+				// SELECT
+				if (selectee.selected) {
+					selectee.$element.removeClass("ui-selected");
+					selectee.selected = false;
+				}
+				if (selectee.unselecting) {
+					selectee.$element.removeClass("ui-unselecting");
+					selectee.unselecting = false;
+				}
+				if (!selectee.selecting) {
+					selectee.$element.addClass("ui-selecting");
+					selectee.selecting = true;
+					// selectable SELECTING callback
+					that._trigger("selecting", event, {
+						selecting: selectee.element
+					});
+				}
+			} else {
+				// UNSELECT
+				if (selectee.selecting) {
+					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+						selectee.$element.removeClass("ui-selecting");
+						selectee.selecting = false;
+						selectee.$element.addClass("ui-selected");
+						selectee.selected = true;
+					} else {
+						selectee.$element.removeClass("ui-selecting");
+						selectee.selecting = false;
+						if (selectee.startselected) {
+							selectee.$element.addClass("ui-unselecting");
+							selectee.unselecting = true;
+						}
+						// selectable UNSELECTING callback
+						that._trigger("unselecting", event, {
+							unselecting: selectee.element
+						});
+					}
+				}
+				if (selectee.selected) {
+					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+						selectee.$element.removeClass("ui-selected");
+						selectee.selected = false;
+
+						selectee.$element.addClass("ui-unselecting");
+						selectee.unselecting = true;
+						// selectable UNSELECTING callback
+						that._trigger("unselecting", event, {
+							unselecting: selectee.element
+						});
+					}
+				}
+			}
+		});
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+		var that = this;
+
+		this.dragged = false;
+
+		$(".ui-unselecting", this.element[0]).each(function() {
+			var selectee = $.data(this, "selectable-item");
+			selectee.$element.removeClass("ui-unselecting");
+			selectee.unselecting = false;
+			selectee.startselected = false;
+			that._trigger("unselected", event, {
+				unselected: selectee.element
+			});
+		});
+		$(".ui-selecting", this.element[0]).each(function() {
+			var selectee = $.data(this, "selectable-item");
+			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+			selectee.selecting = false;
+			selectee.selected = true;
+			selectee.startselected = true;
+			that._trigger("selected", event, {
+				selected: selectee.element
+			});
+		});
+		this._trigger("stop", event);
+
+		this.helper.remove();
+
+		return false;
+	}
+
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+	version: "1.11.4",
+	defaultElement: "<select>",
+	options: {
+		appendTo: null,
+		disabled: null,
+		icons: {
+			button: "ui-icon-triangle-1-s"
+		},
+		position: {
+			my: "left top",
+			at: "left bottom",
+			collision: "none"
+		},
+		width: null,
+
+		// callbacks
+		change: null,
+		close: null,
+		focus: null,
+		open: null,
+		select: null
+	},
+
+	_create: function() {
+		var selectmenuId = this.element.uniqueId().attr( "id" );
+		this.ids = {
+			element: selectmenuId,
+			button: selectmenuId + "-button",
+			menu: selectmenuId + "-menu"
+		};
+
+		this._drawButton();
+		this._drawMenu();
+
+		if ( this.options.disabled ) {
+			this.disable();
+		}
+	},
+
+	_drawButton: function() {
+		var that = this;
+
+		// Associate existing label with the new button
+		this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+		this._on( this.label, {
+			click: function( event ) {
+				this.button.focus();
+				event.preventDefault();
+			}
+		});
+
+		// Hide original select element
+		this.element.hide();
+
+		// Create button
+		this.button = $( "<span>", {
+			"class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+			tabindex: this.options.disabled ? -1 : 0,
+			id: this.ids.button,
+			role: "combobox",
+			"aria-expanded": "false",
+			"aria-autocomplete": "list",
+			"aria-owns": this.ids.menu,
+			"aria-haspopup": "true"
+		})
+			.insertAfter( this.element );
+
+		$( "<span>", {
+			"class": "ui-icon " + this.options.icons.button
+		})
+			.prependTo( this.button );
+
+		this.buttonText = $( "<span>", {
+			"class": "ui-selectmenu-text"
+		})
+			.appendTo( this.button );
+
+		this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+		this._resizeButton();
+
+		this._on( this.button, this._buttonEvents );
+		this.button.one( "focusin", function() {
+
+			// Delay rendering the menu items until the button receives focus.
+			// The menu may have already been rendered via a programmatic open.
+			if ( !that.menuItems ) {
+				that._refreshMenu();
+			}
+		});
+		this._hoverable( this.button );
+		this._focusable( this.button );
+	},
+
+	_drawMenu: function() {
+		var that = this;
+
+		// Create menu
+		this.menu = $( "<ul>", {
+			"aria-hidden": "true",
+			"aria-labelledby": this.ids.button,
+			id: this.ids.menu
+		});
+
+		// Wrap menu
+		this.menuWrap = $( "<div>", {
+			"class": "ui-selectmenu-menu ui-front"
+		})
+			.append( this.menu )
+			.appendTo( this._appendTo() );
+
+		// Initialize menu widget
+		this.menuInstance = this.menu
+			.menu({
+				role: "listbox",
+				select: function( event, ui ) {
+					event.preventDefault();
+
+					// support: IE8
+					// If the item was selected via a click, the text selection
+					// will be destroyed in IE
+					that._setSelection();
+
+					that._select( ui.item.data( "ui-selectmenu-item" ), event );
+				},
+				focus: function( event, ui ) {
+					var item = ui.item.data( "ui-selectmenu-item" );
+
+					// Prevent inital focus from firing and check if its a newly focused item
+					if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+						that._trigger( "focus", event, { item: item } );
+						if ( !that.isOpen ) {
+							that._select( item, event );
+						}
+					}
+					that.focusIndex = item.index;
+
+					that.button.attr( "aria-activedescendant",
+						that.menuItems.eq( item.index ).attr( "id" ) );
+				}
+			})
+			.menu( "instance" );
+
+		// Adjust menu styles to dropdown
+		this.menu
+			.addClass( "ui-corner-bottom" )
+			.removeClass( "ui-corner-all" );
+
+		// Don't close the menu on mouseleave
+		this.menuInstance._off( this.menu, "mouseleave" );
+
+		// Cancel the menu's collapseAll on document click
+		this.menuInstance._closeOnDocumentClick = function() {
+			return false;
+		};
+
+		// Selects often contain empty items, but never contain dividers
+		this.menuInstance._isDivider = function() {
+			return false;
+		};
+	},
+
+	refresh: function() {
+		this._refreshMenu();
+		this._setText( this.buttonText, this._getSelectedItem().text() );
+		if ( !this.options.width ) {
+			this._resizeButton();
+		}
+	},
+
+	_refreshMenu: function() {
+		this.menu.empty();
+
+		var item,
+			options = this.element.find( "option" );
+
+		if ( !options.length ) {
+			return;
+		}
+
+		this._parseOptions( options );
+		this._renderMenu( this.menu, this.items );
+
+		this.menuInstance.refresh();
+		this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+		item = this._getSelectedItem();
+
+		// Update the menu to have the correct item focused
+		this.menuInstance.focus( null, item );
+		this._setAria( item.data( "ui-selectmenu-item" ) );
+
+		// Set disabled state
+		this._setOption( "disabled", this.element.prop( "disabled" ) );
+	},
+
+	open: function( event ) {
+		if ( this.options.disabled ) {
+			return;
+		}
+
+		// If this is the first time the menu is being opened, render the items
+		if ( !this.menuItems ) {
+			this._refreshMenu();
+		} else {
+
+			// Menu clears focus on close, reset focus to selected item
+			this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+			this.menuInstance.focus( null, this._getSelectedItem() );
+		}
+
+		this.isOpen = true;
+		this._toggleAttr();
+		this._resizeMenu();
+		this._position();
+
+		this._on( this.document, this._documentClick );
+
+		this._trigger( "open", event );
+	},
+
+	_position: function() {
+		this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+	},
+
+	close: function( event ) {
+		if ( !this.isOpen ) {
+			return;
+		}
+
+		this.isOpen = false;
+		this._toggleAttr();
+
+		this.range = null;
+		this._off( this.document );
+
+		this._trigger( "close", event );
+	},
+
+	widget: function() {
+		return this.button;
+	},
+
+	menuWidget: function() {
+		return this.menu;
+	},
+
+	_renderMenu: function( ul, items ) {
+		var that = this,
+			currentOptgroup = "";
+
+		$.each( items, function( index, item ) {
+			if ( item.optgroup !== currentOptgroup ) {
+				$( "<li>", {
+					"class": "ui-selectmenu-optgroup ui-menu-divider" +
+						( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+							" ui-state-disabled" :
+							"" ),
+					text: item.optgroup
+				})
+					.appendTo( ul );
+
+				currentOptgroup = item.optgroup;
+			}
+
+			that._renderItemData( ul, item );
+		});
+	},
+
+	_renderItemData: function( ul, item ) {
+		return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+	},
+
+	_renderItem: function( ul, item ) {
+		var li = $( "<li>" );
+
+		if ( item.disabled ) {
+			li.addClass( "ui-state-disabled" );
+		}
+		this._setText( li, item.label );
+
+		return li.appendTo( ul );
+	},
+
+	_setText: function( element, value ) {
+		if ( value ) {
+			element.text( value );
+		} else {
+			element.html( "&#160;" );
+		}
+	},
+
+	_move: function( direction, event ) {
+		var item, next,
+			filter = ".ui-menu-item";
+
+		if ( this.isOpen ) {
+			item = this.menuItems.eq( this.focusIndex );
+		} else {
+			item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+			filter += ":not(.ui-state-disabled)";
+		}
+
+		if ( direction === "first" || direction === "last" ) {
+			next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+		} else {
+			next = item[ direction + "All" ]( filter ).eq( 0 );
+		}
+
+		if ( next.length ) {
+			this.menuInstance.focus( event, next );
+		}
+	},
+
+	_getSelectedItem: function() {
+		return this.menuItems.eq( this.element[ 0 ].selectedIndex );
+	},
+
+	_toggle: function( event ) {
+		this[ this.isOpen ? "close" : "open" ]( event );
+	},
+
+	_setSelection: function() {
+		var selection;
+
+		if ( !this.range ) {
+			return;
+		}
+
+		if ( window.getSelection ) {
+			selection = window.getSelection();
+			selection.removeAllRanges();
+			selection.addRange( this.range );
+
+		// support: IE8
+		} else {
+			this.range.select();
+		}
+
+		// support: IE
+		// Setting the text selection kills the button focus in IE, but
+		// restoring the focus doesn't kill the selection.
+		this.button.focus();
+	},
+
+	_documentClick: {
+		mousedown: function( event ) {
+			if ( !this.isOpen ) {
+				return;
+			}
+
+			if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+				this.close( event );
+			}
+		}
+	},
+
+	_buttonEvents: {
+
+		// Prevent text selection from being reset when interacting with the selectmenu (#10144)
+		mousedown: function() {
+			var selection;
+
+			if ( window.getSelection ) {
+				selection = window.getSelection();
+				if ( selection.rangeCount ) {
+					this.range = selection.getRangeAt( 0 );
+				}
+
+			// support: IE8
+			} else {
+				this.range = document.selection.createRange();
+			}
+		},
+
+		click: function( event ) {
+			this._setSelection();
+			this._toggle( event );
+		},
+
+		keydown: function( event ) {
+			var preventDefault = true;
+			switch ( event.keyCode ) {
+				case $.ui.keyCode.TAB:
+				case $.ui.keyCode.ESCAPE:
+					this.close( event );
+					preventDefault = false;
+					break;
+				case $.ui.keyCode.ENTER:
+					if ( this.isOpen ) {
+						this._selectFocusedItem( event );
+					}
+					break;
+				case $.ui.keyCode.UP:
+					if ( event.altKey ) {
+						this._toggle( event );
+					} else {
+						this._move( "prev", event );
+					}
+					break;
+				case $.ui.keyCode.DOWN:
+					if ( event.altKey ) {
+						this._toggle( event );
+					} else {
+						this._move( "next", event );
+					}
+					break;
+				case $.ui.keyCode.SPACE:
+					if ( this.isOpen ) {
+						this._selectFocusedItem( event );
+					} else {
+						this._toggle( event );
+					}
+					break;
+				case $.ui.keyCode.LEFT:
+					this._move( "prev", event );
+					break;
+				case $.ui.keyCode.RIGHT:
+					this._move( "next", event );
+					break;
+				case $.ui.keyCode.HOME:
+				case $.ui.keyCode.PAGE_UP:
+					this._move( "first", event );
+					break;
+				case $.ui.keyCode.END:
+				case $.ui.keyCode.PAGE_DOWN:
+					this._move( "last", event );
+					break;
+				default:
+					this.menu.trigger( event );
+					preventDefault = false;
+			}
+
+			if ( preventDefault ) {
+				event.preventDefault();
+			}
+		}
+	},
+
+	_selectFocusedItem: function( event ) {
+		var item = this.menuItems.eq( this.focusIndex );
+		if ( !item.hasClass( "ui-state-disabled" ) ) {
+			this._select( item.data( "ui-selectmenu-item" ), event );
+		}
+	},
+
+	_select: function( item, event ) {
+		var oldIndex = this.element[ 0 ].selectedIndex;
+
+		// Change native select element
+		this.element[ 0 ].selectedIndex = item.index;
+		this._setText( this.buttonText, item.label );
+		this._setAria( item );
+		this._trigger( "select", event, { item: item } );
+
+		if ( item.index !== oldIndex ) {
+			this._trigger( "change", event, { item: item } );
+		}
+
+		this.close( event );
+	},
+
+	_setAria: function( item ) {
+		var id = this.menuItems.eq( item.index ).attr( "id" );
+
+		this.button.attr({
+			"aria-labelledby": id,
+			"aria-activedescendant": id
+		});
+		this.menu.attr( "aria-activedescendant", id );
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "icons" ) {
+			this.button.find( "span.ui-icon" )
+				.removeClass( this.options.icons.button )
+				.addClass( value.button );
+		}
+
+		this._super( key, value );
+
+		if ( key === "appendTo" ) {
+			this.menuWrap.appendTo( this._appendTo() );
+		}
+
+		if ( key === "disabled" ) {
+			this.menuInstance.option( "disabled", value );
+			this.button
+				.toggleClass( "ui-state-disabled", value )
+				.attr( "aria-disabled", value );
+
+			this.element.prop( "disabled", value );
+			if ( value ) {
+				this.button.attr( "tabindex", -1 );
+				this.close();
+			} else {
+				this.button.attr( "tabindex", 0 );
+			}
+		}
+
+		if ( key === "width" ) {
+			this._resizeButton();
+		}
+	},
+
+	_appendTo: function() {
+		var element = this.options.appendTo;
+
+		if ( element ) {
+			element = element.jquery || element.nodeType ?
+				$( element ) :
+				this.document.find( element ).eq( 0 );
+		}
+
+		if ( !element || !element[ 0 ] ) {
+			element = this.element.closest( ".ui-front" );
+		}
+
+		if ( !element.length ) {
+			element = this.document[ 0 ].body;
+		}
+
+		return element;
+	},
+
+	_toggleAttr: function() {
+		this.button
+			.toggleClass( "ui-corner-top", this.isOpen )
+			.toggleClass( "ui-corner-all", !this.isOpen )
+			.attr( "aria-expanded", this.isOpen );
+		this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+		this.menu.attr( "aria-hidden", !this.isOpen );
+	},
+
+	_resizeButton: function() {
+		var width = this.options.width;
+
+		if ( !width ) {
+			width = this.element.show().outerWidth();
+			this.element.hide();
+		}
+
+		this.button.outerWidth( width );
+	},
+
+	_resizeMenu: function() {
+		this.menu.outerWidth( Math.max(
+			this.button.outerWidth(),
+
+			// support: IE10
+			// IE10 wraps long text (possibly a rounding bug)
+			// so we add 1px to avoid the wrapping
+			this.menu.width( "" ).outerWidth() + 1
+		) );
+	},
+
+	_getCreateOptions: function() {
+		return { disabled: this.element.prop( "disabled" ) };
+	},
+
+	_parseOptions: function( options ) {
+		var data = [];
+		options.each(function( index, item ) {
+			var option = $( item ),
+				optgroup = option.parent( "optgroup" );
+			data.push({
+				element: option,
+				index: index,
+				value: option.val(),
+				label: option.text(),
+				optgroup: optgroup.attr( "label" ) || "",
+				disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+			});
+		});
+		this.items = data;
+	},
+
+	_destroy: function() {
+		this.menuWrap.remove();
+		this.button.remove();
+		this.element.show();
+		this.element.removeUniqueId();
+		this.label.attr( "for", this.ids.element );
+	}
+});
+
+
+/*!
+ * jQuery UI Slider 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
+
+var slider = $.widget( "ui.slider", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "slide",
+
+	options: {
+		animate: false,
+		distance: 0,
+		max: 100,
+		min: 0,
+		orientation: "horizontal",
+		range: false,
+		step: 1,
+		value: 0,
+		values: null,
+
+		// callbacks
+		change: null,
+		slide: null,
+		start: null,
+		stop: null
+	},
+
+	// number of pages in a slider
+	// (how many times can you page up/down to go through the whole range)
+	numPages: 5,
+
+	_create: function() {
+		this._keySliding = false;
+		this._mouseSliding = false;
+		this._animateOff = true;
+		this._handleIndex = null;
+		this._detectOrientation();
+		this._mouseInit();
+		this._calculateNewMax();
+
+		this.element
+			.addClass( "ui-slider" +
+				" ui-slider-" + this.orientation +
+				" ui-widget" +
+				" ui-widget-content" +
+				" ui-corner-all");
+
+		this._refresh();
+		this._setOption( "disabled", this.options.disabled );
+
+		this._animateOff = false;
+	},
+
+	_refresh: function() {
+		this._createRange();
+		this._createHandles();
+		this._setupEvents();
+		this._refreshValue();
+	},
+
+	_createHandles: function() {
+		var i, handleCount,
+			options = this.options,
+			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+			handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
+			handles = [];
+
+		handleCount = ( options.values && options.values.length ) || 1;
+
+		if ( existingHandles.length > handleCount ) {
+			existingHandles.slice( handleCount ).remove();
+			existingHandles = existingHandles.slice( 0, handleCount );
+		}
+
+		for ( i = existingHandles.length; i < handleCount; i++ ) {
+			handles.push( handle );
+		}
+
+		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+		this.handle = this.handles.eq( 0 );
+
+		this.handles.each(function( i ) {
+			$( this ).data( "ui-slider-handle-index", i );
+		});
+	},
+
+	_createRange: function() {
+		var options = this.options,
+			classes = "";
+
+		if ( options.range ) {
+			if ( options.range === true ) {
+				if ( !options.values ) {
+					options.values = [ this._valueMin(), this._valueMin() ];
+				} else if ( options.values.length && options.values.length !== 2 ) {
+					options.values = [ options.values[0], options.values[0] ];
+				} else if ( $.isArray( options.values ) ) {
+					options.values = options.values.slice(0);
+				}
+			}
+
+			if ( !this.range || !this.range.length ) {
+				this.range = $( "<div></div>" )
+					.appendTo( this.element );
+
+				classes = "ui-slider-range" +
+				// note: this isn't the most fittingly semantic framework class for this element,
+				// but worked best visually with a variety of themes
+				" ui-widget-header ui-corner-all";
+			} else {
+				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+					// Handle range switching from true to min/max
+					.css({
+						"left": "",
+						"bottom": ""
+					});
+			}
+
+			this.range.addClass( classes +
+				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+		} else {
+			if ( this.range ) {
+				this.range.remove();
+			}
+			this.range = null;
+		}
+	},
+
+	_setupEvents: function() {
+		this._off( this.handles );
+		this._on( this.handles, this._handleEvents );
+		this._hoverable( this.handles );
+		this._focusable( this.handles );
+	},
+
+	_destroy: function() {
+		this.handles.remove();
+		if ( this.range ) {
+			this.range.remove();
+		}
+
+		this.element
+			.removeClass( "ui-slider" +
+				" ui-slider-horizontal" +
+				" ui-slider-vertical" +
+				" ui-widget" +
+				" ui-widget-content" +
+				" ui-corner-all" );
+
+		this._mouseDestroy();
+	},
+
+	_mouseCapture: function( event ) {
+		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+			that = this,
+			o = this.options;
+
+		if ( o.disabled ) {
+			return false;
+		}
+
+		this.elementSize = {
+			width: this.element.outerWidth(),
+			height: this.element.outerHeight()
+		};
+		this.elementOffset = this.element.offset();
+
+		position = { x: event.pageX, y: event.pageY };
+		normValue = this._normValueFromMouse( position );
+		distance = this._valueMax() - this._valueMin() + 1;
+		this.handles.each(function( i ) {
+			var thisDistance = Math.abs( normValue - that.values(i) );
+			if (( distance > thisDistance ) ||
+				( distance === thisDistance &&
+					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+				distance = thisDistance;
+				closestHandle = $( this );
+				index = i;
+			}
+		});
+
+		allowed = this._start( event, index );
+		if ( allowed === false ) {
+			return false;
+		}
+		this._mouseSliding = true;
+
+		this._handleIndex = index;
+
+		closestHandle
+			.addClass( "ui-state-active" )
+			.focus();
+
+		offset = closestHandle.offset();
+		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+			top: event.pageY - offset.top -
+				( closestHandle.height() / 2 ) -
+				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+		};
+
+		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+			this._slide( event, index, normValue );
+		}
+		this._animateOff = true;
+		return true;
+	},
+
+	_mouseStart: function() {
+		return true;
+	},
+
+	_mouseDrag: function( event ) {
+		var position = { x: event.pageX, y: event.pageY },
+			normValue = this._normValueFromMouse( position );
+
+		this._slide( event, this._handleIndex, normValue );
+
+		return false;
+	},
+
+	_mouseStop: function( event ) {
+		this.handles.removeClass( "ui-state-active" );
+		this._mouseSliding = false;
+
+		this._stop( event, this._handleIndex );
+		this._change( event, this._handleIndex );
+
+		this._handleIndex = null;
+		this._clickOffset = null;
+		this._animateOff = false;
+
+		return false;
+	},
+
+	_detectOrientation: function() {
+		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+	},
+
+	_normValueFromMouse: function( position ) {
+		var pixelTotal,
+			pixelMouse,
+			percentMouse,
+			valueTotal,
+			valueMouse;
+
+		if ( this.orientation === "horizontal" ) {
+			pixelTotal = this.elementSize.width;
+			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+		} else {
+			pixelTotal = this.elementSize.height;
+			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+		}
+
+		percentMouse = ( pixelMouse / pixelTotal );
+		if ( percentMouse > 1 ) {
+			percentMouse = 1;
+		}
+		if ( percentMouse < 0 ) {
+			percentMouse = 0;
+		}
+		if ( this.orientation === "vertical" ) {
+			percentMouse = 1 - percentMouse;
+		}
+
+		valueTotal = this._valueMax() - this._valueMin();
+		valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+		return this._trimAlignValue( valueMouse );
+	},
+
+	_start: function( event, index ) {
+		var uiHash = {
+			handle: this.handles[ index ],
+			value: this.value()
+		};
+		if ( this.options.values && this.options.values.length ) {
+			uiHash.value = this.values( index );
+			uiHash.values = this.values();
+		}
+		return this._trigger( "start", event, uiHash );
+	},
+
+	_slide: function( event, index, newVal ) {
+		var otherVal,
+			newValues,
+			allowed;
+
+		if ( this.options.values && this.options.values.length ) {
+			otherVal = this.values( index ? 0 : 1 );
+
+			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+				) {
+				newVal = otherVal;
+			}
+
+			if ( newVal !== this.values( index ) ) {
+				newValues = this.values();
+				newValues[ index ] = newVal;
+				// A slide can be canceled by returning false from the slide callback
+				allowed = this._trigger( "slide", event, {
+					handle: this.handles[ index ],
+					value: newVal,
+					values: newValues
+				} );
+				otherVal = this.values( index ? 0 : 1 );
+				if ( allowed !== false ) {
+					this.values( index, newVal );
+				}
+			}
+		} else {
+			if ( newVal !== this.value() ) {
+				// A slide can be canceled by returning false from the slide callback
+				allowed = this._trigger( "slide", event, {
+					handle: this.handles[ index ],
+					value: newVal
+				} );
+				if ( allowed !== false ) {
+					this.value( newVal );
+				}
+			}
+		}
+	},
+
+	_stop: function( event, index ) {
+		var uiHash = {
+			handle: this.handles[ index ],
+			value: this.value()
+		};
+		if ( this.options.values && this.options.values.length ) {
+			uiHash.value = this.values( index );
+			uiHash.values = this.values();
+		}
+
+		this._trigger( "stop", event, uiHash );
+	},
+
+	_change: function( event, index ) {
+		if ( !this._keySliding && !this._mouseSliding ) {
+			var uiHash = {
+				handle: this.handles[ index ],
+				value: this.value()
+			};
+			if ( this.options.values && this.options.values.length ) {
+				uiHash.value = this.values( index );
+				uiHash.values = this.values();
+			}
+
+			//store the last changed value index for reference when handles overlap
+			this._lastChangedValue = index;
+
+			this._trigger( "change", event, uiHash );
+		}
+	},
+
+	value: function( newValue ) {
+		if ( arguments.length ) {
+			this.options.value = this._trimAlignValue( newValue );
+			this._refreshValue();
+			this._change( null, 0 );
+			return;
+		}
+
+		return this._value();
+	},
+
+	values: function( index, newValue ) {
+		var vals,
+			newValues,
+			i;
+
+		if ( arguments.length > 1 ) {
+			this.options.values[ index ] = this._trimAlignValue( newValue );
+			this._refreshValue();
+			this._change( null, index );
+			return;
+		}
+
+		if ( arguments.length ) {
+			if ( $.isArray( arguments[ 0 ] ) ) {
+				vals = this.options.values;
+				newValues = arguments[ 0 ];
+				for ( i = 0; i < vals.length; i += 1 ) {
+					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+					this._change( null, i );
+				}
+				this._refreshValue();
+			} else {
+				if ( this.options.values && this.options.values.length ) {
+					return this._values( index );
+				} else {
+					return this.value();
+				}
+			}
+		} else {
+			return this._values();
+		}
+	},
+
+	_setOption: function( key, value ) {
+		var i,
+			valsLength = 0;
+
+		if ( key === "range" && this.options.range === true ) {
+			if ( value === "min" ) {
+				this.options.value = this._values( 0 );
+				this.options.values = null;
+			} else if ( value === "max" ) {
+				this.options.value = this._values( this.options.values.length - 1 );
+				this.options.values = null;
+			}
+		}
+
+		if ( $.isArray( this.options.values ) ) {
+			valsLength = this.options.values.length;
+		}
+
+		if ( key === "disabled" ) {
+			this.element.toggleClass( "ui-state-disabled", !!value );
+		}
+
+		this._super( key, value );
+
+		switch ( key ) {
+			case "orientation":
+				this._detectOrientation();
+				this.element
+					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+					.addClass( "ui-slider-" + this.orientation );
+				this._refreshValue();
+
+				// Reset positioning from previous orientation
+				this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+				break;
+			case "value":
+				this._animateOff = true;
+				this._refreshValue();
+				this._change( null, 0 );
+				this._animateOff = false;
+				break;
+			case "values":
+				this._animateOff = true;
+				this._refreshValue();
+				for ( i = 0; i < valsLength; i += 1 ) {
+					this._change( null, i );
+				}
+				this._animateOff = false;
+				break;
+			case "step":
+			case "min":
+			case "max":
+				this._animateOff = true;
+				this._calculateNewMax();
+				this._refreshValue();
+				this._animateOff = false;
+				break;
+			case "range":
+				this._animateOff = true;
+				this._refresh();
+				this._animateOff = false;
+				break;
+		}
+	},
+
+	//internal value getter
+	// _value() returns value trimmed by min and max, aligned by step
+	_value: function() {
+		var val = this.options.value;
+		val = this._trimAlignValue( val );
+
+		return val;
+	},
+
+	//internal values getter
+	// _values() returns array of values trimmed by min and max, aligned by step
+	// _values( index ) returns single value trimmed by min and max, aligned by step
+	_values: function( index ) {
+		var val,
+			vals,
+			i;
+
+		if ( arguments.length ) {
+			val = this.options.values[ index ];
+			val = this._trimAlignValue( val );
+
+			return val;
+		} else if ( this.options.values && this.options.values.length ) {
+			// .slice() creates a copy of the array
+			// this copy gets trimmed by min and max and then returned
+			vals = this.options.values.slice();
+			for ( i = 0; i < vals.length; i += 1) {
+				vals[ i ] = this._trimAlignValue( vals[ i ] );
+			}
+
+			return vals;
+		} else {
+			return [];
+		}
+	},
+
+	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+	_trimAlignValue: function( val ) {
+		if ( val <= this._valueMin() ) {
+			return this._valueMin();
+		}
+		if ( val >= this._valueMax() ) {
+			return this._valueMax();
+		}
+		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+			valModStep = (val - this._valueMin()) % step,
+			alignValue = val - valModStep;
+
+		if ( Math.abs(valModStep) * 2 >= step ) {
+			alignValue += ( valModStep > 0 ) ? step : ( -step );
+		}
+
+		// Since JavaScript has problems with large floats, round
+		// the final value to 5 digits after the decimal point (see #4124)
+		return parseFloat( alignValue.toFixed(5) );
+	},
+
+	_calculateNewMax: function() {
+		var max = this.options.max,
+			min = this._valueMin(),
+			step = this.options.step,
+			aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;
+		max = aboveMin + min;
+		this.max = parseFloat( max.toFixed( this._precision() ) );
+	},
+
+	_precision: function() {
+		var precision = this._precisionOf( this.options.step );
+		if ( this.options.min !== null ) {
+			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+		}
+		return precision;
+	},
+
+	_precisionOf: function( num ) {
+		var str = num.toString(),
+			decimal = str.indexOf( "." );
+		return decimal === -1 ? 0 : str.length - decimal - 1;
+	},
+
+	_valueMin: function() {
+		return this.options.min;
+	},
+
+	_valueMax: function() {
+		return this.max;
+	},
+
+	_refreshValue: function() {
+		var lastValPercent, valPercent, value, valueMin, valueMax,
+			oRange = this.options.range,
+			o = this.options,
+			that = this,
+			animate = ( !this._animateOff ) ? o.animate : false,
+			_set = {};
+
+		if ( this.options.values && this.options.values.length ) {
+			this.handles.each(function( i ) {
+				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+				if ( that.options.range === true ) {
+					if ( that.orientation === "horizontal" ) {
+						if ( i === 0 ) {
+							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+						}
+						if ( i === 1 ) {
+							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+						}
+					} else {
+						if ( i === 0 ) {
+							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+						}
+						if ( i === 1 ) {
+							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+						}
+					}
+				}
+				lastValPercent = valPercent;
+			});
+		} else {
+			value = this.value();
+			valueMin = this._valueMin();
+			valueMax = this._valueMax();
+			valPercent = ( valueMax !== valueMin ) ?
+					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+					0;
+			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+			if ( oRange === "min" && this.orientation === "horizontal" ) {
+				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+			}
+			if ( oRange === "max" && this.orientation === "horizontal" ) {
+				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+			}
+			if ( oRange === "min" && this.orientation === "vertical" ) {
+				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+			}
+			if ( oRange === "max" && this.orientation === "vertical" ) {
+				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+			}
+		}
+	},
+
+	_handleEvents: {
+		keydown: function( event ) {
+			var allowed, curVal, newVal, step,
+				index = $( event.target ).data( "ui-slider-handle-index" );
+
+			switch ( event.keyCode ) {
+				case $.ui.keyCode.HOME:
+				case $.ui.keyCode.END:
+				case $.ui.keyCode.PAGE_UP:
+				case $.ui.keyCode.PAGE_DOWN:
+				case $.ui.keyCode.UP:
+				case $.ui.keyCode.RIGHT:
+				case $.ui.keyCode.DOWN:
+				case $.ui.keyCode.LEFT:
+					event.preventDefault();
+					if ( !this._keySliding ) {
+						this._keySliding = true;
+						$( event.target ).addClass( "ui-state-active" );
+						allowed = this._start( event, index );
+						if ( allowed === false ) {
+							return;
+						}
+					}
+					break;
+			}
+
+			step = this.options.step;
+			if ( this.options.values && this.options.values.length ) {
+				curVal = newVal = this.values( index );
+			} else {
+				curVal = newVal = this.value();
+			}
+
+			switch ( event.keyCode ) {
+				case $.ui.keyCode.HOME:
+					newVal = this._valueMin();
+					break;
+				case $.ui.keyCode.END:
+					newVal = this._valueMax();
+					break;
+				case $.ui.keyCode.PAGE_UP:
+					newVal = this._trimAlignValue(
+						curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+					);
+					break;
+				case $.ui.keyCode.PAGE_DOWN:
+					newVal = this._trimAlignValue(
+						curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );
+					break;
+				case $.ui.keyCode.UP:
+				case $.ui.keyCode.RIGHT:
+					if ( curVal === this._valueMax() ) {
+						return;
+					}
+					newVal = this._trimAlignValue( curVal + step );
+					break;
+				case $.ui.keyCode.DOWN:
+				case $.ui.keyCode.LEFT:
+					if ( curVal === this._valueMin() ) {
+						return;
+					}
+					newVal = this._trimAlignValue( curVal - step );
+					break;
+			}
+
+			this._slide( event, index, newVal );
+		},
+		keyup: function( event ) {
+			var index = $( event.target ).data( "ui-slider-handle-index" );
+
+			if ( this._keySliding ) {
+				this._keySliding = false;
+				this._stop( event, index );
+				this._change( event, index );
+				$( event.target ).removeClass( "ui-state-active" );
+			}
+		}
+	}
+});
+
+
+/*!
+ * jQuery UI Sortable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "sort",
+	ready: false,
+	options: {
+		appendTo: "parent",
+		axis: false,
+		connectWith: false,
+		containment: false,
+		cursor: "auto",
+		cursorAt: false,
+		dropOnEmpty: true,
+		forcePlaceholderSize: false,
+		forceHelperSize: false,
+		grid: false,
+		handle: false,
+		helper: "original",
+		items: "> *",
+		opacity: false,
+		placeholder: false,
+		revert: false,
+		scroll: true,
+		scrollSensitivity: 20,
+		scrollSpeed: 20,
+		scope: "default",
+		tolerance: "intersect",
+		zIndex: 1000,
+
+		// callbacks
+		activate: null,
+		beforeStop: null,
+		change: null,
+		deactivate: null,
+		out: null,
+		over: null,
+		receive: null,
+		remove: null,
+		sort: null,
+		start: null,
+		stop: null,
+		update: null
+	},
+
+	_isOverAxis: function( x, reference, size ) {
+		return ( x >= reference ) && ( x < ( reference + size ) );
+	},
+
+	_isFloating: function( item ) {
+		return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+	},
+
+	_create: function() {
+		this.containerCache = {};
+		this.element.addClass("ui-sortable");
+
+		//Get the items
+		this.refresh();
+
+		//Let's determine the parent's offset
+		this.offset = this.element.offset();
+
+		//Initialize mouse events for interaction
+		this._mouseInit();
+
+		this._setHandleClassName();
+
+		//We're ready to go
+		this.ready = true;
+
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+
+		if ( key === "handle" ) {
+			this._setHandleClassName();
+		}
+	},
+
+	_setHandleClassName: function() {
+		this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+		$.each( this.items, function() {
+			( this.instance.options.handle ?
+				this.item.find( this.instance.options.handle ) : this.item )
+				.addClass( "ui-sortable-handle" );
+		});
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-sortable ui-sortable-disabled" )
+			.find( ".ui-sortable-handle" )
+				.removeClass( "ui-sortable-handle" );
+		this._mouseDestroy();
+
+		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+			this.items[i].item.removeData(this.widgetName + "-item");
+		}
+
+		return this;
+	},
+
+	_mouseCapture: function(event, overrideHandle) {
+		var currentItem = null,
+			validHandle = false,
+			that = this;
+
+		if (this.reverting) {
+			return false;
+		}
+
+		if(this.options.disabled || this.options.type === "static") {
+			return false;
+		}
+
+		//We have to refresh the items data once first
+		this._refreshItems(event);
+
+		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+		$(event.target).parents().each(function() {
+			if($.data(this, that.widgetName + "-item") === that) {
+				currentItem = $(this);
+				return false;
+			}
+		});
+		if($.data(event.target, that.widgetName + "-item") === that) {
+			currentItem = $(event.target);
+		}
+
+		if(!currentItem) {
+			return false;
+		}
+		if(this.options.handle && !overrideHandle) {
+			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+				if(this === event.target) {
+					validHandle = true;
+				}
+			});
+			if(!validHandle) {
+				return false;
+			}
+		}
+
+		this.currentItem = currentItem;
+		this._removeCurrentsFromItems();
+		return true;
+
+	},
+
+	_mouseStart: function(event, overrideHandle, noActivation) {
+
+		var i, body,
+			o = this.options;
+
+		this.currentContainer = this;
+
+		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+		this.refreshPositions();
+
+		//Create and append the visible helper
+		this.helper = this._createHelper(event);
+
+		//Cache the helper size
+		this._cacheHelperProportions();
+
+		/*
+		 * - Position generation -
+		 * This block generates everything position related - it's the core of draggables.
+		 */
+
+		//Cache the margins of the original element
+		this._cacheMargins();
+
+		//Get the next scrolling parent
+		this.scrollParent = this.helper.scrollParent();
+
+		//The element's absolute position on the page minus margins
+		this.offset = this.currentItem.offset();
+		this.offset = {
+			top: this.offset.top - this.margins.top,
+			left: this.offset.left - this.margins.left
+		};
+
+		$.extend(this.offset, {
+			click: { //Where the click happened, relative to the element
+				left: event.pageX - this.offset.left,
+				top: event.pageY - this.offset.top
+			},
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+		});
+
+		// Only after we got the offset, we can change the helper's position to absolute
+		// TODO: Still need to figure out a way to make relative sorting possible
+		this.helper.css("position", "absolute");
+		this.cssPosition = this.helper.css("position");
+
+		//Generate the original position
+		this.originalPosition = this._generatePosition(event);
+		this.originalPageX = event.pageX;
+		this.originalPageY = event.pageY;
+
+		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+		//Cache the former DOM position
+		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+		if(this.helper[0] !== this.currentItem[0]) {
+			this.currentItem.hide();
+		}
+
+		//Create the placeholder
+		this._createPlaceholder();
+
+		//Set a containment if given in the options
+		if(o.containment) {
+			this._setContainment();
+		}
+
+		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+			body = this.document.find( "body" );
+
+			// support: IE
+			this.storedCursor = body.css( "cursor" );
+			body.css( "cursor", o.cursor );
+
+			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+		}
+
+		if(o.opacity) { // opacity option
+			if (this.helper.css("opacity")) {
+				this._storedOpacity = this.helper.css("opacity");
+			}
+			this.helper.css("opacity", o.opacity);
+		}
+
+		if(o.zIndex) { // zIndex option
+			if (this.helper.css("zIndex")) {
+				this._storedZIndex = this.helper.css("zIndex");
+			}
+			this.helper.css("zIndex", o.zIndex);
+		}
+
+		//Prepare scrolling
+		if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+			this.overflowOffset = this.scrollParent.offset();
+		}
+
+		//Call callbacks
+		this._trigger("start", event, this._uiHash());
+
+		//Recache the helper size
+		if(!this._preserveHelperProportions) {
+			this._cacheHelperProportions();
+		}
+
+
+		//Post "activate" events to possible containers
+		if( !noActivation ) {
+			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+			}
+		}
+
+		//Prepare possible droppables
+		if($.ui.ddmanager) {
+			$.ui.ddmanager.current = this;
+		}
+
+		if ($.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(this, event);
+		}
+
+		this.dragging = true;
+
+		this.helper.addClass("ui-sortable-helper");
+		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+		return true;
+
+	},
+
+	_mouseDrag: function(event) {
+		var i, item, itemElement, intersection,
+			o = this.options,
+			scrolled = false;
+
+		//Compute the helpers position
+		this.position = this._generatePosition(event);
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		if (!this.lastPositionAbs) {
+			this.lastPositionAbs = this.positionAbs;
+		}
+
+		//Do scrolling
+		if(this.options.scroll) {
+			if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+				}
+
+				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+				}
+
+			} else {
+
+				if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+					scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+				} else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+					scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+				}
+
+				if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+					scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+				} else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+					scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+				}
+
+			}
+
+			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+				$.ui.ddmanager.prepareOffsets(this, event);
+			}
+		}
+
+		//Regenerate the absolute position used for position checks
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		//Set the helper position
+		if(!this.options.axis || this.options.axis !== "y") {
+			this.helper[0].style.left = this.position.left+"px";
+		}
+		if(!this.options.axis || this.options.axis !== "x") {
+			this.helper[0].style.top = this.position.top+"px";
+		}
+
+		//Rearrange
+		for (i = this.items.length - 1; i >= 0; i--) {
+
+			//Cache variables and intersection, continue if no intersection
+			item = this.items[i];
+			itemElement = item.item[0];
+			intersection = this._intersectsWithPointer(item);
+			if (!intersection) {
+				continue;
+			}
+
+			// Only put the placeholder inside the current Container, skip all
+			// items from other containers. This works because when moving
+			// an item from one container to another the
+			// currentContainer is switched before the placeholder is moved.
+			//
+			// Without this, moving items in "sub-sortables" can cause
+			// the placeholder to jitter between the outer and inner container.
+			if (item.instance !== this.currentContainer) {
+				continue;
+			}
+
+			// cannot intersect with itself
+			// no useless actions that have been done before
+			// no action if the item moved is the parent of the item checked
+			if (itemElement !== this.currentItem[0] &&
+				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+				!$.contains(this.placeholder[0], itemElement) &&
+				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+			) {
+
+				this.direction = intersection === 1 ? "down" : "up";
+
+				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+					this._rearrange(event, item);
+				} else {
+					break;
+				}
+
+				this._trigger("change", event, this._uiHash());
+				break;
+			}
+		}
+
+		//Post events to containers
+		this._contactContainers(event);
+
+		//Interconnect with droppables
+		if($.ui.ddmanager) {
+			$.ui.ddmanager.drag(this, event);
+		}
+
+		//Call callbacks
+		this._trigger("sort", event, this._uiHash());
+
+		this.lastPositionAbs = this.positionAbs;
+		return false;
+
+	},
+
+	_mouseStop: function(event, noPropagation) {
+
+		if(!event) {
+			return;
+		}
+
+		//If we are using droppables, inform the manager about the drop
+		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+			$.ui.ddmanager.drop(this, event);
+		}
+
+		if(this.options.revert) {
+			var that = this,
+				cur = this.placeholder.offset(),
+				axis = this.options.axis,
+				animation = {};
+
+			if ( !axis || axis === "x" ) {
+				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+			}
+			if ( !axis || axis === "y" ) {
+				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+			}
+			this.reverting = true;
+			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+				that._clear(event);
+			});
+		} else {
+			this._clear(event, noPropagation);
+		}
+
+		return false;
+
+	},
+
+	cancel: function() {
+
+		if(this.dragging) {
+
+			this._mouseUp({ target: null });
+
+			if(this.options.helper === "original") {
+				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+			} else {
+				this.currentItem.show();
+			}
+
+			//Post deactivating events to containers
+			for (var i = this.containers.length - 1; i >= 0; i--){
+				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+				if(this.containers[i].containerCache.over) {
+					this.containers[i]._trigger("out", null, this._uiHash(this));
+					this.containers[i].containerCache.over = 0;
+				}
+			}
+
+		}
+
+		if (this.placeholder) {
+			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+			if(this.placeholder[0].parentNode) {
+				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+			}
+			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+				this.helper.remove();
+			}
+
+			$.extend(this, {
+				helper: null,
+				dragging: false,
+				reverting: false,
+				_noFinalSort: null
+			});
+
+			if(this.domPosition.prev) {
+				$(this.domPosition.prev).after(this.currentItem);
+			} else {
+				$(this.domPosition.parent).prepend(this.currentItem);
+			}
+		}
+
+		return this;
+
+	},
+
+	serialize: function(o) {
+
+		var items = this._getItemsAsjQuery(o && o.connected),
+			str = [];
+		o = o || {};
+
+		$(items).each(function() {
+			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+			if (res) {
+				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+			}
+		});
+
+		if(!str.length && o.key) {
+			str.push(o.key + "=");
+		}
+
+		return str.join("&");
+
+	},
+
+	toArray: function(o) {
+
+		var items = this._getItemsAsjQuery(o && o.connected),
+			ret = [];
+
+		o = o || {};
+
+		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+		return ret;
+
+	},
+
+	/* Be careful with the following core functions */
+	_intersectsWith: function(item) {
+
+		var x1 = this.positionAbs.left,
+			x2 = x1 + this.helperProportions.width,
+			y1 = this.positionAbs.top,
+			y2 = y1 + this.helperProportions.height,
+			l = item.left,
+			r = l + item.width,
+			t = item.top,
+			b = t + item.height,
+			dyClick = this.offset.click.top,
+			dxClick = this.offset.click.left,
+			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+			isOverElement = isOverElementHeight && isOverElementWidth;
+
+		if ( this.options.tolerance === "pointer" ||
+			this.options.forcePointerForContainers ||
+			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+		) {
+			return isOverElement;
+		} else {
+
+			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+				x2 - (this.helperProportions.width / 2) < r && // Left Half
+				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+		}
+	},
+
+	_intersectsWithPointer: function(item) {
+
+		var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+			isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+			isOverElement = isOverElementHeight && isOverElementWidth,
+			verticalDirection = this._getDragVerticalDirection(),
+			horizontalDirection = this._getDragHorizontalDirection();
+
+		if (!isOverElement) {
+			return false;
+		}
+
+		return this.floating ?
+			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+	},
+
+	_intersectsWithSides: function(item) {
+
+		var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+			isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+			verticalDirection = this._getDragVerticalDirection(),
+			horizontalDirection = this._getDragHorizontalDirection();
+
+		if (this.floating && horizontalDirection) {
+			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+		} else {
+			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+		}
+
+	},
+
+	_getDragVerticalDirection: function() {
+		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+		return delta !== 0 && (delta > 0 ? "down" : "up");
+	},
+
+	_getDragHorizontalDirection: function() {
+		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+		return delta !== 0 && (delta > 0 ? "right" : "left");
+	},
+
+	refresh: function(event) {
+		this._refreshItems(event);
+		this._setHandleClassName();
+		this.refreshPositions();
+		return this;
+	},
+
+	_connectWith: function() {
+		var options = this.options;
+		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+	},
+
+	_getItemsAsjQuery: function(connected) {
+
+		var i, j, cur, inst,
+			items = [],
+			queries = [],
+			connectWith = this._connectWith();
+
+		if(connectWith && connected) {
+			for (i = connectWith.length - 1; i >= 0; i--){
+				cur = $(connectWith[i], this.document[0]);
+				for ( j = cur.length - 1; j >= 0; j--){
+					inst = $.data(cur[j], this.widgetFullName);
+					if(inst && inst !== this && !inst.options.disabled) {
+						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+					}
+				}
+			}
+		}
+
+		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+		function addItems() {
+			items.push( this );
+		}
+		for (i = queries.length - 1; i >= 0; i--){
+			queries[i][0].each( addItems );
+		}
+
+		return $(items);
+
+	},
+
+	_removeCurrentsFromItems: function() {
+
+		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+		this.items = $.grep(this.items, function (item) {
+			for (var j=0; j < list.length; j++) {
+				if(list[j] === item.item[0]) {
+					return false;
+				}
+			}
+			return true;
+		});
+
+	},
+
+	_refreshItems: function(event) {
+
+		this.items = [];
+		this.containers = [this];
+
+		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+			items = this.items,
+			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+			connectWith = this._connectWith();
+
+		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+			for (i = connectWith.length - 1; i >= 0; i--){
+				cur = $(connectWith[i], this.document[0]);
+				for (j = cur.length - 1; j >= 0; j--){
+					inst = $.data(cur[j], this.widgetFullName);
+					if(inst && inst !== this && !inst.options.disabled) {
+						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+						this.containers.push(inst);
+					}
+				}
+			}
+		}
+
+		for (i = queries.length - 1; i >= 0; i--) {
+			targetData = queries[i][1];
+			_queries = queries[i][0];
+
+			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+				item = $(_queries[j]);
+
+				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+				items.push({
+					item: item,
+					instance: targetData,
+					width: 0, height: 0,
+					left: 0, top: 0
+				});
+			}
+		}
+
+	},
+
+	refreshPositions: function(fast) {
+
+		// Determine whether items are being displayed horizontally
+		this.floating = this.items.length ?
+			this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+			false;
+
+		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+		if(this.offsetParent && this.helper) {
+			this.offset.parent = this._getParentOffset();
+		}
+
+		var i, item, t, p;
+
+		for (i = this.items.length - 1; i >= 0; i--){
+			item = this.items[i];
+
+			//We ignore calculating positions of all connected containers when we're not over them
+			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+				continue;
+			}
+
+			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+			if (!fast) {
+				item.width = t.outerWidth();
+				item.height = t.outerHeight();
+			}
+
+			p = t.offset();
+			item.left = p.left;
+			item.top = p.top;
+		}
+
+		if(this.options.custom && this.options.custom.refreshContainers) {
+			this.options.custom.refreshContainers.call(this);
+		} else {
+			for (i = this.containers.length - 1; i >= 0; i--){
+				p = this.containers[i].element.offset();
+				this.containers[i].containerCache.left = p.left;
+				this.containers[i].containerCache.top = p.top;
+				this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+			}
+		}
+
+		return this;
+	},
+
+	_createPlaceholder: function(that) {
+		that = that || this;
+		var className,
+			o = that.options;
+
+		if(!o.placeholder || o.placeholder.constructor === String) {
+			className = o.placeholder;
+			o.placeholder = {
+				element: function() {
+
+					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+						element = $( "<" + nodeName + ">", that.document[0] )
+							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+							.removeClass("ui-sortable-helper");
+
+					if ( nodeName === "tbody" ) {
+						that._createTrPlaceholder(
+							that.currentItem.find( "tr" ).eq( 0 ),
+							$( "<tr>", that.document[ 0 ] ).appendTo( element )
+						);
+					} else if ( nodeName === "tr" ) {
+						that._createTrPlaceholder( that.currentItem, element );
+					} else if ( nodeName === "img" ) {
+						element.attr( "src", that.currentItem.attr( "src" ) );
+					}
+
+					if ( !className ) {
+						element.css( "visibility", "hidden" );
+					}
+
+					return element;
+				},
+				update: function(container, p) {
+
+					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+					if(className && !o.forcePlaceholderSize) {
+						return;
+					}
+
+					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+				}
+			};
+		}
+
+		//Create the placeholder
+		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+		//Append it after the actual current item
+		that.currentItem.after(that.placeholder);
+
+		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+		o.placeholder.update(that, that.placeholder);
+
+	},
+
+	_createTrPlaceholder: function( sourceTr, targetTr ) {
+		var that = this;
+
+		sourceTr.children().each(function() {
+			$( "<td>&#160;</td>", that.document[ 0 ] )
+				.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+				.appendTo( targetTr );
+		});
+	},
+
+	_contactContainers: function(event) {
+		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+			innermostContainer = null,
+			innermostIndex = null;
+
+		// get innermost container that intersects with item
+		for (i = this.containers.length - 1; i >= 0; i--) {
+
+			// never consider a container that's located within the item itself
+			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+				continue;
+			}
+
+			if(this._intersectsWith(this.containers[i].containerCache)) {
+
+				// if we've already found a container and it's more "inner" than this, then continue
+				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+					continue;
+				}
+
+				innermostContainer = this.containers[i];
+				innermostIndex = i;
+
+			} else {
+				// container doesn't intersect. trigger "out" event if necessary
+				if(this.containers[i].containerCache.over) {
+					this.containers[i]._trigger("out", event, this._uiHash(this));
+					this.containers[i].containerCache.over = 0;
+				}
+			}
+
+		}
+
+		// if no intersecting containers found, return
+		if(!innermostContainer) {
+			return;
+		}
+
+		// move the item into the container if it's not there already
+		if(this.containers.length === 1) {
+			if (!this.containers[innermostIndex].containerCache.over) {
+				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+				this.containers[innermostIndex].containerCache.over = 1;
+			}
+		} else {
+
+			//When entering a new container, we will find the item with the least distance and append our item near it
+			dist = 10000;
+			itemWithLeastDistance = null;
+			floating = innermostContainer.floating || this._isFloating(this.currentItem);
+			posProperty = floating ? "left" : "top";
+			sizeProperty = floating ? "width" : "height";
+			axis = floating ? "clientX" : "clientY";
+
+			for (j = this.items.length - 1; j >= 0; j--) {
+				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+					continue;
+				}
+				if(this.items[j].item[0] === this.currentItem[0]) {
+					continue;
+				}
+
+				cur = this.items[j].item.offset()[posProperty];
+				nearBottom = false;
+				if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+					nearBottom = true;
+				}
+
+				if ( Math.abs( event[ axis ] - cur ) < dist ) {
+					dist = Math.abs( event[ axis ] - cur );
+					itemWithLeastDistance = this.items[ j ];
+					this.direction = nearBottom ? "up": "down";
+				}
+			}
+
+			//Check if dropOnEmpty is enabled
+			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+				return;
+			}
+
+			if(this.currentContainer === this.containers[innermostIndex]) {
+				if ( !this.currentContainer.containerCache.over ) {
+					this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+					this.currentContainer.containerCache.over = 1;
+				}
+				return;
+			}
+
+			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+			this._trigger("change", event, this._uiHash());
+			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+			this.currentContainer = this.containers[innermostIndex];
+
+			//Update the placeholder
+			this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+			this.containers[innermostIndex].containerCache.over = 1;
+		}
+
+
+	},
+
+	_createHelper: function(event) {
+
+		var o = this.options,
+			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+		//Add the helper to the DOM if that didn't happen already
+		if(!helper.parents("body").length) {
+			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+		}
+
+		if(helper[0] === this.currentItem[0]) {
+			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+		}
+
+		if(!helper[0].style.width || o.forceHelperSize) {
+			helper.width(this.currentItem.width());
+		}
+		if(!helper[0].style.height || o.forceHelperSize) {
+			helper.height(this.currentItem.height());
+		}
+
+		return helper;
+
+	},
+
+	_adjustOffsetFromHelper: function(obj) {
+		if (typeof obj === "string") {
+			obj = obj.split(" ");
+		}
+		if ($.isArray(obj)) {
+			obj = {left: +obj[0], top: +obj[1] || 0};
+		}
+		if ("left" in obj) {
+			this.offset.click.left = obj.left + this.margins.left;
+		}
+		if ("right" in obj) {
+			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+		}
+		if ("top" in obj) {
+			this.offset.click.top = obj.top + this.margins.top;
+		}
+		if ("bottom" in obj) {
+			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+		}
+	},
+
+	_getParentOffset: function() {
+
+
+		//Get the offsetParent and cache its position
+		this.offsetParent = this.helper.offsetParent();
+		var po = this.offsetParent.offset();
+
+		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+		if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+			po.left += this.scrollParent.scrollLeft();
+			po.top += this.scrollParent.scrollTop();
+		}
+
+		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+		// with an ugly IE fix
+		if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+			po = { top: 0, left: 0 };
+		}
+
+		return {
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+		};
+
+	},
+
+	_getRelativeOffset: function() {
+
+		if(this.cssPosition === "relative") {
+			var p = this.currentItem.position();
+			return {
+				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+			};
+		} else {
+			return { top: 0, left: 0 };
+		}
+
+	},
+
+	_cacheMargins: function() {
+		this.margins = {
+			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+		};
+	},
+
+	_cacheHelperProportions: function() {
+		this.helperProportions = {
+			width: this.helper.outerWidth(),
+			height: this.helper.outerHeight()
+		};
+	},
+
+	_setContainment: function() {
+
+		var ce, co, over,
+			o = this.options;
+		if(o.containment === "parent") {
+			o.containment = this.helper[0].parentNode;
+		}
+		if(o.containment === "document" || o.containment === "window") {
+			this.containment = [
+				0 - this.offset.relative.left - this.offset.parent.left,
+				0 - this.offset.relative.top - this.offset.parent.top,
+				o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+				(o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+			];
+		}
+
+		if(!(/^(document|window|parent)$/).test(o.containment)) {
+			ce = $(o.containment)[0];
+			co = $(o.containment).offset();
+			over = ($(ce).css("overflow") !== "hidden");
+
+			this.containment = [
+				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+			];
+		}
+
+	},
+
+	_convertPositionTo: function(d, pos) {
+
+		if(!pos) {
+			pos = this.position;
+		}
+		var mod = d === "absolute" ? 1 : -1,
+			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+		return {
+			top: (
+				pos.top	+																// The absolute mouse position
+				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+			),
+			left: (
+				pos.left +																// The absolute mouse position
+				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+			)
+		};
+
+	},
+
+	_generatePosition: function(event) {
+
+		var top, left,
+			o = this.options,
+			pageX = event.pageX,
+			pageY = event.pageY,
+			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+		// This is another very weird special case that only happens for relative elements:
+		// 1. If the css position is relative
+		// 2. and the scroll parent is the document or similar to the offset parent
+		// we have to refresh the relative offset during the scroll so there are no jumps
+		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+			this.offset.relative = this._getRelativeOffset();
+		}
+
+		/*
+		 * - Position constraining -
+		 * Constrain the position to a mix of grid, containment.
+		 */
+
+		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+			if(this.containment) {
+				if(event.pageX - this.offset.click.left < this.containment[0]) {
+					pageX = this.containment[0] + this.offset.click.left;
+				}
+				if(event.pageY - this.offset.click.top < this.containment[1]) {
+					pageY = this.containment[1] + this.offset.click.top;
+				}
+				if(event.pageX - this.offset.click.left > this.containment[2]) {
+					pageX = this.containment[2] + this.offset.click.left;
+				}
+				if(event.pageY - this.offset.click.top > this.containment[3]) {
+					pageY = this.containment[3] + this.offset.click.top;
+				}
+			}
+
+			if(o.grid) {
+				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+			}
+
+		}
+
+		return {
+			top: (
+				pageY -																// The absolute mouse position
+				this.offset.click.top -													// Click offset (relative to the element)
+				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+			),
+			left: (
+				pageX -																// The absolute mouse position
+				this.offset.click.left -												// Click offset (relative to the element)
+				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+			)
+		};
+
+	},
+
+	_rearrange: function(event, i, a, hardRefresh) {
+
+		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+		//Various things done here to improve the performance:
+		// 1. we create a setTimeout, that calls refreshPositions
+		// 2. on the instance, we have a counter variable, that get's higher after every append
+		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+		// 4. this lets only the last addition to the timeout stack through
+		this.counter = this.counter ? ++this.counter : 1;
+		var counter = this.counter;
+
+		this._delay(function() {
+			if(counter === this.counter) {
+				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+			}
+		});
+
+	},
+
+	_clear: function(event, noPropagation) {
+
+		this.reverting = false;
+		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+		// everything else normalized again
+		var i,
+			delayedTriggers = [];
+
+		// We first have to update the dom position of the actual currentItem
+		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+		if(!this._noFinalSort && this.currentItem.parent().length) {
+			this.placeholder.before(this.currentItem);
+		}
+		this._noFinalSort = null;
+
+		if(this.helper[0] === this.currentItem[0]) {
+			for(i in this._storedCSS) {
+				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+					this._storedCSS[i] = "";
+				}
+			}
+			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+		} else {
+			this.currentItem.show();
+		}
+
+		if(this.fromOutside && !noPropagation) {
+			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+		}
+		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+		}
+
+		// Check if the items Container has Changed and trigger appropriate
+		// events.
+		if (this !== this.currentContainer) {
+			if(!noPropagation) {
+				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+			}
+		}
+
+
+		//Post events to containers
+		function delayEvent( type, instance, container ) {
+			return function( event ) {
+				container._trigger( type, event, instance._uiHash( instance ) );
+			};
+		}
+		for (i = this.containers.length - 1; i >= 0; i--){
+			if (!noPropagation) {
+				delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+			}
+			if(this.containers[i].containerCache.over) {
+				delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+				this.containers[i].containerCache.over = 0;
+			}
+		}
+
+		//Do what was originally in plugins
+		if ( this.storedCursor ) {
+			this.document.find( "body" ).css( "cursor", this.storedCursor );
+			this.storedStylesheet.remove();
+		}
+		if(this._storedOpacity) {
+			this.helper.css("opacity", this._storedOpacity);
+		}
+		if(this._storedZIndex) {
+			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+		}
+
+		this.dragging = false;
+
+		if(!noPropagation) {
+			this._trigger("beforeStop", event, this._uiHash());
+		}
+
+		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+		if ( !this.cancelHelperRemoval ) {
+			if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+				this.helper.remove();
+			}
+			this.helper = null;
+		}
+
+		if(!noPropagation) {
+			for (i=0; i < delayedTriggers.length; i++) {
+				delayedTriggers[i].call(this, event);
+			} //Trigger all delayed events
+			this._trigger("stop", event, this._uiHash());
+		}
+
+		this.fromOutside = false;
+		return !this.cancelHelperRemoval;
+
+	},
+
+	_trigger: function() {
+		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+			this.cancel();
+		}
+	},
+
+	_uiHash: function(_inst) {
+		var inst = _inst || this;
+		return {
+			helper: inst.helper,
+			placeholder: inst.placeholder || $([]),
+			position: inst.position,
+			originalPosition: inst.originalPosition,
+			offset: inst.positionAbs,
+			item: inst.currentItem,
+			sender: _inst ? _inst.element : null
+		};
+	}
+
+});
+
+
+/*!
+ * jQuery UI Spinner 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+function spinner_modifier( fn ) {
+	return function() {
+		var previous = this.element.val();
+		fn.apply( this, arguments );
+		this._refresh();
+		if ( previous !== this.element.val() ) {
+			this._trigger( "change" );
+		}
+	};
+}
+
+var spinner = $.widget( "ui.spinner", {
+	version: "1.11.4",
+	defaultElement: "<input>",
+	widgetEventPrefix: "spin",
+	options: {
+		culture: null,
+		icons: {
+			down: "ui-icon-triangle-1-s",
+			up: "ui-icon-triangle-1-n"
+		},
+		incremental: true,
+		max: null,
+		min: null,
+		numberFormat: null,
+		page: 10,
+		step: 1,
+
+		change: null,
+		spin: null,
+		start: null,
+		stop: null
+	},
+
+	_create: function() {
+		// handle string values that need to be parsed
+		this._setOption( "max", this.options.max );
+		this._setOption( "min", this.options.min );
+		this._setOption( "step", this.options.step );
+
+		// Only format if there is a value, prevents the field from being marked
+		// as invalid in Firefox, see #9573.
+		if ( this.value() !== "" ) {
+			// Format the value, but don't constrain.
+			this._value( this.element.val(), true );
+		}
+
+		this._draw();
+		this._on( this._events );
+		this._refresh();
+
+		// turning off autocomplete prevents the browser from remembering the
+		// value when navigating through history, so we re-enable autocomplete
+		// if the page is unloaded before the widget is destroyed. #7790
+		this._on( this.window, {
+			beforeunload: function() {
+				this.element.removeAttr( "autocomplete" );
+			}
+		});
+	},
+
+	_getCreateOptions: function() {
+		var options = {},
+			element = this.element;
+
+		$.each( [ "min", "max", "step" ], function( i, option ) {
+			var value = element.attr( option );
+			if ( value !== undefined && value.length ) {
+				options[ option ] = value;
+			}
+		});
+
+		return options;
+	},
+
+	_events: {
+		keydown: function( event ) {
+			if ( this._start( event ) && this._keydown( event ) ) {
+				event.preventDefault();
+			}
+		},
+		keyup: "_stop",
+		focus: function() {
+			this.previous = this.element.val();
+		},
+		blur: function( event ) {
+			if ( this.cancelBlur ) {
+				delete this.cancelBlur;
+				return;
+			}
+
+			this._stop();
+			this._refresh();
+			if ( this.previous !== this.element.val() ) {
+				this._trigger( "change", event );
+			}
+		},
+		mousewheel: function( event, delta ) {
+			if ( !delta ) {
+				return;
+			}
+			if ( !this.spinning && !this._start( event ) ) {
+				return false;
+			}
+
+			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+			clearTimeout( this.mousewheelTimer );
+			this.mousewheelTimer = this._delay(function() {
+				if ( this.spinning ) {
+					this._stop( event );
+				}
+			}, 100 );
+			event.preventDefault();
+		},
+		"mousedown .ui-spinner-button": function( event ) {
+			var previous;
+
+			// We never want the buttons to have focus; whenever the user is
+			// interacting with the spinner, the focus should be on the input.
+			// If the input is focused then this.previous is properly set from
+			// when the input first received focus. If the input is not focused
+			// then we need to set this.previous based on the value before spinning.
+			previous = this.element[0] === this.document[0].activeElement ?
+				this.previous : this.element.val();
+			function checkFocus() {
+				var isActive = this.element[0] === this.document[0].activeElement;
+				if ( !isActive ) {
+					this.element.focus();
+					this.previous = previous;
+					// support: IE
+					// IE sets focus asynchronously, so we need to check if focus
+					// moved off of the input because the user clicked on the button.
+					this._delay(function() {
+						this.previous = previous;
+					});
+				}
+			}
+
+			// ensure focus is on (or stays on) the text field
+			event.preventDefault();
+			checkFocus.call( this );
+
+			// support: IE
+			// IE doesn't prevent moving focus even with event.preventDefault()
+			// so we set a flag to know when we should ignore the blur event
+			// and check (again) if focus moved off of the input.
+			this.cancelBlur = true;
+			this._delay(function() {
+				delete this.cancelBlur;
+				checkFocus.call( this );
+			});
+
+			if ( this._start( event ) === false ) {
+				return;
+			}
+
+			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+		},
+		"mouseup .ui-spinner-button": "_stop",
+		"mouseenter .ui-spinner-button": function( event ) {
+			// button will add ui-state-active if mouse was down while mouseleave and kept down
+			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+				return;
+			}
+
+			if ( this._start( event ) === false ) {
+				return false;
+			}
+			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+		},
+		// TODO: do we really want to consider this a stop?
+		// shouldn't we just stop the repeater and wait until mouseup before
+		// we trigger the stop event?
+		"mouseleave .ui-spinner-button": "_stop"
+	},
+
+	_draw: function() {
+		var uiSpinner = this.uiSpinner = this.element
+			.addClass( "ui-spinner-input" )
+			.attr( "autocomplete", "off" )
+			.wrap( this._uiSpinnerHtml() )
+			.parent()
+				// add buttons
+				.append( this._buttonHtml() );
+
+		this.element.attr( "role", "spinbutton" );
+
+		// button bindings
+		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+			.attr( "tabIndex", -1 )
+			.button()
+			.removeClass( "ui-corner-all" );
+
+		// IE 6 doesn't understand height: 50% for the buttons
+		// unless the wrapper has an explicit height
+		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+				uiSpinner.height() > 0 ) {
+			uiSpinner.height( uiSpinner.height() );
+		}
+
+		// disable spinner if element was already disabled
+		if ( this.options.disabled ) {
+			this.disable();
+		}
+	},
+
+	_keydown: function( event ) {
+		var options = this.options,
+			keyCode = $.ui.keyCode;
+
+		switch ( event.keyCode ) {
+		case keyCode.UP:
+			this._repeat( null, 1, event );
+			return true;
+		case keyCode.DOWN:
+			this._repeat( null, -1, event );
+			return true;
+		case keyCode.PAGE_UP:
+			this._repeat( null, options.page, event );
+			return true;
+		case keyCode.PAGE_DOWN:
+			this._repeat( null, -options.page, event );
+			return true;
+		}
+
+		return false;
+	},
+
+	_uiSpinnerHtml: function() {
+		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+	},
+
+	_buttonHtml: function() {
+		return "" +
+			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+			"</a>" +
+			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+			"</a>";
+	},
+
+	_start: function( event ) {
+		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+			return false;
+		}
+
+		if ( !this.counter ) {
+			this.counter = 1;
+		}
+		this.spinning = true;
+		return true;
+	},
+
+	_repeat: function( i, steps, event ) {
+		i = i || 500;
+
+		clearTimeout( this.timer );
+		this.timer = this._delay(function() {
+			this._repeat( 40, steps, event );
+		}, i );
+
+		this._spin( steps * this.options.step, event );
+	},
+
+	_spin: function( step, event ) {
+		var value = this.value() || 0;
+
+		if ( !this.counter ) {
+			this.counter = 1;
+		}
+
+		value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+			this._value( value );
+			this.counter++;
+		}
+	},
+
+	_increment: function( i ) {
+		var incremental = this.options.incremental;
+
+		if ( incremental ) {
+			return $.isFunction( incremental ) ?
+				incremental( i ) :
+				Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
+		}
+
+		return 1;
+	},
+
+	_precision: function() {
+		var precision = this._precisionOf( this.options.step );
+		if ( this.options.min !== null ) {
+			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+		}
+		return precision;
+	},
+
+	_precisionOf: function( num ) {
+		var str = num.toString(),
+			decimal = str.indexOf( "." );
+		return decimal === -1 ? 0 : str.length - decimal - 1;
+	},
+
+	_adjustValue: function( value ) {
+		var base, aboveMin,
+			options = this.options;
+
+		// make sure we're at a valid step
+		// - find out where we are relative to the base (min or 0)
+		base = options.min !== null ? options.min : 0;
+		aboveMin = value - base;
+		// - round to the nearest step
+		aboveMin = Math.round(aboveMin / options.step) * options.step;
+		// - rounding is based on 0, so adjust back to our base
+		value = base + aboveMin;
+
+		// fix precision from bad JS floating point math
+		value = parseFloat( value.toFixed( this._precision() ) );
+
+		// clamp the value
+		if ( options.max !== null && value > options.max) {
+			return options.max;
+		}
+		if ( options.min !== null && value < options.min ) {
+			return options.min;
+		}
+
+		return value;
+	},
+
+	_stop: function( event ) {
+		if ( !this.spinning ) {
+			return;
+		}
+
+		clearTimeout( this.timer );
+		clearTimeout( this.mousewheelTimer );
+		this.counter = 0;
+		this.spinning = false;
+		this._trigger( "stop", event );
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "culture" || key === "numberFormat" ) {
+			var prevValue = this._parse( this.element.val() );
+			this.options[ key ] = value;
+			this.element.val( this._format( prevValue ) );
+			return;
+		}
+
+		if ( key === "max" || key === "min" || key === "step" ) {
+			if ( typeof value === "string" ) {
+				value = this._parse( value );
+			}
+		}
+		if ( key === "icons" ) {
+			this.buttons.first().find( ".ui-icon" )
+				.removeClass( this.options.icons.up )
+				.addClass( value.up );
+			this.buttons.last().find( ".ui-icon" )
+				.removeClass( this.options.icons.down )
+				.addClass( value.down );
+		}
+
+		this._super( key, value );
+
+		if ( key === "disabled" ) {
+			this.widget().toggleClass( "ui-state-disabled", !!value );
+			this.element.prop( "disabled", !!value );
+			this.buttons.button( value ? "disable" : "enable" );
+		}
+	},
+
+	_setOptions: spinner_modifier(function( options ) {
+		this._super( options );
+	}),
+
+	_parse: function( val ) {
+		if ( typeof val === "string" && val !== "" ) {
+			val = window.Globalize && this.options.numberFormat ?
+				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+		}
+		return val === "" || isNaN( val ) ? null : val;
+	},
+
+	_format: function( value ) {
+		if ( value === "" ) {
+			return "";
+		}
+		return window.Globalize && this.options.numberFormat ?
+			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+			value;
+	},
+
+	_refresh: function() {
+		this.element.attr({
+			"aria-valuemin": this.options.min,
+			"aria-valuemax": this.options.max,
+			// TODO: what should we do with values that can't be parsed?
+			"aria-valuenow": this._parse( this.element.val() )
+		});
+	},
+
+	isValid: function() {
+		var value = this.value();
+
+		// null is invalid
+		if ( value === null ) {
+			return false;
+		}
+
+		// if value gets adjusted, it's invalid
+		return value === this._adjustValue( value );
+	},
+
+	// update the value without triggering change
+	_value: function( value, allowAny ) {
+		var parsed;
+		if ( value !== "" ) {
+			parsed = this._parse( value );
+			if ( parsed !== null ) {
+				if ( !allowAny ) {
+					parsed = this._adjustValue( parsed );
+				}
+				value = this._format( parsed );
+			}
+		}
+		this.element.val( value );
+		this._refresh();
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-spinner-input" )
+			.prop( "disabled", false )
+			.removeAttr( "autocomplete" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-valuemin" )
+			.removeAttr( "aria-valuemax" )
+			.removeAttr( "aria-valuenow" );
+		this.uiSpinner.replaceWith( this.element );
+	},
+
+	stepUp: spinner_modifier(function( steps ) {
+		this._stepUp( steps );
+	}),
+	_stepUp: function( steps ) {
+		if ( this._start() ) {
+			this._spin( (steps || 1) * this.options.step );
+			this._stop();
+		}
+	},
+
+	stepDown: spinner_modifier(function( steps ) {
+		this._stepDown( steps );
+	}),
+	_stepDown: function( steps ) {
+		if ( this._start() ) {
+			this._spin( (steps || 1) * -this.options.step );
+			this._stop();
+		}
+	},
+
+	pageUp: spinner_modifier(function( pages ) {
+		this._stepUp( (pages || 1) * this.options.page );
+	}),
+
+	pageDown: spinner_modifier(function( pages ) {
+		this._stepDown( (pages || 1) * this.options.page );
+	}),
+
+	value: function( newVal ) {
+		if ( !arguments.length ) {
+			return this._parse( this.element.val() );
+		}
+		spinner_modifier( this._value ).call( this, newVal );
+	},
+
+	widget: function() {
+		return this.uiSpinner;
+	}
+});
+
+
+/*!
+ * jQuery UI Tabs 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
+
+
+var tabs = $.widget( "ui.tabs", {
+	version: "1.11.4",
+	delay: 300,
+	options: {
+		active: null,
+		collapsible: false,
+		event: "click",
+		heightStyle: "content",
+		hide: null,
+		show: null,
+
+		// callbacks
+		activate: null,
+		beforeActivate: null,
+		beforeLoad: null,
+		load: null
+	},
+
+	_isLocal: (function() {
+		var rhash = /#.*$/;
+
+		return function( anchor ) {
+			var anchorUrl, locationUrl;
+
+			// support: IE7
+			// IE7 doesn't normalize the href property when set via script (#9317)
+			anchor = anchor.cloneNode( false );
+
+			anchorUrl = anchor.href.replace( rhash, "" );
+			locationUrl = location.href.replace( rhash, "" );
+
+			// decoding may throw an error if the URL isn't UTF-8 (#9518)
+			try {
+				anchorUrl = decodeURIComponent( anchorUrl );
+			} catch ( error ) {}
+			try {
+				locationUrl = decodeURIComponent( locationUrl );
+			} catch ( error ) {}
+
+			return anchor.hash.length > 1 && anchorUrl === locationUrl;
+		};
+	})(),
+
+	_create: function() {
+		var that = this,
+			options = this.options;
+
+		this.running = false;
+
+		this.element
+			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+			.toggleClass( "ui-tabs-collapsible", options.collapsible );
+
+		this._processTabs();
+		options.active = this._initialActive();
+
+		// Take disabling tabs via class attribute from HTML
+		// into account and update option properly.
+		if ( $.isArray( options.disabled ) ) {
+			options.disabled = $.unique( options.disabled.concat(
+				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+					return that.tabs.index( li );
+				})
+			) ).sort();
+		}
+
+		// check for length avoids error when initializing empty list
+		if ( this.options.active !== false && this.anchors.length ) {
+			this.active = this._findActive( options.active );
+		} else {
+			this.active = $();
+		}
+
+		this._refresh();
+
+		if ( this.active.length ) {
+			this.load( options.active );
+		}
+	},
+
+	_initialActive: function() {
+		var active = this.options.active,
+			collapsible = this.options.collapsible,
+			locationHash = location.hash.substring( 1 );
+
+		if ( active === null ) {
+			// check the fragment identifier in the URL
+			if ( locationHash ) {
+				this.tabs.each(function( i, tab ) {
+					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+						active = i;
+						return false;
+					}
+				});
+			}
+
+			// check for a tab marked active via a class
+			if ( active === null ) {
+				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+			}
+
+			// no active tab, set to false
+			if ( active === null || active === -1 ) {
+				active = this.tabs.length ? 0 : false;
+			}
+		}
+
+		// handle numbers: negative, out of range
+		if ( active !== false ) {
+			active = this.tabs.index( this.tabs.eq( active ) );
+			if ( active === -1 ) {
+				active = collapsible ? false : 0;
+			}
+		}
+
+		// don't allow collapsible: false and active: false
+		if ( !collapsible && active === false && this.anchors.length ) {
+			active = 0;
+		}
+
+		return active;
+	},
+
+	_getCreateEventData: function() {
+		return {
+			tab: this.active,
+			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+		};
+	},
+
+	_tabKeydown: function( event ) {
+		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+			selectedIndex = this.tabs.index( focusedTab ),
+			goingForward = true;
+
+		if ( this._handlePageNav( event ) ) {
+			return;
+		}
+
+		switch ( event.keyCode ) {
+			case $.ui.keyCode.RIGHT:
+			case $.ui.keyCode.DOWN:
+				selectedIndex++;
+				break;
+			case $.ui.keyCode.UP:
+			case $.ui.keyCode.LEFT:
+				goingForward = false;
+				selectedIndex--;
+				break;
+			case $.ui.keyCode.END:
+				selectedIndex = this.anchors.length - 1;
+				break;
+			case $.ui.keyCode.HOME:
+				selectedIndex = 0;
+				break;
+			case $.ui.keyCode.SPACE:
+				// Activate only, no collapsing
+				event.preventDefault();
+				clearTimeout( this.activating );
+				this._activate( selectedIndex );
+				return;
+			case $.ui.keyCode.ENTER:
+				// Toggle (cancel delayed activation, allow collapsing)
+				event.preventDefault();
+				clearTimeout( this.activating );
+				// Determine if we should collapse or activate
+				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+				return;
+			default:
+				return;
+		}
+
+		// Focus the appropriate tab, based on which key was pressed
+		event.preventDefault();
+		clearTimeout( this.activating );
+		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+		// Navigating with control/command key will prevent automatic activation
+		if ( !event.ctrlKey && !event.metaKey ) {
+
+			// Update aria-selected immediately so that AT think the tab is already selected.
+			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+			// but the tab will already be activated by the time the announcement finishes.
+			focusedTab.attr( "aria-selected", "false" );
+			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+			this.activating = this._delay(function() {
+				this.option( "active", selectedIndex );
+			}, this.delay );
+		}
+	},
+
+	_panelKeydown: function( event ) {
+		if ( this._handlePageNav( event ) ) {
+			return;
+		}
+
+		// Ctrl+up moves focus to the current tab
+		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+			event.preventDefault();
+			this.active.focus();
+		}
+	},
+
+	// Alt+page up/down moves focus to the previous/next tab (and activates)
+	_handlePageNav: function( event ) {
+		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+			return true;
+		}
+		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+			return true;
+		}
+	},
+
+	_findNextTab: function( index, goingForward ) {
+		var lastTabIndex = this.tabs.length - 1;
+
+		function constrain() {
+			if ( index > lastTabIndex ) {
+				index = 0;
+			}
+			if ( index < 0 ) {
+				index = lastTabIndex;
+			}
+			return index;
+		}
+
+		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+			index = goingForward ? index + 1 : index - 1;
+		}
+
+		return index;
+	},
+
+	_focusNextTab: function( index, goingForward ) {
+		index = this._findNextTab( index, goingForward );
+		this.tabs.eq( index ).focus();
+		return index;
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "active" ) {
+			// _activate() will handle invalid values and update this.options
+			this._activate( value );
+			return;
+		}
+
+		if ( key === "disabled" ) {
+			// don't use the widget factory's disabled handling
+			this._setupDisabled( value );
+			return;
+		}
+
+		this._super( key, value);
+
+		if ( key === "collapsible" ) {
+			this.element.toggleClass( "ui-tabs-collapsible", value );
+			// Setting collapsible: false while collapsed; open first panel
+			if ( !value && this.options.active === false ) {
+				this._activate( 0 );
+			}
+		}
+
+		if ( key === "event" ) {
+			this._setupEvents( value );
+		}
+
+		if ( key === "heightStyle" ) {
+			this._setupHeightStyle( value );
+		}
+	},
+
+	_sanitizeSelector: function( hash ) {
+		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+	},
+
+	refresh: function() {
+		var options = this.options,
+			lis = this.tablist.children( ":has(a[href])" );
+
+		// get disabled tabs from class attribute from HTML
+		// this will get converted to a boolean if needed in _refresh()
+		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+			return lis.index( tab );
+		});
+
+		this._processTabs();
+
+		// was collapsed or no tabs
+		if ( options.active === false || !this.anchors.length ) {
+			options.active = false;
+			this.active = $();
+		// was active, but active tab is gone
+		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+			// all remaining tabs are disabled
+			if ( this.tabs.length === options.disabled.length ) {
+				options.active = false;
+				this.active = $();
+			// activate previous tab
+			} else {
+				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+			}
+		// was active, active tab still exists
+		} else {
+			// make sure active index is correct
+			options.active = this.tabs.index( this.active );
+		}
+
+		this._refresh();
+	},
+
+	_refresh: function() {
+		this._setupDisabled( this.options.disabled );
+		this._setupEvents( this.options.event );
+		this._setupHeightStyle( this.options.heightStyle );
+
+		this.tabs.not( this.active ).attr({
+			"aria-selected": "false",
+			"aria-expanded": "false",
+			tabIndex: -1
+		});
+		this.panels.not( this._getPanelForTab( this.active ) )
+			.hide()
+			.attr({
+				"aria-hidden": "true"
+			});
+
+		// Make sure one tab is in the tab order
+		if ( !this.active.length ) {
+			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+		} else {
+			this.active
+				.addClass( "ui-tabs-active ui-state-active" )
+				.attr({
+					"aria-selected": "true",
+					"aria-expanded": "true",
+					tabIndex: 0
+				});
+			this._getPanelForTab( this.active )
+				.show()
+				.attr({
+					"aria-hidden": "false"
+				});
+		}
+	},
+
+	_processTabs: function() {
+		var that = this,
+			prevTabs = this.tabs,
+			prevAnchors = this.anchors,
+			prevPanels = this.panels;
+
+		this.tablist = this._getList()
+			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+			.attr( "role", "tablist" )
+
+			// Prevent users from focusing disabled tabs via click
+			.delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+				if ( $( this ).is( ".ui-state-disabled" ) ) {
+					event.preventDefault();
+				}
+			})
+
+			// support: IE <9
+			// Preventing the default action in mousedown doesn't prevent IE
+			// from focusing the element, so if the anchor gets focused, blur.
+			// We don't have to worry about focusing the previously focused
+			// element since clicking on a non-focusable element should focus
+			// the body anyway.
+			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+					this.blur();
+				}
+			});
+
+		this.tabs = this.tablist.find( "> li:has(a[href])" )
+			.addClass( "ui-state-default ui-corner-top" )
+			.attr({
+				role: "tab",
+				tabIndex: -1
+			});
+
+		this.anchors = this.tabs.map(function() {
+				return $( "a", this )[ 0 ];
+			})
+			.addClass( "ui-tabs-anchor" )
+			.attr({
+				role: "presentation",
+				tabIndex: -1
+			});
+
+		this.panels = $();
+
+		this.anchors.each(function( i, anchor ) {
+			var selector, panel, panelId,
+				anchorId = $( anchor ).uniqueId().attr( "id" ),
+				tab = $( anchor ).closest( "li" ),
+				originalAriaControls = tab.attr( "aria-controls" );
+
+			// inline tab
+			if ( that._isLocal( anchor ) ) {
+				selector = anchor.hash;
+				panelId = selector.substring( 1 );
+				panel = that.element.find( that._sanitizeSelector( selector ) );
+			// remote tab
+			} else {
+				// If the tab doesn't already have aria-controls,
+				// generate an id by using a throw-away element
+				panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
+				selector = "#" + panelId;
+				panel = that.element.find( selector );
+				if ( !panel.length ) {
+					panel = that._createPanel( panelId );
+					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+				}
+				panel.attr( "aria-live", "polite" );
+			}
+
+			if ( panel.length) {
+				that.panels = that.panels.add( panel );
+			}
+			if ( originalAriaControls ) {
+				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+			}
+			tab.attr({
+				"aria-controls": panelId,
+				"aria-labelledby": anchorId
+			});
+			panel.attr( "aria-labelledby", anchorId );
+		});
+
+		this.panels
+			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+			.attr( "role", "tabpanel" );
+
+		// Avoid memory leaks (#10056)
+		if ( prevTabs ) {
+			this._off( prevTabs.not( this.tabs ) );
+			this._off( prevAnchors.not( this.anchors ) );
+			this._off( prevPanels.not( this.panels ) );
+		}
+	},
+
+	// allow overriding how to find the list for rare usage scenarios (#7715)
+	_getList: function() {
+		return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
+	},
+
+	_createPanel: function( id ) {
+		return $( "<div>" )
+			.attr( "id", id )
+			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+			.data( "ui-tabs-destroy", true );
+	},
+
+	_setupDisabled: function( disabled ) {
+		if ( $.isArray( disabled ) ) {
+			if ( !disabled.length ) {
+				disabled = false;
+			} else if ( disabled.length === this.anchors.length ) {
+				disabled = true;
+			}
+		}
+
+		// disable tabs
+		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+				$( li )
+					.addClass( "ui-state-disabled" )
+					.attr( "aria-disabled", "true" );
+			} else {
+				$( li )
+					.removeClass( "ui-state-disabled" )
+					.removeAttr( "aria-disabled" );
+			}
+		}
+
+		this.options.disabled = disabled;
+	},
+
+	_setupEvents: function( event ) {
+		var events = {};
+		if ( event ) {
+			$.each( event.split(" "), function( index, eventName ) {
+				events[ eventName ] = "_eventHandler";
+			});
+		}
+
+		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+		// Always prevent the default action, even when disabled
+		this._on( true, this.anchors, {
+			click: function( event ) {
+				event.preventDefault();
+			}
+		});
+		this._on( this.anchors, events );
+		this._on( this.tabs, { keydown: "_tabKeydown" } );
+		this._on( this.panels, { keydown: "_panelKeydown" } );
+
+		this._focusable( this.tabs );
+		this._hoverable( this.tabs );
+	},
+
+	_setupHeightStyle: function( heightStyle ) {
+		var maxHeight,
+			parent = this.element.parent();
+
+		if ( heightStyle === "fill" ) {
+			maxHeight = parent.height();
+			maxHeight -= this.element.outerHeight() - this.element.height();
+
+			this.element.siblings( ":visible" ).each(function() {
+				var elem = $( this ),
+					position = elem.css( "position" );
+
+				if ( position === "absolute" || position === "fixed" ) {
+					return;
+				}
+				maxHeight -= elem.outerHeight( true );
+			});
+
+			this.element.children().not( this.panels ).each(function() {
+				maxHeight -= $( this ).outerHeight( true );
+			});
+
+			this.panels.each(function() {
+				$( this ).height( Math.max( 0, maxHeight -
+					$( this ).innerHeight() + $( this ).height() ) );
+			})
+			.css( "overflow", "auto" );
+		} else if ( heightStyle === "auto" ) {
+			maxHeight = 0;
+			this.panels.each(function() {
+				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+			}).height( maxHeight );
+		}
+	},
+
+	_eventHandler: function( event ) {
+		var options = this.options,
+			active = this.active,
+			anchor = $( event.currentTarget ),
+			tab = anchor.closest( "li" ),
+			clickedIsActive = tab[ 0 ] === active[ 0 ],
+			collapsing = clickedIsActive && options.collapsible,
+			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+			toHide = !active.length ? $() : this._getPanelForTab( active ),
+			eventData = {
+				oldTab: active,
+				oldPanel: toHide,
+				newTab: collapsing ? $() : tab,
+				newPanel: toShow
+			};
+
+		event.preventDefault();
+
+		if ( tab.hasClass( "ui-state-disabled" ) ||
+				// tab is already loading
+				tab.hasClass( "ui-tabs-loading" ) ||
+				// can't switch durning an animation
+				this.running ||
+				// click on active header, but not collapsible
+				( clickedIsActive && !options.collapsible ) ||
+				// allow canceling activation
+				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+			return;
+		}
+
+		options.active = collapsing ? false : this.tabs.index( tab );
+
+		this.active = clickedIsActive ? $() : tab;
+		if ( this.xhr ) {
+			this.xhr.abort();
+		}
+
+		if ( !toHide.length && !toShow.length ) {
+			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+		}
+
+		if ( toShow.length ) {
+			this.load( this.tabs.index( tab ), event );
+		}
+		this._toggle( event, eventData );
+	},
+
+	// handles show/hide for selecting tabs
+	_toggle: function( event, eventData ) {
+		var that = this,
+			toShow = eventData.newPanel,
+			toHide = eventData.oldPanel;
+
+		this.running = true;
+
+		function complete() {
+			that.running = false;
+			that._trigger( "activate", event, eventData );
+		}
+
+		function show() {
+			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+			if ( toShow.length && that.options.show ) {
+				that._show( toShow, that.options.show, complete );
+			} else {
+				toShow.show();
+				complete();
+			}
+		}
+
+		// start out by hiding, then showing, then completing
+		if ( toHide.length && this.options.hide ) {
+			this._hide( toHide, this.options.hide, function() {
+				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+				show();
+			});
+		} else {
+			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+			toHide.hide();
+			show();
+		}
+
+		toHide.attr( "aria-hidden", "true" );
+		eventData.oldTab.attr({
+			"aria-selected": "false",
+			"aria-expanded": "false"
+		});
+		// If we're switching tabs, remove the old tab from the tab order.
+		// If we're opening from collapsed state, remove the previous tab from the tab order.
+		// If we're collapsing, then keep the collapsing tab in the tab order.
+		if ( toShow.length && toHide.length ) {
+			eventData.oldTab.attr( "tabIndex", -1 );
+		} else if ( toShow.length ) {
+			this.tabs.filter(function() {
+				return $( this ).attr( "tabIndex" ) === 0;
+			})
+			.attr( "tabIndex", -1 );
+		}
+
+		toShow.attr( "aria-hidden", "false" );
+		eventData.newTab.attr({
+			"aria-selected": "true",
+			"aria-expanded": "true",
+			tabIndex: 0
+		});
+	},
+
+	_activate: function( index ) {
+		var anchor,
+			active = this._findActive( index );
+
+		// trying to activate the already active panel
+		if ( active[ 0 ] === this.active[ 0 ] ) {
+			return;
+		}
+
+		// trying to collapse, simulate a click on the current active header
+		if ( !active.length ) {
+			active = this.active;
+		}
+
+		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+		this._eventHandler({
+			target: anchor,
+			currentTarget: anchor,
+			preventDefault: $.noop
+		});
+	},
+
+	_findActive: function( index ) {
+		return index === false ? $() : this.tabs.eq( index );
+	},
+
+	_getIndex: function( index ) {
+		// meta-function to give users option to provide a href string instead of a numerical index.
+		if ( typeof index === "string" ) {
+			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+		}
+
+		return index;
+	},
+
+	_destroy: function() {
+		if ( this.xhr ) {
+			this.xhr.abort();
+		}
+
+		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+
+		this.tablist
+			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+			.removeAttr( "role" );
+
+		this.anchors
+			.removeClass( "ui-tabs-anchor" )
+			.removeAttr( "role" )
+			.removeAttr( "tabIndex" )
+			.removeUniqueId();
+
+		this.tablist.unbind( this.eventNamespace );
+
+		this.tabs.add( this.panels ).each(function() {
+			if ( $.data( this, "ui-tabs-destroy" ) ) {
+				$( this ).remove();
+			} else {
+				$( this )
+					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+					.removeAttr( "tabIndex" )
+					.removeAttr( "aria-live" )
+					.removeAttr( "aria-busy" )
+					.removeAttr( "aria-selected" )
+					.removeAttr( "aria-labelledby" )
+					.removeAttr( "aria-hidden" )
+					.removeAttr( "aria-expanded" )
+					.removeAttr( "role" );
+			}
+		});
+
+		this.tabs.each(function() {
+			var li = $( this ),
+				prev = li.data( "ui-tabs-aria-controls" );
+			if ( prev ) {
+				li
+					.attr( "aria-controls", prev )
+					.removeData( "ui-tabs-aria-controls" );
+			} else {
+				li.removeAttr( "aria-controls" );
+			}
+		});
+
+		this.panels.show();
+
+		if ( this.options.heightStyle !== "content" ) {
+			this.panels.css( "height", "" );
+		}
+	},
+
+	enable: function( index ) {
+		var disabled = this.options.disabled;
+		if ( disabled === false ) {
+			return;
+		}
+
+		if ( index === undefined ) {
+			disabled = false;
+		} else {
+			index = this._getIndex( index );
+			if ( $.isArray( disabled ) ) {
+				disabled = $.map( disabled, function( num ) {
+					return num !== index ? num : null;
+				});
+			} else {
+				disabled = $.map( this.tabs, function( li, num ) {
+					return num !== index ? num : null;
+				});
+			}
+		}
+		this._setupDisabled( disabled );
+	},
+
+	disable: function( index ) {
+		var disabled = this.options.disabled;
+		if ( disabled === true ) {
+			return;
+		}
+
+		if ( index === undefined ) {
+			disabled = true;
+		} else {
+			index = this._getIndex( index );
+			if ( $.inArray( index, disabled ) !== -1 ) {
+				return;
+			}
+			if ( $.isArray( disabled ) ) {
+				disabled = $.merge( [ index ], disabled ).sort();
+			} else {
+				disabled = [ index ];
+			}
+		}
+		this._setupDisabled( disabled );
+	},
+
+	load: function( index, event ) {
+		index = this._getIndex( index );
+		var that = this,
+			tab = this.tabs.eq( index ),
+			anchor = tab.find( ".ui-tabs-anchor" ),
+			panel = this._getPanelForTab( tab ),
+			eventData = {
+				tab: tab,
+				panel: panel
+			},
+			complete = function( jqXHR, status ) {
+				if ( status === "abort" ) {
+					that.panels.stop( false, true );
+				}
+
+				tab.removeClass( "ui-tabs-loading" );
+				panel.removeAttr( "aria-busy" );
+
+				if ( jqXHR === that.xhr ) {
+					delete that.xhr;
+				}
+			};
+
+		// not remote
+		if ( this._isLocal( anchor[ 0 ] ) ) {
+			return;
+		}
+
+		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+		// support: jQuery <1.8
+		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+		// but as of 1.8, $.ajax() always returns a jqXHR object.
+		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+			tab.addClass( "ui-tabs-loading" );
+			panel.attr( "aria-busy", "true" );
+
+			this.xhr
+				.done(function( response, status, jqXHR ) {
+					// support: jQuery <1.8
+					// http://bugs.jquery.com/ticket/11778
+					setTimeout(function() {
+						panel.html( response );
+						that._trigger( "load", event, eventData );
+
+						complete( jqXHR, status );
+					}, 1 );
+				})
+				.fail(function( jqXHR, status ) {
+					// support: jQuery <1.8
+					// http://bugs.jquery.com/ticket/11778
+					setTimeout(function() {
+						complete( jqXHR, status );
+					}, 1 );
+				});
+		}
+	},
+
+	_ajaxSettings: function( anchor, event, eventData ) {
+		var that = this;
+		return {
+			url: anchor.attr( "href" ),
+			beforeSend: function( jqXHR, settings ) {
+				return that._trigger( "beforeLoad", event,
+					$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
+			}
+		};
+	},
+
+	_getPanelForTab: function( tab ) {
+		var id = $( tab ).attr( "aria-controls" );
+		return this.element.find( this._sanitizeSelector( "#" + id ) );
+	}
+});
+
+
+/*!
+ * jQuery UI Tooltip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
+
+
+var tooltip = $.widget( "ui.tooltip", {
+	version: "1.11.4",
+	options: {
+		content: function() {
+			// support: IE<9, Opera in jQuery <1.7
+			// .text() can't accept undefined, so coerce to a string
+			var title = $( this ).attr( "title" ) || "";
+			// Escape title, since we're going from an attribute to raw HTML
+			return $( "<a>" ).text( title ).html();
+		},
+		hide: true,
+		// Disabled elements have inconsistent behavior across browsers (#8661)
+		items: "[title]:not([disabled])",
+		position: {
+			my: "left top+15",
+			at: "left bottom",
+			collision: "flipfit flip"
+		},
+		show: true,
+		tooltipClass: null,
+		track: false,
+
+		// callbacks
+		close: null,
+		open: null
+	},
+
+	_addDescribedBy: function( elem, id ) {
+		var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+		describedby.push( id );
+		elem
+			.data( "ui-tooltip-id", id )
+			.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+	},
+
+	_removeDescribedBy: function( elem ) {
+		var id = elem.data( "ui-tooltip-id" ),
+			describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+			index = $.inArray( id, describedby );
+
+		if ( index !== -1 ) {
+			describedby.splice( index, 1 );
+		}
+
+		elem.removeData( "ui-tooltip-id" );
+		describedby = $.trim( describedby.join( " " ) );
+		if ( describedby ) {
+			elem.attr( "aria-describedby", describedby );
+		} else {
+			elem.removeAttr( "aria-describedby" );
+		}
+	},
+
+	_create: function() {
+		this._on({
+			mouseover: "open",
+			focusin: "open"
+		});
+
+		// IDs of generated tooltips, needed for destroy
+		this.tooltips = {};
+
+		// IDs of parent tooltips where we removed the title attribute
+		this.parents = {};
+
+		if ( this.options.disabled ) {
+			this._disable();
+		}
+
+		// Append the aria-live region so tooltips announce correctly
+		this.liveRegion = $( "<div>" )
+			.attr({
+				role: "log",
+				"aria-live": "assertive",
+				"aria-relevant": "additions"
+			})
+			.addClass( "ui-helper-hidden-accessible" )
+			.appendTo( this.document[ 0 ].body );
+	},
+
+	_setOption: function( key, value ) {
+		var that = this;
+
+		if ( key === "disabled" ) {
+			this[ value ? "_disable" : "_enable" ]();
+			this.options[ key ] = value;
+			// disable element style changes
+			return;
+		}
+
+		this._super( key, value );
+
+		if ( key === "content" ) {
+			$.each( this.tooltips, function( id, tooltipData ) {
+				that._updateContent( tooltipData.element );
+			});
+		}
+	},
+
+	_disable: function() {
+		var that = this;
+
+		// close open tooltips
+		$.each( this.tooltips, function( id, tooltipData ) {
+			var event = $.Event( "blur" );
+			event.target = event.currentTarget = tooltipData.element[ 0 ];
+			that.close( event, true );
+		});
+
+		// remove title attributes to prevent native tooltips
+		this.element.find( this.options.items ).addBack().each(function() {
+			var element = $( this );
+			if ( element.is( "[title]" ) ) {
+				element
+					.data( "ui-tooltip-title", element.attr( "title" ) )
+					.removeAttr( "title" );
+			}
+		});
+	},
+
+	_enable: function() {
+		// restore title attributes
+		this.element.find( this.options.items ).addBack().each(function() {
+			var element = $( this );
+			if ( element.data( "ui-tooltip-title" ) ) {
+				element.attr( "title", element.data( "ui-tooltip-title" ) );
+			}
+		});
+	},
+
+	open: function( event ) {
+		var that = this,
+			target = $( event ? event.target : this.element )
+				// we need closest here due to mouseover bubbling,
+				// but always pointing at the same event target
+				.closest( this.options.items );
+
+		// No element to show a tooltip for or the tooltip is already open
+		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+			return;
+		}
+
+		if ( target.attr( "title" ) ) {
+			target.data( "ui-tooltip-title", target.attr( "title" ) );
+		}
+
+		target.data( "ui-tooltip-open", true );
+
+		// kill parent tooltips, custom or native, for hover
+		if ( event && event.type === "mouseover" ) {
+			target.parents().each(function() {
+				var parent = $( this ),
+					blurEvent;
+				if ( parent.data( "ui-tooltip-open" ) ) {
+					blurEvent = $.Event( "blur" );
+					blurEvent.target = blurEvent.currentTarget = this;
+					that.close( blurEvent, true );
+				}
+				if ( parent.attr( "title" ) ) {
+					parent.uniqueId();
+					that.parents[ this.id ] = {
+						element: this,
+						title: parent.attr( "title" )
+					};
+					parent.attr( "title", "" );
+				}
+			});
+		}
+
+		this._registerCloseHandlers( event, target );
+		this._updateContent( target, event );
+	},
+
+	_updateContent: function( target, event ) {
+		var content,
+			contentOption = this.options.content,
+			that = this,
+			eventType = event ? event.type : null;
+
+		if ( typeof contentOption === "string" ) {
+			return this._open( event, target, contentOption );
+		}
+
+		content = contentOption.call( target[0], function( response ) {
+
+			// IE may instantly serve a cached response for ajax requests
+			// delay this call to _open so the other call to _open runs first
+			that._delay(function() {
+
+				// Ignore async response if tooltip was closed already
+				if ( !target.data( "ui-tooltip-open" ) ) {
+					return;
+				}
+
+				// jQuery creates a special event for focusin when it doesn't
+				// exist natively. To improve performance, the native event
+				// object is reused and the type is changed. Therefore, we can't
+				// rely on the type being correct after the event finished
+				// bubbling, so we set it back to the previous value. (#8740)
+				if ( event ) {
+					event.type = eventType;
+				}
+				this._open( event, target, response );
+			});
+		});
+		if ( content ) {
+			this._open( event, target, content );
+		}
+	},
+
+	_open: function( event, target, content ) {
+		var tooltipData, tooltip, delayedShow, a11yContent,
+			positionOption = $.extend( {}, this.options.position );
+
+		if ( !content ) {
+			return;
+		}
+
+		// Content can be updated multiple times. If the tooltip already
+		// exists, then just update the content and bail.
+		tooltipData = this._find( target );
+		if ( tooltipData ) {
+			tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
+			return;
+		}
+
+		// if we have a title, clear it to prevent the native tooltip
+		// we have to check first to avoid defining a title if none exists
+		// (we don't want to cause an element to start matching [title])
+		//
+		// We use removeAttr only for key events, to allow IE to export the correct
+		// accessible attributes. For mouse events, set to empty string to avoid
+		// native tooltip showing up (happens only when removing inside mouseover).
+		if ( target.is( "[title]" ) ) {
+			if ( event && event.type === "mouseover" ) {
+				target.attr( "title", "" );
+			} else {
+				target.removeAttr( "title" );
+			}
+		}
+
+		tooltipData = this._tooltip( target );
+		tooltip = tooltipData.tooltip;
+		this._addDescribedBy( target, tooltip.attr( "id" ) );
+		tooltip.find( ".ui-tooltip-content" ).html( content );
+
+		// Support: Voiceover on OS X, JAWS on IE <= 9
+		// JAWS announces deletions even when aria-relevant="additions"
+		// Voiceover will sometimes re-read the entire log region's contents from the beginning
+		this.liveRegion.children().hide();
+		if ( content.clone ) {
+			a11yContent = content.clone();
+			a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+		} else {
+			a11yContent = content;
+		}
+		$( "<div>" ).html( a11yContent ).appendTo( this.liveRegion );
+
+		function position( event ) {
+			positionOption.of = event;
+			if ( tooltip.is( ":hidden" ) ) {
+				return;
+			}
+			tooltip.position( positionOption );
+		}
+		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+			this._on( this.document, {
+				mousemove: position
+			});
+			// trigger once to override element-relative positioning
+			position( event );
+		} else {
+			tooltip.position( $.extend({
+				of: target
+			}, this.options.position ) );
+		}
+
+		tooltip.hide();
+
+		this._show( tooltip, this.options.show );
+		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+		// as the tooltip is visible, position the tooltip using the most recent
+		// event.
+		if ( this.options.show && this.options.show.delay ) {
+			delayedShow = this.delayedShow = setInterval(function() {
+				if ( tooltip.is( ":visible" ) ) {
+					position( positionOption.of );
+					clearInterval( delayedShow );
+				}
+			}, $.fx.interval );
+		}
+
+		this._trigger( "open", event, { tooltip: tooltip } );
+	},
+
+	_registerCloseHandlers: function( event, target ) {
+		var events = {
+			keyup: function( event ) {
+				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+					var fakeEvent = $.Event(event);
+					fakeEvent.currentTarget = target[0];
+					this.close( fakeEvent, true );
+				}
+			}
+		};
+
+		// Only bind remove handler for delegated targets. Non-delegated
+		// tooltips will handle this in destroy.
+		if ( target[ 0 ] !== this.element[ 0 ] ) {
+			events.remove = function() {
+				this._removeTooltip( this._find( target ).tooltip );
+			};
+		}
+
+		if ( !event || event.type === "mouseover" ) {
+			events.mouseleave = "close";
+		}
+		if ( !event || event.type === "focusin" ) {
+			events.focusout = "close";
+		}
+		this._on( true, target, events );
+	},
+
+	close: function( event ) {
+		var tooltip,
+			that = this,
+			target = $( event ? event.currentTarget : this.element ),
+			tooltipData = this._find( target );
+
+		// The tooltip may already be closed
+		if ( !tooltipData ) {
+
+			// We set ui-tooltip-open immediately upon open (in open()), but only set the
+			// additional data once there's actually content to show (in _open()). So even if the
+			// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+			// the period between open() and _open().
+			target.removeData( "ui-tooltip-open" );
+			return;
+		}
+
+		tooltip = tooltipData.tooltip;
+
+		// disabling closes the tooltip, so we need to track when we're closing
+		// to avoid an infinite loop in case the tooltip becomes disabled on close
+		if ( tooltipData.closing ) {
+			return;
+		}
+
+		// Clear the interval for delayed tracking tooltips
+		clearInterval( this.delayedShow );
+
+		// only set title if we had one before (see comment in _open())
+		// If the title attribute has changed since open(), don't restore
+		if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
+			target.attr( "title", target.data( "ui-tooltip-title" ) );
+		}
+
+		this._removeDescribedBy( target );
+
+		tooltipData.hiding = true;
+		tooltip.stop( true );
+		this._hide( tooltip, this.options.hide, function() {
+			that._removeTooltip( $( this ) );
+		});
+
+		target.removeData( "ui-tooltip-open" );
+		this._off( target, "mouseleave focusout keyup" );
+
+		// Remove 'remove' binding only on delegated targets
+		if ( target[ 0 ] !== this.element[ 0 ] ) {
+			this._off( target, "remove" );
+		}
+		this._off( this.document, "mousemove" );
+
+		if ( event && event.type === "mouseleave" ) {
+			$.each( this.parents, function( id, parent ) {
+				$( parent.element ).attr( "title", parent.title );
+				delete that.parents[ id ];
+			});
+		}
+
+		tooltipData.closing = true;
+		this._trigger( "close", event, { tooltip: tooltip } );
+		if ( !tooltipData.hiding ) {
+			tooltipData.closing = false;
+		}
+	},
+
+	_tooltip: function( element ) {
+		var tooltip = $( "<div>" )
+				.attr( "role", "tooltip" )
+				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+					( this.options.tooltipClass || "" ) ),
+			id = tooltip.uniqueId().attr( "id" );
+
+		$( "<div>" )
+			.addClass( "ui-tooltip-content" )
+			.appendTo( tooltip );
+
+		tooltip.appendTo( this.document[0].body );
+
+		return this.tooltips[ id ] = {
+			element: element,
+			tooltip: tooltip
+		};
+	},
+
+	_find: function( target ) {
+		var id = target.data( "ui-tooltip-id" );
+		return id ? this.tooltips[ id ] : null;
+	},
+
+	_removeTooltip: function( tooltip ) {
+		tooltip.remove();
+		delete this.tooltips[ tooltip.attr( "id" ) ];
+	},
+
+	_destroy: function() {
+		var that = this;
+
+		// close open tooltips
+		$.each( this.tooltips, function( id, tooltipData ) {
+			// Delegate to close method to handle common cleanup
+			var event = $.Event( "blur" ),
+				element = tooltipData.element;
+			event.target = event.currentTarget = element[ 0 ];
+			that.close( event, true );
+
+			// Remove immediately; destroying an open tooltip doesn't use the
+			// hide animation
+			$( "#" + id ).remove();
+
+			// Restore the title
+			if ( element.data( "ui-tooltip-title" ) ) {
+				// If the title attribute has changed since open(), don't restore
+				if ( !element.attr( "title" ) ) {
+					element.attr( "title", element.data( "ui-tooltip-title" ) );
+				}
+				element.removeData( "ui-tooltip-title" );
+			}
+		});
+		this.liveRegion.remove();
+	}
+});
+
+
+
+}));
\ No newline at end of file
diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js
index 192c284..d2d6c1c 100644
--- a/ui/scripts/accounts.js
+++ b/ui/scripts/accounts.js
@@ -97,7 +97,6 @@
                             label: 'label.add.ldap.account',
                             isHeader: true,
                             preFilter: function(args) {
-                                //if (isAdmin() && true) { //for testing only
                                 if (isAdmin() && isLdapEnabled()) {
                                     return true;
                                 } else {
@@ -1360,9 +1359,6 @@
                                 };
 
                                 var password = args.data.password;
-                                if (md5Hashed) {
-                                    password = $.md5(password);
-                                }
                                 $.extend(data, {
                                     password: password
                                 });
@@ -1480,6 +1476,14 @@
                                                 form: {
                                                     title: 'label.action.change.password',
                                                     fields: {
+                                                        currentPassword: {
+                                                            label: 'label.current.password',
+                                                            isPassword: true,
+                                                            validation: {
+                                                                required: !(isAdmin() || isDomainAdmin())
+                                                            },
+                                                            id: 'currentPassword'
+                                                        },
                                                         newPassword: {
                                                             label: 'label.new.password',
                                                             isPassword: true,
@@ -1500,16 +1504,13 @@
                                                 },
                                                 after: function(args) {
                                                     start();
-
+                                                    var currentPassword = args.data.currentPassword;
                                                     var password = args.data.newPassword;
-
-                                                    if (md5Hashed)
-                                                        password = $.md5(password);
-
                                                     $.ajax({
                                                         url: createURL('updateUser'),
                                                         data: {
                                                             id: context.users[0].id,
+                                                            currentPassword: currentPassword,
                                                             password: password
                                                         },
                                                         type: "POST",
@@ -1522,6 +1523,9 @@
                                                     });
                                                 }
                                             });
+                                            if(isAdmin() || isDomainAdmin()){
+                                                $('div[rel=currentPassword]').hide();
+                                            }
                                         } else {
                                             cloudStack.dialog.notice({ message: _l('error.could.not.change.your.password.because.non.native.user') });
                                         }
diff --git a/ui/scripts/accountsWizard.js b/ui/scripts/accountsWizard.js
index 7fc4014..5b8e9a6 100644
--- a/ui/scripts/accountsWizard.js
+++ b/ui/scripts/accountsWizard.js
@@ -205,21 +205,11 @@
             }
 
             if (!ldapStatus) {
-                var password = args.data.password;
-                if (md5Hashed) {
-                    password = $.md5(password);
-                }
                 array1.push("&email=" + args.data.email);
                 array1.push("&firstname=" + args.data.firstname);
                 array1.push("&lastname=" + args.data.lastname);
 
-                password = args.data.password;
-                if (md5Hashed) {
-                    password = $.md5(password);
-                } else {
-                    password = todb(password);
-                }
-                array1.push("&password=" + password);
+                cloudStack.addPasswordToCommandUrlParameterArray(array1, args.data.password);
             }
 
             array1.push("&domainid=" + args.data.domainid);
diff --git a/ui/scripts/autoscaler.js b/ui/scripts/autoscaler.js
index e8ac044..da963fc 100644
--- a/ui/scripts/autoscaler.js
+++ b/ui/scripts/autoscaler.js
@@ -414,27 +414,20 @@
                     isHidden: true,
                     dependsOn: 'isAdvanced',
                     select: function(args) {
-                        $.ajax({
-                            url: createURL("listDiskOfferings&listAll=true"),
-                            dataType: "json",
-                            async: true,
-                            success: function(json) {
-                                var diskofferings = json.listdiskofferingsresponse.diskoffering;
-                                var items = [];
-                                items.push({
-                                    id: "",
-                                    description: ""
-                                });
-                                $(diskofferings).each(function() {
-                                    items.push({
-                                        id: this.id,
-                                        description: this.name
-                                    });
-                                });
-                                args.response.success({
-                                    data: items
-                                });
-                            }
+                        var diskOfferings = cloudStack.listDiskOfferings({listAll: true});
+                        var items = [];
+                        items.push({
+                            id: "",
+                            description: ""
+                        });
+                        $(diskOfferings).each(function() {
+                            items.push({
+                                id: this.id,
+                                description: this.name
+                            });
+                        });
+                        args.response.success({
+                            data: items
                         });
                     }
                 },
diff --git a/ui/scripts/cloudStack.js b/ui/scripts/cloudStack.js
index 1190133..ccc0267 100644
--- a/ui/scripts/cloudStack.js
+++ b/ui/scripts/cloudStack.js
@@ -223,13 +223,7 @@
                 var array1 = [];
                 array1.push("&username=" + encodeURIComponent(args.data.username));
 
-                var password;
-                if (md5HashedLogin)
-                    password = $.md5(args.data.password);
-                else
-                    password = todb(args.data.password);
-                array1.push("&password=" + password);
-
+                cloudStack.addPasswordToCommandUrlParameterArray(array1, args.data.password);
                 var domain;
                 if (args.data.domain != null && args.data.domain.length > 0) {
                     if (args.data.domain.charAt(0) != "/")
diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js
index f229d24..8fc8218 100644
--- a/ui/scripts/configuration.js
+++ b/ui/scripts/configuration.js
@@ -1683,19 +1683,16 @@
                     dataProvider: function(args) {
                         var data = {};
                         listViewDataProvider(args, data);
-
-                        $.ajax({
-                            url: createURL('listDiskOfferings&isrecursive=true'),
+                        var listDiskOfferingsOptions = {
+                            isRecursive: true,
                             data: data,
-                            success: function(json) {
-                                var items = json.listdiskofferingsresponse.diskoffering;
-                                args.response.success({
-                                    data: items
-                                });
-                            },
                             error: function(data) {
                                 args.response.error(parseXMLHttpResponse(data));
                             }
+                        };
+                        var diskOfferings = cloudStack.listDiskOfferings(listDiskOfferingsOptions);
+                        args.response.success({
+                            data: diskOfferings
                         });
                     },
 
@@ -2297,16 +2294,14 @@
                                     var data = {
                                         id: args.context.diskOfferings[0].id
                                     };
-                                    $.ajax({
-                                        url: createURL('listDiskOfferings&isrecursive=true'),
-                                        data: data,
-                                        success: function(json) {
-                                            var item = json.listdiskofferingsresponse.diskoffering[0];
-                                            args.response.success({
-                                                actionFilter: diskOfferingActionfilter,
-                                                data: item
-                                            });
-                                        }
+                                    var listDiskOfferingsOptions = {
+                                        isRecursive: true,
+                                        data: data
+                                    };
+                                    var diskOfferings = cloudStack.listDiskOfferings(listDiskOfferingsOptions);
+                                    args.response.success({
+                                        actionFilter: diskOfferingActionfilter,
+                                        data: diskOfferings[0]
                                     });
                                 }
                             }
@@ -2562,7 +2557,7 @@
                                             $conservemode.find("input[type=checkbox]").removeAttr("disabled");
                                         }
 
-                                        $(':ui-dialog').dialog('option', 'position', 'center');
+                                        $('div.ui-dialog').css('top', '24px');
 
                                         //CS-16612 show all services regardless of guestIpType(Shared/Isolated)
                                         /*
diff --git a/ui/scripts/events.js b/ui/scripts/events.js
index 82550a9..948f881 100644
--- a/ui/scripts/events.js
+++ b/ui/scripts/events.js
@@ -49,6 +49,9 @@
                         account: {
                             label: 'label.account'
                         },
+                        username: {
+                            label: 'label.username'
+                        },
                         domain: {
                             label: 'label.domain'
                         },
@@ -331,6 +334,15 @@
                                 else
                                     return true;
                             }
+                        },
+                        username: {
+                            label: 'label.username',
+                            isHidden: function(args) {
+                                if (isAdmin() || isDomainAdmin())
+                                    return false;
+                                else
+                                    return true;
+                            }
                         }
                     },
 
diff --git a/ui/scripts/globalSettings.js b/ui/scripts/globalSettings.js
index eba8e68..ab03978 100644
--- a/ui/scripts/globalSettings.js
+++ b/ui/scripts/globalSettings.js
@@ -214,8 +214,8 @@
                             },
                             action: function(args) {
                                 var array = [];
-                                array.push("&hostname=" + todb(args.data.hostname));
-                                array.push("&port=" + todb(args.data.port));;
+                                array.push("&hostname=" + encodeURIComponent(args.data.hostname));
+                                array.push("&port=" + encodeURIComponent(args.data.port));
                                 $.ajax({
                                     url: createURL("addLdapConfiguration" + array.join("")),
                                     dataType: "json",
diff --git a/ui/scripts/installWizard.js b/ui/scripts/installWizard.js
index 9d7c23d..8ba82dd 100644
--- a/ui/scripts/installWizard.js
+++ b/ui/scripts/installWizard.js
@@ -35,7 +35,7 @@
                 url: createURL('updateUser'),
                 data: {
                     id: cloudStack.context.users[0].userid,
-                    password: md5Hashed ? $.md5(args.data.password) : args.data.password
+                    password: args.data.password
                 },
                 type: 'POST',
                 dataType: 'json',
diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js
index a3d735a..351ca7b 100644
--- a/ui/scripts/instanceWizard.js
+++ b/ui/scripts/instanceWizard.js
@@ -1095,7 +1095,7 @@
             var userdata = args.data.userdata;
             if (userdata != null && userdata.length > 0) {
                 $.extend(deployVmData, {
-                    userdata : todb(btoa(userdata))
+                    userdata : encodeURIComponent(btoa(userdata))
                 });
             }
 
diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js
index f33aac0..6dc45c0 100644
--- a/ui/scripts/instances.js
+++ b/ui/scripts/instances.js
@@ -228,14 +228,7 @@
                     var array1 = [];
                     array1.push("&snapshotmemory=" + (args.data.snapshotMemory == "on"));
                     array1.push("&quiescevm=" + (args.data.quiescevm == "on"));
-                    var displayname = args.data.name;
-                    if (displayname != null && displayname.length > 0) {
-                        array1.push("&name=" + todb(displayname));
-                    }
-                    var description = args.data.description;
-                    if (description != null && description.length > 0) {
-                        array1.push("&description=" + todb(description));
-                    }
+                    cloudStack.addNameAndDescriptionToCommandUrlParameterArray(array1, args.data);
                     $.ajax({
                         url: createURL("createVMSnapshot&virtualmachineid=" + instance.id + array1.join("")),
                         dataType: "json",
diff --git a/ui/scripts/lbCertificatePolicy.js b/ui/scripts/lbCertificatePolicy.js
index 538e33d..433e49b 100644
--- a/ui/scripts/lbCertificatePolicy.js
+++ b/ui/scripts/lbCertificatePolicy.js
@@ -51,6 +51,13 @@
                                 async: false,
                                 data: item,
                                 success: function(json) {
+                                    if(!json.listsslcertsresponse || !json.listsslcertsresponse.sslcert){
+                                        args.response.success({
+                                            data: {id: 'No certificates ID', 
+                                                    description: 'No certificates found'}
+                                        });
+                                        return;
+                                    }
                                     var items = json.listsslcertsresponse.sslcert;
                                     args.response.success({
                                         data: $.map(items, function(item) {
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 606fed4..7b7cbe2 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -45,10 +45,6 @@
 var ERROR_INTERNET_CANNOT_CONNECT = 12029;
 var ERROR_VMOPS_ACCOUNT_ERROR = 531;
 
-// Default password is MD5 hashed.  Set the following variable to false to disable this.
-var md5Hashed = false;
-var md5HashedLogin = false;
-
 //page size for API call (e.g."listXXXXXXX&pagesize=N" )
 var pageSize = 20;
 //var pageSize = 1; //for testing only
@@ -184,11 +180,8 @@
         return urlString;
     }
 
-    function todb(val) {
-        return encodeURIComponent(val);
-    }
 
-    //LB provider map
+//LB provider map
 var lbProviderMap = {
     "publicLb": {
         "non-vpc": ["VirtualRouter", "Netscaler", "F5"],
@@ -739,16 +732,16 @@
 
             if (selectedNetworkOfferingObj.guestiptype == "Shared")
                 array1.push("&physicalnetworkid=" + args.data.physicalNetworkId);
+            
+            cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array1, "name", args.data.name);
+            cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array1, "displayText", args.data.description);
 
-            array1.push("&name=" + todb(args.data.name));
-            array1.push("&displayText=" + todb(args.data.description));
-
-            if (($form.find('.form-item[rel=vlanId]').css("display") != "none") && (args.data.vlanId != null && args.data.vlanId.length > 0))
-                array1.push("&vlan=" + todb(args.data.vlanId));
-
-            if (($form.find('.form-item[rel=isolatedpvlanId]').css("display") != "none") && (args.data.isolatedpvlanId != null && args.data.isolatedpvlanId.length > 0))
-                array1.push("&isolatedpvlan=" + todb(args.data.isolatedpvlanId));
-
+            if ($form.find('.form-item[rel=vlanId]').css("display") != "none"){
+                cloudStack.addVlanToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.vlanId)
+            }
+            if (($form.find('.form-item[rel=isolatedpvlanId]').css("display") != "none") && (args.data.isolatedpvlanId != null && args.data.isolatedpvlanId.length > 0)){
+                array1.push("&isolatedpvlan=" + encodeURIComponent(args.data.isolatedpvlanId));
+            }
             if ($form.find('.form-item[rel=domainId]').css("display") != "none") {
                 array1.push("&domainId=" + args.data.domainId);
 
@@ -792,9 +785,9 @@
                 array1.push("&endipv6=" + args.data.endipv6);
             //IPv6 (end)
 
-            if (args.data.networkdomain != null && args.data.networkdomain.length > 0)
-                array1.push("&networkdomain=" + todb(args.data.networkdomain));
-
+            if (args.data.networkdomain != null && args.data.networkdomain.length > 0){
+                array1.push("&networkdomain=" + encodeURIComponent(args.data.networkdomain));
+            }
             $.ajax({
                 url: createURL("createNetwork" + array1.join("")),
                 dataType: "json",
@@ -930,7 +923,10 @@
                             url: createURL('listNetworkOfferings'),
                             data: data,
                             success: function(json) {
-                                networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
+                                if(!json.listnetworkofferingsresponse || !json.listnetworkofferingsresponse.networkoffering){
+                                    return;
+                                }
+                                var networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
                                 args.$select.change(function() {
                                     var $vlan = args.$select.closest('form').find('[rel=vlan]');
                                     var networkOffering = $.grep(
@@ -2622,3 +2618,270 @@
 
 },
 "All Zones cannot be combined with any other zone");
+
+cloudStack.createTemplateMethod = function (isSnapshot){
+	return {
+        label: 'label.create.template',
+        messages: {
+            confirm: function(args) {
+                return 'message.create.template';
+            },
+            notification: function(args) {
+                return 'label.create.template';
+            }
+        },
+        createForm: {
+            title: 'label.create.template',
+            preFilter: cloudStack.preFilter.createTemplate,
+            desc: '',
+            preFilter: function(args) {
+                if (args.context.volumes[0].hypervisor == "XenServer") {
+                    if (isAdmin()) {
+                        args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css('display', 'inline-block');
+                    }
+                }
+            },
+            fields: {
+                name: {
+                    label: 'label.name',
+                    validation: {
+                        required: true
+                    }
+                },
+                displayText: {
+                    label: 'label.description',
+                    validation: {
+                        required: true
+                    }
+                },
+                xenserverToolsVersion61plus: {
+                    label: 'label.xenserver.tools.version.61.plus',
+                    isBoolean: true,
+                    isChecked: function (args) {
+                        var b = false;
+                        var vmObj;
+                        $.ajax({
+                            url: createURL("listVirtualMachines"),
+                            data: {
+                                id: args.context.volumes[0].virtualmachineid
+                            },
+                            async: false,
+                            success: function(json) {
+                                vmObj = json.listvirtualmachinesresponse.virtualmachine[0];
+                            }
+                        });
+                        if (vmObj == undefined) { //e.g. VM has failed over
+                            if (isAdmin()) {
+                                $.ajax({
+                                    url: createURL('listConfigurations'),
+                                    data: {
+                                        name: 'xenserver.pvdriver.version'
+                                    },
+                                    async: false,
+                                    success: function (json) {
+                                        if (json.listconfigurationsresponse.configuration != null && json.listconfigurationsresponse.configuration[0].value == 'xenserver61') {
+                                            b = true;
+                                        }
+                                    }
+                                });
+                            }
+                        } else {
+                             if ('details' in vmObj && 'hypervisortoolsversion' in vmObj.details) {
+                                 if (vmObj.details.hypervisortoolsversion == 'xenserver61')
+                                     b = true;
+                                 else
+                                     b = false;
+                             }
+                        }
+                        return b;
+                    },
+                    isHidden: true
+                },
+                osTypeId: {
+                    label: 'label.os.type',
+                    select: function(args) {
+                        $.ajax({
+                            url: createURL("listOsTypes"),
+                            dataType: "json",
+                            async: true,
+                            success: function(json) {
+                                var ostypes = json.listostypesresponse.ostype;
+                                var items = [];
+                                $(ostypes).each(function() {
+                                    items.push({
+                                        id: this.id,
+                                        description: this.description
+                                    });
+                                });
+                                args.response.success({
+                                    data: items
+                                });
+                            }
+                        });
+                    }
+                },
+                isPublic: {
+                    label: 'label.public',
+                    isBoolean: true
+                },
+                isPasswordEnabled: {
+                    label: 'label.password.enabled',
+                    isBoolean: true
+                },
+                isFeatured: {
+                    label: 'label.featured',
+                    isBoolean: true
+                },
+                isdynamicallyscalable: {
+                    label: 'label.dynamically.scalable',
+                    isBoolean: true
+                },
+                requireshvm: {
+                    label: 'label.hvm',
+                    docID: 'helpRegisterTemplateHvm',
+                    isBoolean: true,
+                    isHidden: false,
+                    isChecked: false
+                }
+            }
+        },
+        action: function(args) {
+            var data = {
+                name: args.data.name,
+                displayText: args.data.displayText,
+                osTypeId: args.data.osTypeId,
+                isPublic: (args.data.isPublic == "on"),
+                passwordEnabled: (args.data.isPasswordEnabled == "on"),
+                isdynamicallyscalable: (args.data.isdynamicallyscalable == "on"),
+                requireshvm: (args.data.requireshvm == "on")
+            };
+            
+            if(isSnapshot){
+            	data.snapshotid = args.context.snapshots[0].id;
+            } else{
+            	data.volumeId = args.context.volumes[0].id;
+            }
+            if (args.$form.find('.form-item[rel=isFeatured]').css("display") != "none") {
+                $.extend(data, {
+                    isfeatured: (args.data.isFeatured == "on")
+                });
+            }
+
+            //XenServer only (starts here)
+            if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').length > 0) {
+                if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css("display") != "none") {
+                    $.extend(data, {
+                        'details[0].hypervisortoolsversion': (args.data.xenserverToolsVersion61plus == "on") ? "xenserver61" : "xenserver56"
+                    });
+                }
+            }
+            //XenServer only (ends here)
+
+            $.ajax({
+                url: createURL('createTemplate'),
+                data: data,
+                success: function(json) {
+                    var jid = json.createtemplateresponse.jobid;
+                    args.response.success({
+                        _custom: {
+                            jobId: jid,
+                            getUpdatedItem: function(json) {
+                                return {}; //no properties in this volume needs to be updated
+                            },
+                            getActionFilter: function() {
+                                return volumeActionfilter;
+                            }
+                        }
+                    });
+                }
+            });
+        },
+        notification: {
+            poll: pollAsyncJobResult
+        }
+    };
+};
+
+cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty = function(array, parameterName, value){
+    if (value != null && value.length > 0) {
+        array.push("&" + parameterName + "=" + encodeURIComponent(value));
+    }
+}
+
+cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty = function(array, username, password){
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "username", username);
+    cloudStack.addPasswordToCommandUrlParameterArray(array, password);
+};
+
+cloudStack.addPasswordToCommandUrlParameterArray = function(array, password){
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "password", password);
+};
+
+/**
+ * We will only add the name and description data to the array of parameters if they are not null.
+ * Moreover, we expect the name parameter to be a property ('name') of data object. 
+ * The description must be a property called 'description' in the data object.   
+ */
+cloudStack.addNameAndDescriptionToCommandUrlParameterArray = function (array, data){
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "name", data.name);
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "description", data.description);
+};
+
+cloudStack.addNewSizeToCommandUrlParameterArrayIfItIsNotNullAndHigherThanZero = function(array, newSize){
+    if(newSize == undefined || newSize == null){
+        return;
+    }
+    var newSizeAsNumber = new Number(newSize);
+    if(isNaN(newSizeAsNumber)){
+        return;
+    }
+    if (newSizeAsNumber > 0) {
+        array.push("&size=" + encodeURIComponent(newSize));
+    }
+};
+
+cloudStack.addVlanToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty = function(array, vlan){
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "vlan", vlan);
+};
+
+cloudStack.createArrayOfParametersForCreatePodCommand = function (zoneId, data){
+    var array =[];
+    array.push("&zoneId=" + zoneId);
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "name", data.podName);
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "gateway", data.podGateway);
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "netmask", data.podNetmask);
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "startIp", data.podStartIp);
+    cloudStack.addParameterToCommandUrlParameterArrayIfValueIsNotEmpty(array, "endIp", data.podEndIp);
+    return array;
+}
+
+cloudStack.listDiskOfferings = function(options){
+    var defaultOptions = {
+            listAll: false,
+            isRecursive: false,
+            error: function(data) {
+                args.response.error(data);
+            }
+    };
+    var mergedOptions = $.extend({}, defaultOptions, options);
+    
+    var listDiskOfferingsUrl = "listDiskOfferings";
+    if(mergedOptions.listAll){
+        listDiskOfferingsUrl = listDiskOfferingsUrl + "&listall=true";
+    }
+    if(mergedOptions.isRecursive){
+        listDiskOfferingsUrl = listDiskOfferingsUrl + "&isrecursive=true";
+    }
+    var diskOfferings = undefined;
+    $.ajax({
+        url: createURL(listDiskOfferingsUrl),
+        data: mergedOptions.data,
+        dataType: "json",
+        async: false,
+        success: function(json) {
+            diskOfferings = json.listdiskofferingsresponse.diskoffering;
+        },
+        error: mergedOptions.error
+    });
+    return diskOfferings;
+};
\ No newline at end of file
diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js
index e9b6138..06fe41e 100644
--- a/ui/scripts/storage.js
+++ b/ui/scripts/storage.js
@@ -15,8 +15,165 @@
 // specific language governing permissions and limitations
 // under the License.
 (function(cloudStack) {
+    var migrateVolumeCreateFormAction = {
+            title: 'label.migrate.volume',
+            fields: {
+                storagePool: {
+                    label: 'label.storage.pool',
+                    validation: {
+                        required: true
+                    },
+                    select: function(args) {
+                        var mapStoragePoolsByUuid = new Map();
+                        var volumeId = args.context.volumes[0].id;
+                        
+                        var volumeBeingMigrated = undefined;
+                        $.ajax({
+                            url: createURL("listVolumes&id=" + volumeId),
+                            dataType: "json",
+                            async: false,
+                            success: function(json){
+                                volumeBeingMigrated = json.listvolumesresponse.volume[0]; 
+                            }
+                        });
+                        
+                        var currentStoragePool = undefined;
+                        $.ajax({
+                            url: createURL("listStoragePools&id=" + volumeBeingMigrated.storageid),
+                            dataType: "json",
+                            async: false,
+                            success: function(json){
+                                currentStoragePool = json.liststoragepoolsresponse.storagepool[0]; 
+                            }
+                        });
+                        var isVolumeNotAttachedToVm = volumeBeingMigrated.virtualmachineid == undefined;
+                        var urlToRetrieveStoragePools = "findStoragePoolsForMigration&id=" + args.context.volumes[0].id;
+                        if(isVolumeNotAttachedToVm){
+                            urlToRetrieveStoragePools = "listStoragePools&zoneid=" + args.context.volumes[0].zoneid;
+                        }
+                        $.ajax({
+                            url: createURL(urlToRetrieveStoragePools),
+                            dataType: "json",
+                            async: true,
+                            success: function(json) {
+                                var pools = undefined;
+                                if(isVolumeNotAttachedToVm){
+                                    pools = json.liststoragepoolsresponse.storagepool;
+                                }else{
+                                    pools = json.findstoragepoolsformigrationresponse.storagepool;
+                                }
+                                var items = [];
+                                $(pools).each(function() {
+                                    mapStoragePoolsByUuid.set(this.id, this);
+                                    var description = this.name;
+                                    if(!isVolumeNotAttachedToVm){
+                                        description = description + " (" + (this.suitableformigration ? "Suitable" : "Not Suitable") + ")";
+                                    }
+                                    items.push({
+                                        id: this.id,
+                                        description: description
+                                    });
+                                });
+                                args.response.success({
+                                    data: items
+                                });
+                                var diskOfferings = cloudStack.listDiskOfferings({listAll: true});
+                                $('select[name=storagePool]').change(function(){
+                                    var uuidOfStoragePoolSelected = $(this).val();
+                                    var storagePoolSelected = mapStoragePoolsByUuid.get(uuidOfStoragePoolSelected);
+                                    
+                                    if(currentStoragePool.scope === storagePoolSelected.scope){
+                                        $('div[rel=newDiskOffering],div[rel=useNewDiskOffering]').hide();
+                                    }else{
+                                        $('div[rel=newDiskOffering],div[rel=useNewDiskOffering]').show();
+                                    }
+                                    var storageType = 'shared';
+                                    if(storagePoolSelected.scope == 'HOST'){
+                                        storageType = 'local';
+                                    }
+                                    $(diskOfferings).each(function(){
+                                        var diskOfferingOption = $('option[value=' + this.id + ']');
+                                        if(this.storagetype == storageType){
+                                            diskOfferingOption.show();
+                                        }else{
+                                            diskOfferingOption.hide();
+                                        }
+                                    });
+                                    var firstAvailableDiskOfferingForStorageType = $('select#label_disk_newOffering').children('option:visible').first().attr('value');
+                                    $('select#label_disk_newOffering').attr('value', firstAvailableDiskOfferingForStorageType);
+                                });
+                                var functionHideShowNewDiskOfferint = function(){
+                                    if($('div[rel=useNewDiskOffering] input[type=checkbox]').is(':checked')){
+                                        $('div[rel=newDiskOffering]').show();
+                                    }else{
+                                        $('div[rel=newDiskOffering]').hide();
+                                    }  
+                                };
+                                $('div[rel=useNewDiskOffering] input[type=checkbox]').click(functionHideShowNewDiskOfferint);
+                                
+                                $('select[name=storagePool]').change();
+                                functionHideShowNewDiskOfferint();
+                            }
+                        });
+                    }
+                },
+            useNewDiskOffering:{
+                label: 'label.migrate.volume.newDiskOffering',
+                desc: 'label.migrate.volume.newDiskOffering.desc',
+                validation: {
+                    required: false
+                   },
+                isEditable: true, 
+                isBoolean: true,
+                defaultValue: 'Yes'
+            },
+            newDiskOffering: {
+                label: 'label.disk.newOffering',
+                desc: 'label.disk.newOffering.description',
+                validation: {
+                    required: false
+                   },
+                select: function(args){
+                    var diskOfferings = cloudStack.listDiskOfferings({listAll: true});
+                    var items = [];
+                    $(diskOfferings).each(function() {
+                        items.push({
+                            id: this.id,
+                            description: this.name
+                        });
+                    });
+                    args.response.success({
+                        data: items
+                    });
+                   }
+               }
+           }
+        };
+    var functionMigrateVolume = function(args) {
+        var volumeBeingMigrated = args.context.volumes[0];
+        var isLiveMigrate = volumeBeingMigrated.vmstate == 'Running';
+        
+        var migrateVolumeUrl = "migrateVolume&livemigrate="+ isLiveMigrate +"&storageid=" + args.data.storagePool + "&volumeid=" + volumeBeingMigrated.id;
+        if($('div[rel=useNewDiskOffering] input[name=useNewDiskOffering]:checkbox').is(':checked')){
+            migrateVolumeUrl = migrateVolumeUrl + '&newdiskofferingid=' + $('div[rel=newDiskOffering] select').val();
+        }
+        $.ajax({
+            url: createURL(migrateVolumeUrl),
+            dataType: "json",
+            async: true,
+            success: function(json) {
+                $(window).trigger('cloudStack.fullRefresh');
+                var jid = json.migratevolumeresponse.jobid;
+                args.response.success({
+                    _custom: {
+                        jobId: jid
+                    }
+                });
+            }
+        });
+    }
 
-    var diskofferingObjs, selectedDiskOfferingObj;
+    var selectedDiskOfferingObj = null;
 
     cloudStack.sections.storage = {
         title: 'label.storage',
@@ -128,36 +285,28 @@
                                         label: 'label.disk.offering',
                                         docID: 'helpVolumeDiskOffering',
                                         select: function(args) {
-                                            $.ajax({
-                                                url: createURL("listDiskOfferings"),
-                                                dataType: "json",
-                                                async: false,
-                                                success: function(json) {
-                                                    diskofferingObjs = json.listdiskofferingsresponse.diskoffering;
-                                                    var items = [];
-                                                    $(diskofferingObjs).each(function() {
-                                                        items.push({
-                                                            id: this.id,
-                                                            description: this.displaytext
-                                                        });
-                                                    });
-                                                    args.response.success({
-                                                        data: items
-                                                    });
-                                                }
+                                            var diskOfferings = cloudStack.listDiskOfferings({});
+                                            var items = [];
+                                            $(diskOfferings).each(function() {
+                                                items.push({
+                                                    id: this.id,
+                                                    description: this.displaytext
+                                                });
                                             });
-
+                                            args.response.success({
+                                                data: items
+                                            });
                                             args.$select.change(function() {
                                                 var diskOfferingId = $(this).val();
-                                                $(diskofferingObjs).each(function() {
+                                                $(diskOfferings).each(function() {
                                                     if (this.id == diskOfferingId) {
                                                         selectedDiskOfferingObj = this;
                                                         return false; //break the $.each() loop
                                                     }
                                                 });
-                                                if (selectedDiskOfferingObj == null)
+                                                if (selectedDiskOfferingObj == null){
                                                     return;
-
+                                                }
                                                 var $form = $(this).closest('form');
                                                 var $diskSize = $form.find('.form-item[rel=diskSize]');
                                                 if (selectedDiskOfferingObj.iscustomized == true) {
@@ -361,60 +510,44 @@
                                         label: 'label.custom.disk.offering',
                                         docID: 'helpVolumeDiskOffering',
                                         select: function(args) {
-                                            var diskofferingObjs;
-                                            $.ajax({
-                                                url: createURL("listDiskOfferings"),
-                                                dataType: "json",
-                                                async: false,
-                                                success: function(json) {
-                                                    diskofferingObjs = json.listdiskofferingsresponse.diskoffering;
-                                                    var items = [{
-                                                        id: '',
-                                                        description: ''
-                                                    }];
-                                                    $(diskofferingObjs).each(function() {
-                                                        if (this.iscustomized == true) {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.displaytext
-                                                            });
-                                                        }
-                                                    });
-                                                    args.response.success({
-                                                        data: items
+                                            var diskOfferings = cloudStack.listDiskOfferings({});
+                                            var items = [{
+                                                id: '',
+                                                description: ''
+                                            }];
+                                            $(diskOfferings).each(function() {
+                                                if (this.iscustomized == true) {
+                                                    items.push({
+                                                        id: this.id,
+                                                        description: this.displaytext
                                                     });
                                                 }
                                             });
+                                            args.response.success({
+                                                data: items
+                                            });
                                         }
                                     },
                                     diskOffering: {
                                         label: 'label.custom.disk.offering',
                                         docID: 'helpVolumeDiskOffering',
                                         select: function(args) {
-                                            var diskofferingObjs;
-                                            $.ajax({
-                                                url: createURL("listDiskOfferings"),
-                                                dataType: "json",
-                                                async: false,
-                                                success: function(json) {
-                                                    diskofferingObjs = json.listdiskofferingsresponse.diskoffering;
-                                                    var items = [{
-                                                        id: '',
-                                                        description: ''
-                                                    }];
-                                                    $(diskofferingObjs).each(function() {
-                                                        if (this.iscustomized == true) {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.displaytext
-                                                            });
-                                                        }
-                                                    });
-                                                    args.response.success({
-                                                        data: items
+                                            var diskOfferings = cloudStack.listDiskOfferings({});
+                                            var items = [{
+                                                id: '',
+                                                description: ''
+                                            }];
+                                            $(diskOfferings).each(function() {
+                                                if (this.iscustomized == true) {
+                                                    items.push({
+                                                        id: this.id,
+                                                        description: this.displaytext
                                                     });
                                                 }
                                             });
+                                            args.response.success({
+                                                data: items
+                                            });
                                         }
                                     },
                                     checksum: {
@@ -746,7 +879,6 @@
                             label: 'label.snapshots'
                         },
                         actions: {
-
                             migrateVolume: {
                                 label: 'label.migrate.volume',
                                 messages: {
@@ -758,56 +890,9 @@
                                     }
                                 },
 
-                                createForm: {
-                                    title: 'label.migrate.volume',
-                                    desc: '',
-                                    fields: {
-                                        storagePool: {
-                                            label: 'label.storage.pool',
-                                            validation: {
-                                                required: true
-                                            },
-                                            select: function(args) {
-                                                $.ajax({
-                                                    url: createURL("findStoragePoolsForMigration&id=" + args.context.volumes[0].id),
-                                                    dataType: "json",
-                                                    async: true,
-                                                    success: function(json) {
-                                                        var pools = json.findstoragepoolsformigrationresponse.storagepool;
-                                                        var items = [];
-                                                        $(pools).each(function() {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.name + " (" + (this.suitableformigration ? "Suitable" : "Not Suitable") + ")"
-                                                            });
-                                                        });
-                                                        args.response.success({
-                                                            data: items
-                                                        });
+                                createForm: migrateVolumeCreateFormAction,
 
-                                                    }
-                                                });
-                                            }
-                                        }
-                                    }
-
-                                },
-
-                                action: function(args) {
-                                    $.ajax({
-                                        url: createURL("migrateVolume&livemigrate=true&storageid=" + args.data.storagePool + "&volumeid=" + args.context.volumes[0].id),
-                                        dataType: "json",
-                                        async: true,
-                                        success: function(json) {
-                                            var jid = json.migratevolumeresponse.jobid;
-                                            args.response.success({
-                                                _custom: {
-                                                    jobId: jid
-                                                }
-                                            });
-                                        }
-                                    });
-                                },
+                                action: functionMigrateVolume,
                                 notification: {
                                     poll: pollAsyncJobResult
                                 }
@@ -1302,175 +1387,8 @@
                                 }
                             },
 
-                            createTemplate: {
-                                label: 'label.create.template',
-                                messages: {
-                                    confirm: function(args) {
-                                        return 'message.create.template';
-                                    },
-                                    notification: function(args) {
-                                        return 'label.create.template';
-                                    }
-                                },
-                                createForm: {
-                                    title: 'label.create.template',
-                                    preFilter: cloudStack.preFilter.createTemplate,
-                                    desc: '',
-                                    preFilter: function(args) {
-                                        if (args.context.volumes[0].hypervisor == "XenServer") {
-                                            args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css('display', 'inline-block');
-
-                                        }
-                                    },
-                                    fields: {
-                                        name: {
-                                            label: 'label.name',
-                                            validation: {
-                                                required: true
-                                            }
-                                        },
-                                        displayText: {
-                                            label: 'label.description',
-                                            validation: {
-                                                required: true
-                                            }
-                                        },
-                                        xenserverToolsVersion61plus: {
-                                            label: 'label.xenserver.tools.version.61.plus',
-                                            isBoolean: true,
-                                            isChecked: function (args) {
-                                                var b = false;
-                                                var vmObj;
-                                                $.ajax({
-                                                    url: createURL("listVirtualMachines"),
-                                                    data: {
-                                                        id: args.context.volumes[0].virtualmachineid
-                                                    },
-                                                    async: false,
-                                                    success: function(json) {
-                                                        vmObj = json.listvirtualmachinesresponse.virtualmachine[0];
-                                                    }
-                                                });
-                                                if (vmObj == undefined) { //e.g. VM has failed over
-                                                    if (isAdmin()) {
-                                                        $.ajax({
-                                                            url: createURL('listConfigurations'),
-                                                            data: {
-                                                                name: 'xenserver.pvdriver.version'
-                                                            },
-                                                            async: false,
-                                                            success: function (json) {
-                                                                if (json.listconfigurationsresponse.configuration != null && json.listconfigurationsresponse.configuration[0].value == 'xenserver61') {
-                                                                    b = true;
-                                                                }
-                                                            }
-                                                        });
-                                                    }
-                                                } else {
-                                                     if ('details' in vmObj && 'hypervisortoolsversion' in vmObj.details) {
-                                                         if (vmObj.details.hypervisortoolsversion == 'xenserver61')
-                                                             b = true;
-                                                         else
-                                                             b = false;
-                                                     }
-                                                }
-                                                return b;
-                                            },
-                                            isHidden: true
-                                        },
-                                        osTypeId: {
-                                            label: 'label.os.type',
-                                            select: function(args) {
-                                                $.ajax({
-                                                    url: createURL("listOsTypes"),
-                                                    dataType: "json",
-                                                    async: true,
-                                                    success: function(json) {
-                                                        var ostypes = json.listostypesresponse.ostype;
-                                                        var items = [];
-                                                        $(ostypes).each(function() {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.description
-                                                            });
-                                                        });
-                                                        args.response.success({
-                                                            data: items
-                                                        });
-                                                    }
-                                                });
-                                            }
-                                        },
-                                        isPublic: {
-                                            label: 'label.public',
-                                            isBoolean: true
-                                        },
-                                        isPasswordEnabled: {
-                                            label: 'label.password.enabled',
-                                            isBoolean: true
-                                        },
-                                        isFeatured: {
-                                            label: 'label.featured',
-                                            isBoolean: true
-                                        },
-                                        isdynamicallyscalable: {
-                                            label: 'label.dynamically.scalable',
-                                            isBoolean: true
-                                        }
-                                    }
-                                },
-                                action: function(args) {
-                                    var data = {
-                                        volumeId: args.context.volumes[0].id,
-                                        name: args.data.name,
-                                        displayText: args.data.displayText,
-                                        osTypeId: args.data.osTypeId,
-                                        isPublic: (args.data.isPublic == "on"),
-                                        passwordEnabled: (args.data.isPasswordEnabled == "on"),
-                                        isdynamicallyscalable: (args.data.isdynamicallyscalable == "on")
-
-                                    };
-
-                                    if (args.$form.find('.form-item[rel=isFeatured]').css("display") != "none") {
-                                        $.extend(data, {
-                                            isfeatured: (args.data.isFeatured == "on")
-                                        });
-                                    }
-
-                                    //XenServer only (starts here)
-                                    if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').length > 0) {
-                                        if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css("display") != "none") {
-                                            $.extend(data, {
-                                                'details[0].hypervisortoolsversion': (args.data.xenserverToolsVersion61plus == "on") ? "xenserver61" : "xenserver56"
-                                            });
-                                        }
-                                    }
-                                    //XenServer only (ends here)
-
-                                    $.ajax({
-                                        url: createURL('createTemplate'),
-                                        data: data,
-                                        success: function(json) {
-                                            var jid = json.createtemplateresponse.jobid;
-                                            args.response.success({
-                                                _custom: {
-                                                    jobId: jid,
-                                                    getUpdatedItem: function(json) {
-                                                        return {}; //no properties in this volume needs to be updated
-                                                    },
-                                                    getActionFilter: function() {
-                                                        return volumeActionfilter;
-                                                    }
-                                                }
-                                            });
-                                        }
-                                    });
-                                },
-                                notification: {
-                                    poll: pollAsyncJobResult
-                                }
-                            },
-
+                            createTemplate: cloudStack.createTemplateMethod(false),
+                            
                             migrateToAnotherStorage: {
                                 label: 'label.migrate.volume.to.primary.storage',
                                 messages: {
@@ -1481,59 +1399,8 @@
                                         return 'label.migrate.volume.to.primary.storage';
                                     }
                                 },
-                                createForm: {
-                                    title: 'label.migrate.volume.to.primary.storage',
-                                    desc: '',
-                                    fields: {
-                                        storageId: {
-                                            label: 'label.primary.storage',
-                                            validation: {
-                                                required: true
-                                            },
-                                            select: function(args) {
-                                                $.ajax({
-                                                    url: createURL("listStoragePools&zoneid=" + args.context.volumes[0].zoneid),
-                                                    dataType: "json",
-                                                    async: true,
-                                                    success: function(json) {
-                                                        var pools = json.liststoragepoolsresponse.storagepool;
-                                                        var items = [];
-                                                        $(pools).each(function() {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.name
-                                                            });
-                                                        });
-                                                        args.response.success({
-                                                            data: items
-                                                        });
-                                                    }
-                                                });
-                                            }
-                                        }
-                                    }
-                                },
-                                action: function(args) {
-                                    $.ajax({
-                                        url: createURL("migrateVolume&storageid=" + args.data.storageId + "&volumeid=" + args.context.volumes[0].id),
-                                        dataType: "json",
-                                        async: true,
-                                        success: function(json) {
-                                            var jid = json.migratevolumeresponse.jobid;
-                                            args.response.success({
-                                                _custom: {
-                                                    jobId: jid,
-                                                    getUpdatedItem: function(json) {
-                                                        return json.queryasyncjobresultresponse.jobresult.volume;
-                                                    },
-                                                    getActionFilter: function() {
-                                                        return volumeActionfilter;
-                                                    }
-                                                }
-                                            });
-                                        }
-                                    });
-                                },
+                                createForm: $.extend({}, migrateVolumeCreateFormAction, {title: 'label.migrate.volume.to.primary.storage'}),
+                                action: functionMigrateVolume,
                                 notification: {
                                     poll: pollAsyncJobResult
                                 }
@@ -1597,25 +1464,18 @@
                                                     });
                                                     return;
                                                 }
-
-                                                $.ajax({
-                                                    url: createURL("listDiskOfferings"),
-                                                    dataType: "json",
-                                                    success: function(json) {
-                                                        diskofferingObjs = json.listdiskofferingsresponse.diskoffering;
-                                                        var items = [];
-                                                        $(diskofferingObjs).each(function() {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.displaytext
-                                                            });
-                                                        });
-                                                        args.response.success({
-                                                            data: items
-                                                        });
-                                                    }
+                                                var diskOfferings = cloudStack.listDiskOfferings({});
+                                                var items = [];
+                                                $(diskOfferings).each(function() {
+                                                    items.push({
+                                                        id: this.id,
+                                                        description: this.displaytext
+                                                    });
                                                 });
-
+                                                args.response.success({
+                                                    data: items
+                                                });
+                                                
                                                 args.$select.change(function() {
                                                     if(args.context.volumes[0].type == "ROOT") {
                                                         selectedDiskOfferingObj = null;
@@ -1623,15 +1483,15 @@
                                                     }
 
                                                     var diskOfferingId = $(this).val();
-                                                    $(diskofferingObjs).each(function() {
+                                                    $(diskOfferings).each(function() {
                                                         if (this.id == diskOfferingId) {
                                                             selectedDiskOfferingObj = this;
                                                             return false; //break the $.each() loop
                                                         }
                                                     });
-                                                    if (selectedDiskOfferingObj == null)
+                                                    if (selectedDiskOfferingObj == null){
                                                         return;
-
+                                                    }
                                                     var $form = $(this).closest('form');
 
                                                     var $shrinkok = $form.find('.form-item[rel=shrinkok]');
@@ -1695,45 +1555,31 @@
                                 },
                                 action: function(args) {
                                     var array1 = [];
-                                    var newSize;
-                                    if (selectedDiskOfferingObj == null || selectedDiskOfferingObj.iscustomized == true) {
-                                        newSize = args.data.newsize;
-                                        if (newSize != null && newSize.length > 0) {
-                                            array1.push("&size=" + todb(newSize));
-                                        }
-                                    } else {
+                                    if(args.$form.find('.form-item[rel=shrinkok]').css("display") != "none") {
+                                        array1.push("&shrinkok=" + (args.data.shrinkok == "on"));
+                                    }
 
-                                        if(args.$form.find('.form-item[rel=shrinkok]').css("display") != "none") {
-                                            array1.push("&shrinkok=" + (args.data.shrinkok == "on"));
-                                        }
+                                    var newDiskOffering = args.data.newdiskoffering;
+                                    if (newDiskOffering != null && newDiskOffering.length > 0) {
+                                        array1.push("&diskofferingid=" + encodeURIComponent(newDiskOffering));
+                                    }
+                                    if (selectedDiskOfferingObj.iscustomized == true) {
+                                        cloudStack.addNewSizeToCommandUrlParameterArrayIfItIsNotNullAndHigherThanZero(array1, args.data.newsize);
+                                    }
 
-                                        var newDiskOffering = args.data.newdiskoffering;
+                                    var minIops;
+                                    var maxIops
+                                    if (selectedDiskOfferingObj.iscustomizediops == true) {
+                                        minIops = args.data.minIops;
+                                        maxIops = args.data.maxIops;
+                                    }
 
-                                        if (selectedDiskOfferingObj.iscustomized == true) {
-                                            newSize = args.data.newsize;
-                                        }
-                                        if (newDiskOffering != null && newDiskOffering.length > 0) {
-                                            array1.push("&diskofferingid=" + todb(newDiskOffering));
-                                        }
-                                        if (newSize != null && newSize.length > 0) {
-                                            array1.push("&size=" + todb(newSize));
-                                        }
+                                    if (minIops != null && minIops.length > 0) {
+                                        array1.push("&miniops=" + encodeURIComponent(minIops));
+                                    }
 
-                                        var minIops;
-                                        var maxIops
-
-                                        if (selectedDiskOfferingObj.iscustomizediops == true) {
-                                            minIops = args.data.minIops;
-                                            maxIops = args.data.maxIops;
-                                        }
-
-                                        if (minIops != null && minIops.length > 0) {
-                                            array1.push("&miniops=" + todb(minIops));
-                                        }
-
-                                        if (maxIops != null && maxIops.length > 0) {
-                                            array1.push("&maxiops=" + todb(maxIops));
-                                        }
+                                    if (maxIops != null && maxIops.length > 0) {
+                                        array1.push("&maxiops=" + encodeURIComponent(maxIops));
                                     }
                                     //if original disk size  > new disk size
                                     if ((args.context.volumes[0].type == "ROOT")
@@ -2102,103 +1948,7 @@
                     detailView: {
                         name: 'Snapshot detail',
                         actions: {
-                            createTemplate: {
-                                label: 'label.create.template',
-                                messages: {
-                                    confirm: function(args) {
-                                        return 'message.create.template';
-                                    },
-                                    notification: function(args) {
-                                        return 'label.create.template';
-                                    }
-                                },
-                                createForm: {
-                                    title: 'label.create.template',
-                                    desc: '',
-                                    fields: {
-                                        name: {
-                                            label: 'label.name',
-                                            validation: {
-                                                required: true
-                                            }
-                                        },
-                                        displayText: {
-                                            label: 'label.description',
-                                            validation: {
-                                                required: true
-                                            }
-                                        },
-                                        osTypeId: {
-                                            label: 'label.os.type',
-                                            select: function(args) {
-                                                $.ajax({
-                                                    url: createURL("listOsTypes"),
-                                                    dataType: "json",
-                                                    async: true,
-                                                    success: function(json) {
-                                                        var ostypes = json.listostypesresponse.ostype;
-                                                        var items = [];
-                                                        $(ostypes).each(function() {
-                                                            items.push({
-                                                                id: this.id,
-                                                                description: this.description
-                                                            });
-                                                        });
-                                                        args.response.success({
-                                                            data: items
-                                                        });
-                                                    }
-                                                });
-                                            }
-                                        },
-                                        isPublic: {
-                                            label: 'label.public',
-                                            isBoolean: true
-                                        },
-                                        isPasswordEnabled: {
-                                            label: 'label.password.enabled',
-                                            isBoolean: true
-                                        },
-                                        isdynamicallyscalable: {
-                                            label: 'label.dynamically.scalable',
-                                            isBoolean: true
-                                        }
-                                    }
-                                },
-                                action: function(args) {
-                                    var data = {
-                                        snapshotid: args.context.snapshots[0].id,
-                                        name: args.data.name,
-                                        displayText: args.data.displayText,
-                                        osTypeId: args.data.osTypeId,
-                                        isPublic: (args.data.isPublic == "on"),
-                                        passwordEnabled: (args.data.isPasswordEnabled == "on"),
-                                        isdynamicallyscalable: (args.data.isdynamicallyscalable == "on")
-                                    };
-
-                                    $.ajax({
-                                        url: createURL('createTemplate'),
-                                        data: data,
-                                        success: function(json) {
-                                            var jid = json.createtemplateresponse.jobid;
-                                            args.response.success({
-                                                _custom: {
-                                                    jobId: jid,
-                                                    getUpdatedItem: function(json) {
-                                                        return {}; //nothing in this snapshot needs to be updated
-                                                    },
-                                                    getActionFilter: function() {
-                                                        return snapshotActionfilter;
-                                                    }
-                                                }
-                                            });
-                                        }
-                                    });
-                                },
-                                notification: {
-                                    poll: pollAsyncJobResult
-                                }
-                            },
+                            createTemplate: cloudStack.createTemplateMethod(true),
 
                             createVolume: {
                                 label: 'label.action.create.volume',
@@ -2816,7 +2566,7 @@
                     }
                 } else { // Disk not attached
                     allowedActions.push("remove");
-                    if (jsonObj.state == "Ready" && isAdmin() && jsonObj.storagetype == "shared") {
+                    if (jsonObj.state == "Ready" && isAdmin()) {
                         allowedActions.push("migrateToAnotherStorage");
                     }
                     allowedActions.push("attachDisk");
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index b568d49..962c38e 100755
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -477,10 +477,12 @@
                                                 var array1 =[];
                                                 array1.push("&zoneId=" + args.context.zones[0].id);
 
-                                                if (args.data.vlan != null && args.data.vlan.length > 0)
-                                                array1.push("&vlan=" + todb(args.data.vlan)); else
-                                                array1.push("&vlan=untagged");
-
+                                                var vlan = "untagged";
+                                                if (args.data.vlan != null && args.data.vlan.length > 0){
+                                                    vlan = args.data.vlan;
+                                                }
+                                                cloudStack.addVlanToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, vlan);
+                                                
                                                 array1.push("&gateway=" + args.data.gateway);
                                                 array1.push("&netmask=" + args.data.netmask);
                                                 array1.push("&startip=" + args.data.startip);
@@ -814,11 +816,9 @@
                                                 var array1 =[];
                                                 array1.push("&zoneId=" + args.context.zones[0].id);
                                                 array1.push("&podid=" + args.data.podid);
-
                                                 array1.push("&gateway=" + args.data.gateway);
 
-                                                if (args.data.vlan != null && args.data.vlan.length > 0)
-                                                array1.push("&vlan=" + todb(args.data.vlan));
+                                                cloudStack.addVlanToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.vlan);
 
                                                 array1.push("&netmask=" + args.data.netmask);
                                                 array1.push("&startip=" + args.data.startip);
@@ -1046,9 +1046,7 @@
                                                 if (args.data.systemvms) {
                                                     array1.push("&forsystemvms=" + (args.data.systemvms == "on" ? "true" : "false"));
                                                 }
-
-                                                if (args.data.vlan != null && args.data.vlan.length > 0)
-                                                    array1.push("&vlan=" + todb(args.data.vlan));
+                                                cloudStack.addVlanToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.vlan);
 
                                                 $.ajax({
                                                     url: createURL("createManagementNetworkIpRange" + array1.join("")),
@@ -1557,16 +1555,16 @@
                                                 label: 'label.edit',
                                                 action: function (args) {
                                                     var array1 =[];
-                                                    array1.push("&name=" + todb(args.data.name));
-                                                    array1.push("&displaytext=" + todb(args.data.displaytext));
+                                                    array1.push("&name=" + encodeURIComponent(args.data.name));
+                                                    array1.push("&displaytext=" + encodeURIComponent(args.data.displaytext));
 
                                                     //args.data.networkdomain is null when networkdomain field is hidden
                                                     if (args.data.networkdomain != null && args.data.networkdomain != selectedGuestNetworkObj.networkdomain)
-                                                    array1.push("&networkdomain=" + todb(args.data.networkdomain));
+                                                    array1.push("&networkdomain=" + encodeURIComponent(args.data.networkdomain));
 
                                                     //args.data.networkofferingid is null when networkofferingid field is hidden
                                                     if (args.data.networkofferingid != null && args.data.networkofferingid != args.context.networks[0].networkofferingid) {
-                                                        array1.push("&networkofferingid=" + todb(args.data.networkofferingid));
+                                                        array1.push("&networkofferingid=" + encodeURIComponent(args.data.networkofferingid));
 
                                                         if (args.context.networks[0].type == "Isolated") {
                                                             //Isolated network
@@ -8097,7 +8095,7 @@
                                             //EXPLICIT DEDICATION
                                             var array2 =[];
                                             if (args.data.accountId != "")
-                                            array2.push("&account=" + todb(args.data.accountId));
+                                            array2.push("&account=" + encodeURIComponent(args.data.accountId));
 
                                             $.ajax({
                                                 url: createURL("dedicateZone&zoneId=" +
@@ -8194,23 +8192,23 @@
                                         label: 'label.edit',
                                         action: function (args) {
                                             var array1 =[];
-                                            array1.push("&name=" + todb(args.data.name));
-                                            array1.push("&dns1=" + todb(args.data.dns1));
-                                            array1.push("&dns2=" + todb(args.data.dns2));
+                                            array1.push("&name=" + encodeURIComponent(args.data.name));
+                                            array1.push("&dns1=" + encodeURIComponent(args.data.dns1));
+                                            array1.push("&dns2=" + encodeURIComponent(args.data.dns2));
                                             //dns2 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank.
-                                            array1.push("&ip6dns1=" + todb(args.data.ip6dns1));
+                                            array1.push("&ip6dns1=" + encodeURIComponent(args.data.ip6dns1));
                                             //p6dns1 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank.
-                                            array1.push("&ip6dns2=" + todb(args.data.ip6dns2));
+                                            array1.push("&ip6dns2=" + encodeURIComponent(args.data.ip6dns2));
                                             //ip6dns2 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank.
 
                                             if (selectedZoneObj.networktype == "Advanced" && args.data.guestcidraddress) {
-                                                array1.push("&guestcidraddress=" + todb(args.data.guestcidraddress));
+                                                array1.push("&guestcidraddress=" + encodeURIComponent(args.data.guestcidraddress));
                                             }
 
-                                            array1.push("&internaldns1=" + todb(args.data.internaldns1));
-                                            array1.push("&internaldns2=" + todb(args.data.internaldns2));
+                                            array1.push("&internaldns1=" + encodeURIComponent(args.data.internaldns1));
+                                            array1.push("&internaldns2=" + encodeURIComponent(args.data.internaldns2));
                                             //internaldns2 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank.
-                                            array1.push("&domain=" + todb(args.data.domain));
+                                            array1.push("&domain=" + encodeURIComponent(args.data.domain));
                                             array1.push("&localstorageenabled=" + (args.data.localstorageenabled == 'on'));
                                             $.ajax({
                                                 url: createURL("updateZone&id=" + args.context.physicalResources[0].id + array1.join("")),
@@ -13664,14 +13662,14 @@
                                 };
 
                                 array1.push("&zoneId=" + args.data.zoneid);
-                                array1.push("&name=" + todb(args.data.podname));
-                                array1.push("&gateway=" + todb(args.data.reservedSystemGateway));
-                                array1.push("&netmask=" + todb(args.data.reservedSystemNetmask));
-                                array1.push("&startIp=" + todb(args.data.reservedSystemStartIp));
+                                array1.push("&name=" + encodeURIComponent(args.data.podname));
+                                array1.push("&gateway=" + encodeURIComponent(args.data.reservedSystemGateway));
+                                array1.push("&netmask=" + encodeURIComponent(args.data.reservedSystemNetmask));
+                                array1.push("&startIp=" + encodeURIComponent(args.data.reservedSystemStartIp));
 
                                 var endip = args.data.reservedSystemEndIp; //optional
                                 if (endip != null && endip.length > 0)
-                                array1.push("&endIp=" + todb(endip));
+                                array1.push("&endIp=" + encodeURIComponent(endip));
                                 var podId = null;
                                 $.ajax({
                                     url: createURL("createPod" + array1.join("")),
@@ -13685,7 +13683,7 @@
                                         if (args.$form.find('.form-item[rel=isDedicated]').find('input[type=checkbox]').is(':Checked') == true) {
                                             var array2 =[];
                                             if (args.data.accountId != "")
-                                            array2.push("&account=" + todb(args.data.accountId));
+                                            array2.push("&account=" + encodeURIComponent(args.data.accountId));
 
                                             if (podId != null) {
                                                 $.ajax({
@@ -13764,11 +13762,11 @@
                                 action: function (args) {
                                     var array1 =[];
 
-                                    array1.push("&name=" + todb(args.data.name));
-                                    array1.push("&netmask=" + todb(args.data.netmask));
+                                    array1.push("&name=" + encodeURIComponent(args.data.name));
+                                    array1.push("&netmask=" + encodeURIComponent(args.data.netmask));
 
                                     if (args.data.gateway != null && args.data.gateway.length > 0)
-                                    array1.push("&gateway=" + todb(args.data.gateway));
+                                    array1.push("&gateway=" + encodeURIComponent(args.data.gateway));
 
                                     $.ajax({
                                         url: createURL("updatePod&id=" + args.context.pods[0].id + array1.join("")),
@@ -13879,7 +13877,7 @@
                                     //EXPLICIT DEDICATION
                                     var array2 =[];
                                     if (args.data.accountId != "")
-                                    array2.push("&account=" + todb(args.data.accountId));
+                                    array2.push("&account=" + encodeURIComponent(args.data.accountId));
 
                                     $.ajax({
                                         url: createURL("dedicatePod&podId=" +
@@ -14725,13 +14723,12 @@
 
                                 var clusterName = args.data.name;
                                 if (args.data.hypervisor == "Ovm3") {
-                                     array1.push("&ovm3pool=" + todb(args.data.ovm3pool));
-                                     array1.push("&ovm3cluster=" + todb(args.data.ovm3cluster));
-                                     array1.push("&ovm3vip=" + todb(args.data.ovm3vip));
+                                     array1.push("&ovm3pool=" + encodeURIComponent(args.data.ovm3pool));
+                                     array1.push("&ovm3cluster=" + encodeURIComponent(args.data.ovm3cluster));
+                                     array1.push("&ovm3vip=" + encodeURIComponent(args.data.ovm3vip));
                                 }
                                 if (args.data.hypervisor == "VMware") {
-                                    array1.push("&username=" + todb(args.data.vCenterUsername));
-                                    array1.push("&password=" + todb(args.data.vCenterPassword));
+                                    cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.vCenterUsername, args.data.vCenterPassword);
 
                                     //vSwitch Public Type
                                     if (args.$form.find('.form-item[rel=vSwitchPublicType]').css('display') != 'none' && args.data.vSwitchPublicType != "") {
@@ -14798,11 +14795,11 @@
                                     url = "http://" + hostname; else
                                     url = hostname;
                                     url += "/" + dcName + "/" + clusterName;
-                                    array1.push("&url=" + todb(url));
+                                    array1.push("&url=" + encodeURIComponent(url));
 
                                     clusterName = hostname + "/" + dcName + "/" + clusterName; //override clusterName
                                 }
-                                array1.push("&clustername=" + todb(clusterName));
+                                array1.push("&clustername=" + encodeURIComponent(clusterName));
                                 var clusterId = null;
                                 $.ajax({
                                     url: createURL("addCluster" + array1.join("")),
@@ -14816,7 +14813,7 @@
                                         var array2 =[];
                                         if (args.$form.find('.form-item[rel=isDedicated]').find('input[type=checkbox]').is(':Checked') == true) {
                                             if (args.data.accountId != "")
-                                            array2.push("&account=" + todb(args.data.accountId));
+                                            array2.push("&account=" + encodeURIComponent(args.data.accountId));
 
                                             if (clusterId != null) {
                                                 $.ajax({
@@ -15048,7 +15045,7 @@
                                     //EXPLICIT DEDICATION
                                     var array2 =[];
                                     if (args.data.accountId != "")
-                                    array2.push("&account=" + todb(args.data.accountId));
+                                    array2.push("&account=" + encodeURIComponent(args.data.accountId));
                                     $.ajax({
                                         url: createURL("dedicateCluster&clusterId=" +
                                         args.context.clusters[0].id +
@@ -16315,7 +16312,7 @@
 
                                         if (args.$form.find('.form-item[rel=isDedicated]').find('input[type=checkbox]').is(':Checked') == true) {
                                             if (args.data.accountId != "")
-                                            array2.push("&account=" + todb(args.data.accountId));
+                                            array2.push("&account=" + encodeURIComponent(args.data.accountId));
 
 
                                             if (hostId != null) {
@@ -16395,7 +16392,7 @@
                                 label: 'label.edit',
                                 action: function (args) {
                                     var array1 =[];
-                                    array1.push("&hosttags=" + todb(args.data.hosttags));
+                                    array1.push("&hosttags=" + encodeURIComponent(args.data.hosttags));
 
                                     if (args.data.oscategoryid != null && args.data.oscategoryid.length > 0)
                                         array1.push("&osCategoryId=" + args.data.oscategoryid);
@@ -16479,7 +16476,7 @@
                                     //EXPLICIT DEDICATION
                                     var array2 =[];
                                     if (args.data.accountId != "")
-                                    array2.push("&account=" + todb(args.data.accountId));
+                                    array2.push("&account=" + encodeURIComponent(args.data.accountId));
 
                                     $.ajax({
                                         url: createURL("dedicateHost&hostId=" +
@@ -18730,7 +18727,7 @@
                             /******************************/
                             action: function (args) {
                                 var array1 =[];
-                                array1.push("&scope=" + todb(args.data.scope));
+                                array1.push("&scope=" + encodeURIComponent(args.data.scope));
 
                                 array1.push("&zoneid=" + args.data.zoneid);
 
@@ -18751,9 +18748,9 @@
                                     array1.push("&hostid=" + args.data.hostId);
                                 }
 
-                                array1.push("&name=" + todb(args.data.name));
+                                array1.push("&name=" + encodeURIComponent(args.data.name));
 
-                                array1.push("&provider=" + todb(args.data.provider));
+                                array1.push("&provider=" + encodeURIComponent(args.data.provider));
 
                                 if (args.data.provider == "DefaultPrimary")
                                 {
@@ -18770,7 +18767,7 @@
                                             path = "/" + path;
                                         url = smbURL(server, path);
                                         array1.push("&details[0].user=" + args.data.smbUsername);
-                                        array1.push("&details[1].password=" + todb(args.data.smbPassword));
+                                        array1.push("&details[1].password=" + encodeURIComponent(args.data.smbPassword));
                                         array1.push("&details[2].domain=" + args.data.smbDomain);
                                     } else if (args.data.protocol == "PreSetup") {
                                         var path = args.data.path;
@@ -18820,7 +18817,7 @@
                                         url = "";
                                     }
 
-                                    array1.push("&url=" + todb(url));
+                                    array1.push("&url=" + encodeURIComponent(url));
                                 }
                                 else
                                 {
@@ -18838,13 +18835,13 @@
 
                                     if (args.data.url != null && args.data.url.length > 0)
                                     {
-                                        array1.push("&url=" + todb(args.data.url));
+                                        array1.push("&url=" + encodeURIComponent(args.data.url));
                                     }
                                 }
 
                                 if (args.data.storageTags != null && args.data.storageTags.length > 0)
                                 {
-                                    array1.push("&tags=" + todb(args.data.storageTags));
+                                    array1.push("&tags=" + encodeURIComponent(args.data.storageTags));
                                 }
 
                                 if ("custom" in args.response) {
@@ -18909,7 +18906,7 @@
                                 label: 'label.edit',
                                 action: function (args) {
                                     var array1 =[];
-                                    array1.push("&tags=" + todb(args.data.tags));
+                                    array1.push("&tags=" + encodeURIComponent(args.data.tags));
 
                                     if (args.data.disksizetotal != null && args.data.disksizetotal.length > 0) {
                                         var diskSizeTotal = args.data.disksizetotal.split(",").join("");
@@ -19835,7 +19832,7 @@
                                                 select: function (args) {
                                                     /*
                                                     UI no longer gets providers from "listStorageProviders&type=image" because:
-                                                    (1) Not all of returned values are handled by UI (e.g. Provider "NetApp" is not handled by UI).
+                                                    (1) Not all of returned values are handled by UI.
                                                     (2) Provider "SMB" which is handled by UI is not returned from "listStorageProviders&type=image"
                                                      */
                                                     var items =[ {
@@ -21136,14 +21133,13 @@
     function addExternalLoadBalancer(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 =[];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&networkdevicetype=" + todb(args.data.networkdevicetype));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.username, args.data.password);
+        array1.push("&networkdevicetype=" + encodeURIComponent(args.data.networkdevicetype));
 
         if (apiCmd == "addNetscalerLoadBalancer") {
             array1.push("&gslbprovider=" + (args.data.gslbprovider == "on"));
-            array1.push("&gslbproviderpublicip=" + todb(args.data.gslbproviderpublicip));
-            array1.push("&gslbproviderprivateip=" + todb(args.data.gslbproviderprivateip));
+            array1.push("&gslbproviderpublicip=" + encodeURIComponent(args.data.gslbproviderpublicip));
+            array1.push("&gslbproviderprivateip=" + encodeURIComponent(args.data.gslbproviderprivateip));
         }
 
         //construct URL starts here
@@ -21220,7 +21216,7 @@
         url.push("lbdevicededicated=" + dedicated.toString());
 
 
-        array1.push("&url=" + todb(url.join("")));
+        array1.push("&url=" + encodeURIComponent(url.join("")));
         //construct URL ends here
 
         $.ajax({
@@ -21246,9 +21242,8 @@
     function addExternalFirewall(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 =[];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&networkdevicetype=" + todb(args.data.networkdevicetype));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.username, args.data.password); 
+        array1.push("&networkdevicetype=" + encodeURIComponent(args.data.networkdevicetype));
 
         //construct URL starts here
         var url =[];
@@ -21402,7 +21397,7 @@
         }
         // END - Palo Alto Specific Fields
 
-        array1.push("&url=" + todb(url.join("")));
+        array1.push("&url=" + encodeURIComponent(url.join("")));
         //construct URL ends here
 
         $.ajax({
@@ -21428,19 +21423,18 @@
     function addNiciraNvpDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 =[];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&hostname=" + todb(args.data.host));
-        array1.push("&transportzoneuuid=" + todb(args.data.transportzoneuuid));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, rgs.data.username, args.data.password);
+        array1.push("&hostname=" + encodeURIComponent(args.data.host));
+        array1.push("&transportzoneuuid=" + encodeURIComponent(args.data.transportzoneuuid));
 
         var l3GatewayServiceUuid = args.data.l3gatewayserviceuuid;
         if (l3GatewayServiceUuid != null && l3GatewayServiceUuid.length > 0) {
-            array1.push("&l3gatewayserviceuuid=" + todb(args.data.l3gatewayserviceuuid));
+            array1.push("&l3gatewayserviceuuid=" + encodeURIComponent(args.data.l3gatewayserviceuuid));
         }
 		
 		var l2GatewayServiceUuid = args.data.l2gatewayserviceuuid;
         if (l2GatewayServiceUuid != null && l2GatewayServiceUuid.length > 0) {
-            array1.push("&l2gatewayserviceuuid=" + todb(args.data.l2gatewayserviceuuid));
+            array1.push("&l2gatewayserviceuuid=" + encodeURIComponent(args.data.l2gatewayserviceuuid));
         }
 
         $.ajax({
@@ -21466,9 +21460,8 @@
     function addBrocadeVcsDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 =[];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&hostname=" + todb(args.data.host));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.username, args.data.password);
+        array1.push("&hostname=" + encodeURIComponent(args.data.host));
 
         $.ajax({
             url: createURL(apiCmd + array1.join("")),
@@ -21493,9 +21486,8 @@
     function addOpenDaylightController(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 =[];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&url=" + todb(args.data.url));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.username, args.data.password);
+        array1.push("&url=" + encodeURIComponent(args.data.url));
 
         $.ajax({
             url: createURL(apiCmd + array1.join("")),
@@ -21520,9 +21512,9 @@
     function addBigSwitchBcfDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 =[];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&hostname=" + todb(args.data.host));
-        array1.push("&username=" + args.data.username);
-        array1.push("&password=" + args.data.password);
+        array1.push("&hostname=" + encodeURIComponent(args.data.host));
+        array1.push("&username=" + encodeURIComponent(args.data.username));
+        cloudStack.addPasswordToCommandUrlParameterArray(array1, args.data.password);
         array1.push("&nat=" + (args.data.nat == 'on' ? "true": "false"));
 
         $.ajax({
@@ -21547,13 +21539,12 @@
     function addNuageVspDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
         var array1 = [];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&hostname=" + todb(args.data.hostname));
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&port=" + todb(args.data.port));
-        array1.push("&apiversion=" + todb(args.data.apiversion));
-        array1.push("&retrycount=" + todb(args.data.retrycount));
-        array1.push("&retryinterval=" + todb(args.data.retryinterval));
+        array1.push("&hostname=" + encodeURIComponent(args.data.hostname));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.username, args.data.password);
+        array1.push("&port=" + encodeURIComponent(args.data.port));
+        array1.push("&apiversion=" + encodeURIComponent(args.data.apiversion));
+        array1.push("&retrycount=" + encodeURIComponent(args.data.retrycount));
+        array1.push("&retryinterval=" + encodeURIComponent(args.data.retryinterval));
 
         $.ajax({
             url: createURL(apiCmd + array1.join("")),
@@ -21578,9 +21569,8 @@
     function addGloboDnsHost(args, physicalNetworkObj, apiCmd, apiCmdRes) {
         var array1 = [];
         array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
-        array1.push("&username=" + todb(args.data.username));
-        array1.push("&password=" + todb(args.data.password));
-        array1.push("&url=" + todb(args.data.url));
+        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.username, args.data.password);
+        array1.push("&url=" + encodeURIComponent(args.data.url));
 
         $.ajax({
             url: createURL(apiCmd + array1.join("")),
@@ -21741,20 +21731,9 @@
                                                                                                                                     dataType: "json",
                                                                                                                                     async: false,
                                                                                                                                     success: function (json) {
-                                                                                                                                        //create pod
-                                                                                                                                        var array3 =[];
-                                                                                                                                        array3.push("&zoneId=" + newZoneObj.id);
-                                                                                                                                        array3.push("&name=" + todb(args.data.podName));
-                                                                                                                                        array3.push("&gateway=" + todb(args.data.podGateway));
-                                                                                                                                        array3.push("&netmask=" + todb(args.data.podNetmask));
-                                                                                                                                        array3.push("&startIp=" + todb(args.data.podStartIp));
-
-                                                                                                                                        var endip = args.data.podEndIp; //optional
-                                                                                                                                        if (endip != null && endip.length > 0)
-                                                                                                                                        array3.push("&endIp=" + todb(endip));
-
+                                                                                                                                        var arrayOfParameters = cloudStack.createArrayOfParametersForCreatePodCommand(newZoneObj.id, args.data);
                                                                                                                                         $.ajax({
-                                                                                                                                            url: createURL("createPod" + array3.join("")),
+                                                                                                                                            url: createURL("createPod" + arrayOfParameters.join("")),
                                                                                                                                             dataType: "json",
                                                                                                                                             async: false,
                                                                                                                                             success: function (json) {
@@ -21792,20 +21771,9 @@
                                                                                                         dataType: "json",
                                                                                                         async: false,
                                                                                                         success: function (json) {
-                                                                                                            //create pod
-                                                                                                            var array3 =[];
-                                                                                                            array3.push("&zoneId=" + newZoneObj.id);
-                                                                                                            array3.push("&name=" + todb(args.data.podName));
-                                                                                                            array3.push("&gateway=" + todb(args.data.podGateway));
-                                                                                                            array3.push("&netmask=" + todb(args.data.podNetmask));
-                                                                                                            array3.push("&startIp=" + todb(args.data.podStartIp));
-
-                                                                                                            var endip = args.data.podEndIp; //optional
-                                                                                                            if (endip != null && endip.length > 0)
-                                                                                                            array3.push("&endIp=" + todb(endip));
-
+                                                                                                            var arrayOfParameters = cloudStack.createArrayOfParametersForCreatePodCommand(newZoneObj.id, args.data);
                                                                                                             $.ajax({
-                                                                                                                url: createURL("createPod" + array3.join("")),
+                                                                                                                url: createURL("createPod" + arrayOfParameters.join("")),
                                                                                                                 dataType: "json",
                                                                                                                 async: false,
                                                                                                                 success: function (json) {
@@ -21819,21 +21787,9 @@
                                                                                                     });
                                                                                                 }
                                                                                             } else {
-                                                                                                //Advanced zone
-                                                                                                //create pod
-                                                                                                var array3 =[];
-                                                                                                array3.push("&zoneId=" + newZoneObj.id);
-                                                                                                array3.push("&name=" + todb(args.data.podName));
-                                                                                                array3.push("&gateway=" + todb(args.data.podGateway));
-                                                                                                array3.push("&netmask=" + todb(args.data.podNetmask));
-                                                                                                array3.push("&startIp=" + todb(args.data.podStartIp));
-
-                                                                                                var endip = args.data.podEndIp; //optional
-                                                                                                if (endip != null && endip.length > 0)
-                                                                                                array3.push("&endIp=" + todb(endip));
-
+                                                                                                var arrayOfParameters = cloudStack.createArrayOfParametersForCreatePodCommand(newZoneObj.id, args.data);
                                                                                                 $.ajax({
-                                                                                                    url: createURL("createPod" + array3.join("")),
+                                                                                                    url: createURL("createPod" + arrayOfParameters.join("")),
                                                                                                     dataType: "json",
                                                                                                     async: false,
                                                                                                     success: function (json) {
diff --git a/ui/scripts/ui-custom/accountsWizard.js b/ui/scripts/ui-custom/accountsWizard.js
index c9e1e45..ad52fe3 100644
--- a/ui/scripts/ui-custom/accountsWizard.js
+++ b/ui/scripts/ui-custom/accountsWizard.js
@@ -322,13 +322,14 @@
                     });
                 }
 
-                return $wizard.dialog({
+                var $dialog = $wizard.dialog({
                     title: ldapStatus ? _l('label.add.LDAP.account') : _l('label.add.account'),
                     width: ldapStatus ? 800 : 330,
                     height: ldapStatus ? 500 : 500,
-                    closeOnEscape: false,
-                    zIndex: 5000
-                }).closest('.ui-dialog').overlay();
+                    closeOnEscape: false
+                });
+                
+                return cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog);
             };
 
             accountsWizard(args);
diff --git a/ui/scripts/ui-custom/enableStaticNAT.js b/ui/scripts/ui-custom/enableStaticNAT.js
index e469ca9..651439b 100644
--- a/ui/scripts/ui-custom/enableStaticNAT.js
+++ b/ui/scripts/ui-custom/enableStaticNAT.js
@@ -70,7 +70,7 @@
                 listView: listView
             }).dialog({
                 dialogClass: 'multi-edit-add-list panel',
-                width: 825,
+                width: 875,
                 title: _l('label.select.vm.for.static.nat'),
                 buttons: [{
                     text: _l('label.apply'),
@@ -138,7 +138,9 @@
                         });
                     }
                 }]
-            }).parent('.ui-dialog').overlay();
+            });
+            
+            cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dataList);
 
             // Add tier select dialog
             if (tierSelect) {
diff --git a/ui/scripts/ui-custom/instanceWizard.js b/ui/scripts/ui-custom/instanceWizard.js
index e951705..443e237 100644
--- a/ui/scripts/ui-custom/instanceWizard.js
+++ b/ui/scripts/ui-custom/instanceWizard.js
@@ -1359,15 +1359,18 @@
                     $wizard.find('div.data-disk-offering span.custom-disk-size').html(_s(old));
                 });
 
-
-                return $wizard.dialog({
+                
+                var wizardDialog = $wizard.dialog({
                     title: _l('label.vm.add'),
                     width: 896,
                     height: 570,
-                    closeOnEscape: false,
-                    zIndex: 5000
-                })
-                    .closest('.ui-dialog').overlay();
+                    closeOnEscape: false
+                });
+                var wizardDialogDiv = wizardDialog.closest('.ui-dialog');
+                wizardDialogDiv.css('z-index', 5001);
+                
+                $('button.ui-dialog-titlebar-close').remove()
+                return wizardDialogDiv.overlay();
             };
 
             instanceWizard(args);
diff --git a/ui/scripts/ui-custom/migrate.js b/ui/scripts/ui-custom/migrate.js
index fa94070..40a6d41 100644
--- a/ui/scripts/ui-custom/migrate.js
+++ b/ui/scripts/ui-custom/migrate.js
@@ -100,6 +100,7 @@
 
                             $('div.overlay').fadeOut(function() {
                                 $('div.overlay').remove();
+                                $(':ui-dialog').dialog('destroy');
                             });
                         }
                         else {
@@ -121,7 +122,8 @@
                         });
                     }
                 }]
-            }).parent('.ui-dialog').overlay();
+            });
+            cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dataList);
         };
     };
 }(cloudStack, jQuery));
diff --git a/ui/scripts/ui-custom/projects.js b/ui/scripts/ui-custom/projects.js
index f6a2321..12016c7 100644
--- a/ui/scripts/ui-custom/projects.js
+++ b/ui/scripts/ui-custom/projects.js
@@ -270,8 +270,8 @@
             $tabs.find('ul li:first').addClass('first');
             $tabs.find('ul li:last').addClass('last');
 
-            $tabs.bind('tabsshow', function(event, ui) {
-                var $panel = $(ui.panel);
+            $tabs.bind('tabsactivate', function(event, ui) {
+                var $panel = $(ui.newPanel);
                 var $management = $panel.find('.management');
                 var $managementInvite = $panel.find('.management-invite');
 
@@ -705,11 +705,12 @@
      * Initiate new project flow
      */
     var addProject = function() {
-        pageElems.newProjectForm().dialog({
+        var $dialog = pageElems.newProjectForm().dialog({
             title: _l('label.new.project'),
             closeOnEscape: false,
             width: 760
-        }).closest('.ui-dialog').overlay();
+        });
+        cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog);
     };
 
     var deleteProject = function(args) {
diff --git a/ui/scripts/ui-custom/zoneWizard.js b/ui/scripts/ui-custom/zoneWizard.js
index 7906478..078f7af 100644
--- a/ui/scripts/ui-custom/zoneWizard.js
+++ b/ui/scripts/ui-custom/zoneWizard.js
@@ -1423,14 +1423,15 @@
 
             showStep(1);
 
-            return $wizard.dialog({
+            var $dialog = $wizard.dialog({
                 title: _l('label.installWizard.addZone.title'),
                 closeOnEscape: false,
                 width: 750,
                 height: 665,
-                zIndex: 5000,
                 resizable: false
-            }).closest('.ui-dialog').overlay();
+            });
+            
+            return cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog);
         };
     };
 })(jQuery, cloudStack);
diff --git a/ui/scripts/ui/core.js b/ui/scripts/ui/core.js
index 0c481d0..0f53721 100644
--- a/ui/scripts/ui/core.js
+++ b/ui/scripts/ui/core.js
@@ -329,7 +329,8 @@
                     var $logo = $('<div>').addClass('logo').text(_l('label.app.name')),
                         $version = $('<div>').addClass('version').text(g_cloudstackversion),
                         $about = $('<div>').addClass('about').append($logo).append($version);
-                    $about.dialog({
+                    
+                    var $aboutDialog = $about.dialog({
                         modal: true,
                         width: 300,
                         title: _l('label.about.app'),
@@ -341,8 +342,8 @@
                                 $(':ui-dialog, .overlay').remove();
                             }
                         }
-                    }).closest('.ui-dialog').overlay();
-
+                    });
+                    cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($aboutDialog);
                     return false;
                 });
             }
diff --git a/ui/scripts/ui/dialog.js b/ui/scripts/ui/dialog.js
index c518859..1f954d9 100644
--- a/ui/scripts/ui/dialog.js
+++ b/ui/scripts/ui/dialog.js
@@ -78,7 +78,7 @@
             var ret = function() {
                 $('.overlay').remove();
 
-                return $formContainer.dialog({
+                var $dialog = $formContainer.dialog({
                     dialogClass: args.form.isWarning ? 'create-form warning' : 'create-form',
                     closeOnEscape: false,
                     draggable: false,
@@ -117,10 +117,11 @@
                         text: _l('label.cancel'),
                         'class': 'cancel',
                         click: function() {
+                            $(this).dialog('destroy');
+
                             $('div.overlay').remove();
                             $('.tooltip-box').remove();
                             $formContainer.remove();
-                            $(this).dialog('destroy');
 
                             $('.hovered-elem').hide();
 
@@ -129,7 +130,9 @@
                             }
                         }
                     }]
-                }).closest('.ui-dialog').overlay();
+                });
+                
+                return cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog);
             };
 
             var isLastAsync = function(idx) {
@@ -985,7 +988,7 @@
          * Confirmation dialog
          */
         confirm: function(args) {
-            return $(
+            var $dialog = $(
                 $('<span>').addClass('message').html(
                     _l(args.message)
                 )
@@ -993,7 +996,6 @@
                 title: args.isWarning ? _l('label.warning') : _l('label.confirmation'),
                 dialogClass: args.isWarning ? 'confirm warning': 'confirm',
                 closeOnEscape: false,
-                zIndex: 5000,
                 buttons: [{
                     text: _l('label.no'),
                     'class': 'cancel',
@@ -1015,7 +1017,9 @@
                         $('.hovered-elem').hide();
                     }
                 }]
-            }).closest('.ui-dialog').overlay();
+            });
+            
+            return  cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog);
         },
 
         /**
@@ -1023,7 +1027,7 @@
          */
         notice: function(args) {
             if (args.message) {
-                return $(
+                var $dialog = $(
                     $('<span>').addClass('message').html(
                         _l(args.message)
                     )
@@ -1031,7 +1035,6 @@
                     title: _l('label.status'),
                     dialogClass: 'notice',
                     closeOnEscape: false,
-                    zIndex: 5000,
                     buttons: [{
                         text: _l('label.close'),
                         'class': 'close',
@@ -1039,11 +1042,13 @@
                             $(this).dialog('destroy');
                             if (args.clickAction) args.clickAction();
                             $('.hovered-elem').hide();
+                            $('div.overlay').hide();
                         }
                     }]
                 });
+                             
+                return cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog, 5001);
             }
-
             return false;
         }
     };
diff --git a/ui/scripts/ui/utils.js b/ui/scripts/ui/utils.js
index 524aed6e..ec2ecda 100644
--- a/ui/scripts/ui/utils.js
+++ b/ui/scripts/ui/utils.js
@@ -145,4 +145,18 @@
             min: $.validator.format(_l('messgae.validate.min'))
         });
     };
+    
+    var applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton = function($dialog, customZindex){
+        var defaultZindex = 5000;
+        if(!customZindex){
+            customZindex = defaultZindex;
+        }
+        $('button.ui-dialog-titlebar-close').remove()
+        
+        var $dialogDiv = $dialog.closest('.ui-dialog');
+        $dialogDiv.css('z-index', customZindex);
+        
+        return $dialogDiv.overlay();
+    };
+    cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton = applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton;
 })(jQuery, cloudStack);
diff --git a/ui/scripts/ui/widgets/detailView.js b/ui/scripts/ui/widgets/detailView.js
index 2ce72a2..79c122f 100644
--- a/ui/scripts/ui/widgets/detailView.js
+++ b/ui/scripts/ui/widgets/detailView.js
@@ -606,7 +606,7 @@
                                 } else {
                                     $loading.appendTo($detailView);
                                     cloudStack.ui.notifications.add(
-                                        $.extend(true, {}, action.notification, notificationArgs),
+                                        $.extend(true, {}, notificationArgs, action.notification),
                                         function(args) {
                                             replaceListViewItem($detailView, data);
 
@@ -1569,17 +1569,27 @@
         return $detailView;
     };
 
-    // Setup tab events
-    $(document).bind('tabsshow', function(event, ui) {
+    var manageTabsContent = function(event, ui){
         var $target = $(event.target);
 
         if (!$target.hasClass('detail-view') || $target.hasClass('detail-view ui-state-active')) return true;
 
-        var $targetDetailGroup = $(ui.panel);
+        var $targetDetailGroup = undefined;
+        if(ui.panel){
+            $targetDetailGroup = $(ui.panel);
+        }else{
+            $targetDetailGroup = $(ui.newPanel);
+        }
+        if(!$targetDetailGroup){
+            throw 'Could not find a panel to load tab\'s data';
+        }
         loadTabContent($targetDetailGroup, $target.data('view-args'));
 
         return true;
-    });
+    };
+
+    $(document).bind('tabscreate',manageTabsContent);
+    $(document).bind('tabsactivate',manageTabsContent);
 
     // View all links
     $('a').live('click', function(event) {
diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js
index 688b77d..ebb7966 100644
--- a/ui/scripts/ui/widgets/listView.js
+++ b/ui/scripts/ui/widgets/listView.js
@@ -1120,8 +1120,9 @@
                 else
                     $detailView = args.pageGenerator(data).appendTo($newPanel);
 
-                if (complete) complete($detailView);
-
+                if (complete){
+                    complete($detailView);
+                }
                 return $detailView;
             }
         };
diff --git a/ui/scripts/ui/widgets/multiEdit.js b/ui/scripts/ui/widgets/multiEdit.js
index c3fa97c..ffe3d75 100755
--- a/ui/scripts/ui/widgets/multiEdit.js
+++ b/ui/scripts/ui/widgets/multiEdit.js
@@ -79,7 +79,10 @@
                 });
             }
 
-
+            var $actions = undefined;
+            if(options.editOptionsFirst){
+            	$actions = $('<td>').addClass('multi-actions').appendTo($item.find('tr'));
+            }
             // Setup columns
             $.each(fields, function(fieldName, field) {
                 if (!field || (options.ignoreEmptyFields && !data[fieldName])) {
@@ -160,8 +163,9 @@
                 }
 
                 if (!field.isPassword) {
+                	$td.attr('title', data[fieldName]);
                     if (field.edit) {
-                        // Edit fields append value of data
+                    	// Edit fields append value of data
                         if (field.range) {
                             var start = _s(data[field.range[0]]);
                             var end = _s(data[field.range[1]]);
@@ -177,7 +181,6 @@
                             } else {
                                 $td.append($('<span>').html(_s(data[fieldName])));
                             }
-                            $td.attr('title', data[fieldName]);
                         }
                     } else if (field.isBoolean) {
                         var $checkbox = $('<input>');
@@ -324,9 +327,9 @@
                 return true;
             });
 
-            // Actions column
-            var $actions = $('<td>').addClass('multi-actions').appendTo($item.find('tr'));
-
+            if(!options.editOptionsFirst){
+            	var $actions = $('<td>').addClass('multi-actions').appendTo($item.find('tr'));
+            }
             // Align action column width
             $actions.width($multi.find('th.multi-actions').width() + 4);
 
@@ -499,31 +502,28 @@
                     .attr('title', _l('label.edit.tags'))
                     .append($('<span></span>').addClass('icon'))
                     .click(function() {
-                        $('<div>')
-                            .dialog({
-                                dialogClass: 'editTags',
-                                title: _l('label.edit.tags'),
-                                width: 400,
-                                buttons: [{
-                                    text: _l('label.done'),
-                                    'class': 'ok',
-                                    click: function() {
-                                        $(this).dialog('destroy');
-                                        $('div.overlay:last').remove();
-
-                                        return true;
-                                    }
-                                }]
-                            })
-                            .append(
-                                $('<div></div>').addClass('multi-edit-tags').tagger($.extend(true, {}, options.tags, {
-                                    context: $.extend(true, {}, options.context, {
-                                        multiRule: [multiRule]
-                                    })
-                                }))
-                        )
-                            .closest('.ui-dialog').overlay();
-
+                        var $dialog = $('<div>').dialog({
+                                            dialogClass: 'editTags',
+                                            title: _l('label.edit.tags'),
+                                            width: 400,
+                                            buttons: [{
+                                                text: _l('label.done'),
+                                                'class': 'ok',
+                                                click: function() {
+                                                    $(this).dialog('destroy');
+                                                    $('div.overlay:last').remove();
+            
+                                                    return true;
+                                                }
+                                            }]
+                                        }).append(
+                                            $('<div></div>').addClass('multi-edit-tags').tagger($.extend(true, {}, options.tags, {
+                                                context: $.extend(true, {}, options.context, {
+                                                    multiRule: [multiRule]
+                                                })
+                                            }))
+                                        );
+                             cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dialog);
                         return false;
                     })
                 )
@@ -647,7 +647,8 @@
                         });
                     }
                 }]
-            }).parent('.ui-dialog').overlay();
+            });
+            cloudStack.applyDefaultZindexAndOverlayOnJqueryDialogAndRemoveCloseButton($dataList);
         },
 
         /**
@@ -905,16 +906,20 @@
         var $thead = $('<tr>').appendTo(
             $('<thead>').appendTo($inputTable)
         );
-        var $inputForm = $('<tr>').appendTo(
-            $('<tbody>').appendTo($inputTable)
-        );
+        if (!args.doNotShowInputTable){
+	        var $inputForm = $('<tr>').appendTo(
+	            $('<tbody>').appendTo($inputTable)
+	        );
+        }
         var $dataBody = $('<div>').addClass('data-body').appendTo($dataTable);
 
         // Setup input table headers
 
         if (reorder) {
             $('<th>').addClass('reorder').appendTo($thead);
-            $('<td>').addClass('reorder').appendTo($inputForm);
+            if (!args.doNotShowInputTable){
+            	$('<td>').addClass('reorder').appendTo($inputForm);
+            }
             $multi.find('.data-body').sortable({
                 handle: '.action.moveDrag',
 
@@ -946,6 +951,13 @@
             });
         }
 
+        if (args.editOptionsFirst && args.actions && !args.noHeaderActionsColumn) {
+            $thead.append($('<th></th>').html(_l('label.actions')).addClass('multi-actions'));
+            if (!args.doNotShowInputTable){
+            	$inputForm.append($('<td></td>').addClass('multi-actions'));
+            }
+        }
+        
         $.each(args.fields, function(fieldName, field) {
             if (!field) return true;
 
@@ -954,7 +966,10 @@
             $th.appendTo($thead);
             var $td = $('<td>').addClass(fieldName);
             $td.attr('rel', fieldName);
-            $td.appendTo($inputForm);
+            
+            if (!args.doNotShowInputTable){
+            	$td.appendTo($inputForm);
+            }
 
             var isHidden = $.isFunction(field.isHidden) ?
                     field.isHidden({ context: context }) : field.isHidden;
@@ -1071,7 +1086,10 @@
                 ).appendTo($td);
             }
 
-            if (field.desc) $input.attr('title', field.desc);
+            if (field.desc){ 
+            	$input.attr('title', field.desc);
+            	$th.attr('title', _l(field.desc));
+            }
         });
 
         // Setup header fields
@@ -1093,134 +1111,137 @@
                 .prependTo($multi);
         }
 
-        if (args.actions && !args.noHeaderActionsColumn) {
+        if (!args.editOptionsFirst && args.actions && !args.noHeaderActionsColumn) {
             $thead.append($('<th></th>').html(_l('label.actions')).addClass('multi-actions'));
-            $inputForm.append($('<td></td>').addClass('multi-actions'));
+            if (!args.doNotShowInputTable){
+            	$inputForm.append($('<td></td>').addClass('multi-actions'));
+            }
         }
-
-        $addVM.bind('click', function() {
-            // Validate form first
-            if (!$multiForm.valid()) {
-                if ($multiForm.find('input.error:visible').size()) {
-                    return false;
-                }
-            }
-
-            var $dataList;
-            var addItem = function(itemData) {
-                var data = {};
-
-                $.each(getMultiData($multi), function(key, value) {
-                    if (value != '') {
-                        data[key] = value;
-                    }
-                });
-
-                // Append custom data
-                var $customFields = $multi.find('tbody td').filter(function() {
-                    return $(this).data('multi-custom-data');
-                });
-
-                $customFields.each(function() {
-                    var $field = $(this);
-                    var fieldID = $field.attr('rel');
-                    var fieldData = $field.data('multi-custom-data');
-
-                    data[fieldID] = fieldData;
-                });
-
-                // Loading appearance
-                var $loading = _medit.loadingItem($multi, _l('label.adding') + '...');
-                $dataBody.prepend($loading);
-
-                // Clear out fields
-                $multi.find('input').each(function() {
-                    var $input = $(this);
-
-                    if ($input.is(":checkbox")) {
-                        $input.attr({
-                            checked: false
-                        });
-                    } else if ($input.data('multi-default-value')) {
-                        $input.val($input.data('multi-default-value'));
-                    } else {
-                        $input.val('');
-                    }
-                });
-                $multi.find('tbody td').each(function() {
-                    var $item = $(this);
-
-                    if ($item.data('multi-custom-data')) {
-                        $item.data('multi-custom-data', null);
-                    }
-                });
-
-                // Apply action
-                args.add.action({
-                    context: context,
-                    data: data,
-                    itemData: itemData,
-                    $multi: $multi,
-                    response: {
-                        success: function(successArgs) {
-                            var notification = successArgs ? successArgs.notification : null;
-                            if (notification) {
-                                $('.notifications').notifications('add', {
-                                    section: 'network',
-                                    desc: notification.label,
-                                    interval: 3000,
-                                    _custom: successArgs._custom,
-                                    poll: function(pollArgs) {
-                                        var complete = pollArgs.complete;
-                                        var error = pollArgs.error;
-
-                                        notification.poll({
-                                            _custom: pollArgs._custom,
-                                            complete: function(completeArgs) {
-                                                complete(args);
-                                                $loading.remove();
-                                                getData();
-                                            },
-
-                                            error: function(args) {
-                                                error(args);
-                                                $loading.remove();
-
-                                                return cloudStack.dialog.error(args);
-                                            }
-                                        });
-                                    }
-                                });
-                            } else {
-                                $loading.remove();
-                                getData();
-                            }
-                        },
-
-                        error: cloudStack.dialog.error(function() {
-                            $loading.remove();
-                        })
-                    }
-                });
-            };
-
-            if (args.noSelect) {
-                // Don't append instance data
-                addItem([]);
-
-                return true;
-            }
-
-            _medit.vmList($multi,
-                args.listView,
-                args.context,
-                multipleAdd, _l('label.add.vms'),
-                addItem);
-
-            return true;
-        });
-
+        if($addVM){
+	        $addVM.bind('click', function() {
+	            // Validate form first
+	            if (!$multiForm.valid()) {
+	                if ($multiForm.find('input.error:visible').size()) {
+	                    return false;
+	                }
+	            }
+	
+	            var $dataList;
+	            var addItem = function(itemData) {
+	                var data = {};
+	
+	                $.each(getMultiData($multi), function(key, value) {
+	                    if (value != '') {
+	                        data[key] = value;
+	                    }
+	                });
+	
+	                // Append custom data
+	                var $customFields = $multi.find('tbody td').filter(function() {
+	                    return $(this).data('multi-custom-data');
+	                });
+	
+	                $customFields.each(function() {
+	                    var $field = $(this);
+	                    var fieldID = $field.attr('rel');
+	                    var fieldData = $field.data('multi-custom-data');
+	
+	                    data[fieldID] = fieldData;
+	                });
+	
+	                // Loading appearance
+	                var $loading = _medit.loadingItem($multi, _l('label.adding') + '...');
+	                $dataBody.prepend($loading);
+	
+	                // Clear out fields
+	                $multi.find('input').each(function() {
+	                    var $input = $(this);
+	
+	                    if ($input.is(":checkbox")) {
+	                        $input.attr({
+	                            checked: false
+	                        });
+	                    } else if ($input.data('multi-default-value')) {
+	                        $input.val($input.data('multi-default-value'));
+	                    } else {
+	                        $input.val('');
+	                    }
+	                });
+	                $multi.find('tbody td').each(function() {
+	                    var $item = $(this);
+	
+	                    if ($item.data('multi-custom-data')) {
+	                        $item.data('multi-custom-data', null);
+	                    }
+	                });
+	
+	                // Apply action
+	                args.add.action({
+	                    context: context,
+	                    data: data,
+	                    itemData: itemData,
+	                    $multi: $multi,
+	                    response: {
+	                        success: function(successArgs) {
+	                            var notification = successArgs ? successArgs.notification : null;
+	                            if (notification) {
+	                                $('.notifications').notifications('add', {
+	                                    section: 'network',
+	                                    desc: notification.label,
+	                                    interval: 3000,
+	                                    _custom: successArgs._custom,
+	                                    poll: function(pollArgs) {
+	                                        var complete = pollArgs.complete;
+	                                        var error = pollArgs.error;
+	
+	                                        notification.poll({
+	                                            _custom: pollArgs._custom,
+	                                            complete: function(completeArgs) {
+	                                                complete(args);
+	                                                $loading.remove();
+	                                                getData();
+	                                            },
+	
+	                                            error: function(args) {
+	                                                error(args);
+	                                                $loading.remove();
+	
+	                                                return cloudStack.dialog.error(args);
+	                                            }
+	                                        });
+	                                    }
+	                                });
+	                            } else {
+	                                $loading.remove();
+	                                getData();
+	                            }
+	                        },
+	
+	                        error: cloudStack.dialog.error(function() {
+	                            $loading.remove();
+	                        })
+	                    }
+	                });
+	            };
+	
+	            if (args.noSelect) {
+	                // Don't append instance data
+	                addItem([]);
+	
+	                return true;
+	            }
+	
+	            _medit.vmList($multi,
+	                args.listView,
+	                args.context,
+	                multipleAdd, _l('label.add.vms'),
+	                addItem);
+	
+	            return true;
+	        });
+        }
         var listView = args.listView;
+        var editOptionsFirst = args.editOptionsFirst;
         var getData = function() {
             dataProvider({
                 context: context,
@@ -1247,7 +1268,8 @@
                                     listView: listView,
                                     tags: tags,
                                     reorder: reorder,
-                                    selectPermission: selectPermission
+                                    selectPermission: selectPermission,
+                                    editOptionsFirst: editOptionsFirst
                                 }
                             ).appendTo($dataBody);
                         });
diff --git a/ui/scripts/ui/widgets/toolTip.js b/ui/scripts/ui/widgets/toolTip.js
index 747c448..1506d06 100644
--- a/ui/scripts/ui/widgets/toolTip.js
+++ b/ui/scripts/ui/widgets/toolTip.js
@@ -34,7 +34,8 @@
                 $(this.element).focus(hoverHandler);
                 $(this.element).blur(outHandler);
             } else if (this.options.mode == 'manual') {}
-
+            
+            $(this.element).data('toolTipOptions', this.options);
             $(this.element).data('$tooltip', $tooltip);
 
             // Add arrow
@@ -100,14 +101,14 @@
     });
 
     function hoverHandler(event) {
-        //Fetch Options
-        var o = $.data(this, 'toolTip').options;
-
         //Element who raised the event
         var $this = $(this);
 
+        var toolTipOptionObject = $this.data('toolTipOptions');
+        
+
         //Helper functon for Positioning and Calling Callback function
-        prepare($this, o);
+        prepare($this, toolTipOptionObject);
 
         //Call Show method of the tooltip Widget,
         //Show method should play on any required animations
@@ -115,15 +116,18 @@
     };
 
     function outHandler(event) {
+        //Element who raised the event
+        var $this = $(this);
+        
         //Fetch Options
-        var o = $.data(this, 'toolTip').options;
+        var toolTipOptionObject = $this.data('toolTipOptions');
 
         //Get tooptip Element
-        var $tooltip = $(o.toolTip);
+        var $tooltip = $(toolTipOptionObject.toolTip);
 
         //If call back method defined, initiate the call
-        if ($.data(this, 'toolTip').options.onHide) {
-            $.data(this, 'toolTip').options.onHide.call(this, {
+        if (toolTipOptionObject.onHide) {
+            toolTipOptionObject.onHide.call(this, {
                 target: $(this)
             });
         }
diff --git a/ui/scripts/vpc.js b/ui/scripts/vpc.js
index 0d38ed4..04125ff 100644
--- a/ui/scripts/vpc.js
+++ b/ui/scripts/vpc.js
@@ -15,6 +15,57 @@
 // specific language governing permissions and limitations
 // under the License.
 (function($, cloudStack) {
+    //The drag and drop function to order ACL rules does not have access to the whole ACL.
+    //Therefore, we store the "state-hash" of the list being displayed for use in the drag and drop function.
+    var accessControlListConsistentyHashForDragAndDropFunction = "";
+
+    var isNumeric = function (n) {
+        return !isNaN(parseFloat(n));
+    };
+    var createSafeCsvValue = function(value){
+        if(value){
+            return '"' + value + '"';
+        }
+        return "";
+    };
+    
+    var generateCsvForAclRules = function(aclRules){
+        var csv = createSafeCsvValue('id') + ',';
+        for(var field in aclRuleFields){
+            var fieldLabel = aclRuleFields[field].label;
+            var fieldLabelTranslated = _l(fieldLabel);
+            csv = csv + createSafeCsvValue(fieldLabelTranslated) + ',';
+        }
+        csv = csv.substr(0, csv.length - 1) + '\n';
+        if(!aclRules){
+            return csv;
+        }
+        aclRules.forEach(function(entry){
+            csv = csv + 
+            createSafeCsvValue(entry.id) + ',' + 
+            createSafeCsvValue(entry.number) + ',' +
+            createSafeCsvValue(entry.cidrlist) + ',' +
+            createSafeCsvValue(entry.action) + ',' ;
+            
+            if(isNumeric(entry.protocol)){
+                csv = csv +
+                createSafeCsvValue(_l('label.protocol.number')) + ',' +
+                createSafeCsvValue(entry.protocol) + ',';
+            }else{
+                csv = csv +
+                createSafeCsvValue(entry.protocol) + ',' +
+                createSafeCsvValue('') + ',';
+            }
+            csv = csv +
+            createSafeCsvValue(entry.startport) + ',' +
+            createSafeCsvValue(entry.endport) + ',' +
+            createSafeCsvValue(entry.icmptype) + ',' +
+            createSafeCsvValue(entry.icmpcode) + ',' +
+            createSafeCsvValue(entry.traffictype) + ',' +
+            createSafeCsvValue(entry.reason) + '\n';
+        });
+        return csv;
+    };
     var assignVMAction = function() {
         return {
             label: 'label.assign.vms',
@@ -190,63 +241,14 @@
         };
     };
 
-    var aclMultiEdit = {
-        noSelect: true,
-
-        reorder: {
-            moveDrag: {
-                action: function(args) {
-                    var rule = args.context.multiRule[0];
-                    var number = 0;
-                    var prevItem = args.prevItem ? args.prevItem.number : null;
-                    var nextItem = args.nextItem ? args.nextItem.number : null;
-
-                    if (!nextItem) { // Last item
-                        number = prevItem + 100;
-                    } else {
-                        if (nextItem - prevItem <= 10) {
-                            number = nextItem - parseInt(((nextItem - prevItem) / 2));
-                        } else {
-                            number = nextItem > 1 ? nextItem - 10 : 1;
-                        }
-                    }
-
-                    $.ajax({
-                        url: createURL('updateNetworkACLItem'),
-                        data: {
-                            id: rule.id,
-                            number: number
-                        },
-                        success: function(json) {
-                            var pollTimer = setInterval(function() {
-                                pollAsyncJobResult({
-                                    _custom: {
-                                        jobId: json.createnetworkaclresponse.jobid
-                                    },
-                                    complete: function() {
-                                        clearInterval(pollTimer);
-                                        args.response.success();
-                                    },
-                                    error: function(errorMsg) {
-                                        clearInterval(pollTimer);
-                                        args.response.error(errorMsg);
-                                    }
-                                });
-                            }, 1000);
-                        }
-                    });
-                }
-            }
-        },
-        fields: {
-
+    var aclRuleFields = {
             'number': {
-                label: 'label.rule.number',
+                label: 'label.rule.number.short',
+                desc: 'label.rule.number',
                 edit: true,
                 isEditable: true
 
             },
-
             'cidrlist': {
                 edit: true,
                 label: 'label.cidr',
@@ -322,6 +324,13 @@
                                 $portFields.hide();
                             } else if ($(this).val() == 'all') {
                                 $portFields.hide();
+                                $portFields.attr('disabled', 'disabled');
+                                
+                                $icmpFields.hide();
+                                $icmpFields.attr('disabled', 'disabled');
+                                
+                                $protocolFields.attr('disabled', 'disabled');
+                                $protocolFields.hide();
                             } else {
                                 $otherFields.show();
                                 $icmpFields.hide();
@@ -378,8 +387,14 @@
                                 $otherFields.hide();
                                 $otherFields.parent().find('label.error').hide();
                             } else if ($(this).val() == 'all') {
-                                $portFields.attr('disabled', 'disabled');
                                 $portFields.hide();
+                                $portFields.attr('disabled', 'disabled');
+
+                                $icmpFields.hide();
+                                $icmpFields.attr('disabled', 'disabled');
+
+                                $protocolFields.hide();
+                                $protocolFields.attr('disabled', 'disabled');
                             } else {
                                 $otherFields.show();
                                 $otherFields.parent().find('label.error').hide();
@@ -420,7 +435,8 @@
             },
 
             'protocolnumber': {
-                label: 'label.protocol.number',
+                label: 'label.protocol.number.short',
+                desc: 'label.protocol.number',
                 edit: true,
                 isEditable: true
             },
@@ -436,6 +452,45 @@
                 isOptional: true,
                 isEditable: true
             },
+            'icmptype': {
+                edit: true,
+                label: 'ICMP.type',
+                desc: 'ICMP.type.desc',
+                defaultValue: '-1',
+                isEditable: true
+            },
+            'icmpcode': {
+                edit: true,
+                label: 'ICMP.code',
+                desc: 'ICMP.code.desc',
+                defaultValue: '-1',
+                isEditable: true
+            },
+            'traffictype': {
+                label: 'label.traffic.type',
+                isEditable: true,
+                select: function(args) {
+                    args.response.success({
+                        data: [{
+                            name: 'Ingress',
+                            description: 'Ingress'
+                        }, {
+                            name: 'Egress',
+                            description: 'Egress'
+                        }]
+                    });
+                }
+            },
+            'reason': {
+                edit: true,
+                label: 'label.acl.reason',
+                desc: 'label.acl.reason.description',
+                isEditable: true,
+                isTextarea: true
+           }
+    };
+    
+    var aclRuleFieldsForMultiEdit = {
             'networkid': {
                 label: 'label.select.tier',
                 select: function(args) {
@@ -472,43 +527,52 @@
                     });
                 }
             },
-            'icmptype': {
-                edit: true,
-                label: 'ICMP.type',
-                isDisabled: true,
-                desc: 'Please specify -1 if you want to allow all ICMP types',
-                defaultValue: '-1',
-                isEditable: true
-            },
-            'icmpcode': {
-                edit: true,
-                label: 'ICMP.code',
-                isDisabled: true,
-                desc: 'Please specify -1 if you want to allow all ICMP codes',
-                defaultValue: '-1',
-                isEditable: true
-            },
-            'traffictype': {
-                label: 'label.traffic.type',
-                isEditable: true,
-                select: function(args) {
-                    args.response.success({
-                        data: [{
-                            name: 'Ingress',
-                            description: 'Ingress'
-                        }, {
-                            name: 'Egress',
-                            description: 'Egress'
-                        }]
+    };
+    
+    jQuery.extend(aclRuleFieldsForMultiEdit, aclRuleFields);
+    
+    var aclMultiEdit = {
+    	doNotShowInputTable: true,
+    	editOptionsFirst: true,
+        noSelect: true,
+        reorder: {
+            moveDrag: {
+                action: function(args) {
+                    var rule = args.context.multiRule[0];
+                    
+                    var previousRuleId = args.prevItem ? args.prevItem.id : undefined;
+                    var nextRuleId = args.nextItem ? args.nextItem.id : undefined;
+                     
+                    $.ajax({
+                        url: createURL('moveNetworkAclItem'),
+                        data: {
+                            id: rule.id,
+                            previousaclruleid: previousRuleId, 
+                            nextaclruleid: nextRuleId,
+                            aclconsistencyhash: accessControlListConsistentyHashForDragAndDropFunction
+                        },
+                        success: function(json) {
+                            var pollTimer = setInterval(function() {
+                                pollAsyncJobResult({
+                                    _custom: {
+                                        jobId: json.moveNetworkAclItemResponse.jobid
+                                    },
+                                    complete: function() {
+                                        clearInterval(pollTimer);
+                                        args.response.success();
+                                    },
+                                    error: function(errorMsg) {
+                                        clearInterval(pollTimer);
+                                        args.response.error(errorMsg);
+                                    }
+                                });
+                            }, 1000);
+                        }
                     });
                 }
-            },
-            'add-rule': {
-                label: 'label.add.rule',
-                addButton: true
             }
         },
-
+        fields: aclRuleFieldsForMultiEdit,
         tags: cloudStack.api.tags({
             resourceType: 'NetworkACL',
             contextId: 'multiRule'
@@ -580,7 +644,8 @@
                         number: args.data.number,
                         protocol: args.data.protocol,
                         traffictype: args.data.traffictype,
-                        action: args.data.action
+                        action: args.data.action,
+                        reason: args.data.reason
                     };
 
                     if (data.protocol === 'tcp' || data.protocol === 'udp') {
@@ -602,10 +667,11 @@
 
                         delete args.data.protocolnumber;
                     }
-
+                    data.partialupgrade = false;
                     $.ajax({
                         url: createURL('updateNetworkACLItem'),
                         data: data,
+                        type: "POST",
                         success: function(json) {
                             args.response.success({
                                 _custom: {
@@ -983,32 +1049,6 @@
                                     });
                                 }
                             },
-
-                            /*
-              rules: {
-                title: 'label.rules',
-                multiple: true,
-                fields: [
-                  {
-                    sourceport: { label: 'Source Port' },
-                    instanceport: { label: 'Instance Port' }
-                  }
-                ],
-                dataProvider: function(args) {
-                  $.ajax({
-                    url: createURL('listLoadBalancers'),
-                    data: {
-                      id: args.context.internalLoadBalancers[0].id
-                    },
-                    success: function(json) {
-                      var item = json.listloadbalancersresponse.loadbalancer[0];
-                      args.response.success({ data: item.loadbalancerrule });
-                    }
-                  });
-                }
-              },
-              */
-
                             assignedVms: {
                                 title: 'label.assigned.vms',
                                 listView: {
@@ -1286,6 +1326,37 @@
                                 notification: {
                                     poll: pollAsyncJobResult
                                 }
+                            },
+                            edit: {
+                                label: 'label.edit.acl.list',
+                                action: function(args) {
+                                    var data = args.data;
+                                    data.id = args.context.aclLists[0].id;
+                                    $.ajax({
+                                        url: createURL('updateNetworkACLList'),
+                                        type: "POST",
+                                        data: data,
+                                        success: function(json) {
+                                            var jid = json.updatenetworkacllistresponse.jobid;
+                                            args.response.success({
+                                                _custom: {
+                                                    jobId: jid,
+                                                    getUpdatedItem: function() {
+                                                        $(window).trigger('cloudStack.fullRefresh');
+                                                        jQuery('div[id=breadcrumbs] ul:visible li span').last().html(data.name);
+                                                    }
+                                                }
+                                            });
+                                        },
+                                        error: function(json) {
+                                            args.response.error(parseXMLHttpResponse(json));
+                                        }
+                                    });
+                                },
+                                notification: {
+                                    poll: pollAsyncJobResult,
+                                    desc: 'label.edit.acl.list'
+                                }
                             }
                         },
 
@@ -1298,7 +1369,8 @@
                                         isEditable: true
                                     },
                                     description: {
-                                        label: 'label.description'
+                                        label: 'label.description',
+                                        isEditable: true  
                                     },
                                     id: {
                                         label: 'label.id'
@@ -1313,6 +1385,7 @@
                                                 var allowedActions = [];
                                                 if (items.vpcid != null) {
                                                     allowedActions.push("remove");
+                                                    allowedActions.push("edit");
                                                 }
                                                 return allowedActions;
                                             }
@@ -1330,38 +1403,103 @@
                                             networkid: false
                                         },
                                         dataProvider: function(args) {
+                                            var aclListId = args.context.aclLists[0].id;
                                             $.ajax({
-                                                url: createURL('listNetworkACLs&aclid=' + args.context.aclLists[0].id),
+                                                url: createURL('listNetworkACLs&aclid=' + aclListId),
                                                 success: function(json) {
-                                                    var items = json.listnetworkaclsresponse.networkacl.sort(function(a, b) {
-                                                        return a.number - b.number;
-                                                    }).map(function(acl) {
-                                                        if (parseInt(acl.protocol)) { // protocol number
-                                                            acl.protocolnumber = acl.protocol;
-                                                            acl.protocol = "protocolnumber";
-                                                        }
+                                                    var items = json.listnetworkaclsresponse.networkacl;
 
-                                                        return acl;
-                                                    });
+                                                    if(items){
+                                                        items.sort(function(a, b) {
+                                                            return a.number - b.number;
+                                                        }).map(function(acl) {
+                                                            if (parseInt(acl.protocol)) { // protocol number
+                                                                acl.protocolnumber = acl.protocol;
+                                                                acl.protocol = "protocolnumber";
+                                                            }
+    
+                                                            return acl;
+                                                        });
+                                                        var allUuids = '';
+                                                        items.forEach(function(aclRule){
+                                                                            allUuids += aclRule.id;
+                                                                      });
+                                                        accessControlListConsistentyHashForDragAndDropFunction = $.md5(allUuids);
+                                                    }
 
                                                     args.response.success({
                                                         data: items
-                                                        /* {
-                               cidrlist: '10.1.1.0/24',
-                               protocol: 'TCP',
-                               startport: 22, endport: 22,
-                               networkid: 0,
-                               traffictype: 'Egress'
-                               },
-                               {
-                               cidrlist: '10.2.1.0/24',
-                               protocol: 'UDP',
-                               startport: 56, endport: 72,
-                               networkid: 0,
-                               trafficType: 'Ingress'
-                               }
-                               ]*/
                                                     });
+                                                    if(jQuery('#details-tab-aclRules').siblings('div.toolbar').children('div.add').size() === 0){
+                                                        var $addAclRuleDivButton = jQuery('<div>').addClass('button add');
+                                                        var $spanAddAclRuleButtonMessage = jQuery('<span>').html(_l('label.add.ACL'));
+                                                        
+                                                        $addAclRuleDivButton.html($spanAddAclRuleButtonMessage);
+                                                        $addAclRuleDivButton.click(function(){
+                                                        	cloudStack.dialog.createForm({
+                                                        		 form: {
+                                                                     title: 'label.add.rule',
+                                                                     desc: 'label.add.rule.desc',
+                                                                     fields: aclRuleFields
+                                                                 },
+                                                                 after: function(argsLocal) {
+                                                                	 var data = argsLocal.data;
+                                                                	 data.aclid = argsLocal.context.aclLists[0].id;
+                                                                	 if(data.protocol != 'icmp'){
+                                                                		 data.icmpcode = undefined;
+                                                                		 data.icmptype  = undefined;
+                                                                	 }
+                                                                	 if(data.protocol != 'protocolnumber'){
+                                                                		 data.protocolnumber = undefined;
+                                                                	 }else{
+                                                                	     data.protocol = data.protocolnumber;
+                                                                	     data.protocolnumber = undefined;
+                                                                	 }
+                                                                	 if(data.protocol === 'all'){
+                                                                		 data.startport = undefined;
+                                                                		 data.endport = undefined;
+                                                                	 }
+                                                                     $.ajax({
+                                                                         url: createURL('createNetworkACL'),
+                                                                         data: argsLocal.data,
+                                                                         type: "POST",
+                                                                         success: function(json) {
+                                                                        	 jQuery('button.cancel:visible').click();
+                                                                        	 jQuery('div.toolbar:visible div.refresh').click();
+                                                                         }
+                                                                     });
+                                                                 },
+                                                                 context: args.context
+                                                        	});
+                                                        });
+                                                        jQuery('#details-tab-aclRules').siblings('div.toolbar').append($addAclRuleDivButton);
+                                                    }
+                                                    if(jQuery('#details-tab-aclRules').siblings('div.toolbar').children('div.export').size() === 0){
+                                                        var $exportAclsDivButton = jQuery('<div>').addClass('button export');
+                                                        var $linkExportAclRulesButtonMessage = jQuery('<a>').html(_l('label.acl.export'));
+                                                        
+                                                        $exportAclsDivButton.html($linkExportAclRulesButtonMessage);
+                                                        $exportAclsDivButton.click(function(){
+                                                            
+                                                            $.ajax({
+                                                                url: createURL('listNetworkACLs&aclid=' + aclListId),
+                                                                type: "GET",
+                                                                async: false,
+                                                                success: function(json) {
+                                                                    var acls = json.listnetworkaclsresponse.networkacl;
+                                                                    var csv = generateCsvForAclRules(acls);
+                                                                    
+                                                                    window.URL = window.URL || window.webkiURL;
+                                                                    var blob = new Blob([csv]);
+                                                                    var blobURL = window.URL.createObjectURL(blob);
+                                                                    
+                                                                    $linkExportAclRulesButtonMessage.attr("href", blobURL);
+                                                                    $linkExportAclRulesButtonMessage.attr("download", "aclRules.csv");
+                                                                }
+                                                            });
+                                                        });
+                                                        jQuery('#details-tab-aclRules').siblings('div.toolbar').append($exportAclsDivButton);
+                                                    }
                                                 }
                                             });
                                         }
@@ -3091,16 +3229,16 @@
                         },
                         action: function(args) {
                             var array1 = [];
-                            array1.push("&name=" + todb(args.data.name));
-                            array1.push("&displaytext=" + todb(args.data.displaytext));
+                            array1.push("&name=" + encodeURIComponent(args.data.name));
+                            array1.push("&displaytext=" + encodeURIComponent(args.data.displaytext));
 
                             //args.data.networkdomain is null when networkdomain field is hidden
                             if (args.data.networkdomain != null && args.data.networkdomain != args.context.networks[0].networkdomain)
-                                array1.push("&networkdomain=" + todb(args.data.networkdomain));
+                                array1.push("&networkdomain=" + encodeURIComponent(args.data.networkdomain));
 
                             //args.data.networkofferingid is null when networkofferingid field is hidden
                             if (args.data.networkofferingid != null && args.data.networkofferingid != args.context.networks[0].networkofferingid) {
-                                array1.push("&networkofferingid=" + todb(args.data.networkofferingid));
+                                array1.push("&networkofferingid=" + encodeURIComponent(args.data.networkofferingid));
 
                                 if (args.context.networks[0].type == "Isolated") { //Isolated network
                                     cloudStack.dialog.confirm({
@@ -4344,18 +4482,6 @@
                                     return capability.name == 'LbSchemes';
                                 }) : [];
 
-                                /*      var lbSchemes = $.grep(
-                  $.grep(
-                    tier.service,
-                    function(service) {
-                      return service.name == 'Lb';
-                    }
-                  )[0].capability,
-                  function(capability) {
-                    return capability.name == 'LbSchemes';
-                  }
-                );*/
-
                                 var hasLbScheme = function(schemeVal) {
                                     return $.grep(
                                         lbSchemes,
@@ -4388,7 +4514,6 @@
                                 });
                             })
                         });
-
                         if (error) {
                             cloudStack.dialog.notice({
                                 message: 'Error loading dashboard data.'
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index eedf16a..7373ea6 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -1908,7 +1908,7 @@
                                     } else {
                                         /*
                                         UI no longer gets providers from "listStorageProviders&type=image" because:
-                                        (1) Not all of returned values are handled by UI (e.g. Provider "NetApp" is not handled by UI).
+                                        (1) Not all of returned values are handled by UI.
                                         (2) Provider "SMB" which is handled by UI is not returned from "listStorageProviders&type=image"
                                         */
                                         storageproviders.push({ id: 'NFS', description: 'NFS'});
@@ -2272,7 +2272,7 @@
 
                     var array1 = [];
                     var networkType = args.data.zone.networkType; //"Basic", "Advanced"
-                    array1.push("&networktype=" + todb(networkType));
+                    array1.push("&networktype=" + encodeURIComponent(networkType));
 
                     if (networkType == "Basic") {
                         if (selectedNetworkOfferingHavingSG == true)
@@ -2284,13 +2284,13 @@
                             array1.push("&securitygroupenabled=false");
 
                             if (args.data.zone.guestcidraddress != null && args.data.zone.guestcidraddress.length > 0)
-                                array1.push("&guestcidraddress=" + todb(args.data.zone.guestcidraddress));
+                                array1.push("&guestcidraddress=" + encodeURIComponent(args.data.zone.guestcidraddress));
                         } else { // args.data.zone.sgEnabled    == true
                             array1.push("&securitygroupenabled=true");
                         }
                     }
 
-                    array1.push("&name=" + todb(args.data.zone.name));
+                    array1.push("&name=" + encodeURIComponent(args.data.zone.name));
 
                     if (args.data.zone.localstorageenabled == 'on') {
                         array1.push("&localstorageenabled=true");
@@ -2298,25 +2298,25 @@
 
                     //IPv4
                     if (args.data.zone.ip4dns1 != null && args.data.zone.ip4dns1.length > 0)
-                        array1.push("&dns1=" + todb(args.data.zone.ip4dns1));
+                        array1.push("&dns1=" + encodeURIComponent(args.data.zone.ip4dns1));
                     if (args.data.zone.ip4dns2 != null && args.data.zone.ip4dns2.length > 0)
-                        array1.push("&dns2=" + todb(args.data.zone.ip4dns2));
+                        array1.push("&dns2=" + encodeURIComponent(args.data.zone.ip4dns2));
 
                     //IPv6
                     if (args.data.zone.ip6dns1 != null && args.data.zone.ip6dns1.length > 0)
-                        array1.push("&ip6dns1=" + todb(args.data.zone.ip6dns1));
+                        array1.push("&ip6dns1=" + encodeURIComponent(args.data.zone.ip6dns1));
                     if (args.data.zone.ip6dns2 != null && args.data.zone.ip6dns2.length > 0)
-                        array1.push("&ip6dns2=" + todb(args.data.zone.ip6dns2));
+                        array1.push("&ip6dns2=" + encodeURIComponent(args.data.zone.ip6dns2));
 
 
-                    array1.push("&internaldns1=" + todb(args.data.zone.internaldns1));
+                    array1.push("&internaldns1=" + encodeURIComponent(args.data.zone.internaldns1));
 
                     var internaldns2 = args.data.zone.internaldns2;
                     if (internaldns2 != null && internaldns2.length > 0)
-                        array1.push("&internaldns2=" + todb(internaldns2));
+                        array1.push("&internaldns2=" + encodeURIComponent(internaldns2));
 
                     if (args.data.zone.networkdomain != null && args.data.zone.networkdomain.length > 0)
-                        array1.push("&domain=" + todb(args.data.zone.networkdomain));
+                        array1.push("&domain=" + encodeURIComponent(args.data.zone.networkdomain));
 
                     $.ajax({
                         url: createURL("createZone" + array1.join("")),
@@ -2374,7 +2374,7 @@
                         //Basic zone has only one physical network
                         var array1 = [];
                         if ("physicalNetworks" in args.data) { //from add-zone-wizard
-                            array1.push("&name=" + todb(args.data.physicalNetworks[0].name));
+                            array1.push("&name=" + encodeURIComponent(args.data.physicalNetworks[0].name));
                         } else { //from quick-install-wizard
                             array1.push("&name=PhysicalNetworkInBasicZone");
                         }
@@ -2595,9 +2595,9 @@
                         $(args.data.physicalNetworks).each(function(index) {
                             var thisPhysicalNetwork = this;
                             var array1 = [];
-                            array1.push("&name=" + todb(thisPhysicalNetwork.name));
+                            array1.push("&name=" + encodeURIComponent(thisPhysicalNetwork.name));
                             if (thisPhysicalNetwork.isolationMethod != null && thisPhysicalNetwork.isolationMethod.length > 0)
-                                array1.push("&isolationmethods=" + todb(thisPhysicalNetwork.isolationMethod));
+                                array1.push("&isolationmethods=" + encodeURIComponent(thisPhysicalNetwork.isolationMethod));
                             $.ajax({
                                 url: createURL("createPhysicalNetwork&zoneid=" + args.data.returnedZone.id + array1.join("")),
                                 dataType: "json",
@@ -3701,12 +3701,11 @@
 
                     var array1 = [];
                     array1.push("&physicalnetworkid=" + args.data.returnedBasicPhysicalNetwork.id);
-                    array1.push("&username=" + todb(args.data.basicPhysicalNetwork.username));
-                    array1.push("&password=" + todb(args.data.basicPhysicalNetwork.password));
-                    array1.push("&networkdevicetype=" + todb(args.data.basicPhysicalNetwork.networkdevicetype));
+                    cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.basicPhysicalNetwork.username, args.data.basicPhysicalNetwork.password);
+                    array1.push("&networkdevicetype=" + encodeURIComponent(args.data.basicPhysicalNetwork.networkdevicetype));
                     array1.push("&gslbprovider=" + (args.data.basicPhysicalNetwork.gslbprovider == "on"));
-                    array1.push("&gslbproviderpublicip=" + todb(args.data.basicPhysicalNetwork.gslbproviderpublicip));
-                    array1.push("&gslbproviderprivateip=" + todb(args.data.basicPhysicalNetwork.gslbproviderprivateip));
+                    array1.push("&gslbproviderpublicip=" + encodeURIComponent(args.data.basicPhysicalNetwork.gslbproviderpublicip));
+                    array1.push("&gslbproviderprivateip=" + encodeURIComponent(args.data.basicPhysicalNetwork.gslbproviderprivateip));
 
                     //construct URL starts here
                     var url = [];
@@ -3781,7 +3780,7 @@
                     url.push("lbdevicededicated=" + dedicated.toString());
 
 
-                    array1.push("&url=" + todb(url.join("")));
+                    array1.push("&url=" + encodeURIComponent(url.join("")));
                     //construct URL ends here
 
                     $.ajax({
@@ -3905,14 +3904,14 @@
 
                     var array3 = [];
                     array3.push("&zoneId=" + args.data.returnedZone.id);
-                    array3.push("&name=" + todb(args.data.pod.name));
-                    array3.push("&gateway=" + todb(args.data.pod.reservedSystemGateway));
-                    array3.push("&netmask=" + todb(args.data.pod.reservedSystemNetmask));
-                    array3.push("&startIp=" + todb(args.data.pod.reservedSystemStartIp));
+                    array3.push("&name=" + encodeURIComponent(args.data.pod.name));
+                    array3.push("&gateway=" + encodeURIComponent(args.data.pod.reservedSystemGateway));
+                    array3.push("&netmask=" + encodeURIComponent(args.data.pod.reservedSystemNetmask));
+                    array3.push("&startIp=" + encodeURIComponent(args.data.pod.reservedSystemStartIp));
 
                     var endip = args.data.pod.reservedSystemEndIp; //optional
                     if (endip != null && endip.length > 0)
-                        array3.push("&endIp=" + todb(endip));
+                        array3.push("&endIp=" + encodeURIComponent(endip));
 
                     $.ajax({
                         url: createURL("createPod" + array3.join("")),
@@ -3962,7 +3961,7 @@
                             array1.push("&zoneId=" + args.data.returnedZone.id);
 
                             if (this.vlanid != null && this.vlanid.length > 0)
-                                array1.push("&vlan=" + todb(this.vlanid));
+                                array1.push("&vlan=" + encodeURIComponent(this.vlanid));
                             else
                                 array1.push("&vlan=untagged");
 
@@ -4202,7 +4201,7 @@
                                 });
 
                                 $.ajax({
-                                    url: createURL("updatePhysicalNetwork&id=" + returnedId + "&vlan=" + todb(vlan)),
+                                    url: createURL("updatePhysicalNetwork&id=" + returnedId + "&vlan=" + encodeURIComponent(vlan)),
                                     dataType: "json",
                                     success: function(json) {
                                         var jobId = json.updatephysicalnetworkresponse.jobid;
@@ -4273,8 +4272,7 @@
                     var clusterName = args.data.cluster.name;
 
                     if (args.data.cluster.hypervisor == "VMware") {
-                        array1.push("&username=" + todb(args.data.cluster.vCenterUsername));
-                        array1.push("&password=" + todb(args.data.cluster.vCenterPassword));
+                        cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.cluster.vCenterUsername, args.data.cluster.vCenterPassword);
 
                         if (args.data.cluster.vsmipaddress != null && args.data.cluster.vsmipaddress.length > 0) {
                             array1.push('&vsmipaddress=' + args.data.cluster.vsmipaddress);
@@ -4297,10 +4295,10 @@
                         else
                             url = hostname;
                         url += "/" + dcName + "/" + clusterName;
-                        array1.push("&url=" + todb(url));
+                        array1.push("&url=" + encodeURIComponent(url));
                         clusterName = hostname + "/" + dcName + "/" + clusterName; //override clusterName
                     }
-                    array1.push("&clustername=" + todb(clusterName));
+                    array1.push("&clustername=" + encodeURIComponent(clusterName));
 
                     if (args.data.cluster.hypervisor == "VMware") {
                         var vmwareData = {
@@ -4466,15 +4464,15 @@
                     array1.push("&zoneid=" + args.data.returnedZone.id);
                     array1.push("&podId=" + args.data.returnedPod.id);
                     array1.push("&clusterid=" + args.data.returnedCluster.id);
-                    array1.push("&name=" + todb(args.data.primaryStorage.name));
-                    array1.push("&scope=" + todb(args.data.primaryStorage.scope));
+                    array1.push("&name=" + encodeURIComponent(args.data.primaryStorage.name));
+                    array1.push("&scope=" + encodeURIComponent(args.data.primaryStorage.scope));
 
                     //zone-wide-primary-storage is supported only for KVM and VMWare
                     if (args.data.primaryStorage.scope == "zone") { //hypervisor type of the hosts in zone that will be attached to this storage pool. KVM, VMware supported as of now.
                         if(args.data.cluster.hypervisor != undefined) {
-                            array1.push("&hypervisor=" + todb(args.data.cluster.hypervisor));
+                            array1.push("&hypervisor=" + encodeURIComponent(args.data.cluster.hypervisor));
                         } else if(args.data.returnedCluster.hypervisortype != undefined) {
-                            array1.push("&hypervisor=" + todb(args.data.returnedCluster.hypervisortype));
+                            array1.push("&hypervisor=" + encodeURIComponent(args.data.returnedCluster.hypervisortype));
                         } else {
                             cloudStack.dialog.notice({
                                 message: "Error: args.data.cluster.hypervisor is undefined. So is args.data.returnedCluster.hypervisortype (zone-wide-primary-storage)"
@@ -4495,7 +4493,7 @@
                             path = "/" + path;
                         url = smbURL(server, path);
                         array1.push("&details[0].user=" + args.data.primaryStorage.smbUsername);
-                        array1.push("&details[1].password=" + todb(args.data.primaryStorage.smbPassword));
+                        array1.push("&details[1].password=" + encodeURIComponent(args.data.primaryStorage.smbPassword));
                         array1.push("&details[2].domain=" + args.data.primaryStorage.smbDomain);
                     } else if (args.data.primaryStorage.protocol == "PreSetup") {
                         var path = args.data.primaryStorage.path;
@@ -4536,10 +4534,10 @@
                         var lun = args.data.primaryStorage.lun;
                         url = iscsiURL(server, iqn, lun);
                     }
-                    array1.push("&url=" + todb(url));
+                    array1.push("&url=" + encodeURIComponent(url));
 
                     if (args.data.primaryStorage.storageTags != null && args.data.primaryStorage.storageTags.length > 0)
-                        array1.push("&tags=" + todb(args.data.primaryStorage.storageTags));
+                        array1.push("&tags=" + encodeURIComponent(args.data.primaryStorage.storageTags));
 
                     $.ajax({
                         url: createURL("createStoragePool" + array1.join("")),
diff --git a/usage/pom.xml b/usage/pom.xml
index 1eecb64..2a22c9c 100644
--- a/usage/pom.xml
+++ b/usage/pom.xml
@@ -1,216 +1,217 @@
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-  license agreements. See the NOTICE file distributed with this work for additional 
-  information regarding copyright ownership. The ASF licenses this file to you under 
-  the Apache License, Version 2.0 (the "License"); you may not use this file except 
-  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
-  Unless required by applicable law or agreed to in writing, software distributed under 
-  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-  OF ANY KIND, either express or implied. See the License for the specific language 
-  governing permissions and limitations under the License. -->
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-usage</artifactId>
-  <name>Apache CloudStack Usage Server</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-api</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-schema</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-components-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-usage</artifactId>
+    <name>Apache CloudStack Usage Server</name>
+    <parent>
         <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-framework-quota</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-daemon</groupId>
-      <artifactId>commons-daemon</artifactId>
-    </dependency>
-     <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <version>${cs.mysql.version}</version>
-      <scope>provided</scope>
-    </dependency>
-     <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>1.7.22</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
-        <version>1.7.22</version>
-      </dependency>
-    <dependency>
-      <groupId>org.dbunit</groupId>
-      <artifactId>dbunit</artifactId>
-      <version>2.5.4</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-  <build>
-    <resources>
-      <resource>
-        <directory>resources</directory>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>com/cloud/usage/UsageManagerTest.java</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-dependencies</id>
-            <phase>package</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-              <includeScope>runtime</includeScope>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-resource</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy overwrite="true" todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/../client/conf">
-                    <include name="**/db.properties.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-              <target>
-                <copy overwrite="true" todir="${basedir}/target/transformed">
-                  <fileset dir="${basedir}/conf">
-                    <include name="*.in" />
-                  </fileset>
-                  <globmapper from="*.in" to="*" />
-                  <filterchain>
-                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
-                      <param type="propertiesfile" value="${cs.replace.properties}" />
-                    </filterreader>
-                  </filterchain>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>usage</id>
-      <activation>
-        <property>
-          <name>run</name>
-        </property>
-      </activation>
-      <build>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-schema</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-components-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-quota</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-daemon</groupId>
+            <artifactId>commons-daemon</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.dbunit</groupId>
+            <artifactId>dbunit</artifactId>
+            <version>${cs.dbunit.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
         <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>1.2.1</version>
-            <dependencies>
-              <dependency>
-                <groupId>org.apache.cloudstack</groupId>
-                <artifactId>cloud-usage</artifactId>
-                <version>${project.version}</version>
-              </dependency>
-            </dependencies>
-            <executions>
-              <execution>
-                <phase>process-test-resources</phase>
-                <id>run-usage</id>
-                <goals>
-                  <goal>java</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <includeProjectDependencies>true</includeProjectDependencies>
-              <includePluginDependencies>true</includePluginDependencies>
-              <executableDependency>
-                <groupId>org.apache.cloudstack</groupId>
-                <artifactId>cloud-usage</artifactId>
-              </executableDependency>
-              <mainClass>com.cloud.usage.UsageServer</mainClass>
-              <arguments />
-              <systemProperties>
-                <systemProperty>
-                  <key>catalina.home</key>
-                  <value>${project.parent.basedir}/utils</value>
-                </systemProperty>
-              </systemProperties>
-            </configuration>
-          </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>com/cloud/usage/UsageManagerTest.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+                            <includeScope>runtime</includeScope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-resource</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <copy overwrite="true" todir="${basedir}/target/transformed">
+                                    <fileset dir="${basedir}/../client/conf">
+                                        <include name="**/db.properties.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                            </target>
+                            <target>
+                                <copy overwrite="true" todir="${basedir}/target/transformed">
+                                    <fileset dir="${basedir}/conf">
+                                        <include name="*.in" />
+                                    </fileset>
+                                    <globmapper from="*.in" to="*" />
+                                    <filterchain>
+                                        <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
+                                            <param type="propertiesfile" value="${cs.replace.properties}" />
+                                        </filterreader>
+                                    </filterchain>
+                                </copy>
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>integration</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-failsafe-plugin</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>integration-test</goal>
-                  <goal>verify</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+    </build>
+    <profiles>
+        <profile>
+            <id>usage</id>
+            <activation>
+                <property>
+                    <name>run</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.apache.cloudstack</groupId>
+                                <artifactId>cloud-usage</artifactId>
+                                <version>${project.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <phase>process-test-resources</phase>
+                                <id>run-usage</id>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <includeProjectDependencies>true</includeProjectDependencies>
+                            <includePluginDependencies>true</includePluginDependencies>
+                            <executableDependency>
+                                <groupId>org.apache.cloudstack</groupId>
+                                <artifactId>cloud-usage</artifactId>
+                            </executableDependency>
+                            <mainClass>com.cloud.usage.UsageServer</mainClass>
+                            <arguments />
+                            <systemProperties>
+                                <systemProperty>
+                                    <key>catalina.home</key>
+                                    <value>${project.parent.basedir}/utils</value>
+                                </systemProperty>
+                            </systemProperties>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>integration</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/usage/src/com/cloud/usage/StorageTypes.java b/usage/src/main/java/com/cloud/usage/StorageTypes.java
similarity index 100%
rename from usage/src/com/cloud/usage/StorageTypes.java
rename to usage/src/main/java/com/cloud/usage/StorageTypes.java
diff --git a/usage/src/com/cloud/usage/UsageAlertManagerImpl.java b/usage/src/main/java/com/cloud/usage/UsageAlertManagerImpl.java
similarity index 100%
rename from usage/src/com/cloud/usage/UsageAlertManagerImpl.java
rename to usage/src/main/java/com/cloud/usage/UsageAlertManagerImpl.java
diff --git a/usage/src/com/cloud/usage/UsageManager.java b/usage/src/main/java/com/cloud/usage/UsageManager.java
similarity index 100%
rename from usage/src/com/cloud/usage/UsageManager.java
rename to usage/src/main/java/com/cloud/usage/UsageManager.java
diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
similarity index 100%
rename from usage/src/com/cloud/usage/UsageManagerImpl.java
rename to usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
diff --git a/usage/src/com/cloud/usage/UsageSanityChecker.java b/usage/src/main/java/com/cloud/usage/UsageSanityChecker.java
similarity index 100%
rename from usage/src/com/cloud/usage/UsageSanityChecker.java
rename to usage/src/main/java/com/cloud/usage/UsageSanityChecker.java
diff --git a/usage/src/com/cloud/usage/UsageServer.java b/usage/src/main/java/com/cloud/usage/UsageServer.java
similarity index 100%
rename from usage/src/com/cloud/usage/UsageServer.java
rename to usage/src/main/java/com/cloud/usage/UsageServer.java
diff --git a/usage/src/com/cloud/usage/parser/IPAddressUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/IPAddressUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/IPAddressUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/IPAddressUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/LoadBalancerUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/LoadBalancerUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/LoadBalancerUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/LoadBalancerUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/NetworkOfferingUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/NetworkOfferingUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/NetworkOfferingUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/NetworkOfferingUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/NetworkUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/NetworkUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/NetworkUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/NetworkUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/PortForwardingUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/PortForwardingUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/PortForwardingUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/PortForwardingUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/SecurityGroupUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/SecurityGroupUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/SecurityGroupUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/SecurityGroupUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/StorageUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/StorageUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/StorageUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/StorageUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/UsageParser.java b/usage/src/main/java/com/cloud/usage/parser/UsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/UsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/UsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/VMInstanceUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VMInstanceUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/VMInstanceUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/VMInstanceUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/VMSanpshotOnPrimaryParser.java b/usage/src/main/java/com/cloud/usage/parser/VMSanpshotOnPrimaryParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/VMSanpshotOnPrimaryParser.java
rename to usage/src/main/java/com/cloud/usage/parser/VMSanpshotOnPrimaryParser.java
diff --git a/usage/src/com/cloud/usage/parser/VMSnapshotUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VMSnapshotUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/VMSnapshotUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/VMSnapshotUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/VPNUserUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VPNUserUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/VPNUserUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/VPNUserUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/VmDiskUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VmDiskUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/VmDiskUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/VmDiskUsageParser.java
diff --git a/usage/src/com/cloud/usage/parser/VolumeUsageParser.java b/usage/src/main/java/com/cloud/usage/parser/VolumeUsageParser.java
similarity index 100%
rename from usage/src/com/cloud/usage/parser/VolumeUsageParser.java
rename to usage/src/main/java/com/cloud/usage/parser/VolumeUsageParser.java
diff --git a/usage/resources/usageApplicationContext.xml b/usage/src/main/resources/usageApplicationContext.xml
similarity index 100%
rename from usage/resources/usageApplicationContext.xml
rename to usage/src/main/resources/usageApplicationContext.xml
diff --git a/usage/test/com/cloud/usage/UsageManagerTest.java b/usage/src/test/java/com/cloud/usage/UsageManagerTest.java
similarity index 100%
rename from usage/test/com/cloud/usage/UsageManagerTest.java
rename to usage/src/test/java/com/cloud/usage/UsageManagerTest.java
diff --git a/usage/test/com/cloud/usage/UsageManagerTestConfiguration.java b/usage/src/test/java/com/cloud/usage/UsageManagerTestConfiguration.java
similarity index 100%
rename from usage/test/com/cloud/usage/UsageManagerTestConfiguration.java
rename to usage/src/test/java/com/cloud/usage/UsageManagerTestConfiguration.java
diff --git a/usage/test/com/cloud/usage/UsageSanityCheckerIT.java b/usage/src/test/java/com/cloud/usage/UsageSanityCheckerIT.java
similarity index 100%
rename from usage/test/com/cloud/usage/UsageSanityCheckerIT.java
rename to usage/src/test/java/com/cloud/usage/UsageSanityCheckerIT.java
diff --git a/usage/test/com/cloud/usage/UsageSanityCheckerTest.java b/usage/src/test/java/com/cloud/usage/UsageSanityCheckerTest.java
similarity index 100%
rename from usage/test/com/cloud/usage/UsageSanityCheckerTest.java
rename to usage/src/test/java/com/cloud/usage/UsageSanityCheckerTest.java
diff --git a/usage/test/resources/UsageManagerTestContext.xml b/usage/src/test/resources/UsageManagerTestContext.xml
similarity index 100%
rename from usage/test/resources/UsageManagerTestContext.xml
rename to usage/src/test/resources/UsageManagerTestContext.xml
diff --git a/usage/test/resources/cloud1.xml b/usage/src/test/resources/cloud1.xml
similarity index 100%
rename from usage/test/resources/cloud1.xml
rename to usage/src/test/resources/cloud1.xml
diff --git a/usage/test/resources/cloud2.xml b/usage/src/test/resources/cloud2.xml
similarity index 100%
rename from usage/test/resources/cloud2.xml
rename to usage/src/test/resources/cloud2.xml
diff --git a/usage/test/resources/cloud3.xml b/usage/src/test/resources/cloud3.xml
similarity index 100%
rename from usage/test/resources/cloud3.xml
rename to usage/src/test/resources/cloud3.xml
diff --git a/usage/test/resources/cloud_usage1.xml b/usage/src/test/resources/cloud_usage1.xml
similarity index 100%
rename from usage/test/resources/cloud_usage1.xml
rename to usage/src/test/resources/cloud_usage1.xml
diff --git a/usage/test/resources/cloud_usage2.xml b/usage/src/test/resources/cloud_usage2.xml
similarity index 100%
rename from usage/test/resources/cloud_usage2.xml
rename to usage/src/test/resources/cloud_usage2.xml
diff --git a/usage/test/resources/cloud_usage3.xml b/usage/src/test/resources/cloud_usage3.xml
similarity index 100%
rename from usage/test/resources/cloud_usage3.xml
rename to usage/src/test/resources/cloud_usage3.xml
diff --git a/usage/test/resources/db.properties b/usage/src/test/resources/db.properties
similarity index 100%
rename from usage/test/resources/db.properties
rename to usage/src/test/resources/db.properties
diff --git a/utils/pom.xml b/utils/pom.xml
index 78aa047..08b144c 100755
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -1,250 +1,231 @@
 <!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
 
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-utils</artifactId>
-  <name>Apache CloudStack Utils</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-managed-context</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-ca</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-context</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.aspectj</groupId>
-      <artifactId>aspectjweaver</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>cglib</groupId>
-      <artifactId>cglib-nodep</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-validator</groupId>
-      <artifactId>commons-validator</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15on</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.bouncycastle</groupId>
-      <artifactId>bcpkix-jdk15on</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.jcraft</groupId>
-      <artifactId>jsch</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.jasypt</groupId>
-      <artifactId>jasypt</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.trilead</groupId>
-      <artifactId>trilead-ssh2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.amazonaws</groupId>
-      <artifactId>aws-java-sdk-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.amazonaws</groupId>
-      <artifactId>aws-java-sdk-s3</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>apache-log4j-extras</artifactId>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.googlecode.java-ipv6</groupId>
-      <artifactId>java-ipv6</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-configuration</groupId>
-      <artifactId>commons-configuration</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <!-- Test dependency in mysql for db tests -->
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>provided</scope>
-      <version>${cs.commons-io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.reflections</groupId>
-      <artifactId>reflections</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>xml-apis</groupId>
-          <artifactId>xml-apis</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.owasp.esapi</groupId>
-      <artifactId>esapi</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>xml-apis</groupId>
-          <artifactId>xml-apis</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>xml-apis</groupId>
-          <artifactId>xml-apis-ext</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>xerces</groupId>
-          <artifactId>xmlParserAPIs</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-beanutils</groupId>
-          <artifactId>commons-beanutils-core</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.opensaml</groupId>
-      <artifactId>opensaml</artifactId>
-      <version>${cs.opensaml.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-net</groupId>
-      <artifactId>commons-net</artifactId>
-      <version>3.6</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava-testlib</artifactId>
-      <version>${cs.guava-testlib.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-databind</artifactId>
-      <version>${cs.jackson.version}</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <testSourceDirectory>src/test/java</testSourceDirectory>
-    <outputDirectory>target/classes</outputDirectory>
-    <testOutputDirectory>target/test-classes</testOutputDirectory>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-      </resource>
-    </resources>
-    <testResources>
-      <testResource>
-        <directory>src/test/resources</directory>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>com/cloud/utils/testcase/*TestCase*</exclude>
-            <exclude>com/cloud/utils/db/*Test*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>integration</id>
-      <build>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-utils</artifactId>
+    <name>Apache CloudStack Utils</name>
+    <parent>
+        <groupId>org.apache.cloudstack</groupId>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-managed-context</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-ca</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjweaver</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-validator</groupId>
+            <artifactId>commons-validator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.jcraft</groupId>
+            <artifactId>jsch</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jasypt</groupId>
+            <artifactId>jasypt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.trilead</groupId>
+            <artifactId>trilead-ssh2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-s3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>apache-log4j-extras</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.googlecode.java-ipv6</groupId>
+            <artifactId>java-ipv6</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-configuration</groupId>
+            <artifactId>commons-configuration</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <!-- Test dependency in mysql for db tests -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>xml-apis</groupId>
+                    <artifactId>xml-apis</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.owasp.esapi</groupId>
+            <artifactId>esapi</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>xml-apis</groupId>
+                    <artifactId>xml-apis</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xml-apis</groupId>
+                    <artifactId>xml-apis-ext</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xmlParserAPIs</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-beanutils</groupId>
+                    <artifactId>commons-beanutils-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.opensaml</groupId>
+            <artifactId>opensaml</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava-testlib</artifactId>
+            <version>${cs.guava-testlib.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${cs.jackson.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
         <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-failsafe-plugin</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>integration-test</goal>
-                  <goal>verify</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>com/cloud/utils/testcase/*TestCase*</exclude>
+                        <exclude>com/cloud/utils/db/*Test*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
         </plugins>
-      </build>
-    </profile>
-  </profiles>
+    </build>
+    <profiles>
+        <profile>
+            <id>integration</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
diff --git a/utils/src/main/java/com/cloud/maint/Version.java b/utils/src/main/java/com/cloud/maint/Version.java
deleted file mode 100644
index 925806e..0000000
--- a/utils/src/main/java/com/cloud/maint/Version.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
-package com.cloud.maint;
-
-public class Version {
-    /**
-     * Compares two version strings and see which one is higher version.
-     * @param ver1
-     * @param ver2
-     * @return positive if ver1 is higher.  negative if ver1 is lower; zero if the same.
-     */
-    public static int compare(String ver1, String ver2) {
-        String[] tokens1 = ver1.split("[.]");
-        String[] tokens2 = ver2.split("[.]");
-//        assert(tokens1.length <= tokens2.length);
-
-        int compareLength = Math.min(tokens1.length, tokens2.length);
-        for (int i = 0; i < compareLength; i++) {
-            long version1 = Long.parseLong(tokens1[i]);
-            long version2 = Long.parseLong(tokens2[i]);
-            if (version1 != version2) {
-                return version1 < version2 ? -1 : 1;
-            }
-        }
-
-        if (tokens1.length > tokens2.length) {
-            return 1;
-        } else if (tokens1.length < tokens2.length) {
-            return -1;
-        }
-
-        return 0;
-    }
-
-    public static String trimToPatch(String version) {
-        int index = version.indexOf("-");
-
-        if (index > 0)
-            version = version.substring(0, index);
-
-        String[] tokens = version.split("[.]");
-
-        if (tokens.length < 3)
-            return "0";
-        return tokens[0] + "." + tokens[1] + "." + tokens[2];
-    }
-
-    public static String trimRouterVersion(String version) {
-        String[] tokens = version.split(" ");
-        if (tokens.length >= 3 && tokens[2].matches("[0-9]+(\\.[0-9]+)*")) {
-            return tokens[2];
-        }
-        return "0";
-    }
-
-    public static void main(String[] args) {
-        System.out.println("Result is " + compare(args[0], args[1]));
-    }
-
-}
diff --git a/utils/src/main/java/com/cloud/utils/StringUtils.java b/utils/src/main/java/com/cloud/utils/StringUtils.java
index f7ef0bc..4c1dacb 100644
--- a/utils/src/main/java/com/cloud/utils/StringUtils.java
+++ b/utils/src/main/java/com/cloud/utils/StringUtils.java
@@ -28,8 +28,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.owasp.esapi.StringUtilities;
-
 public class StringUtils {
     private static final char[] hexChar = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
@@ -76,12 +74,13 @@
         return org.apache.commons.lang.StringUtils.join(components, delimiter);
     }
 
+    /**
+     * @deprecated
+     * Please use org.apache.commons.lang.StringUtils.isNotBlank() as a replacement
+     */
+    @Deprecated
     public static boolean isNotBlank(final String str) {
-        if (str != null && str.trim().length() > 0) {
-            return true;
-        }
-
-        return false;
+        return org.apache.commons.lang.StringUtils.isNotBlank(str);
     }
 
     public static String cleanupTags(String tags) {
@@ -254,24 +253,6 @@
         return lstTags1.containsAll(lstTags2) && lstTags2.containsAll(lstTags1);
     }
 
-    public static String stripControlCharacters(final String s) {
-        return StringUtilities.stripControls(s);
-    }
-
-    public static int formatForOutput(final String text, final int start, final int columns, final char separator) {
-        if (start >= text.length()) {
-            return -1;
-        }
-
-        int end = start + columns;
-        if (end > text.length()) {
-            end = text.length();
-        }
-        final String searchable = text.substring(start, end);
-        final int found = searchable.lastIndexOf(separator);
-        return found > 0 ? found : end - start;
-    }
-
     public static Map<String, String> stringToMap(final String s) {
         final Map<String, String> map = new HashMap<String, String>();
         final String[] elements = s.split(";");
diff --git a/utils/src/main/java/com/cloud/utils/db/UUIDManager.java b/utils/src/main/java/com/cloud/utils/db/UUIDManager.java
index cac1876..737480a 100644
--- a/utils/src/main/java/com/cloud/utils/db/UUIDManager.java
+++ b/utils/src/main/java/com/cloud/utils/db/UUIDManager.java
@@ -45,4 +45,6 @@
      * .
      */
     <T> void checkUuidSimple(String uuid, Class<T> entityType);
+
+    public <T> String getUuid(Class<T> entityType, Long customId);
 }
diff --git a/utils/src/main/java/com/cloud/utils/nicira/nvp/plugin/NiciraNvpApiVersion.java b/utils/src/main/java/com/cloud/utils/nicira/nvp/plugin/NiciraNvpApiVersion.java
index 4dfd4e2..9090de7 100755
--- a/utils/src/main/java/com/cloud/utils/nicira/nvp/plugin/NiciraNvpApiVersion.java
+++ b/utils/src/main/java/com/cloud/utils/nicira/nvp/plugin/NiciraNvpApiVersion.java
@@ -21,7 +21,7 @@
 
 import org.apache.log4j.Logger;
 
-import com.cloud.maint.Version;
+import org.apache.cloudstack.utils.CloudStackVersion;
 
 public class NiciraNvpApiVersion {
     private static final Logger s_logger = Logger.getLogger(NiciraNvpApiVersion.class);
@@ -33,8 +33,10 @@
     }
 
     public static synchronized boolean isApiVersionLowerThan(String apiVersion){
-        if (niciraApiVersion == null) return false;
-        int compare = Version.compare(niciraApiVersion, apiVersion);
+        if (niciraApiVersion == null) {
+            return false;
+        }
+        int compare = CloudStackVersion.compare(niciraApiVersion, apiVersion);
         return (compare < 0);
     }
 
diff --git a/utils/src/main/java/org/apache/cloudstack/utils/CloudStackVersion.java b/utils/src/main/java/org/apache/cloudstack/utils/CloudStackVersion.java
index 035f69e..8bd2b6f 100644
--- a/utils/src/main/java/org/apache/cloudstack/utils/CloudStackVersion.java
+++ b/utils/src/main/java/org/apache/cloudstack/utils/CloudStackVersion.java
@@ -39,50 +39,8 @@
  */
 public final class CloudStackVersion implements Comparable<CloudStackVersion> {
 
-    private final static Pattern VERSION_FORMAT = Pattern.compile("(\\d+\\.){2}(\\d+\\.)?\\d+");
-
-    /**
-     *
-     * Parses a <code>String</code> representation of a version that conforms one of the following
-     * formats into a <code>CloudStackVersion</code> instance:
-     * <ul>
-     *     <li><code><major version>.<minor version>.<patch release></code></li>
-     *     <li><code><major version>.<minor version>.<patch release>.<security release></code></li>
-     *     <li><code><major version>.<minor version>.<patch release>.<security release>-<any string></code></li>
-     * </ul>
-     *
-     * If the string contains a suffix that begins with a "-" character, then the "-" and all characters following it
-     * will be dropped.
-     *
-     * @param value The value to parse which must be non-blank and conform the formats listed above
-     *
-     * @return <code>value</code> parsed into a <code>CloudStackVersion</code> instance
-     *
-     * @since 4.8.2
-     *
-     */
-    public static CloudStackVersion parse(final String value) {
-
-        // Strip out any legacy patch information from the version string ...
-        final String trimmedValue = substringBefore(value, "-");
-
-        checkArgument(isNotBlank(trimmedValue), CloudStackVersion.class.getName() + ".parse(String) requires a non-blank value");
-        checkArgument(VERSION_FORMAT.matcher(trimmedValue).matches(), CloudStackVersion.class.getName() + "parse(String) passed " +
-                value + ", but requires a value in the format of int.int.int(.int)(-<legacy patch>)");
-
-        final String[] components = trimmedValue.split("\\.");
-
-        checkState(components != null && (components.length == 3 || components.length == 4), "Expected " + value +
-                " to parse to 3 or 4 positions.");
-
-        final int majorRelease = Integer.valueOf(components[0]);
-        final int minorRelease = Integer.valueOf(components[1]);
-        final int patchRelease = Integer.valueOf(components[2]);
-        final Integer securityRelease = components.length == 3 ? null : Integer.valueOf(components[3]);
-
-        return new CloudStackVersion(majorRelease, minorRelease, patchRelease, securityRelease);
-
-    }
+    private final static Pattern NUMBER_VERSION_FORMAT = Pattern.compile("(\\d+\\.){2}(\\d+\\.)?\\d+");
+    private final static Pattern FULL_VERSION_FORMAT = Pattern.compile("(\\d+\\.){2}(\\d+\\.)?\\d+(-[a-zA-Z]+)?(-\\d+)?(-SNAPSHOT)?");
 
     private final int majorRelease;
     private final int minorRelease;
@@ -106,17 +64,63 @@
 
     }
 
-    private static ImmutableList<Integer> normalizeVersionValues(final ImmutableList<Integer> values) {
+    /**
+     *
+     * Parses a <code>String</code> representation of a version that conforms one of the following
+     * formats into a <code>CloudStackVersion</code> instance:
+     * <ul>
+     *     <li><code>&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;.&lt;security&gt;</code></li>
+     *     <li><code>&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;.&lt;security&gt;.&lt;security&gt;</code></li>
+     *     <li><code>&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;.&lt;security&gt;.&lt;security&gt;-&lt;any string&gt;</code></li>
+     * </ul>
+     *
+     * If the string contains a suffix that begins with a "-" character, then the "-" and all characters following it
+     * will be dropped.
+     *
+     * @param value The value to parse which must be non-blank and conform the formats listed above
+     *
+     * @return <code>value</code> parsed into a <code>CloudStackVersion</code> instance
+     *
+     * @since 4.8.2
+     *
+     */
+    public static CloudStackVersion parse(final String value) {
 
-        checkArgument(values != null);
-        checkArgument(values.size() == 3 || values.size() == 4);
+        // Strip out any legacy patch information from the version string ...
+        final String trimmedValue = substringBefore(value, "-");
 
-        if (values.size() == 3) {
-            return ImmutableList.<Integer>builder().addAll(values).add(0).build();
-        }
+        checkArgument(isNotBlank(trimmedValue), CloudStackVersion.class.getName() + ".parse(String) requires a non-blank value");
+        checkArgument(NUMBER_VERSION_FORMAT.matcher(trimmedValue).matches(), CloudStackVersion.class.getName() + ".parse(String) passed " +
+                value + ", but requires a value in the format of int.int.int(.int)(-<legacy patch>)");
 
-        return values;
+        final String[] components = trimmedValue.split("\\.");
 
+        checkState(components != null && (components.length == 3 || components.length == 4), "Expected " + value +
+                " to parse to 3 or 4 positions.");
+
+        final int majorRelease = Integer.valueOf(components[0]);
+        final int minorRelease = Integer.valueOf(components[1]);
+        final int patchRelease = Integer.valueOf(components[2]);
+        final Integer securityRelease = components.length == 3 ? null : Integer.valueOf(components[3]);
+
+        return new CloudStackVersion(majorRelease, minorRelease, patchRelease, securityRelease);
+
+    }
+
+    /**
+     * Shortcut method to {@link #parse(String)} and {@link #compareTo(CloudStackVersion)} two versions
+     *
+     * @param version1 the first value to be parsed and compared
+     * @param version2 the second value to be parsed and compared
+     *
+     * @return A value less than zero (0) indicates <code>version1</code> is less than <code>version2</code>.  A value
+     *         equal to zero (0) indicates <code>version1</code> equals <code>version2</code>.  A value greater than zero (0)
+     *         indicates <code>version1</code> is greater than <code>version2</code>.
+     *
+     * @since 4.12.0.0
+     */
+    public static int compare(String version1, String version2) {
+        return parse(version1).compareTo(parse(version2));
     }
 
     /**
@@ -125,7 +129,7 @@
      * A couple of notes about the comparison rules for this method:
      * <ul>
      *     <li>Three position versions are normalized to four position versions with the security release being
-     *         defaulted to zero (0).  For example, for the purposes of comparision, <code>4.8.1</code> would be
+     *         defaulted to zero (0).  For example, for the purposes of comparison, <code>4.8.1</code> would be
      *         normalized to <code>4.8.1.0</code> for all comparison operations.</li>
      *     <li>A three position version with a null security release is considered equal to a four position
      *         version number where the major release, minor release, and patch release are the same and the security
@@ -167,6 +171,43 @@
     }
 
     /**
+     * Trim full version from router version. Valid versions are:
+     *
+     * <ul>
+     *    <li><code>&lt;major&gt;.&lt;minor&gt;[.&lt;patch&gt;[.&lt;security&gt;]]</li>
+     *    <li><code>&lt;major&gt;.&lt;minor&gt;[.&lt;patch&gt;[.&lt;security&gt;]]-&lt;branding&gt;</li>
+     *    <li><code>&lt;major&gt;.&lt;minor&gt;[.&lt;patch&gt;[.&lt;security&gt;]][-&lt;branding&gt;]-SNAPSHOT</li>
+     *    <li><code>&lt;major&gt;.&lt;minor&gt;[.&lt;patch&gt;[.&lt;security&gt;]][-&lt;branding&gt;]-&lt;epoch timestamp&gt;</li>
+     * </ul>
+     *
+     * @param version to trim
+     *
+     * @return actual trimmed version
+     */
+    public static String trimRouterVersion(String version) {
+        final String[] tokens = version.split(" ");
+
+        if (tokens.length >= 3 && FULL_VERSION_FORMAT.matcher(tokens[2]).matches()) {
+            return tokens[2];
+        }
+
+        return "0";
+    }
+
+    private static ImmutableList<Integer> normalizeVersionValues(final ImmutableList<Integer> values) {
+
+        checkArgument(values != null);
+        checkArgument(values.size() == 3 || values.size() == 4);
+
+        if (values.size() == 3) {
+            return ImmutableList.<Integer>builder().addAll(values).add(0).build();
+        }
+
+        return values;
+
+    }
+
+    /**
      *
      * @return The components of this version as an {@link ImmutableList} in order of major release, minor release,
      * patch release, and security release
@@ -187,6 +228,22 @@
 
     }
 
+    public int getMajorRelease() {
+        return majorRelease;
+    }
+
+    public int getMinorRelease() {
+        return minorRelease;
+    }
+
+    public int getPatchRelease() {
+        return patchRelease;
+    }
+
+    public Integer getSecurityRelease() {
+        return securityRelease;
+    }
+
     @Override
     public boolean equals(final Object thatObject) {
 
@@ -215,21 +272,4 @@
     public String toString() {
         return Joiner.on(".").join(asList());
     }
-
-    public int getMajorRelease() {
-        return majorRelease;
-    }
-
-    public int getMinorRelease() {
-        return minorRelease;
-    }
-
-    public int getPatchRelease() {
-        return patchRelease;
-    }
-
-    public Integer getSecurityRelease() {
-        return securityRelease;
-    }
-
 }
diff --git a/utils/src/test/java/org/apache/cloudstack/utils/CloudStackVersionTest.java b/utils/src/test/java/org/apache/cloudstack/utils/CloudStackVersionTest.java
index ab576bb..eb7a76a 100644
--- a/utils/src/test/java/org/apache/cloudstack/utils/CloudStackVersionTest.java
+++ b/utils/src/test/java/org/apache/cloudstack/utils/CloudStackVersionTest.java
@@ -31,7 +31,12 @@
 public final class CloudStackVersionTest {
 
     @Test
-    @DataProvider({ "1.2.3, 1.2.3", "1.2.3.4, 1.2.3.4", "1.2.3-12, 1.2.3", "1.2.3.4-14, 1.2.3.4" })
+    @DataProvider({
+        "1.2.3, 1.2.3",
+        "1.2.3.4, 1.2.3.4",
+        "1.2.3-12, 1.2.3",
+        "1.2.3.4-14, 1.2.3.4"
+    })
     public void testValidParse(final String inputValue, final String expectedVersion) {
         final CloudStackVersion version = CloudStackVersion.parse(inputValue);
         assertNotNull(version);
@@ -39,13 +44,26 @@
     }
 
     @Test(expected = IllegalArgumentException.class)
-    @DataProvider({ "1.2", "1", "1.2.3.4.5", "aaaa", "", "  ", "1.2.3.4.5"})
+    @DataProvider({
+        "1.2",
+        "1",
+        "1.2.3.4.5",
+        "aaaa",
+        "",
+        "  ",
+        "1.2.3.4.5"
+    })
     public void testInvalidParse(final String invalidValue) {
         CloudStackVersion.parse(invalidValue);
     }
 
     @Test
-    @DataProvider({ "1.0.0", "1.0.0.0", "1.2.3", "1.2.3.4" })
+    @DataProvider({
+        "1.0.0",
+        "1.0.0.0",
+        "1.2.3",
+        "1.2.3.4"
+    })
     public void testEquals(final String value) {
 
         final CloudStackVersion version = CloudStackVersion.parse(value);
@@ -62,16 +80,19 @@
 
     @Test
     @DataProvider({
-            "1.0.0.0, 1.0.0.0",
-            "1.0.0, 1.0.0",
-            "1.0.0.0, 1.0.0",
-            "1.0.0-10, 1.0.0-10",
-            "1.0.0-10, 1.0.0",
-            "1.0.0.0, 1.0.0-10",
-            "1.0.0.0, 1.0.0.0-10",
-            "1.0.0-10, 1.0.0-11",
-            "1.0.0-10, 1.0.0.0-14",
-            "1.0.0.0-14, 1.0.0.0-15"
+        "1.0.0.0, 1.0.0.0",
+        "1.0.0, 1.0.0",
+        "1.0.0.0, 1.0.0",
+        "1.0.0-10, 1.0.0-10",
+        "1.0.0-10, 1.0.0",
+        "1.0.0.0, 1.0.0-10",
+        "1.0.0.0, 1.0.0.0-10",
+        "1.0.0-10, 1.0.0-11",
+        "1.0.0-10, 1.0.0.0-14",
+        "1.0.0.0-14, 1.0.0.0-15",
+        "1.0.0.0-SNAPSHOT, 1.0.0.0-SNAPSHOT",
+        "1.0.0.0-branding, 1.0.0.0-branding",
+        "1.0.0.0-1518453362, 1.0.0.0-1519453362"
     })
     public void testEqualCompareTo(final String value, final String thatValue) {
 
@@ -88,21 +109,44 @@
 
     @Test
     @DataProvider({
-            "1.2.3.4, 1.2.3",
-            "1.2.3, 1.0.0.0",
-            "1.2.3.4, 1.0.0",
-            "2.0.0, 1.2.3",
-            "2.0.0, 1.2.3.4",
-            "2.0.0.0, 1.2.3",
-            "2.0.0.0, 1.2.3.4",
-            "2.0.0.0, 1.2.3",
-            "1.3.0, 1.2.3.4",
-            "1.3.0.0, 1.2.3.4",
-            "1.3.0.0, 1.2.3",
-            "1.2.3.4-10, 1.0.0.0-5",
-            "1.2.3-10, 1.0.0-5",
-            "1.2.3.4, 1.0.0.0-5",
-            "1.2.3.4-10, 1.0.0"
+        "1.0.0.0, 1.0.0.0",
+        "1.0.0, 1.0.0",
+        "1.0.0.0, 1.0.0",
+        "1.0.0-10, 1.0.0-10",
+        "1.0.0-10, 1.0.0",
+        "1.0.0.0, 1.0.0-10",
+        "1.0.0.0, 1.0.0.0-10",
+        "1.0.0-10, 1.0.0-11",
+        "1.0.0-10, 1.0.0.0-14",
+        "1.0.0.0-14, 1.0.0.0-15",
+        "1.0.0.0-SNAPSHOT, 1.0.0.0-SNAPSHOT",
+        "1.0.0.0-branding, 1.0.0.0-branding",
+        "1.0.0.0-1518453362, 1.0.0.0-1519453362"
+    })
+    public void testEqualCompareDirect(final String value, final String thatValue) {
+
+        assertEquals(0, CloudStackVersion.compare(value, thatValue));
+        assertEquals(0, CloudStackVersion.compare(thatValue, value));
+
+    }
+
+    @Test
+    @DataProvider({
+        "1.2.3.4, 1.2.3",
+        "1.2.3, 1.0.0.0",
+        "1.2.3.4, 1.0.0",
+        "2.0.0, 1.2.3",
+        "2.0.0, 1.2.3.4",
+        "2.0.0.0, 1.2.3",
+        "2.0.0.0, 1.2.3.4",
+        "2.0.0.0, 1.2.3",
+        "1.3.0, 1.2.3.4",
+        "1.3.0.0, 1.2.3.4",
+        "1.3.0.0, 1.2.3",
+        "1.2.3.4-10, 1.0.0.0-5",
+        "1.2.3-10, 1.0.0-5",
+        "1.2.3.4, 1.0.0.0-5",
+        "1.2.3.4-10, 1.0.0"
     })
     public void testGreaterThanAndLessThanCompareTo(final String value, final String thatValue) {
 
@@ -117,4 +161,47 @@
 
     }
 
+    @Test
+    @DataProvider({
+        "1.2.3.4, 1.2.3",
+        "1.2.3, 1.0.0.0",
+        "1.2.3.4, 1.0.0",
+        "2.0.0, 1.2.3",
+        "2.0.0, 1.2.3.4",
+        "2.0.0.0, 1.2.3",
+        "2.0.0.0, 1.2.3.4",
+        "2.0.0.0, 1.2.3",
+        "1.3.0, 1.2.3.4",
+        "1.3.0.0, 1.2.3.4",
+        "1.3.0.0, 1.2.3",
+        "1.2.3.4-10, 1.0.0.0-5",
+        "1.2.3-10, 1.0.0-5",
+        "1.2.3.4, 1.0.0.0-5",
+        "1.2.3.4-10, 1.0.0"
+    })
+    public void testGreaterThanAndLessThanCompareDirect(final String value, final String thatValue) {
+
+        assertEquals(1, CloudStackVersion.compare(value, thatValue));
+        assertEquals(-1, CloudStackVersion.compare(thatValue, value));
+
+    }
+
+    @Test
+    @DataProvider({
+        "Cloudstack Release 1.2.3 Mon Jan  1 10:10:10 UTC 2018, 1.2.3",
+        "Cloudstack Release 1.2.3.4 Mon Jan  1 10:10:10 UTC 2018, 1.2.3.4",
+        "Cloudstack Release 1.2.3-SNAPSHOT Mon Jan  1 10:10:10 UTC 2018, 1.2.3-SNAPSHOT",
+        "Cloudstack Release 1.2.3.4-SNAPSHOT Mon Jan  1 10:10:10 UTC 2018, 1.2.3.4-SNAPSHOT",
+        "Cloudstack Release 1.2.3.4-1519453362 Mon Jan  1 10:10:10 UTC 2018, 1.2.3.4-1519453362",
+        "Cloudstack Release 1.2.3.4-brnading-SNAPSHOT Mon Jan  1 10:10:10 UTC 2018, 1.2.3.4-brnading-SNAPSHOT",
+        "Cloudstack Release 1.2.3.4-brnading-1519453362 Mon Jan  1 10:10:10 UTC 2018, 1.2.3.4-brnading-1519453362",
+        "Cloudstack Release 1.2 Mon Jan  1 10:10:10 UTC 2018, 0",
+        "Cloudstack Release 1.2-SNAPSHOT Mon Jan  1 10:10:10 UTC 2018, 0",
+        "Cloud stack Release 1.2.3.4 Mon Jan  1 10:10:10 UTC 2018, 0"
+    })
+    public void testTrimRouterVersion(final String value, final String expected) {
+
+        assertEquals(expected, CloudStackVersion.trimRouterVersion(value));
+
+    }
 }
diff --git a/version-info.in b/version-info.in
deleted file mode 100644
index c0c21e7..0000000
--- a/version-info.in
+++ /dev/null
@@ -1,27 +0,0 @@
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-
-
-
-This is the version information for the manifests in the JAR files.
-
-Implementation_Version:                           @Implementation_Version@
-
-This file exists solely to trigger ant recompilation if it is needed.
-Otherwise, JAR files and all the dependent files are brought from cache.
-This file does not get installed or used in any other way other than
-during the build process.
diff --git a/vmware-base/pom.xml b/vmware-base/pom.xml
index 6c2c0f9..73ca086 100644
--- a/vmware-base/pom.xml
+++ b/vmware-base/pom.xml
@@ -1,73 +1,73 @@
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements. See the NOTICE file
+  or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
-  regarding copyright ownership. The ASF licenses this file
+  regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
-  with the License. You may obtain a copy of the License at
+  with the License.  You may obtain a copy of the License at
 
-  http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied. See the License for the
+  KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>cloud-vmware-base</artifactId>
-  <name>Apache CloudStack VMware Base</name>
-  <parent>
-    <groupId>org.apache.cloudstack</groupId>
-    <artifactId>cloudstack</artifactId>
-    <version>4.11.2.0-SNAPSHOT</version>
-  </parent>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-utils</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-framework-db</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>cloud-vmware-base</artifactId>
+    <name>Apache CloudStack VMware Base</name>
+    <parent>
         <groupId>org.apache.cloudstack</groupId>
-        <artifactId>cloud-api</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cloudstack</groupId>
-      <artifactId>cloud-engine-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.cloud.com.vmware</groupId>
-      <artifactId>vmware-vim25</artifactId>
-      <version>${cs.vmware.api.version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.axis</groupId>
-      <artifactId>axis-jaxrpc</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>wsdl4j</groupId>
-      <artifactId>wsdl4j</artifactId>
-    </dependency>
-  </dependencies>
+        <artifactId>cloudstack</artifactId>
+        <version>4.12.0.0-SNAPSHOT</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-framework-db</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>cloud-engine-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.cloud.com.vmware</groupId>
+            <artifactId>vmware-vim25</artifactId>
+            <version>${cs.vmware.api.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis-jaxrpc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>wsdl4j</groupId>
+            <artifactId>wsdl4j</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/ClusterMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/ClusterMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldsManagerMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/CustomFieldsManagerMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldsManagerMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/CustomFieldsManagerMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatastoreFile.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreFile.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/DatastoreFile.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreFile.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatastoreMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/DatastoreMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DiskControllerType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DiskControllerType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/DiskControllerType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DiskControllerType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DistributedVirtualSwitchMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DistributedVirtualSwitchMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/DistributedVirtualSwitchMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DistributedVirtualSwitchMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/FeatureKeyConstants.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/FeatureKeyConstants.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/FeatureKeyConstants.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/FeatureKeyConstants.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
similarity index 99%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
index a0eee2d..4110bfc 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
+++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
@@ -97,7 +97,7 @@
             }
         } finally {
             if (s_logger.isTraceEnabled())
-                s_logger.trace("vCenter API trace - searchDatastore() done");
+                s_logger.trace("vCenter API trace - searchDatastoreSubFolders() done");
         }
 
         return null;
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostFirewallSystemMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostFirewallSystemMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostFirewallSystemMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostFirewallSystemMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostNetworkSystemMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostNetworkSystemMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostNetworkSystemMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostNetworkSystemMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostStorageSystemMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostStorageSystemMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostStorageSystemMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostStorageSystemMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostVirtualNicType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostVirtualNicType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HostVirtualNicType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostVirtualNicType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HttpNfcLeaseMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HttpNfcLeaseMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HttpNfcLeaseMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HttpNfcLeaseMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/LicenseAssignmentManagerMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/LicenseAssignmentManagerMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/LicenseAssignmentManagerMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/LicenseAssignmentManagerMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/LicenseManagerMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/LicenseManagerMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/LicenseManagerMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/LicenseManagerMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/NetworkDetails.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/NetworkDetails.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/NetworkDetails.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/NetworkDetails.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/NetworkMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/NetworkMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/NetworkMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/NetworkMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/PerfCounterInfoMapper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/PerfCounterInfoMapper.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/PerfCounterInfoMapper.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/PerfCounterInfoMapper.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/PerfManagerMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/PerfManagerMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/PerfManagerMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/PerfManagerMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/ScsiDiskControllerType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/ScsiDiskControllerType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/ScsiDiskControllerType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/ScsiDiskControllerType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/TaskMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/TaskMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/TaskMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/TaskMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VersioningContants.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VersioningContants.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VersioningContants.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VersioningContants.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualDiskManagerMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualDiskManagerMO.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualDiskManagerMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualDiskManagerMO.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualEthernetCardType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualEthernetCardType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualEthernetCardType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualEthernetCardType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
similarity index 99%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
index b700b6d..0deb2dc 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
+++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
@@ -1525,14 +1525,14 @@
 
         if (!result) {
             if (s_logger.isTraceEnabled())
-                s_logger.trace("vCenter API trace - detachIso() done(failed)");
+                s_logger.trace("vCenter API trace - attachIso() done(failed)");
             throw new Exception("Failed to attach ISO due to " + TaskMO.getTaskFailureInfo(_context, morTask));
         }
 
         _context.waitForTaskProgressDone(morTask);
 
         if (s_logger.isTraceEnabled())
-            s_logger.trace("vCenter API trace - detachIso() done(successfully)");
+            s_logger.trace("vCenter API trace - attachIso() done(successfully)");
     }
 
     public int detachIso(String isoDatastorePath) throws Exception {
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualSwitchType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualSwitchType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualSwitchType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualSwitchType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VmdkAdapterType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmdkAdapterType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VmdkAdapterType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmdkAdapterType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VmdkFileDescriptor.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmdkFileDescriptor.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VmdkFileDescriptor.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmdkFileDescriptor.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHostType.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHostType.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHostType.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHostType.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHost.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHost.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHost.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHost.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostNetworkSummary.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostNetworkSummary.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostNetworkSummary.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostNetworkSummary.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostResourceSummary.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostResourceSummary.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostResourceSummary.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VmwareHypervisorHostResourceSummary.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareClient.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareClient.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareContext.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareContext.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareContextPool.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareGuestOsMapper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareGuestOsMapper.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareGuestOsMapper.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareGuestOsMapper.java
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareHelper.java
similarity index 100%
rename from vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
rename to vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareHelper.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/mo/DatastoreMOTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/DatastoreMOTest.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/mo/DatastoreMOTest.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/DatastoreMOTest.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/TestVmwareContextFactory.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/mo/VirtualMachineMOTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMOTest.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/mo/VirtualMachineMOTest.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMOTest.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/mo/VmwareMOTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/VmwareMOTest.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/mo/VmwareMOTest.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/VmwareMOTest.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/util/VmwareContextPoolTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/util/VmwareContextPoolTest.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/util/VmwareContextPoolTest.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/util/VmwareContextPoolTest.java
diff --git a/vmware-base/test/com/cloud/hypervisor/vmware/util/VmwareContextTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/util/VmwareContextTest.java
similarity index 100%
rename from vmware-base/test/com/cloud/hypervisor/vmware/util/VmwareContextTest.java
rename to vmware-base/src/test/java/com/cloud/hypervisor/vmware/util/VmwareContextTest.java