diff -uprN localsolr/localsolr.patch localsolr/localsolr.patch
--- localsolr/localsolr.patch	2009-04-16 16:55:45.000000000 +0200
+++ localsolr/localsolr.patch	2010-07-21 17:54:42.727557400 +0200
@@ -7,8 +7,8 @@ index 1d087d1..3018ac4 100644
     <copyField source="title" dest="spell"/>
     <copyField source="body" dest="spell"/>
 +   <!-- local lucene field types -->
-+   <field name="lat" type="sdouble" indexed="true" stored="true"/><!-- must match the latField in solrconfig.xml -->
-+   <field name="lng" type="sdouble" indexed="true" stored="true"/><!-- must match the lngField in solrconfig.xml -->
++   <field name="lat" type="sdouble" indexed="true" stored="true" multiValued="true"/><!-- must match the latField in solrconfig.xml -->
++   <field name="lng" type="sdouble" indexed="true" stored="true" multiValued="true"/><!-- must match the lngField in solrconfig.xml -->
 +   <field name="geo_distance" type="sdouble"/> <!-- Optional but used for distributed searching -->
 +   <dynamicField name="_local*" type="sdouble" indexed="true" stored="true"/><!-- used internally by localsolr -->
 +    
diff -uprN localsolr/location_solr.module localsolr/location_solr.module
--- localsolr/location_solr.module	2009-04-16 16:55:45.000000000 +0200
+++ localsolr/location_solr.module	2010-07-22 10:01:07.000000000 +0200
@@ -5,18 +5,107 @@
  * Impelementation of hook_apachesolr_update_index()
  * adds the location fields to the solr index.
  */
-function location_solr_apachesolr_update_index(&$doc, $node) {
-  if (!empty($node->location['lid'])) {
-    $doc->sm_name = $node->location['name'];
-    $doc->sm_street = $node->location['street'];
-    $doc->sm_city = $node->location['city'];
-    $doc->sm_province = $node->location['province'];
-    $doc->sm_postal = $node->location['postal'];
-    $doc->sm_country = $node->location['country'];
-    $doc->lat = $node->location['latitude'];
-    $doc->lng = $node->location['longitude'];
-    $doc->province_name = $node->location['province_name'];
-    $doc->country_name = $node->location['country_name'];
+function location_solr_apachesolr_update_index(&$doc, $node) { 
+  if (!empty($node->location['lid'])) {    
+	_location_solr_add_to_doc($doc,$node->location);
+  } else if(module_exists('location_cck')===TRUE){
+	$aFields = _location_solr_get_location_cck_fields();
+	if(count($aFields)){
+		foreach($aFields as $sFieldName){
+			if(isset($node->$sFieldName)===TRUE){	
+				foreach($node->$sFieldName as $aField){
+					_location_solr_add_to_doc(&$doc,$aField,TRUE);
+				}
+			}
+		}
+	}
   }
 }
 
+
+function _location_solr_add_to_doc(&$doc, $aToAdd, $bMultivalue=FALSE){
+	if(empty($aToAdd['name'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('sm_name', $aToAdd['name']);
+		} else {
+			$doc->sm_name = $aToAdd['name'];
+		}
+	}
+	if(empty($aToAdd['street'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('sm_street', $aToAdd['street']);
+		} else {
+			$doc->sm_street = $aToAdd['street'];
+		}
+	}
+	if(empty($aToAdd['city'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('sm_city', $aToAdd['city']);
+		} else {
+			$doc->sm_city = $aToAdd['city'];
+		}
+	}
+	if(empty($aToAdd['province'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('sm_province', $aToAdd['province']);
+		} else {
+			$doc->sm_province = $aToAdd['province'];
+		}
+	}
+	if(empty($aToAdd['postal'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('sm_postal', $aToAdd['postal']);
+		} else {
+			$doc->sm_postal = $aToAdd['postal'];
+		}
+	}
+	if(empty($aToAdd['country'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('sm_country', $aToAdd['country']);
+		} else {
+			$doc->sm_country = $aToAdd['country'];
+		}
+	}
+	if(empty($aToAdd['latitude'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('lat', $aToAdd['latitude']);
+		} else {
+			$doc->lat = $aToAdd['latitude'];
+		}
+	}
+	if(empty($aToAdd['longitude'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('lng', $aToAdd['longitude']);
+		} else {
+			$doc->lng = $aToAdd['longitude'];
+		}
+	}
+	if(empty($aToAdd['province_name'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('province_name', $aToAdd['province_name']);
+		} else {
+			$doc->province_name = $aToAdd['province_name'];
+		}
+	}
+	if(empty($aToAdd['country_name'])===FALSE){
+		if($bMultivalue===TRUE){
+			$doc->addField('country_name', $aToAdd['country_name']);
+		} else {
+			$doc->country_name = $aToAdd['country_name'];
+		}
+	}
+}
+
+function _location_solr_get_location_cck_fields(){
+	static $aFields;
+	if(count($aFields)){
+		return $aFields;
+	}
+	$sSql = "SELECT field_name FROM {content_node_field} WHERE type='location'";
+	$aResult = db_query($sSql);
+	$aFields = array();
+	while($oRow = db_fetch_object($aResult)){
+		$aFields[] = $oRow->field_name;
+	}
+	return $aFields;
+}
