 0, it will cycle back to the maximum sensible indentation."
   (interactive "*")
   (let ((ci (current-indentation))
-        (cc (current-column))
-        (need (haml-compute-indentation)))
-    (save-excursion
-      (beginning-of-line)
-      (delete-horizontal-space)
-      (if (and (equal last-command this-command) (/= ci 0))
-          (indent-to (* (/ (- ci 1) haml-indent-offset) haml-indent-offset))
-        (indent-to need)))
-    (if (< (current-column) (current-indentation))
-        (forward-to-indentation 0))))
+        (cc (current-column)))
+    (destructuring-bind (need strict) (haml-compute-indentation)
+      (save-excursion
+        (beginning-of-line)
+        (delete-horizontal-space)
+        (if (and (not strict) (equal last-command this-command) (/= ci 0))
+            (indent-to (* (/ (- ci 1) haml-indent-offset) haml-indent-offset))
+          (indent-to need))))
+    (when (< (current-column) (current-indentation))
+      (forward-to-indentation 0))))
 
 (defun haml-reindent-region-by (n)
   "Add N spaces to the beginning of each line in the region.

      (return-from haml-indent-p
        (if (eq (char-before) ?,) (cdr (assq 'hash-indent attr-props))
          (beginning-of-line)
          (+ (cdr (assq 'indent attr-props)) haml-indent-offset)))))
  (loop for opener in haml-block-openers
        if (looking-at opener) return t
        finally return nil))

          (next-line-column
           (if (and (equal last-command this-command) (/= (current-indentation) 0))
               (* (/ (- (current-indentation) 1) haml-indent-offset) haml-indent-offset)
             (car (haml-compute-indentation)))))
      (while (< (point) end)
        (setq this-line-column next-line-column
              current-column (current-indentation))
