diff --git a/src/main/java/com/intel/jndn/management/Nfdc.java b/src/main/java/com/intel/jndn/management/Nfdc.java
index 807ef90..aba6c4f 100644
--- a/src/main/java/com/intel/jndn/management/Nfdc.java
+++ b/src/main/java/com/intel/jndn/management/Nfdc.java
@@ -13,30 +13,29 @@
  */
 package com.intel.jndn.management;
 
+import com.intel.jndn.management.enums.LocalControlHeader;
 import com.intel.jndn.management.enums.RouteOrigin;
 import com.intel.jndn.management.helpers.FetchHelper;
 import com.intel.jndn.management.helpers.StatusDatasetHelper;
 import com.intel.jndn.management.types.FaceStatus;
 import com.intel.jndn.management.types.FibEntry;
 import com.intel.jndn.management.types.ForwarderStatus;
-import com.intel.jndn.management.enums.LocalControlHeader;
 import com.intel.jndn.management.types.RibEntry;
 import com.intel.jndn.management.types.StrategyChoice;
+import net.named_data.jndn.ControlParameters;
+import net.named_data.jndn.ControlResponse;
+import net.named_data.jndn.Data;
+import net.named_data.jndn.Face;
+import net.named_data.jndn.ForwardingFlags;
+import net.named_data.jndn.Interest;
+import net.named_data.jndn.KeyLocator;
+import net.named_data.jndn.Name;
+import net.named_data.jndn.encoding.EncodingException;
+import net.named_data.jndn.security.SecurityException;
 
 import java.io.IOException;
 import java.util.List;
 
-import net.named_data.jndn.ControlResponse;
-import net.named_data.jndn.Data;
-import net.named_data.jndn.Interest;
-import net.named_data.jndn.Name;
-import net.named_data.jndn.KeyLocator;
-import net.named_data.jndn.Face;
-import net.named_data.jndn.ControlParameters;
-import net.named_data.jndn.ForwardingFlags;
-import net.named_data.jndn.encoding.EncodingException;
-import net.named_data.jndn.security.SecurityException;
-
 /**
  * Helper class for interacting with an NDN forwarder daemon; see
  * <a href="http://redmine.named-data.net/projects/nfd/wiki/Management">NFD Management</a>
@@ -125,7 +124,8 @@
     try {
       List<Data> segments = FetchHelper.getSegmentedData(face, new Name("/localhost/nfd/rib/list"));
       return StatusDatasetHelper.wireDecode(segments, RibEntry.class);
-    } catch (IOException e) {
+    } catch (ArrayIndexOutOfBoundsException | IOException e) {
+      // TODO: remove ArrayIndexOutOfBoundsException after fixing bug in MockFace
       throw new ManagementException(e.getMessage(), e);
     }
   }
@@ -554,7 +554,7 @@
     // forwarder must have command signing info set
     try {
       face.makeCommandInterest(interest);
-    } catch (SecurityException e) {
+    } catch (NullPointerException | SecurityException e) {
       throw new IllegalArgumentException("Failed to make command interest; ensure command signing info is set on the " +
         "face.", e);
     }
diff --git a/src/main/java/com/intel/jndn/management/helpers/FetchHelper.java b/src/main/java/com/intel/jndn/management/helpers/FetchHelper.java
index 7670771..2b92a54 100644
--- a/src/main/java/com/intel/jndn/management/helpers/FetchHelper.java
+++ b/src/main/java/com/intel/jndn/management/helpers/FetchHelper.java
@@ -121,7 +121,7 @@
 
     try {
       data.getName().get(SEGMENT_NAME_COMPONENT_OFFSET).toSegment();
-    } catch (EncodingException e) {
+    } catch (ArrayIndexOutOfBoundsException | EncodingException e) {
       throw new IOException("Retrieved data does not have segment number as the last name component", e);
     }
     if (data.getName().size() != prefix.size() + 2) {
diff --git a/src/main/java/com/intel/jndn/management/types/FaceStatus.java b/src/main/java/com/intel/jndn/management/types/FaceStatus.java
index d7550cc..b531c97 100644
--- a/src/main/java/com/intel/jndn/management/types/FaceStatus.java
+++ b/src/main/java/com/intel/jndn/management/types/FaceStatus.java
@@ -431,4 +431,34 @@
     this.outBytes = outBytes;
     return this;
   }
+
+  @Override
+  public String toString() {
+    StringBuilder ret = new StringBuilder();
+
+    ret.append("FaceStatus(")
+       .append("FaceID: ").append(getFaceId()).append(",\n")
+       .append("RemoteUri: ").append(getRemoteUri()).append(",\n")
+       .append("LocalUri: ").append(getLocalUri()).append(",\n");
+
+    if (hasExpirationPeriod()) {
+      ret.append("ExpirationPeriod: ").append(getExpirationPeriod()).append(" milliseconds,\n");
+    } else {
+      ret.append("ExpirationPeriod: infinite,\n");
+    }
+
+    ret.append("FaceScope: ").append(getFaceScope()).append(",\n")
+       .append("FacePersistency: ").append(getFacePersistency()).append(",\n")
+       .append("LinkType: ").append(getLinkType()).append(",\n")
+       .append("Counters: { Interests: {in: ").append(getNInInterests()).append(", ")
+       .append("out: ").append(getNOutInterests()).append("},\n")
+       .append("            Data: {in: ").append(getNInDatas()).append(", ")
+       .append("out: ").append(getNOutDatas()).append("},\n")
+       .append("            Nack: {in: ").append(getNInNacks()).append(", ")
+       .append("out: ").append(getNOutNacks()).append("},\n")
+       .append("            bytes: {in: ").append(getNInBytes()).append(", ")
+       .append("out: ").append(getNOutBytes()).append("} }\n")
+       .append(")");
+    return ret.toString();
+  }
 }
