              (save-excursion
                (shm/goto-parent)
                (forward-sexp)
-               (1+ (current-column)))))
+               (1+ (current-column))))
+            (previous
+             (when (looking-back " ")
+               (save-excursion
+                 (search-backward-regexp "[ ]+"
+                                         (line-beginning-position)
+                                         t
+                                         1)
+                 (let ((prev (shm-current-workable-node)))
+                   (when (and (= (car (shm-node-parent prev))
+                                 (car parent-pair))
+                              (/= (shm-node-start parent)
+                                  (shm-node-start (cdr prev))))
+                     prev))))))
         (cond
-
+         (previous
+          (newline)
+          (indent-to (shm-node-start-column (cdr previous))))
          ((and (or (= column (current-column))
                    (= column (+ (shm-node-start-column parent)
                                 (shm-indent-spaces))))

       (lambda ()
         (insert newline-string)))))
   ;; Otherwise just do the indent.
   (t (shm-newline-indent nil))))

(defun shm/goto-where ()
  "Either make or go to a where clause of the current right-hand-side."

         ;; instead.
         (not (looking-at "$"))
         (looking-back " "))
    (shm/reparse)
    ;; If there's some stuff trailing us, then drag that with us.
    (let ((newline-string (shm-kill-node 'buffer-substring-no-properties
                                         (cdr (shm-node-ancestor-at-point (shm-current-node-pair)
