   (unless ros-services
     (cache-ros-service-locations))
   (let* ((ros-services-list (map 'list 'identity ros-services))
+         (unique-pair (ros-uniquify-for-completion default ros-services-list ros-service-packages))
+         (uniquified-default (car unique-pair))
+         (uniquified-services-list (cadr unique-pair))
          (result (funcall ros-completion-function
                           (concatenate 'string prompt
-                                       (if (member default ros-services-list)
-                                           (format " (default %s): " default)
+                                       (if uniquified-default
+                                           (format " (default %s): " uniquified-default)
                                          ": "))
-                          (map 'list (lambda (m pkg)
-                                       (if (> (count m ros-services-list :test 'equal) 1)
-                                           (format "%s (%s)" m pkg)
-                                         m))
-                               ros-services-list ros-service-packages)
-                          nil nil nil nil (when (member default ros-services-list)
-                                            default)))
+                          uniquified-services-list
+                          nil nil nil nil
+                          uniquified-default))
          (ws-pos (position ?\s result))
          (service (substring result 0 ws-pos))
          (package (when ws-pos

                                         default-pkg))
                   1)))))

(defun ros-completing-read-message (prompt &optional default)
  (unless ros-messages
    (cache-ros-message-locations))
  (let* ((ros-messages-list (map 'list 'identity ros-messages))
         (result (funcall ros-completion-function
                          (concatenate 'string prompt
                                       (if (member default ros-messages-list)
                                           (format " (default %s): " default)
                                         ": "))
                          (map 'list (lambda (m pkg)
                                       (if (> (count m ros-messages-list :test 'equal) 1)
                                           (format "%s (%s)" m pkg)
                                         m))
                               ros-messages-list ros-message-packages)
                          nil nil nil nil (when (member default ros-messages-list)
                                            default)))
         (ws-pos (position ?\s result))
         (message (substring result 0 ws-pos))
         (package (when ws-pos

         (default (if (atom defaults)
                      defaults
                      (loop for x in defaults when (member x ros-actions-list) return x)))
         (unique-pair (ros-uniquify-for-completion default ros-actions-list ros-action-packages))
         (uniquified-default (car unique-pair))
         (uniquified-action-list (cadr unique-pair))
         (result (funcall ros-completion-function
                          (concatenate 'string prompt
                                       (if uniquified-default
                                           (format " (default %s): " uniquified-default)
                                         ": "))
                          uniquified-action-list
                          nil nil nil nil
                          uniquified-default))
         (ws-pos (position ?\s result))
         (action (substring result 0 ws-pos))
         (package (when ws-pos
