--- azure-servicemanagement-legacy/azure/servicemanagement/__init__.py
+++ azure-servicemanagement-legacy/azure/servicemanagement/__init__.py
@@ -27,6 +27,7 @@ from .publishsettings import get_certificate_from_publish_settings
 from .servicemanagementclient import parse_response_for_async_op
 
 from .servicemanagementservice import ServiceManagementService
+from .computemanagementservice import ComputeManagementService
 from .servicebusmanagementservice import ServiceBusManagementService
 from .websitemanagementservice import WebsiteManagementService
 from .sqldatabasemanagementservice import SqlDatabaseManagementService
--- azure-servicemanagement-legacy/azure/servicemanagement/_serialization.py
+++ azure-servicemanagement-legacy/azure/servicemanagement/_serialization.py
@@ -1025,6 +1025,24 @@ class _XmlSerializer(object):
         return _XmlSerializer.doc_from_xml('CaptureRoleOperation', xml)
 
     @staticmethod
+    def replicate_image_to_xml(regions, offer, sku, version):
+        xml = '<TargetLocations>'
+        for region in regions:
+            xml += _XmlSerializer.data_to_xml([('Region', region)])
+        xml += '</TargetLocations>'
+        xml += '<ComputeImageAttributes>'
+        xml += _XmlSerializer.data_to_xml(
+            [
+                ('Offer', offer),
+                ('Sku', sku),
+                ('Version', version)
+            ]
+        )
+        xml += '</ComputeImageAttributes>'
+
+        return _XmlSerializer.doc_from_xml('ReplicationInput', xml)
+
+    @staticmethod
     def virtual_machine_deployment_to_xml(deployment_name, deployment_slot,
                                           label, role_name,
                                           system_configuration_set,
--- /dev/null
+++ azure-servicemanagement-legacy/azure/servicemanagement/computemanagementservice.py
@@ -0,0 +1,177 @@
+#-------------------------------------------------------------------------
+# Copyright (c) Microsoft.  All rights reserved.
+#
+# 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.
+#--------------------------------------------------------------------------
+from .constants import (
+    DEFAULT_HTTP_TIMEOUT,
+    MANAGEMENT_HOST,
+)
+from .models import (
+    AffinityGroups,
+    AffinityGroup,
+    AvailabilityResponse,
+    Certificate,
+    Certificates,
+    DataVirtualHardDisk,
+    Deployment,
+    Disk,
+    Disks,
+    Locations,
+    HostedService,
+    HostedServices,
+    Images,
+    OperatingSystems,
+    OperatingSystemFamilies,
+    OSImage,
+    PersistentVMRole,
+    ResourceExtensions,
+    ReservedIP,
+    ReservedIPs,
+    RoleSize,
+    RoleSizes,
+    StorageService,
+    StorageServices,
+    Subscription,
+    Subscriptions,
+    SubscriptionCertificate,
+    SubscriptionCertificates,
+    SubscriptionOperationCollection,
+    VirtualNetworkSites,
+    VMImages,
+)
+from ._common_conversion import (
+    _str,
+)
+from ._common_error import (
+    _validate_not_none,
+)
+from .servicemanagementclient import (
+    _ServiceManagementClient,
+)
+from ._serialization import (
+    _XmlSerializer,
+)
+
+class ComputeManagementService(_ServiceManagementClient):
+
+    def __init__(self, subscription_id=None, cert_file=None,
+                 host=MANAGEMENT_HOST, request_session=None,
+                 timeout=DEFAULT_HTTP_TIMEOUT):
+        '''
+        Initializes the management service.
+
+        subscription_id:
+            Subscription to manage.
+        cert_file:
+            Path to .pem certificate file (httplib), or location of the
+            certificate in your Personal certificate store (winhttp) in the
+            CURRENT_USER\my\CertificateName format.
+            If a request_session is specified, then this is unused.
+        host:
+            Live ServiceClient URL. Defaults to Azure public cloud.
+        request_session:
+            Session object to use for http requests. If this is specified, it
+            replaces the default use of httplib or winhttp. Also, the cert_file
+            parameter is unused when a session is passed in.
+            The session object handles authentication, and as such can support
+            multiple types of authentication: .pem certificate, oauth.
+            For example, you can pass in a Session instance from the requests
+            library. To use .pem certificate authentication with requests
+            library, set the path to the .pem file on the session.cert
+            attribute.
+        timeout:
+            Optional. Timeout for the http request, in seconds.
+        '''
+        super(ComputeManagementService, self).__init__(
+            subscription_id, cert_file, host, request_session, timeout)
+
+    def replicate(self, vm_image_name, regions, offer, sku, version):
+        '''
+        Replicate a VM image to multiple target locations. This operation
+        is only for publishers. You have to be registered as image publisher
+        with Microsoft Azure to be able to call this.
+
+        vm_image_name:
+            Specifies the name of the VM Image that is to be used for
+            replication
+        regions:
+            Specified a list of regions to replicate the image to
+            Note: The regions in the request body are not additive. If a VM
+            Image has already been replicated to Regions A, B, and C, and
+            a request is made to replicate to Regions A and D, the VM
+            Image will remain in Region A, will be replicated in Region D,
+            and will be unreplicated from Regions B and C
+        offer:
+            Specifies the publisher defined name of the offer. The allowed
+            characters are uppercase or lowercase letters, digit,
+            hypen(-), period (.).The maximum allowed length is 64 characters.
+        sku:
+            Specifies the publisher defined name of the Sku. The allowed
+            characters are uppercase or lowercase letters, digit,
+            hypen(-), period (.). The maximum allowed length is 64 characters.
+        version:
+            Specifies the publisher defined version of the image.
+            The allowed characters are digit and period.
+            Format: <MajorVersion>.<MinorVersion>.<Patch>
+            Example: '1.0.0' or '1.1.0' The 3 version number to
+            follow standard of most of the RPs. See http://semver.org
+        '''
+        _validate_not_none('vm_image_name', vm_image_name)
+        _validate_not_none('regions', regions)
+        _validate_not_none('offer', offer)
+        _validate_not_none('sku', sku)
+        _validate_not_none('version', version)
+
+        return self._perform_put(
+            self._get_replication_path_using_vm_image_name(vm_image_name),
+            _XmlSerializer.replicate_image_to_xml(
+                regions,
+                offer,
+                sku,
+                version
+            ),
+            async=True,
+            x_ms_version='2015-04-01'
+        )
+
+    def unreplicate(self, vm_image_name):
+        '''
+        Unreplicate a VM image from all regions This operation
+        is only for publishers. You have to be registered as image publisher
+        with Microsoft Azure to be able to call this
+
+        vm_image_name:
+            Specifies the name of the VM Image that is to be used for
+            unreplication. The VM Image Name should be the user VM Image,
+            not the published name of the VM Image.
+
+        '''
+        _validate_not_none('vm_image_name', vm_image_name)
+
+        return self._perform_put(
+            self._get_unreplication_path_using_vm_image_name(vm_image_name),
+            None,
+            async=True,
+            x_ms_version='2015-04-01'
+        )
+
+    #--Helper functions --------------------------------------------------
+    def _get_replication_path_using_vm_image_name(self, vm_image_name):
+        return self._get_path(
+            'services/images/' + _str(vm_image_name) + '/replicate', None
+        )
+
+    def _get_unreplication_path_using_vm_image_name(self, vm_image_name):
+        return self._get_path(
+            'services/images/' + _str(vm_image_name) + '/unreplicate', None
+        )
