       @croppedImageCoords(previewUrl, size, @__parseModifiers modifiers)
         .then (coords) =>
           {width: w, height: h} = coords
+          prefered = @__options.preferedSize
 
           opts =
             crop: coords

          changed = w isnt @__originalSize[0] or h isnt @__originalSize[1]
          if changed
            opts.modifiers = "-/crop/#{w}x#{h}/#{coords.left},#{coords.top}/"
            if @__options.preferedSize
              [pw, ph] = @__options.preferedSize
            downscale = @__options.downscale and (w > pw or h > ph)
            upscale = @__options.upscale and (w < pw or h < ph)

            if downscale or upscale
              resized = @__options.preferedSize
            else
              resized = utils.fitSizeInCdnLimit [w, h]

            if resized[0] isnt w or resized[1] isnt h
              [opts.crop.sw, opts.crop.sh] = resized
              opts.modifiers += "-/resize/#{resized.join 'x'}/"
          opts

    croppedImageCoords: (previewUrl, size, coords) ->

    prepareOptions = (options) ->
      fited = utils.fitSizeInCdnLimit options.preferedSize
      if fited[0] isnt options.preferedSize[0]
        utils.warnOnce """
          Specified preferred crop size is bigger than our CDN allows.
          Resulting image size will be #{fited.join 'x'}.
        """
        options.preferedSize = fited

