diff --git src/plugin/index-more/src/java/org/apache/nutch/indexer/more/MoreIndexingFilter.java src/plugin/index-more/src/java/org/apache/nutch/indexer/more/MoreIndexingFilter.java
index cc712e0..bfbed11 100644
--- src/plugin/index-more/src/java/org/apache/nutch/indexer/more/MoreIndexingFilter.java
+++ src/plugin/index-more/src/java/org/apache/nutch/indexer/more/MoreIndexingFilter.java
@@ -16,6 +16,8 @@
  */
 package org.apache.nutch.indexer.more;
 
+import java.io.File;
+import java.nio.ByteBuffer;
 import java.text.ParseException;
 import java.util.Collection;
 import java.util.Date;
@@ -31,6 +33,7 @@ import org.apache.nutch.metadata.HttpHeaders;
 import org.apache.nutch.net.protocols.HttpDateFormat;
 import org.apache.nutch.storage.WebPage;
 import org.apache.nutch.storage.WebPage.Field;
+import org.apache.nutch.util.Bytes;
 import org.apache.nutch.util.MimeUtil;
 import org.apache.oro.text.regex.MalformedPatternException;
 import org.apache.oro.text.regex.MatchResult;
@@ -42,14 +45,19 @@ import org.apache.solr.common.util.DateUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.maxmind.geoip.Location;
+import com.maxmind.geoip.LookupService;
+
 /**
  * Add (or reset) a few metaData properties as respective fields (if they are
  * available), so that they can be accurately used within the search index.
  * 
- * 'lastModifed' is indexed to support query by date, 'contentLength' obtains content length from the HTTP
- * header, 'type' field is indexed to support query by type and finally the 'title' field is an attempt 
- * to reset the title if a content-disposition hint exists. The logic is that such a presence is indicative 
- * that the content provider wants the filename therein to be used as the title.
+ * 'lastModifed' is indexed to support query by date, 'contentLength' obtains
+ * content length from the HTTP header, 'type' field is indexed to support query
+ * by type and finally the 'title' field is an attempt to reset the title if a
+ * content-disposition hint exists. The logic is that such a presence is
+ * indicative that the content provider wants the filename therein to be used as
+ * the title.
  * 
  * Still need to make content-length searchable!
  * 
@@ -57,7 +65,8 @@ import org.slf4j.LoggerFactory;
  */
 
 public class MoreIndexingFilter implements IndexingFilter {
-  public static final Logger LOG = LoggerFactory.getLogger(MoreIndexingFilter.class);
+  public static final Logger LOG = LoggerFactory
+      .getLogger(MoreIndexingFilter.class);
 
   /** Get the MimeTypes resolver instance. */
   private MimeUtil MIME;
@@ -76,10 +85,36 @@ public class MoreIndexingFilter implements IndexingFilter {
     addTime(doc, page, url);
     addLength(doc, page, url);
     addType(doc, page, url);
+    addServerGeo(doc, page, url);
     resetTitle(doc, page, url);
     return doc;
   }
 
+  private NutchDocument addServerGeo(NutchDocument doc, WebPage page, String url) {
+
+    if (conf.getBoolean("store.ip.address", false) == true) {
+      try {
+        ByteBuffer serverIpBytes = page.getFromMetadata(new Utf8("_ip_"));
+        if (serverIpBytes != null) {
+          String serverIp = Bytes.toString(serverIpBytes);
+          String pathDat = MoreIndexingFilter.class.getResource(".").getPath()
+              + File.separator + "GeoLiteCity.dat";
+          File file = new File(pathDat);
+          LookupService lookup = new LookupService(file,
+              LookupService.GEOIP_MEMORY_CACHE);
+          Location locationServices = lookup.getLocation(serverIp);
+          doc.add("location", String.valueOf(locationServices.latitude) + ","
+              + String.valueOf(locationServices.longitude));
+        }
+      } catch (Exception e) {
+        if (LOG.isErrorEnabled()) {
+          LOG.error(e.getMessage());
+        }
+      }
+    }
+    return doc;
+  }
+
   // Add time related meta info. Add last-modified if present. Index date as
   // last-modified, or, if that's not present, use fetch time.
   private NutchDocument addTime(NutchDocument doc, WebPage page, String url) {
@@ -89,7 +124,8 @@ public class MoreIndexingFilter implements IndexingFilter {
     // String lastModified = data.getMeta(Metadata.LAST_MODIFIED);
     if (lastModified != null) { // try parse last-modified
       time = getTime(lastModified.toString(), url); // use as time
-      String formlastModified = DateUtil.getThreadLocalDateFormat().format(new Date(time));
+      String formlastModified = DateUtil.getThreadLocalDateFormat().format(
+          new Date(time));
       // store as string
       doc.add("lastModified", formlastModified);
     }
@@ -98,7 +134,8 @@ public class MoreIndexingFilter implements IndexingFilter {
       time = page.getModifiedTime(); // use Modified time
     }
 
-    String dateString = DateUtil.getThreadLocalDateFormat().format(new Date(time));
+    String dateString = DateUtil.getThreadLocalDateFormat().format(
+        new Date(time));
 
     // un-stored, indexed and un-tokenized
     doc.add("date", dateString);
@@ -113,17 +150,19 @@ public class MoreIndexingFilter implements IndexingFilter {
     } catch (ParseException e) {
       // try to parse it as date in alternative format
       try {
-        Date parsedDate = DateUtils.parseDate(date, new String[] {
-            "EEE MMM dd HH:mm:ss yyyy", "EEE MMM dd HH:mm:ss yyyy zzz",
-            "EEE MMM dd HH:mm:ss zzz yyyy", "EEE, dd MMM yyyy HH:mm:ss zzz",
-            "EEE,dd MMM yyyy HH:mm:ss zzz", "EEE, dd MMM yyyy HH:mm:sszzz",
-            "EEE, dd MMM yyyy HH:mm:ss", "EEE, dd-MMM-yy HH:mm:ss zzz",
-            "yyyy/MM/dd HH:mm:ss.SSS zzz", "yyyy/MM/dd HH:mm:ss.SSS",
-            "yyyy/MM/dd HH:mm:ss zzz", "yyyy/MM/dd", "yyyy.MM.dd HH:mm:ss",
-            "yyyy-MM-dd HH:mm", "MMM dd yyyy HH:mm:ss. zzz",
-            "MMM dd yyyy HH:mm:ss zzz", "dd.MM.yyyy HH:mm:ss zzz",
-            "dd MM yyyy HH:mm:ss zzz", "dd.MM.yyyy; HH:mm:ss",
-            "dd.MM.yyyy HH:mm:ss", "dd.MM.yyyy zzz", "yyyy-MM-dd'T'HH:mm:ss'Z'" });
+        Date parsedDate = DateUtils.parseDate(date,
+            new String[] { "EEE MMM dd HH:mm:ss yyyy",
+                "EEE MMM dd HH:mm:ss yyyy zzz", "EEE MMM dd HH:mm:ss zzz yyyy",
+                "EEE, dd MMM yyyy HH:mm:ss zzz",
+                "EEE,dd MMM yyyy HH:mm:ss zzz", "EEE, dd MMM yyyy HH:mm:sszzz",
+                "EEE, dd MMM yyyy HH:mm:ss", "EEE, dd-MMM-yy HH:mm:ss zzz",
+                "yyyy/MM/dd HH:mm:ss.SSS zzz", "yyyy/MM/dd HH:mm:ss.SSS",
+                "yyyy/MM/dd HH:mm:ss zzz", "yyyy/MM/dd", "yyyy.MM.dd HH:mm:ss",
+                "yyyy-MM-dd HH:mm", "MMM dd yyyy HH:mm:ss. zzz",
+                "MMM dd yyyy HH:mm:ss zzz", "dd.MM.yyyy HH:mm:ss zzz",
+                "dd MM yyyy HH:mm:ss zzz", "dd.MM.yyyy; HH:mm:ss",
+                "dd.MM.yyyy HH:mm:ss", "dd.MM.yyyy zzz",
+                "yyyy-MM-dd'T'HH:mm:ss'Z'" });
         time = parsedDate.getTime();
         // if (LOG.isWarnEnabled()) {
         // LOG.warn(url + ": parsed date: " + date +" to:"+time);
@@ -175,7 +214,7 @@ public class MoreIndexingFilter implements IndexingFilter {
     String mimeType = null;
     Utf8 contentType = page.getContentType();
     if (contentType == null)
-    	contentType = page.getFromHeaders(new Utf8(HttpHeaders.CONTENT_TYPE));
+      contentType = page.getFromHeaders(new Utf8(HttpHeaders.CONTENT_TYPE));
     if (contentType == null) {
       // Note by Jerome Charron on 20050415:
       // Content Type not solved by a previous plugin
@@ -204,7 +243,7 @@ public class MoreIndexingFilter implements IndexingFilter {
     if (conf.getBoolean("moreIndexingFilter.indexMimeTypeParts", true)) {
       String[] parts = getParts(mimeType);
 
-      for(String part: parts) {
+      for (String part : parts) {
         doc.add("type", part);
       }
     }
diff --git src/plugin/index-more/build.xml src/plugin/index-more/build.xml
index dec1e12..826218c 100644
--- src/plugin/index-more/build.xml
+++ src/plugin/index-more/build.xml
@@ -17,6 +17,20 @@
 -->
 <project name="index-more" default="jar-core">
 
-  <import file="../build-plugin.xml"/>
+	<import file="../build-plugin.xml" />
+
+	<target name="init-plugin">
+		<echo>Copying dat file</echo>
+		<copy todir="${build.classes}">
+			<fileset dir="${src.dir}" includes="**/*.dat" />
+		</copy>
+	</target>
+
+	<!-- Add compilation dependencies to classpath -->
+	<path id="plugin.deps">
+		<fileset dir="${nutch.root}/build">
+			<include name="**/index-more/*.jar" />
+		</fileset>
+	</path>
 
 </project>
diff --git src/plugin/index-more/ivy.xml src/plugin/index-more/ivy.xml
index 1a86d68..472a46a 100644
--- src/plugin/index-more/ivy.xml
+++ src/plugin/index-more/ivy.xml
@@ -1,41 +1,37 @@
 <?xml version="1.0" ?>
 
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	You under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
 
 <ivy-module version="1.0">
-  <info organisation="org.apache.nutch" module="${ant.project.name}">
-    <license name="Apache 2.0"/>
-    <ivyauthor name="Apache Nutch Team" url="http://nutch.apache.org"/>
-    <description>
-        Apache Nutch
-    </description>
-  </info>
+	<info organisation="org.apache.nutch" module="${ant.project.name}">
+		<license name="Apache 2.0" />
+		<ivyauthor name="Apache Nutch Team" url="http://nutch.apache.org" />
+		<description>
+			Apache Nutch
+		</description>
+	</info>
+
+	<configurations>
+		<include file="../../..//ivy/ivy-configurations.xml" />
+	</configurations>
 
-  <configurations>
-    <include file="../../..//ivy/ivy-configurations.xml"/>
-  </configurations>
+	<publications>
+		<!--get the artifact from our module name -->
+		<artifact conf="master" />
+	</publications>
 
-  <publications>
-    <!--get the artifact from our module name-->
-    <artifact conf="master"/>
-  </publications>
+	<dependencies>
+		<dependency org="com.maxmind.geoip" name="geoip-api" rev="1.2.11"
+			conf="*->master" />
+	</dependencies>
 
-  <dependencies>
-  </dependencies>
-  
 </ivy-module>
diff --git src/plugin/index-more/plugin.xml src/plugin/index-more/plugin.xml
index 545dfba..836f0cc 100644
--- src/plugin/index-more/plugin.xml
+++ src/plugin/index-more/plugin.xml
@@ -26,6 +26,7 @@
       <library name="index-more.jar">
          <export name="*"/>
       </library>
+      <library name="geoiapi-1.2.11.jar"/>
    </runtime>
 
    <requires>
diff --git conf/solrindex-mapping.xml conf/solrindex-mapping.xml
index c39889c..94d657f 100644
--- conf/solrindex-mapping.xml
+++ conf/solrindex-mapping.xml
@@ -1,43 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	You under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
 
 <mapping>
-	<!-- Simple mapping of fields created by Nutch IndexingFilters
-	     to fields defined (and expected) in Solr schema.xml.
+	<!-- Simple mapping of fields created by Nutch IndexingFilters to fields 
+		defined (and expected) in Solr schema.xml. Any fields in NutchDocument that 
+		match a name defined in field/@source will be renamed to the corresponding 
+		field/@dest. Additionally, if a field name (before mapping) matches a copyField/@source 
+		then its values will be copied to the corresponding copyField/@dest. uniqueKey 
+		has the same meaning as in Solr schema.xml and defaults to "id" if not defined. -->
+	<fields>
+		<field dest="content" source="content" />
+		<field dest="title" source="title" />
+		<field dest="host" source="host" />
+		<field dest="batchId" source="batchId" />
+		<field dest="boost" source="boost" />
+		<field dest="digest" source="digest" />
+		<field dest="tstamp" source="tstamp" />
 
-             Any fields in NutchDocument that match a name defined
-             in field/@source will be renamed to the corresponding
-             field/@dest.
-             Additionally, if a field name (before mapping) matches
-             a copyField/@source then its values will be copied to 
-             the corresponding copyField/@dest.
+		<field dest="latlon" source="latlon" />
 
-             uniqueKey has the same meaning as in Solr schema.xml
-             and defaults to "id" if not defined.
-         -->
-	<fields>
-		<field dest="content" source="content"/>
-		<field dest="title" source="title"/>
-		<field dest="host" source="host"/>
-		<field dest="batchId" source="batchId"/>
-		<field dest="boost" source="boost"/>
-		<field dest="digest" source="digest"/>
-		<field dest="tstamp" source="tstamp"/>
 	</fields>
 	<uniqueKey>id</uniqueKey>
 </mapping>
diff --git conf/schema-solr4.xml conf/schema-solr4.xml
index f73cd4b..adc23f6 100644
--- conf/schema-solr4.xml
+++ conf/schema-solr4.xml
@@ -297,6 +297,8 @@
     <!-- since fields of this type are by default not stored or indexed,
          any data added to them will be ignored outright.  --> 
     <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
+    
+    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
 
  </types>
 
@@ -307,7 +309,8 @@
     <field name="batchId" type="string" stored="true" indexed="false"/>
     <field name="digest" type="string" stored="true" indexed="false"/>
     <field name="boost" type="float" stored="true" indexed="false"/>
-
+	<field name="_version_" type="long" indexed="true" stored="true"/>
+	
     <!-- fields for index-basic plugin -->
     <field name="host" type="url" stored="false" indexed="true"/>
     <field name="url" type="url" stored="true" indexed="true" required="true"/>
@@ -330,6 +333,8 @@
     <field name="contentLength" type="string" stored="true" indexed="false"/>
     <field name="lastModified" type="date" stored="true" indexed="false"/>
     <field name="date" type="tdate" stored="true" indexed="true"/>
+    <field name="location" type="location" stored="true" indexed="true"/>
+    <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
 
     <!-- fields for languageidentifier plugin -->
     <field name="lang" type="string" stored="true" indexed="true"/>
