diff --git a/htdocs/admin/geoipmaxmind.php b/htdocs/admin/geoipmaxmind.php
index f2a4e3c7fba44358b1e8479422451bff1f5fdea4..3d384a4b832426ba8ebf30e802c33a29bbb753dd 100644
--- a/htdocs/admin/geoipmaxmind.php
+++ b/htdocs/admin/geoipmaxmind.php
@@ -1,6 +1,6 @@
 <?php
-/* Copyright (C) 2009	Laurent Destailleur	<eldy@users.sourceforge.org>
- * Copyright (C) 2011	Juanjo Menent		<jmenent@2byte.es>
+/* Copyright (C) 2009-2012	Laurent Destailleur	<eldy@users.sourceforge.org>
+ * Copyright (C) 2011	    Juanjo Menent		<jmenent@2byte.es>
  *
  * 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
@@ -129,20 +129,27 @@ print $langs->trans("YouCanDownloadAdvancedDatFileTo",'<a href="'.$url2.'" targe
 if ($geoip)
 {
 	print '<br><br>';
-	print '<br>';
+	print '<br>'.$langs->trans("TestGeoIPResult",$ip).':';
+
 	$ip='24.24.24.24';
-	print $langs->trans("TestGeoIPResult",$ip).':<br>';
-	print $ip.' -> ';
+	print '<br>'.$ip.' -> ';
 	$result=dol_print_ip($ip,1);
 	if ($result) print $result;
 	else print $langs->trans("Error");
 
+	/* We disable this test because dol_print_ip need an ip as input
+	$ip='www.google.com';
+	print '<br>'.$ip.' -> ';
+	$result=dol_print_ip($ip,1);
+	if ($result) print $result;
+	else print $langs->trans("Error");
+	*/
 	$geoip->close();
 }
 
 dol_htmloutput_mesg($mesg);
 
-$db->close();
-
 llxFooter();
+
+$db->close();
 ?>
diff --git a/htdocs/core/class/dolgeoip.class.php b/htdocs/core/class/dolgeoip.class.php
index 4710b531fb70e4f42b6d14dba61f1b9d6b3d3538..ccb68c992c62199eb80fea4a456c46420f8e7a4d 100644
--- a/htdocs/core/class/dolgeoip.class.php
+++ b/htdocs/core/class/dolgeoip.class.php
@@ -1,5 +1,5 @@
 <?php
-/* Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+/* Copyright (C) 2009-2012 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
@@ -19,17 +19,17 @@
 /**
  *  \file		htdocs/core/class/dolgeoip.class.php
  * 	\ingroup	geoip
- *  \brief		Library for managing module geoip
+ *  \brief		File of class to manage module geoip
  */
 
 
 /**
  * 		\class      DolGeoIP
  *      \brief      Classe to manage GeoIP
- *      \remarks    Usage:
- *		\remarks	$geoip=new GeoIP('country',$datfile);
- *		\remarks	$geoip->getCountryCodeFromIP($ip);
- *		\remarks	$geoip->close();
+ *      			Usage:
+ *					$geoip=new GeoIP('country',$datfile);
+ *					$geoip->getCountryCodeFromIP($ip);
+ *					$geoip->close();
  */
 class DolGeoIP
 {
@@ -56,6 +56,7 @@ class DolGeoIP
 		}
 		else { print 'ErrorBadParameterInConstructor'; return 0; }
 
+		// Here, function exists (embedded into PHP or exists because we made include)
 		if (empty($type) || empty($datfile))
 		{
 			//dol_syslog("DolGeoIP::DolGeoIP parameter datafile not defined", LOG_ERR);
@@ -73,7 +74,16 @@ class DolGeoIP
 			return 0;
 		}
 
-		$this->gi = geoip_open($datfile,GEOIP_STANDARD);
+		if (function_exists('geoip_open'))
+		{
+		    $this->gi = geoip_open($datfile,GEOIP_STANDARD);
+		}
+		else
+		{
+		    $this->gi = 'NOGI';    // We are using embedded php geoip functions
+		    //print 'function_exists(geoip_country_code_by_name))='.function_exists('geoip_country_code_by_name');
+		    //print geoip_database_info();
+		}
 	}
 
 	/**
@@ -88,7 +98,16 @@ class DolGeoIP
 		{
 			return '';
 		}
-		return strtolower(geoip_country_code_by_addr($this->gi, $ip));
+		if ($this->gi == 'NOGI')
+		{
+		    // geoip_country_code_by_addr does not exists
+    		return strtolower(geoip_country_code_by_name($ip));
+		}
+		else
+		{
+		    if (! function_exists('geoip_country_code_by_addr')) return strtolower(geoip_country_code_by_name($this->gi, $ip));
+		    return strtolower(geoip_country_code_by_addr($this->gi, $ip));
+		}
 	}
 
 	/**
@@ -113,6 +132,7 @@ class DolGeoIP
 	 */
 	function getVersion()
 	{
+	    if ($this->gi == 'NOGI') return geoip_database_info();
 		return '';
 	}
 
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 25f78395f6d327736d40881b9069299f55661f8f..47a10261d6cc0621cd9cac058cb9f245ce93ad44 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -195,7 +195,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port)
 
 /**
  * 	Get entity to use
- * 
+ *
  * 	@param	string	$element	Current element
  * 	@param	int		$shared		1=Return shared entities
  * 	@return	mixed				Entity id(s) to use
@@ -203,7 +203,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port)
 function getEntity($element=false, $shared=false)
 {
 	global $conf, $mc;
-	
+
 	if (is_object($mc))
 	{
 		return $mc->getEntity($element, $shared);
@@ -211,12 +211,12 @@ function getEntity($element=false, $shared=false)
 	else
 	{
 		$out='';
-		
+
 		$addzero = array('user', 'usergroup');
 		if (in_array($element, $addzero)) $out.= '0,';
-		
+
 		$out.= $conf->entity;
-		
+
 		return $out;
 	}
 }
@@ -1334,7 +1334,7 @@ function dol_print_phone($phone,$country="FR",$cid=0,$socid=0,$addlink=0,$separ=
  * 	Return an IP formated to be shown on screen
  *
  * 	@param	string	$ip			IP
- * 	@param	int		$mode		1=return only country/flag,2=return only IP
+ * 	@param	int		$mode		0=return IP + country/flag, 1=return only country/flag, 2=return only IP
  * 	@return string 				Formated IP, with country if GeoIP module is enabled
  */
 function dol_print_ip($ip,$mode=0)
@@ -2223,7 +2223,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
 
     // More features to check
     $features = explode("&",$features);
-    
+
     // More parameters
     list($dbtablename, $sharedelement) = explode('&', $dbtablename);