diff --git a/crunch-hbase/src/it/java/org/apache/crunch/io/hbase/RegionLocationTableTest.java b/crunch-hbase/src/it/java/org/apache/crunch/io/hbase/RegionLocationTableTest.java
index 0b44994..e018e74 100644
--- a/crunch-hbase/src/it/java/org/apache/crunch/io/hbase/RegionLocationTableTest.java
+++ b/crunch-hbase/src/it/java/org/apache/crunch/io/hbase/RegionLocationTableTest.java
@@ -128,10 +128,36 @@
         deserialized.getPreferredNodeForRow(new byte[] { 10 }));
   }
 
+  @Test
+  public void testNullRegionInfo() {
+    RegionLocationTable table = RegionLocationTable.create(TABLE_NAME,
+        ImmutableList.of(location(null, serverName("serverA"))));
+    assertNull(
+        table.getPreferredNodeForRow(new byte[] { 15 }));
+  }
+
+  @Test
+  public void testNullServerName() {
+    RegionLocationTable table = RegionLocationTable.create(TABLE_NAME,
+        ImmutableList.of(location(regionInfo(new byte[] { 10 }, new byte[] { 20 }), null)));
+    assertNull(
+        table.getPreferredNodeForRow(new byte[] { 15 }));
+  }
+
   private static HRegionLocation location(byte[] startKey, byte[] endKey, String hostName) {
-    return new HRegionLocation(
-        new HRegionInfo(TableName.valueOf(TABLE_NAME), startKey, endKey),
-        ServerName.valueOf(hostName, 60020, System.currentTimeMillis()));
+    return location(regionInfo(startKey, endKey), serverName(hostName));
+  }
+
+  private static HRegionLocation location(HRegionInfo regionInfo, ServerName serverName) {
+    return new HRegionLocation(regionInfo, serverName);
+  }
+
+  private static HRegionInfo regionInfo(byte[] startKey, byte[] endKey) {
+    return new HRegionInfo(TableName.valueOf(TABLE_NAME), startKey, endKey);
+  }
+
+  private static ServerName serverName(String hostName) {
+    return ServerName.valueOf(hostName, 60020, System.currentTimeMillis());
   }
 
 }
\ No newline at end of file
diff --git a/crunch-hbase/src/main/java/org/apache/crunch/io/hbase/RegionLocationTable.java b/crunch-hbase/src/main/java/org/apache/crunch/io/hbase/RegionLocationTable.java
index fa012af..05724fa 100644
--- a/crunch-hbase/src/main/java/org/apache/crunch/io/hbase/RegionLocationTable.java
+++ b/crunch-hbase/src/main/java/org/apache/crunch/io/hbase/RegionLocationTable.java
@@ -29,7 +29,9 @@
 
 import com.google.common.collect.Maps;
 import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.util.Bytes;
 
 /**
@@ -54,13 +56,18 @@
   public static RegionLocationTable create(String tableName, List<HRegionLocation> regionLocationList) {
     NavigableMap<byte[], String> regionStartToServerHostName = Maps.newTreeMap(Bytes.BYTES_COMPARATOR);
     for (HRegionLocation regionLocation : regionLocationList) {
-      byte[] startKey = regionLocation.getRegionInfo().getStartKey();
+      HRegionInfo regionInfo = regionLocation.getRegionInfo();
+      if (regionInfo == null) {
+        continue;
+      }
+      byte[] startKey = regionInfo.getStartKey();
       if (startKey == null) {
         startKey = HConstants.EMPTY_START_ROW;
       }
-      regionStartToServerHostName.put(
-          startKey,
-          regionLocation.getServerName().getHostname());
+      ServerName serverName = regionLocation.getServerName();
+      if (serverName != null) {
+        regionStartToServerHostName.put(startKey, serverName.getHostname());
+      }
     }
     return new RegionLocationTable(tableName, regionStartToServerHostName);
   }
