diff --git a/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java b/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java
index e0195352347e88dd01434a0edd89d05f08677052..980e6146b6c31fa49c6a03a6d03aee508e5cfef2 100644
--- a/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java
+++ b/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java
@@ -63,6 +63,7 @@ public class NtpTimeProvider implements TimeProvider {
     this.scheduledExecutorService = scheduledExecutorService;
     wallTimeProvider = new WallTimeProvider();
     ntpClient = new NTPUDPClient();
+    ntpClient.setDefaultTimeout(500); // timeout to 500ms
     offset = 0;
     scheduledFuture = null;
   }
@@ -70,12 +71,19 @@ public class NtpTimeProvider implements TimeProvider {
   /**
    * Update the current time offset from the configured NTP host.
    * 
-   * @throws IOException
+   * @throws IOException : if ntpClient.getTime() fails too often.
    */
   public void updateTime() throws IOException {
     List<Long> offsets = Lists.newArrayList();
+    int failures = 0;
     for (int i = 0; i < SAMPLE_SIZE; i++) {
-      offsets.add(computeOffset());
+      try { 
+    	  offsets.add(computeOffset());
+      } catch (IOException e) {
+    	  if ( ++failures > SAMPLE_SIZE/2 ) {
+    		  throw e;
+    	  }
+      }
     }
     offset = CollectionMath.median(offsets);
     log.info(String.format("NTP time offset: %d ms", offset));
diff --git a/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java b/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java
index ea320ab408ae9cf263d34620bb98128f5b707caa..2ad7e253f9ba1275e27f17e70a3e4d81652f53f0 100644
--- a/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java
+++ b/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java
@@ -45,7 +45,7 @@ public class NtpTimeProviderTest extends RosTest {
     nodeMainExecutor.execute(new AbstractNodeMain() {
       @Override
       public GraphName getDefaultNodeName() {
-        return GraphName.of("node");
+        return GraphName.of("ntp_time_provider");
       }
 
       @Override
@@ -53,7 +53,6 @@ public class NtpTimeProviderTest extends RosTest {
         try {
           ntpTimeProvider.updateTime();
         } catch (IOException e) {
-          System.out.println("Dude");
           // Ignored. This is only a sanity check.
         }
         ntpTimeProvider.getCurrentTime();
@@ -62,6 +61,8 @@ public class NtpTimeProviderTest extends RosTest {
         latch.countDown();
       }
     }, nodeConfiguration);
-    assertTrue(latch.await(1, TimeUnit.SECONDS));
+    boolean result = latch.await(10, TimeUnit.SECONDS);
+    //System.out.println("Latch waiting : " + latch.getCount() + " " + result + " [" + System.currentTimeMillis() + "]");
+    assertTrue(result);
   }
 }