        (when (/= (skip-chars-backward "[:word:]_") 0)
          (not (looking-at go-mode-non-terminating-keywords-regexp)))))))
 
+(defun go-mode-whitespace-p (char)
+  "Is char whitespace in the syntax table for go."
+  (eq 32 (char-syntax char)))
+
 (defun go-mode-backward-skip-comments ()
   "Skip backward over comments and whitespace."
-  (when (not (bobp))
-    (backward-char))
-  (while (and (not (bobp))
-              (or (eq 32 (char-syntax (char-after (point))))
-                  (go-mode-cs)))
-    (skip-syntax-backward "-")
-    (when (and (not (bobp)) (eq 32 (char-syntax (char-after (point)))))
-      (backward-char))
-    (when (go-mode-cs)
-      (let ((pos (previous-single-property-change (point) 'go-mode-cs)))
-        (if pos (goto-char pos) (goto-char (point-min))))))
-  (when (and (not (go-mode-cs)) (eq 32 (char-syntax (char-after (1+ (point))))))
-    (forward-char 1)))
+  ;; only proceed if point is in a comment or white space
+  (if (or (go-mode-in-comment)
+	  (go-mode-whitespace-p (char-after (point))))
+      (let ((loop-guard t))
+	(while (and
+		loop-guard
+		(not (bobp)))
+
+	  (cond ((go-mode-whitespace-p (char-after (point)))
+		 ;; moves point back over any whitespace
+		 (re-search-backward "[^[:space:]]"))
+
+		((go-mode-in-comment)
+		 ;; move point to char preceeding current comment
+		 (goto-char (1- (car (go-mode-in-comment)))))
+		
+		;; not in a comment or whitespace? we must be done.
+		(t (setq loop-guard nil)
+		   (forward-char 1)))))))
 
 (defun go-mode-indentation ()
   "Compute the ideal indentation level of the current line.

	(remove-text-properties
	 b (min go-mode-mark-cs-end (point-max)) '(go-mode-cs nil))
	(setq go-mode-mark-cs-end b)))
    (when (< b go-mode-mark-nesting-end)
      (remove-text-properties b (min go-mode-mark-nesting-end (point-max)) '(go-mode-nesting nil))
      (setq go-mode-mark-nesting-end b))))

          (when (looking-at "\\<case\\>\\|\\<default\\>\\|\\w+\\s *:\\(\\S.\\|$\\)")
            (decf indent tab-width))

	  (when (looking-at "\\w+\\s *:.+,\\s *$")
	    (incf indent tab-width))

          ;; Continuation lines are indented 1 level
          (beginning-of-line)		; back up to end of previous line
	  (backward-char)
          (go-mode-backward-skip-comments) ; back up past any comments
          (when (case (char-before)
                  ((nil ?\{ ?:)
                   ;; At the beginning of a block or the statement
