 
     @regionTextView.updatePartial "Current region is <strong>#{region}</strong>"
 
-  updateUsageText: (val, usage, limits)->
+
+
+  ###*
+   *
+   * @param {Number} sliderValue
+  ###
+  updateCreateVMBtnEnabled: (sliderValue) ->
+
+    { usage, limits } = @getOptions()
+
+    # The user can't create anymore VMs
+    return @createVMButton.disable()  if usage.total >= limits.total
+
+    newUsage = usage.storage + sliderValue
+
+    # The user is trying to create a VM bigger than they have resources
+    # for
+    return @createVMButton.disable()  if newUsage > limits.storage
+
+    snapshotId = @snapshotsSelector.getValue()
+    if snapshotId
+      snapshot = @snapshots[snapshotId]
+      # The user is trying to create a VM from a snapshot, bigger
+      # than the sliderValue's storage
+      return @createVMButton.disable()  if sliderValue < snapshot.storageSize
+
+    # Finally, no checks have failed. Show the create button.
+    @createVMButton.enable()
+
+
+  ###*
+   * Update the snapshot usage text.
+   *
+   * @param {Number} sliderValue
+  ###
+  updateSnapshotUsageText: (sliderValue) ->
+
+    snapshotId = @snapshotsSelector.getValue()
+
+    unless snapshotId
+      return @snapshotUsageTextView.hide()
+
+    snapshot = @snapshots[snapshotId]
+
+    if sliderValue < snapshot.storageSize
+      @snapshotUsageTextView.show()
+      @snapshotUsageTextView.updatePartial """
+          Snapshot '#{snapshot.label}' requires <strong>
+          #{snapshot.storageSize}GB</strong> of storage
+      """
+    else
+      @snapshotUsageTextView.hide()
+
+
+  updateStorageUsageText: (val, usage, limits)->
 
     newUsage = usage.storage + val
 
     if newUsage > limits.storage
-      @usageTextView.setClass 'warn'
-      @createVMButton.disable()
-    else
-      @usageTextView.unsetClass 'warn'
-      @createVMButton.enable()  unless usage.total >= limits.total
+    then @usageTextView.setClass 'warn'
+    else @usageTextView.unsetClass 'warn'
 
     @usageTextView.updatePartial """
       You will be using <strong>#{newUsage}GB/#{limits.storage}GB</strong> storage

      return  if not snapshots? or snapshots.length is 0
      formatted = []
      for snapshot in snapshots
        formatted.push
          title: "#{snapshot.label} (#{snapshot.storageSize}GB)"
          value: snapshot.snapshotId

      @snapshotsSelector.setSelectOptions formatted
      # Set the selected option to the Modal's option.snapshotId,
      # defaulting to the None item (null value)
      @snapshotsSelector.setValue snapshotId ? null
      @snapshotsContainer.show()


  updateRegionText: ->


            label    : 'upgradeAccountOverlay'
            origin   : 'paidModal'

    @populateSnapshotsSelector()

    @updateStorageUsageText 5, usage, limits
    @updateSnapshotUsageText 5
    @updateCreateVMBtnEnabled 5
    @storageSlider.on "ValueIsChanging", (val)=>
      @updateStorageUsageText val, usage, limits
      @updateSnapshotUsageText val
      @updateCreateVMBtnEnabled val

    @updateRegionText()
    @regionSelector.on "change", @bound 'updateRegionText'

    @setPositions()

