diff --git a/src/main/java/com/intel/jndn/mock/MockFace.java b/src/main/java/com/intel/jndn/mock/MockFace.java
index 16ffd52..dc1661a 100644
--- a/src/main/java/com/intel/jndn/mock/MockFace.java
+++ b/src/main/java/com/intel/jndn/mock/MockFace.java
@@ -36,8 +36,8 @@
 /**
  * A client-side face for unit testing.
  *
- * @author Alexander Afanasyev, <aa@cs.ucla.edu>
- * @author Andrew Brown <andrew.brown@intel.com>
+ * @author Alexander Afanasyev, aa@cs.ucla.edu
+ * @author Andrew Brown, andrew.brown@intel.com
  */
 public class MockFace extends Face {
   /**
@@ -163,7 +163,7 @@
    *
    * @throws SecurityException should not be thrown by this test class
    */
-  public MockFace() throws SecurityException {
+  public MockFace() {
     this(DEFAULT_OPTIONS);
   }
 
diff --git a/src/main/java/com/intel/jndn/mock/MockForwarder.java b/src/main/java/com/intel/jndn/mock/MockForwarder.java
index f2f2316..11ea73e 100644
--- a/src/main/java/com/intel/jndn/mock/MockForwarder.java
+++ b/src/main/java/com/intel/jndn/mock/MockForwarder.java
@@ -23,13 +23,9 @@
 import net.named_data.jndn.Face;
 import net.named_data.jndn.ForwardingFlags;
 import net.named_data.jndn.Interest;
-import net.named_data.jndn.InterestFilter;
 import net.named_data.jndn.Name;
 import net.named_data.jndn.OnData;
-import net.named_data.jndn.OnInterestCallback;
 import net.named_data.jndn.OnNetworkNack;
-import net.named_data.jndn.OnRegisterFailed;
-import net.named_data.jndn.OnRegisterSuccess;
 import net.named_data.jndn.OnTimeout;
 import net.named_data.jndn.encoding.WireFormat;
 import net.named_data.jndn.security.KeyChain;
@@ -43,6 +39,9 @@
 import java.util.logging.Logger;
 
 /**
+ * A mock forwarder for use in testing applications without network IO. It does not fully implement NFD functionality
+ * but currently does allow registering prefixes (to receive sent interests) and limited forwarding flag support.
+ *
  * @author Andrew Brown, andrew.brown@intel.com
  */
 public class MockForwarder {
@@ -53,7 +52,7 @@
   private final Pit pit = new PitImpl();
 
   /**
-   * Forwarding information base API; use this for recording FIB entries
+   * Forwarding information base API; use this for recording FIB entries.
    */
   public interface Fib {
     /**
@@ -70,7 +69,7 @@
   }
 
   /**
-   * Entry in the FIB; use this for forwarding interest packets
+   * Entry in the FIB; use this for forwarding interest packets.
    */
   public interface FibEntry {
     /**
@@ -91,7 +90,7 @@
   }
 
   /**
-   * Pending interest table API; use this for recording incoming interests
+   * Pending interest table API; use this for recording incoming interests.
    */
   public interface Pit {
     /**
@@ -113,7 +112,7 @@
   }
 
   /**
-   * Entry in the PIT; use this for forwarding data packets
+   * Entry in the PIT; use this for forwarding data packets.
    */
   public interface PitEntry {
     /**
@@ -136,6 +135,15 @@
    * Mock-specific API for recording the source and destination of incoming interests
    */
   public interface OnInterestReceived {
+    /**
+     * Called when the mock forwarder receives incoming interests from a face; see {@link #register(Name,
+     * OnInterestReceived, ForwardingFlags)}.
+     *
+     * @param interest the incoming interest
+     * @param destinationTransport the transport that sent the interest; necessary for the forwarder to be able to
+     * register prefixes (TODO in the future this should also be a {@link Face}, perhaps rename as remoteFace).
+     * @param sourceFace the face receiving the interest; use {@link Face#putData(Data)} to reply
+     */
     void in(Interest interest, Transport destinationTransport, Face sourceFace);
   }
 
@@ -155,7 +163,7 @@
   public Face connect() {
     MockForwarderFace face = new MockForwarderFace();
     face.setCommandSigningInfo(keyChain, certName);
-    LOGGER.info("Connected face with: " + face.getTransport());
+    LOGGER.info("Connected new face using transport: " + face.getTransport());
     return face;
   }
 
@@ -163,13 +171,14 @@
     Face registrationFace = this.connect();
     FibEntry registrationEntry = new LocalFibEntry(prefix, callback, registrationFace, flags);
     fib.add(registrationEntry);
+    LOGGER.info("Registered new prefix to receive interests: " + prefix);
   }
 
   private class MockForwarderFace extends Face implements MeasurableFace {
-    Collection<Interest> sentInterests = new ArrayList<>();
-    Collection<Data> sentDatas = new ArrayList<>();
-    Collection<Interest> receivedInterests = new ArrayList<>();
-    Collection<Data> receivedDatas = new ArrayList<>();
+    final Collection<Interest> sentInterests = new ArrayList<>();
+    final Collection<Data> sentDatas = new ArrayList<>();
+    final Collection<Interest> receivedInterests = new ArrayList<>();
+    final Collection<Data> receivedDatas = new ArrayList<>();
 
     MockForwarderFace() {
       super(new MockTransport(), null);
diff --git a/src/main/java/com/intel/jndn/mock/MockKeyChain.java b/src/main/java/com/intel/jndn/mock/MockKeyChain.java
index 7adc270..30710e1 100644
--- a/src/main/java/com/intel/jndn/mock/MockKeyChain.java
+++ b/src/main/java/com/intel/jndn/mock/MockKeyChain.java
@@ -26,7 +26,7 @@
 /**
  * Create an in-memory key chain for use in NDN-related tests.
  *
- * @author Andrew Brown <andrew.brown@intel.com>
+ * @author Andrew Brown, andrew.brown@intel.com
  */
 public final class MockKeyChain {
   /**
diff --git a/src/main/java/com/intel/jndn/mock/MockTransport.java b/src/main/java/com/intel/jndn/mock/MockTransport.java
index da891d3..7e788a0 100644
--- a/src/main/java/com/intel/jndn/mock/MockTransport.java
+++ b/src/main/java/com/intel/jndn/mock/MockTransport.java
@@ -28,8 +28,8 @@
  * Non-public class for handling data buffering in NDN unit tests; works in
  * conjunction with {@link MockFace}.
  *
- * @author Alexander Afanasyev, <aa@cs.ucla.edu>
- * @author Andrew Brown <andrew.brown@intel.com>
+ * @author Alexander Afanasyev, aa@cs.ucla.edu
+ * @author Andrew Brown, andrew.brown@intel.com
  */
 public class MockTransport extends Transport {
   private OnSendBlockSignal onSendBlock;
diff --git a/src/main/java/com/intel/jndn/mock/forwarder/PitEntryImpl.java b/src/main/java/com/intel/jndn/mock/forwarder/PitEntryImpl.java
index 2c54957..d5e3a5b 100644
--- a/src/main/java/com/intel/jndn/mock/forwarder/PitEntryImpl.java
+++ b/src/main/java/com/intel/jndn/mock/forwarder/PitEntryImpl.java
@@ -27,7 +27,7 @@
 final class PitEntryImpl implements MockForwarder.PitEntry {
 
   private static final Logger LOGGER = Logger.getLogger(PitEntryImpl.class.getName());
-  public final Interest interest;
+  private final Interest interest;
   private final MockTransport transport;
   private boolean satisfied = false;
 
diff --git a/src/main/java/com/intel/jndn/mock/forwarder/PitImpl.java b/src/main/java/com/intel/jndn/mock/forwarder/PitImpl.java
index f867ac8..81eb15f 100644
--- a/src/main/java/com/intel/jndn/mock/forwarder/PitImpl.java
+++ b/src/main/java/com/intel/jndn/mock/forwarder/PitImpl.java
@@ -24,6 +24,8 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
+ * Naive implementation of a pending interest table
+ *
  * @author Andrew Brown, andrew.brown@intel.com
  */
 public class PitImpl implements MockForwarder.Pit {
@@ -52,16 +54,6 @@
 
   public boolean has(Interest interest) {
     List<MockForwarder.PitEntry> entries = pit.get(interest.getName());
-
-    // TODO simplify
-    if (entries != null && entries.size() > 0) {
-      return true;
-//        for(int i = 0; i < entries.size(); i++){
-//          if(entries.get(i).interest.equals(interest)){
-//            return true;
-//          }
-//        }
-    }
-    return false;
+    return entries != null && !entries.isEmpty();
   }
 }
