diff --git a/modules/wps/commerce_paypal_wps.module b/modules/wps/commerce_paypal_wps.module
index 4bc9195..58b5985 100644
--- a/modules/wps/commerce_paypal_wps.module
+++ b/modules/wps/commerce_paypal_wps.module
@@ -331,9 +331,34 @@ function commerce_paypal_wps_server_url($server) {
 
 /**
  * Returns an array of all possible language codes.
+ *
+ * PayPal language codes are actually 2-character IS0-3166-1 codes. By sending
+ * a country code, PayPal will display it's checkout pages in a default language
+ * for that country with a dropdown with options for countries with multiple
+ * languages.
+ *
+ * @see https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_country_codes
+ * @see https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables#id08A6HI0709B
  */
 function commerce_paypal_wps_languages() {
-  return drupal_map_assoc(array('AU', 'DE', 'FR', 'IT', 'GB', 'ES', 'US'));
+  $countries = array('AX', 'AL', 'DZ', 'AS', 'AD', 'AI', 'AQ', 'AG', 'AR',
+    'AM', 'AW', 'AU', 'AT', 'BS', 'BH', 'BB', 'BE', 'BZ', 'BJ', 'BM', 'BT',
+    'BW', 'BV', 'BR', 'IO', 'BN', 'BG', 'BF', 'CA', 'CV', 'KY', 'CF', 'CL',
+    'CN', 'CX', 'CC', 'CO', 'CK', 'CR', 'CY', 'CZ', 'DK', 'DJ', 'DM', 'DO',
+    'EG', 'SV', 'EE', 'FK', 'FO', 'FJ', 'FI', 'FR', 'GF', 'PF', 'TF', 'GM',
+    'GE', 'DE', 'GH', 'GI', 'GR', 'GL', 'GD', 'GP', 'GU', 'GG', 'HM', 'VA',
+    'HN', 'HK', 'HU', 'IS', 'IN', 'ID', 'IE', 'IM', 'IL', 'IT', 'JM', 'JP',
+    'JE', 'JO', 'KZ', 'KI', 'KR', 'KW', 'KG', 'LV', 'LS', 'LI', 'LT', 'LU',
+    'MO', 'MW', 'MY', 'MT', 'MH', 'MQ', 'MR', 'MU', 'YT', 'MX', 'FM', 'MD',
+    'MC', 'MN', 'MS', 'MA', 'MZ', 'NA', 'NR', 'NP', 'NL', 'AN', 'NC', 'NZ',
+    'NI', 'NE', 'NU', 'NF', 'MP', 'NO', 'OM', 'PW', 'PA', 'PY', 'PE', 'PH',
+    'PN', 'PL', 'PT', 'PR', 'QA', 'RE', 'RO', 'SH', 'KN', 'LC', 'PM', 'VC',
+    'WS', 'SM', 'ST', 'SA', 'SN', 'SC', 'SG', 'SK', 'SI', 'SB', 'ZA', 'GS',
+    'ES', 'SR', 'SJ', 'SZ', 'SE', 'CH', 'TW', 'TZ', 'TH', 'TK', 'TO', 'TT',
+    'TN', 'TR', 'TC', 'TV', 'UA', 'AE', 'GB', 'US', 'UM', 'UY', 'VN', 'VG',
+    'VI', 'WF', 'ZM',
+  );
+  return array_intersect_key(country_get_list(), array_combine($countries, $countries));
 }
 
 /**
