   (let* ((ci (current-indentation))
 	 (move-to-indentation-p (<= (current-column) ci))
 	 (need (py-compute-indentation)))
-    ;; watch for outdents
+    ;; see if we need to outdent
     (if (save-excursion
-	  (back-to-indentation)
-	  (looking-at py-outdent-re))
+	  (and (progn (back-to-indentation)
+		      (looking-at py-outdent-re))
+	       (progn (backward-to-indentation 1)
+		      (not (looking-at py-no-outdent-re)))))
 	(setq need (- need py-indent-offset)))
     (if (/= ci need)
 	(save-excursion

(defconst py-outdent-re
  (concat "\\(" (mapconcat 'identity
			   '("else:"
			     "except\\s +.*:"
			     "finally:"
			     "elif\\s +.*:")
			   "\\|")
	  "\\)")
  "Regexp matching clauses to be outdented one level.")



argument is provided, that many colons are inserted non-electrically."
  (interactive "P")
  (self-insert-command (prefix-numeric-value arg))
  (save-excursion
    (let ((here (point))
	  (outdent 0)
	  (indent (py-compute-indentation)))
      (if (and (not arg)
	       (progn
		 (back-to-indentation)
		 (looking-at py-outdent-re))
	       (prog2
		   (backward-to-indentation 1)
		   (not (looking-at py-no-outdent-re))
		 (goto-char here))
	       (= indent (progn
			   (forward-line -1)
			   (py-compute-indentation)))
	       )
	  (setq outdent py-indent-offset))
      (goto-char here)
      (beginning-of-line)
      (delete-horizontal-space)
      (indent-to (- indent outdent))
      )))

