diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php
index 8d7dd5b284b4261519a9b273af8c25c268aa2546..cce0cab24a3ba68d92add89717f2314720184e5e 100644
--- a/htdocs/admin/tools/listevents.php
+++ b/htdocs/admin/tools/listevents.php
@@ -168,28 +168,7 @@ if ($result)
 
 		// IP
 		print '<td>';
-		print $obj->ip;
-
-		if (! empty($conf->geoip_maxmind->enabled))
-		{
-			$datafile=$conf->global->GEOIP_MAXMIND_COUNTRY_DATAFILE;
-			$ip=$obj->ip;
-
-			$ip='24.24.24.24';
-			$datafile='E:\Mes Sites\Web\Admin1\awstats\maxmind\GeoIP.dat';
-
-			include_once(DOL_DOCUMENT_ROOT.'/lib/dolgeoip.class.php');
-			$geoip=new DolGeoIP('country',$datafile);
-			$countrycode=$geoip->getCountryCodeFromIP($ip);
-			if ($countrycode)	// If success, countrycode is us, fr, ...
-			{
-				if (file_exists(DOL_DOCUMENT_ROOT.'/theme/common/flags/'.$countrycode.'.png'))
-				{
-					print ' '.img_picto($langs->trans("AccordingToGeoIPDatabase"),DOL_URL_ROOT.'/theme/common/flags/'.$countrycode.'.png','',1);
-				}
-				else print ' ('.$countrycode.')';
-			}
-		}
+		print dol_print_ip($obj->ip);
 		print '</td>';
 
 		// Login
diff --git a/htdocs/includes/modules/modGeoIPMaxmind.class.php b/htdocs/includes/modules/modGeoIPMaxmind.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..837455688be5c984b6fbcc46e3245fb056967f2a
--- /dev/null
+++ b/htdocs/includes/modules/modGeoIPMaxmind.class.php
@@ -0,0 +1,114 @@
+<?php
+/* Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**     \defgroup   geoip      Module GeoIP
+ *		\brief      Module to make geoip conversions
+ *		\version	$Id$
+ */
+
+/**
+ *	\file       htdocs/includes/modules/modGeoIPMaxmind.class.php
+ *	\ingroup    geoip
+ *	\brief      File of geoipmaxmind module descriptor
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**     \class      modImport
+ *		\brief      Classe de description et activation du module Import
+ */
+class modGeoIPMaxmind extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      handler d'acces base
+	 */
+	function modGeoIPMaxmind($DB)
+	{
+		$this->db = $DB ;
+		$this->numero = 2900;
+
+		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
+		// It is used to group modules in module setup page
+		$this->family = "technic";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = eregi_replace('^mod','',get_class($this));
+		// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
+		$this->description = "GeoIP Maxmind conversions capabilities";
+		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
+		$this->version = 'experimental';
+		// Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		// Where to store the module in setup page (0=common,1=interface,2=others,3=very specific)
+		$this->special = 1;
+		// Name of image file used for this module.
+		// If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
+		// If file is in module/images directory, use this->picto=DOL_URL_ROOT.'/module/images/file.png'
+		$this->picto = '';
+
+		// Data directories to create when module is enabled
+		$this->dirs = array("/geoipmaxmind");
+
+		// Config pages
+		$this->config_page_url = array();
+
+		// D�pendances
+		$this->depends = array();
+		$this->requiredby = array();
+		$this->phpmin = array(4,2,0);
+		$this->phpmax = array();
+		$this->need_dolibarr_version = array(2,7,-1);	// Minimum version of Dolibarr required by module
+		$this->need_javascript_ajax = 1;
+
+		// Constantes
+		$this->const = array();
+
+		// Boxes
+		$this->boxes = array();
+
+		// Permissions
+		$this->rights = array();
+		$this->rights_class = 'geoipmaxmind';
+		$r=0;
+	}
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		$sql = array();
+
+		return $this->_init($sql);
+	}
+
+	/**
+	 *    \brief      Fonction appelee lors de la desactivation d'un module.
+	 *                Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+}
+?>
diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index f72089e7144ca75b4086d9b21896fd8c6d7e7e41..e96a36068d587f2ada0ee4d4738f71864c60c962 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -860,6 +860,32 @@ function dol_print_phone($phone,$country="FR",$cid=0,$socid=0,$addlink=0,$separ=
 	return $newphone;
 }
 
+function dol_print_ip($ip)
+{
+	global $conf,$langs;
+
+	print $ip;
+	if (! empty($conf->geoipmaxmind->enabled))
+	{
+		$datafile=$conf->global->GEOIPMAXMIND_COUNTRY_DATAFILE;
+
+		//$ip='24.24.24.24';
+		$datafile='E:\Mes Sites\Web\Admin1\awstats\maxmind\GeoIP.dat';
+
+		include_once(DOL_DOCUMENT_ROOT.'/lib/dolgeoip.class.php');
+		$geoip=new DolGeoIP('country',$datafile);
+		$countrycode=$geoip->getCountryCodeFromIP($ip);
+		if ($countrycode)	// If success, countrycode is us, fr, ...
+		{
+			if (file_exists(DOL_DOCUMENT_ROOT.'/theme/common/flags/'.$countrycode.'.png'))
+			{
+				print ' '.img_picto($langs->trans("AccordingToGeoIPDatabase"),DOL_URL_ROOT.'/theme/common/flags/'.$countrycode.'.png','',1);
+			}
+			else print ' ('.$countrycode.')';
+		}
+	}
+}
+
 /**
  *	\brief      Return true if email syntax is ok
  *	\param	    address     email (Ex: "toto@titi.com", "John Do <johndo@titi.com>")