diff -urp ../geonamesOLD/geonames_config.inc ./geonames_config.inc
--- ../geonamesOLD/geonames_config.inc	2009-09-08 16:39:59.000000000 +1000
+++ ./geonames_config.inc	2009-09-08 16:39:14.000000000 +1000
@@ -177,6 +177,22 @@ function geonames_config($a = NULL, $b =
     'required_parameters_type' => 'all',
     'columns' => array('countrycode', 'countryname', 'admincode1', 'adminname1'),
   );
+  $config['get'] = array(
+    'service_name'        => 'get',
+    'service_full_name'   => 'Get',
+    'description'         => 'Retrieve GeoNames record by geonameid',
+    'service_path'        => 'get',
+    'credit_cost'         => 1,
+    'result_cache_prefix' => 'gres:',
+    'data_cache_prefix'   => 'gdat:',
+    'allowed_parameters'  => array(
+      'geonameid' => 'geonameId',
+      'lang'      => 'lang',
+    ),
+    'columns' => array(
+      'geoname',
+    ),
+  );
   $config['gtopo30'] = array(
     'service_name'             => 'gtopo30',
     'service_full_name'        => 'Elevation - GTOPO30',
Only in .: geonames_get.patch
diff -urp ../geonamesOLD/geonames.module ./geonames.module
--- ../geonamesOLD/geonames.module	2009-09-07 23:42:12.000000000 +1000
+++ ./geonames.module	2009-09-08 16:39:31.000000000 +1000
@@ -428,7 +428,7 @@ function geonames_query($service, $query
 
   if (!is_object($result) && $data) {
     // parse the XML data we have received, and add some more properties to the object
-    $result = geonames_parse_xml($data, $fields);
+    $result = ($service == 'get') ? geonames_parse_get_xml($data) : geonames_parse_xml($data, $fields);
     $result->service            = $service;
     $result->request['url']     = geonames_service_url($service) . $querystring;
     $result->request['bytes']   = drupal_strlen($data);
@@ -697,6 +697,32 @@ function geonames_parse_xml($data, $colu
 }
 
 /**
+ * Parser for the Get service
+ */
+function geonames_parse_get_xml($data) {
+  $xml = new SimpleXMLElement($data);
+  foreach ($xml->children() as $key => $entry) {
+    $k = (string) strtolower($key);
+    $v = (string) $entry;
+    if ($key != 'status') {
+      $fields[$k] = $v;
+    }
+    else {
+      $result->status['message'] = (string) $xml->status['message'];
+      $result->status['value']   = (string) $xml->status['value'];
+    }
+  }
+  if (!empty($fields)) {
+    $result->results[] = $fields;
+    $result->total_results_count = 1;
+  }   
+  else {
+    $result->total_results_count = 0;
+  }
+  return $result;       
+}
+
+/**
  * Commercial Service: Increase the Credits Counter ;)
  */
 function geonames_credits_pay($service) {
