       x: e.clientX - @dragStartPos.x
       y: e.clientY - @dragStartPos.y
 
-    distance = Math.sqrt(Math.pow(delta.x, 2) + Math.pow(delta.y, 2))
-    constrainedDistance = distance * Math.pow(Math.E, -0.002 * distance)
+    distance = Math.sqrt(delta.x ** 2 + delta.y ** 2)
+    dampenedDistance = 250 * (1 - Math.E ** (-0.002 * distance))
 
     angle = Math.atan2 delta.y, delta.x
+
+    if @grabDistance > 10
+      centerDelta =
+        x: e.clientX - @boxStartPos.x
+        y: e.clientY - @boxStartPos.y
+
+      centerDistance = Math.sqrt centerDelta.x ** 2 + centerDelta.y ** 2
+      dotProduct = centerDelta.x * @grabOffset.x + centerDelta.y * @grabOffset.y
+      determinant = centerDelta.x * @grabOffset.y - centerDelta.y * @grabOffset.x
+
+      @dragAngle = -Math.atan2 determinant, dotProduct
+    else
+      @dragAngle = 0
+
     @dragOffset =
-      x: Math.cos(angle) * constrainedDistance
-      y: Math.sin(angle) * constrainedDistance
+      x: Math.cos(angle) * dampenedDistance
+      y: Math.sin(angle) * dampenedDistance
 
-    @$box.css "transform", "translate(#{@dragOffset.x}px, #{@dragOffset.y}px"
+    @$box.css "transform", """
+      translate(#{@dragOffset.x}px, #{@dragOffset.y}px)
+      rotate(#{@dragAngle}rad)
+    """
 
 module.exports = App

    @isDragging = false
    if @dragOffset
      bounce = new Bounce()
      bounce.translate
        stiffness: 1.5
        from: @dragOffset
        to: { x: 0, y: 0 }

      @playAnimation bounceObject: bounce, duration: 600
      _.defer => @$box.css "transform", ""

    $(document).off "mousemove.boxdrag"
    $("body").removeClass "dragging"

  boxDrag: (e) =>

      x: e.clientX
      y: e.clientY

    @boxStartPos =
      x: @$box.offset().left + @$box.width() / 2
      y: @$box.offset().top + @$box.height() / 2

    @grabOffset =
      x: e.offsetX - @$box.width() / 2
      y: e.offsetY - @$box.height() / 2

    @grabDistance = Math.sqrt \
      @grabOffset.x ** 2 + @grabOffset.y ** 2

    @$box.css "transform-origin", "#{e.offsetX}px #{e.offsetY}px"

    @dragOffset = null

    $(document).on
