diff --git a/connectors/vmware/centreon_esx_client.pl b/connectors/vmware/centreon_esx_client.pl
index ff13233b2..ef158e542 100644
--- a/connectors/vmware/centreon_esx_client.pl
+++ b/connectors/vmware/centreon_esx_client.pl
@@ -6,7 +6,7 @@ use IO::Socket;
 use Getopt::Long;
 
 my $PROGNAME = $0;
-my $VERSION = "1.4";
+my $VERSION = "1.4.1";
 my %ERRORS = ('OK' => 0, 'WARNING' => 1, 'CRITICAL' => 2, 'UNKNOWN' => 3, 'DEPENDENT' => 4);
 my $socket;
 
@@ -702,7 +702,7 @@ my $status_return = $1;
 $return =~ s/^(-?[0-9]*?)\|//;
 print $return . "\n";
 
-if ($status_return == -1) {
+if ($status_return < 0) {
     $status_return = 3;
 }
 exit $status_return;
diff --git a/connectors/vmware/centreon_esxd-conf.pm b/connectors/vmware/centreon_esxd-conf.pm
index f8c0d57da..a6bd08e1f 100644
--- a/connectors/vmware/centreon_esxd-conf.pm
+++ b/connectors/vmware/centreon_esxd-conf.pm
@@ -1,10 +1,10 @@
 
-$centreonesxd_config = {
+%centreonesxd_config = (
         vsphere_server => {
                         'default' => {'url' => 'https://vcenter/sdk',
-                                     'username' => 'qgarnier@merethis.net',
+                                     'username' => 'XXXXXX',
                                      'password' => 'XXXXXX'}
                         }
-};
+);
 
 1;
diff --git a/connectors/vmware/centreonesxd.pm b/connectors/vmware/centreonesxd.pm
index b83ca05f3..3734575e1 100644
--- a/connectors/vmware/centreonesxd.pm
+++ b/connectors/vmware/centreonesxd.pm
@@ -517,7 +517,7 @@ sub run {
                 }
                 my @results = split(/\|/, $data_element);
                 my ($id, $counter) = split(/\./, $results[0]);
-                if (!defined($self->{sockets}->{$id}) || $self->{counter} != $self->{sockets}->{$id}->{'counter'}) {
+                if (!defined($self->{sockets}->{$id}) || $counter != $self->{sockets}->{$id}->{'counter'}) {
                     $self->{logger}->writeLogInfo("Too much time to get response.");
                     next;
                 }
diff --git a/connectors/vmware/lib/cmdcpuhost.pm b/connectors/vmware/lib/cmdcpuhost.pm
index 01e4f1a07..58ad1e215 100644
--- a/connectors/vmware/lib/cmdcpuhost.pm
+++ b/connectors/vmware/lib/cmdcpuhost.pm
@@ -64,9 +64,7 @@ sub run {
     my %filters = ('name' => $self->{lhost});
     my @properties = ('name', 'runtime.connectionState');
     my $result = centreon::esxd::common::get_entities_host($self->{obj_esxd}, 'HostSystem', \%filters, \@properties);
-    if (!defined($result)) {
-        return ;
-    }
+    return if (!defined($result));
 
     return if (centreon::esxd::common::host_state($self->{obj_esxd}, $self->{lhost}, 
                                                 $$result[0]->{'runtime.connectionState'}->val) == 0);
@@ -77,7 +75,8 @@ sub run {
                         $$result[0], 
                         [{'label' => 'cpu.usage.average', 'instances' => \@instances}],
                         $self->{obj_esxd}->{perfcounter_speriod});
-
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
+    
     my $status = 0; # OK
     my $output = '';
     my $total_cpu_average = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'cpu.usage.average'}->{'key'} . ":"}[0] * 0.01));
diff --git a/connectors/vmware/lib/cmdcpuvm.pm b/connectors/vmware/lib/cmdcpuvm.pm
index 85b79904f..e5ac7278c 100644
--- a/connectors/vmware/lib/cmdcpuvm.pm
+++ b/connectors/vmware/lib/cmdcpuvm.pm
@@ -78,6 +78,7 @@ sub run {
                         [{'label' => 'cpu.usage.average', 'instances' => \@instances},
                          {'label' => 'cpu.usagemhz.average', 'instances' => \@instances}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $status = 0; # OK
     my $output = '';
diff --git a/connectors/vmware/lib/cmddatastoreio.pm b/connectors/vmware/lib/cmddatastoreio.pm
index d4563b806..e610d50a0 100644
--- a/connectors/vmware/lib/cmddatastoreio.pm
+++ b/connectors/vmware/lib/cmddatastoreio.pm
@@ -74,6 +74,7 @@ sub run {
                         [{'label' => 'datastore.read.average', 'instances' => ['']},
                          {'label' => 'datastore.write.average', 'instances' => ['']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $read_counter = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'datastore.read.average'}->{'key'} . ":"}[0]));    
     my $write_counter = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'datastore.write.average'}->{'key'} . ":"}[0]));
diff --git a/connectors/vmware/lib/cmddatastoreshost.pm b/connectors/vmware/lib/cmddatastoreshost.pm
index 0240623a9..0191e3385 100644
--- a/connectors/vmware/lib/cmddatastoreshost.pm
+++ b/connectors/vmware/lib/cmddatastoreshost.pm
@@ -100,6 +100,7 @@ sub run {
                         [{'label' => 'datastore.totalReadLatency.average', 'instances' => ['*']},
                         {'label' => 'datastore.totalWriteLatency.average', 'instances' => ['*']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $status = 0; # OK
     my $output = '';
diff --git a/connectors/vmware/lib/cmddatastoresvm.pm b/connectors/vmware/lib/cmddatastoresvm.pm
index 549b6ebb7..c499cee3e 100644
--- a/connectors/vmware/lib/cmddatastoresvm.pm
+++ b/connectors/vmware/lib/cmddatastoresvm.pm
@@ -108,6 +108,7 @@ sub run {
                         [{'label' => 'disk.numberRead.summation', 'instances' => ['*']},
                         {'label' => 'disk.numberWrite.summation', 'instances' => ['*']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     foreach (keys %$values) {
         my ($id, $disk_name) = split(/:/);
diff --git a/connectors/vmware/lib/cmdmemhost.pm b/connectors/vmware/lib/cmdmemhost.pm
index 975736bb3..b7d90e824 100644
--- a/connectors/vmware/lib/cmdmemhost.pm
+++ b/connectors/vmware/lib/cmdmemhost.pm
@@ -77,6 +77,7 @@ sub run {
                         [{'label' => 'mem.consumed.average', 'instances' => ['']},
                          {'label' => 'mem.overhead.average', 'instances' => ['']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $mem_used = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.consumed.average'}->{'key'} . ":"}[0]));    
     my $mem_overhead = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.overhead.average'}->{'key'} . ":"}[0]));
diff --git a/connectors/vmware/lib/cmdmemvm.pm b/connectors/vmware/lib/cmdmemvm.pm
index 801abbcc1..25d32c288 100644
--- a/connectors/vmware/lib/cmdmemvm.pm
+++ b/connectors/vmware/lib/cmdmemvm.pm
@@ -81,6 +81,7 @@ sub run {
                          {'label' => 'mem.consumed.average', 'instances' => ['']},
                          {'label' => 'mem.shared.average', 'instances' => ['']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $mem_consumed = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.consumed.average'}->{'key'} . ":"}[0]));
     my $mem_active = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.active.average'}->{'key'} . ":"}[0]));
diff --git a/connectors/vmware/lib/cmdnethost.pm b/connectors/vmware/lib/cmdnethost.pm
index e3a996259..7c1a80af1 100644
--- a/connectors/vmware/lib/cmdnethost.pm
+++ b/connectors/vmware/lib/cmdnethost.pm
@@ -94,6 +94,7 @@ sub run {
                         [{'label' => 'net.received.average', 'instances' => [$self->{pnic}]},
                          {'label' => 'net.transmitted.average', 'instances' => [$self->{pnic}]}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $traffic_in = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'net.received.average'}->{'key'} . ":" . $self->{pnic}}[0]));    
     my $traffic_out = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'net.transmitted.average'}->{'key'} . ":" . $self->{pnic}}[0]));
diff --git a/connectors/vmware/lib/cmdswaphost.pm b/connectors/vmware/lib/cmdswaphost.pm
index 15d6b7812..8384896e8 100644
--- a/connectors/vmware/lib/cmdswaphost.pm
+++ b/connectors/vmware/lib/cmdswaphost.pm
@@ -75,6 +75,7 @@ sub run {
                         [{'label' => 'mem.swapinRate.average', 'instances' => ['']},
                          {'label' => 'mem.swapoutRate.average', 'instances' => ['']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $swap_in = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.swapinRate.average'}->{'key'} . ":"}[0]));
     my $swap_out = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.swapoutRate.average'}->{'key'} . ":"}[0]));
diff --git a/connectors/vmware/lib/cmdswapvm.pm b/connectors/vmware/lib/cmdswapvm.pm
index 4db072210..7c52a1e84 100644
--- a/connectors/vmware/lib/cmdswapvm.pm
+++ b/connectors/vmware/lib/cmdswapvm.pm
@@ -76,6 +76,7 @@ sub run {
                         [{'label' => 'mem.swapinRate.average', 'instances' => ['']},
                          {'label' => 'mem.swapoutRate.average', 'instances' => ['']}],
                         $self->{obj_esxd}->{perfcounter_speriod});
+    return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
 
     my $swap_in = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.swapinRate.average'}->{'key'} . ":"}[0]));
     my $swap_out = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'mem.swapoutRate.average'}->{'key'} . ":"}[0]));
diff --git a/connectors/vmware/lib/common.pm b/connectors/vmware/lib/common.pm
index b8ac42ed3..95c8e5e1e 100644
--- a/connectors/vmware/lib/common.pm
+++ b/connectors/vmware/lib/common.pm
@@ -32,6 +32,19 @@ sub response_client1 {
     close $rh;
 }
 
+sub vmware_error {
+    my ($obj_esxd, $lerror) = @_;
+
+    $obj_esxd->{logger}->writeLogError("'" . $obj_esxd->{whoaim} . "' $lerror");
+    $lerror =~ s/\n/ /g;
+    if ($lerror =~ /NoPermissionFault/i) {
+        $obj_esxd->print_response("-2|Error: Not enough permissions\n");
+    } else {
+        $obj_esxd->print_response("-1|Error: " . $lerror . "\n");
+    }
+    return undef;
+}
+
 sub connect_vsphere {
     my ($logger, $whoaim, $timeout_vsphere, $session1, $service_url, $username, $password) = @_;
     $logger->writeLogInfo("'$whoaim' Vsphere connection in progress");
@@ -86,10 +99,7 @@ sub get_views {
         $results = $obj_esxd->{session1}->get_views(mo_ref_array => $_[0], properties => $_[1]);
     };
     if ($@) {
-        $obj_esxd->{logger}->writeLogError("'" . $obj_esxd->{whoaim} . "' $@");
-        my $lerror = $@;
-        $lerror =~ s/\n/ /g;
-        $obj_esxd->print_response("-1|Error: " . $lerror . "\n");
+        vmware_error($obj_esxd, $@);
         return undef;
     }
     return $results;
@@ -103,10 +113,7 @@ sub get_view {
         $results = $obj_esxd->{session1}->get_view(mo_ref => $_[0], properties => $_[1]);
     };
     if ($@) {
-        $obj_esxd->{logger}->writeLogError("'" . $obj_esxd->{whoaim} . "' $@");
-        my $lerror = $@;
-        $lerror =~ s/\n/ /g;
-        $obj_esxd->print_response("-1|Error: " . $lerror . "\n");
+        vmware_error($obj_esxd, $@);
         return undef;
     }
     return $results;
@@ -129,10 +136,7 @@ sub search_in_datastore {
                                         searchSpec=>$hostdb_search_spec);
     };
     if ($@) {
-        $obj_esxd->{logger}->writeLogError("'" . $obj_esxd->{whoaim} . "' $@");
-        my $lerror = $@;
-        $lerror =~ s/\n/ /g;
-        $obj_esxd->print_response("-1|Error: " . $lerror . "\n");
+        vmware_error($obj_esxd, $@);
         return undef;
     }
     return $result;
@@ -141,20 +145,22 @@ sub search_in_datastore {
 sub get_perf_metric_ids {
     my $obj_esxd = shift;
     my $perf_names = $_[0];
-    my @filtered_list;
+    my $filtered_list = [];
    
     foreach (@$perf_names) {
         if (defined($obj_esxd->{perfcounter_cache}->{$_->{'label'}})) {
             foreach my $instance (@{$_->{'instances'}}) {
                 my $metric = PerfMetricId->new(counterId => $obj_esxd->{perfcounter_cache}->{$_->{'label'}}{'key'},
                                    instance => $instance);
-                push @filtered_list, $metric;
+                push @$filtered_list, $metric;
             }
         } else {
             $obj_esxd->{logger}->writeLogError("Metric '" . $_->{'label'} . "' unavailable.");
+            $obj_esxd->print_response("-3|Error: Counter doesn't exist. VMware version can be too old.\n");
+            return undef;
         }
     }
-    return \@filtered_list;
+    return $filtered_list;
 }
 
 sub generic_performance_values_historic {
@@ -163,7 +169,8 @@ sub generic_performance_values_historic {
     my %results;
 
     eval {
-        my @perf_metric_ids = get_perf_metric_ids($obj_esxd, $perfs);
+        my $perf_metric_ids = get_perf_metric_ids($obj_esxd, $perfs);
+        return undef if (!defined($perf_metric_ids));
 
         my $perf_query_spec;
         my $tstamp = time();
@@ -174,9 +181,10 @@ sub generic_performance_values_historic {
         my $endTime = sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ",
                 (1900+$t[5]),(1+$t[4]),$t[3],$t[2],$t[1],$t[0]);
         
+   #     $obj_esxd->{logger}->writeLogError(@perf_metric_ids);
         if ($interval == 20) {
             $perf_query_spec = PerfQuerySpec->new(entity => $view,
-                                  metricId => @perf_metric_ids,
+                                  metricId => $perf_metric_ids,
                                   format => 'normal',
                                   intervalId => 20,
                                   startTime => $startTime,
@@ -184,7 +192,7 @@ sub generic_performance_values_historic {
                                   maxSample => 1);
         } else {
             $perf_query_spec = PerfQuerySpec->new(entity => $view,
-                         metricId => @perf_metric_ids,
+                         metricId => $perf_metric_ids,
                          format => 'normal',
                          intervalId => $interval,
                          startTime => $startTime,
@@ -193,8 +201,16 @@ sub generic_performance_values_historic {
                         #maxSample => 1);
         }
         my $perfdata = $obj_esxd->{perfmanager_view}->QueryPerf(querySpec => $perf_query_spec);
+        if (!$$perfdata[0]) {
+            $obj_esxd->print_response("-3|Error: Cannot get value for couters. Maybe there is time sync problem (check the esxd server and the target also).\n");
+            return undef;
+        }
         foreach (@{$$perfdata[0]->value}) {
             $results{$_->id->counterId . ":" . (defined($_->id->instance) ? $_->id->instance : "")} = $_->value;
+            if (!defined($_->value)) {
+                $obj_esxd->print_response("-3|Error: Cannot get value for couters. Maybe there is time sync problem (check the esxd server and the target also).\n");
+                return undef;
+            }
         }
     };
     if ($@) {
@@ -248,10 +264,7 @@ sub get_entities_host {
             $entity_views = $obj_esxd->{session1}->find_entity_views(view_type => $view_type, properties => $properties, filter => $filters);
         };
         if ($@) {
-            $obj_esxd->{logger}->writeLogError("'" . $obj_esxd->{whoaim} . "' $@");
-            my $lerror = $@;
-            $lerror =~ s/\n/ /g;
-            $obj_esxd->print_response("-1|Error: " . Data::Dumper::Dumper($lerror) . "\n");
+            vmware_error($obj_esxd, $@);
             return undef;
         }
     }
@@ -274,6 +287,14 @@ sub get_entities_host {
     return $entity_views;
 }
 
+sub performance_errors {
+    my ($obj_esxd, $values) = @_;
+
+    # Error counter not available or orther from function
+    return 1 if (!defined($values) || scalar(keys(%$values)) <= 0);
+    return 0;
+}
+
 sub datastore_state {
     my ($obj_esxd, $ds, $accessible) = @_;