diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog
index 4134f0c927..810d7dfc2c 100644
--- a/pandora_server/ChangeLog
+++ b/pandora_server/ChangeLog
@@ -1,3 +1,12 @@
+2007-10-04  Sancho Lerena <slerena@gmail.com>
+
+	* conf/pandora_server.conf, lib/PandoraFMS/Config.pm, bin/pandora_network:
+
+	Merged code from NG branch: Added multiping check (global setting 'icmp_checks')
+	on network server because in some WAN enviroments with erratic packet loss on non TCP
+	connections would cause recurrent false positives. New config token added to config
+	file (icmp_checks).
+
 2007-10-03  Sancho lerena <slerena@gmail.com>
 
 	* lib/PandoraFMS/DB.pm: Fixed alert that fires always one time more than
diff --git a/pandora_server/bin/pandora_network b/pandora_server/bin/pandora_network
index 0b212fb7c9..6ce7bd17eb 100755
--- a/pandora_server/bin/pandora_network
+++ b/pandora_server/bin/pandora_network
@@ -243,65 +243,71 @@ sub pandora_network_producer ($) {
 }
 
 ##############################################################################
-# pandora_ping_icmp (destination, timeout) - Do a ICMP scan, 1 if alive, 0 if not
+# pandora_ping_icmp (config, destination, timeout)
+# Do a ICMP scan, return 1 if alive, 0 if not
 ##############################################################################
 sub pandora_ping_icmp { 
-	my $dest = $_[0];
-	my $l_timeout = $_[1];
+	my $pa_config = $_[0];
+	my $dest = $_[1];
+	my $l_timeout = $_[2];
  	# temporal vars.
  	my $result = 0;
 	my $result2 = 0;
+	my $temp;
  	my $p;
  
- 	# Check for valid destination
- 	if (!defined($dest)) {
- 		return 0;
- 	}
- 	# Some hosts don't accept ICMP with too small payload. Use 16 Bytes
-	{
-		lock $icmp_lock;
- 		$p = Net::Ping->new("icmp", $l_timeout, 16);
-	 	$result = $p->ping($dest);
+	if ($pa_config->{'icmp_checks'} eq ""){
+		$pa_config->{'icmp_checks'} = 1;
 	}
+	
+	# Make more than a single ping (as defined in icmp_checks
+	for ($temp =0; $temp < $pa_config->{'icmp_checks'}; $temp++){
+	 	# Some hosts don't accept ICMP with too small payload. Use 16 Bytes
+		{
+			lock $icmp_lock;
+	 		$p = Net::Ping->new("icmp", $l_timeout, 32);
+		 	$result = $p->ping($dest);
+		}
 
- 	if (defined($result)){
-		$p->close();
- 		if ($result == 1){
- 			return 1;
- 		}
- 	}
- 	return 0;
+	 	if (defined($result)){
+			$p->close();
+ 			if ($result == 1){
+	 			$result2 = 1;
+	 			$temp = $pa_config->{'icmp_checks'}; # Exit for
+			}
+		}
+	}
+	return $result2;
 }
 
 ##############################################################################
 # pandora_ping_latency (destination, timeout, data, result) - Do a ICMP latency check
 ##############################################################################
 sub pandora_ping_latency {
-        my $dest = $_[0];
-        my $l_timeout = $_[1]; 
-	my $module_data = $_[2];
-	my $module_result = $_[3];
-	
-        my $icmp_return;
-        my $icmp_reply;
-        my $icmp_ip;
-	my $nm;
+    my $dest = $_[0];
+    my $l_timeout = $_[1]; 
+    my $module_data = $_[2];
+    my $module_result = $_[3];
+    my $icmp_return;
+    my $icmp_reply;
+    my $icmp_ip;
+    my $nm;
 
 	# Locking for use ICMP call safety
 	{
 		lock $icmp_lock;
-		$nm = Net::Ping->new("icmp", $l_timeout, 16);
+		$nm = Net::Ping->new("icmp", $l_timeout, 32);
 		$nm->hires();
 	        ($icmp_return, $icmp_reply, $icmp_ip) = $nm->ping ($dest,$l_timeout);
 	}
-        if ($icmp_return) {
-        	$$module_data = $icmp_reply * 1000; # milliseconds
-                $$module_result = 0; # Successful
-        } else {
-                $$module_result = 1; # Error.
-                $$module_data = 0;
-        }
-        $nm->close();
+    if ($icmp_return) {
+        $$module_data = $icmp_reply * 1000; # milliseconds
+        $$module_result = 0; # Successful
+    } else {
+        $$module_result = 1; # Error.
+        $$module_data = 0;
+    }
+    $nm->close();
 }
 
 ##########################################################################
@@ -504,66 +510,69 @@ sub exec_network_module {
 	my $module_result = 1; # Fail by default
 	my $module_data = 0;
 
-	# ICMP Modules
-	# ------------
-	if ($id_tipo_modulo == 6){ # ICMP (Connectivity only: Boolean)
-		$temp = pandora_ping_icmp ($ip_target, $pa_config->{'networktimeout'});
-		if ($temp == 1 ){
-			$module_result = 0; # Successful
-			$module_data = 1;
-		} else {
-			$module_result = 0; # If cannot connect, its down.
-			$module_data = 0;
-		}
-	} elsif ($id_tipo_modulo == 7){ # ICMP (data for latency in ms)
-		# This module only could be executed if executed as root
-		if ($> == 0){
-			pandora_ping_latency ($ip_target, $pa_config->{"networktimeout"}, \$module_data, \$module_result);
-		} else {
-			$module_result = 0; # Done but, with zero value
-			$module_data = 0; # This should don't happen
-		}
-	# SNMP Modules (Proc=18, inc, data, string)
-	# ------------
-	} elsif (($id_tipo_modulo == 15) || ($id_tipo_modulo == 18) || ($id_tipo_modulo == 16) || ($id_tipo_modulo == 17)) { # SNMP module
-		if ($snmp_oid ne ""){
-			$temp2 = pandora_query_snmp ($pa_config, $snmp_oid, $snmp_community, $ip_target, $error);
-		} else {
-			 $error = 1
-		}
-		if ($error == 0) { # A correct SNMP Query
-			$module_result = 0;
-			# SNMP_DATA_PROC
-			if ($id_tipo_modulo == 18){ #snmp_data_proc
-				if ($temp2 != 1){ # up state is 1, down state in SNMP is 2 ....
-					$temp2 = 0;
-				}
-				$module_data = $temp2;
-			}
-			# SNMP_DATA and SNMP_DATA_INC
-			elsif (($id_tipo_modulo == 15) || ($id_tipo_modulo == 16) ){ 
-				if ($temp2 =~ /[A-Za-z\.\,\-\/\\\(\)\[\]]/){
-					$module_result = 1; # Alphanumeric data, not numeric
-				} else {
-					$module_data = $temp2; # Float values are also valid
-				} 
-			} else { # String SNMP
-				$module_data = $temp2;
-			}
-		} else { # Failed SNMP-GET
-			$module_data = 0;
-			$module_result = 1; # No data, cannot connect
-		}
-	# TCP Module
-	# ----------
-	} elsif (($id_tipo_modulo == 8) || ($id_tipo_modulo == 9) || ($id_tipo_modulo == 10) || ($id_tipo_modulo == 11)) { # TCP Module
-		if (($tcp_port < 65536) && ($tcp_port > 0)){ # Port check
-			pandora_query_tcp ($pa_config, $tcp_port, $ip_target, \$module_result, \$module_data, $tcp_send, $tcp_rcv, $id_tipo_modulo);
-		} else { 
-			# Invalid port, get no check
-			$module_result = 1;
-		}
-   	}
+    if ((defined($ip_target)) && ($ip_target ne "")) {
+
+	    # ICMP Modules
+	    # ------------
+	    if ($id_tipo_modulo == 6){ # ICMP (Connectivity only: Boolean)
+		    $temp = pandora_ping_icmp ($pa_config, $ip_target, $pa_config->{'networktimeout'});
+		    if ($temp == 1 ){
+			    $module_result = 0; # Successful
+			    $module_data = 1;
+		    } else {
+			    $module_result = 0; # If cannot connect, its down.
+			    $module_data = 0;
+		    }
+	    } elsif ($id_tipo_modulo == 7){ # ICMP (data for latency in ms)
+		    # This module only could be executed if executed as root
+		    if ($> == 0){
+			    pandora_ping_latency ($ip_target, $pa_config->{"networktimeout"}, \$module_data, \$module_result);
+		    } else {
+			    $module_result = 0; # Done but, with zero value
+			    $module_data = 0; # This should don't happen
+		    }
+	    # SNMP Modules (Proc=18, inc, data, string)
+	    # ------------
+	    } elsif (($id_tipo_modulo == 15) || ($id_tipo_modulo == 18) || ($id_tipo_modulo == 16) || ($id_tipo_modulo == 17)) { # SNMP module
+            if ((defined($snmp_oid)) && ($snmp_oid ne "") && (defined($snmp_community)) && ($snmp_community ne "")) { # Port check
+		    	    $temp2 = pandora_query_snmp ($pa_config, $snmp_oid, $snmp_community, $ip_target, $error);
+		    } else {
+			    $error = 1
+		    }
+		    if ($error == 0) { # A correct SNMP Query
+			    $module_result = 0;
+			    # SNMP_DATA_PROC
+			    if ($id_tipo_modulo == 18){ #snmp_data_proc
+				    if ($temp2 != 1){ # up state is 1, down state in SNMP is 2 ....
+					    $temp2 = 0;
+				    }
+				    $module_data = $temp2;
+			    }
+			    # SNMP_DATA and SNMP_DATA_INC
+			    elsif (($id_tipo_modulo == 15) || ($id_tipo_modulo == 16) ){ 
+				    if ($temp2 =~ /[A-Za-z\.\,\-\/\\\(\)\[\]]/){
+					    $module_result = 1; # Alphanumeric data, not numeric
+				    } else {
+					    $module_data = $temp2; # Float values are also valid
+				    } 
+			    } else { # String SNMP
+				    $module_data = $temp2;
+			    }
+		    } else { # Failed SNMP-GET
+			    $module_data = 0;
+			    $module_result = 1; # No data, cannot connect
+		    }
+	    # TCP Module
+	    # ----------
+	    } elsif (($id_tipo_modulo == 8) || ($id_tipo_modulo == 9) || ($id_tipo_modulo == 10) || ($id_tipo_modulo == 11)) { # TCP Module
+            if ((defined($tcp_port)) && ($tcp_port < 65536) && ($tcp_port > 0)) { # Port check
+			    pandora_query_tcp ($pa_config, $tcp_port, $ip_target, \$module_result, \$module_data, $tcp_send, $tcp_rcv, $id_tipo_modulo);
+		    } else { 
+			    # Invalid port, get no check
+			    $module_result = 1;
+		    }
+        }
+    }
 
 	# --------------------------------------------------------
 	# Write data section
diff --git a/pandora_server/conf/pandora_server.conf b/pandora_server/conf/pandora_server.conf
index a5c3226df8..205be27406 100755
--- a/pandora_server/conf/pandora_server.conf
+++ b/pandora_server/conf/pandora_server.conf
@@ -96,3 +96,5 @@ server_threshold 15
 
 network_threads 5
 
+# icmp_checks x : defines number of pings for each icmp_proc module type. at least one of that ping should be 1 to report 1
+icmp_checks 2
diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm
index 34c399c746..ed06908024 100644
--- a/pandora_server/lib/PandoraFMS/Config.pm
+++ b/pandora_server/lib/PandoraFMS/Config.pm
@@ -34,8 +34,8 @@ our @EXPORT = qw( 	pandora_help_screen
 # There is no global vars, all variables (setup) passed as hash reference
 
 # version: Defines actual version of Pandora Server for this module only
-my $pandora_version = "1.3beta2";
-my $pandora_build="PS070827";
+my $pandora_version = "1.3beta3";
+my $pandora_build="PS071004";
 our $VERSION = $pandora_version." ".$pandora_build;
 
 # Setup hash
@@ -136,6 +136,7 @@ sub pandora_loadconfig {
 	$pa_config->{"servername"}=~ s/\s//g; # Replace ' ' chars
 	$pa_config->{"networkserver"}=0;
 	$pa_config->{"dataserver"}=0;
+    $pa_config->{"icmp_checks"}=1;
 	$pa_config->{"reconserver"}=0;
 	$pa_config->{"servermode"}="";
 	$pa_config->{'snmp_logfile'}="/var/log/pandora/pandora_snmptrap.log";
@@ -222,7 +223,12 @@ sub pandora_loadconfig {
 		}
 		elsif ($parametro =~ m/^servername\s(.*)/i) { $pa_config->{'servername'}= $1; }
 		elsif ($parametro =~ m/^checksum\s([0-9])/i) { $pa_config->{"pandora_check"} = $1; }
-		elsif ($parametro =~ m/^master\s([0-9])/i) { $pa_config->{"pandora_master"} = $1; }
+		elsif ($parametro =~ m/^master\s([0-9])/i) { 
+			$pa_config->{"pandora_master"} = $1; 
+		}
+		elsif ($parametro =~ m/^icmp_checks\s([0-9])/i) { 
+			$pa_config->{"icmp_checks"} = $1; 
+		}
 		elsif ($parametro =~ m/^snmpconsole\s([0-9])/i) {
 			$pa_config->{"snmpconsole"} = $1;
 		}