diff -r f6d4e1dadc86 ada-mode.el
--- a/ada-mode.el	Sun Aug 02 21:05:34 2015 +0000
+++ b/ada-mode.el	Tue Aug 04 14:19:12 2015 +0100
@@ -1086,10 +1086,10 @@
 	       (point))))
     (member (downcase word) ada-keywords)))
 
-(defun ada-case-keyword (arg)
+(defun ada-case-keyword (beg end)
   (cl-ecase ada-case-keyword
-    (lower-case (downcase-word arg))
-    (upper-case (upcase-word arg))
+    (lower-case (downcase-region beg end))
+    (upper-case (upcase-region beg end))
     ))
 
 (defun ada-case-identifier (start end force-case-strict)
@@ -1165,7 +1165,19 @@
 	  (if (< (point) end)
 	      (setq start (point))
 	    (setq done t))
-	)))))
+          )))))
+
+(defun ada-case-adjust-keyword ()
+  "Adjust the case of the previous word as a keyword.
+'word' here is allowed to be underscore-separated (GPR external_as_list)."
+  (save-excursion
+    (let ((end   (point-marker))
+	  (start (progn (skip-syntax-backward "w_") (point)))
+	  match
+	  next
+	  (done nil))
+      (ada-case-keyword start end)
+    )))
 
 (defun ada-case-adjust (&optional typed-char in-comment)
   "Adjust the case of the word before point.
@@ -1211,7 +1223,7 @@
 	   (not in-comment)
 	   (not (eq typed-char ?_))
 	   (ada-after-keyword-p))
-	  (ada-case-keyword -1))
+	  (ada-case-adjust-keyword))
 
 	 (t (ada-case-adjust-identifier in-comment))
 	 ))
