anchor.diff:                  packageBlob.Properties.Length <> FileInfo(packagePath).Length
   
               if (not (packageBlob.Exists()) || blobSizesDoNotMatch()) then
  -                logger.Logf LogLevel.Info "uploading package %s" packagePath
  -                packageBlob.UploadFromFile(packagePath, FileMode.Open)
  +                logger.Logf LogLevel.Info "uploading package %A" packagePath
  +                do! packageBlob.UploadFromFileAsync(packagePath, FileMode.Open)
           
               logger.Logf LogLevel.Info "scheduling cluster creation:\n  cluster %s\n  package uri %s\n  config %s" clusterName (packageBlob.Uri.ToString()) config
  -            let! (createOp : AzureOperationResponse) =
  -                client.Compute.Deployments.BeginCreatingAsync(
  -                    clusterName,
  -                    DeploymentSlot.Production,
  -                    DeploymentCreateParameters(
  -                        Label = clusterLabel,
  -                        Name = clusterName,
  -                        PackageUri = packageBlob.Uri,
  -                        Configuration = config,
  -                        StartDeployment = Nullable true,
  -                        TreatWarningsAsError = Nullable true))
  -
  +            return DeploymentCreateParameters(
  +                Label = clusterLabel,
  +                Name = clusterName,
  +                PackageUri = packageBlob.Uri,
  +                Configuration = config,
  +                StartDeployment = Nullable true,
  +                TreatWarningsAsError = Nullable true)
  +          }
  +
  +        let beginDeploy (slot : DeploymentSlot) (deployParams : DeploymentCreateParameters) (client : SubscriptionClient) = async {
  +            let! (createOp : AzureOperationResponse) = client.Compute.Deployments.BeginCreatingAsync(deployParams.Name, slot, deployParams)
               if createOp.StatusCode <> Net.HttpStatusCode.Accepted then 
                   return failwith "error: HTTP request for creation operation was not accepted"
  -          }
  -
  -        let deleteMBraceCluster (logger : ISystemLogger) clusterName (client:SubscriptionClient) = async {
  +        }
  +
  +        let deploy (slot : DeploymentSlot) (deployParams : DeploymentCreateParameters) (client : SubscriptionClient) = async {
  +            let! (createOp : OperationStatusResponse) = client.Compute.Deployments.CreateAsync(deployParams.Name, slot, deployParams)
  +            if createOp.StatusCode <> Net.HttpStatusCode.Accepted then 
  +                return failwith "error: HTTP request for creation operation was not accepted"
  +        }            
  +
  +        let deleteMBraceCluster (logger : ISystemLogger) (clusterName:string) (client:SubscriptionClient) = async {
               let service = client.Compute.HostedServices.GetDetailed clusterName
               if service.Properties.ExtendedProperties |> isMBraceAsset then
                   logger.Logf LogLevel.Info "deleting cluster %s" clusterName
  
positive.code: 
      let urlForPackage mbraceNugetVersionTag vmSize = 
          sprintf "https://github.com/mbraceproject/MBrace.Azure/releases/download/%s/MBrace.Azure.CloudService-%s.cspkg" mbraceNugetVersionTag vmSize
          //sprintf "https://github.com/mbraceproject/bits/raw/master/%s/MBrace.Azure.CloudService-%s.cspkg" mbraceVersion vmSize
  
      let resourcePrefix = "mbrace"
      let generateResourceName() = resourcePrefix + Guid.NewGuid().ToString("N").[..7]
      let defaultExtendedProperties = dict [ "IsMBraceAsset", "true"]
      let isMBraceAsset (extendedProperties:IDictionary<string, string>) = extendedProperties.ContainsKey "IsMBraceAsset"
  
  
negative.code:       </Role>
      </ServiceConfiguration>""" serviceName instances storageConnection serviceBusConnection
  
          let prepareMBraceServiceDeployment (logger : ISystemLogger) (clusterName : string) (clusterLabel : string) 
                                              (region : Region) (packagePath : string) (config : string) 
                                              (storageAccountName : string) (storageConnectionString : string) 
                                              (serviceBusNamespace : string) (serviceBusConnectionString : string) (client:SubscriptionClient) = async {
  
              do! validateClusterName client clusterName 
  
              let extendedProperties =
  