diff --git a/build.gradle b/build.gradle
index ed2c8c9..ddc709a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -27,10 +27,10 @@
 apply plugin: 'java'
 apply plugin: 'maven'
 apply plugin: 'signing'
-apply plugin: 'checkstyle'
+//apply plugin: 'checkstyle'
 
 group = 'com.intel.jndn.mock'
-version = '1.0.3'
+version = '1.1.0'
 
 sourceCompatibility = JavaVersion.VERSION_1_7
 targetCompatibility = JavaVersion.VERSION_1_7
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();
   }
 }
diff --git a/src/test/java/com/intel/jndn/mock/MockFaceTest.java b/src/test/java/com/intel/jndn/mock/MockFaceTest.java
index 554f937..015da4b 100644
--- a/src/test/java/com/intel/jndn/mock/MockFaceTest.java
+++ b/src/test/java/com/intel/jndn/mock/MockFaceTest.java
@@ -168,8 +168,7 @@
   @Test
   public void testThatTransportConnectsOnPrefixRegistration() throws IOException, SecurityException {
     assertFalse(face.getTransport().getIsConnected());
-    face.registerPrefix(new Name("/fake/prefix"), (OnInterestCallback) null, (OnRegisterFailed) null,
-            (OnRegisterSuccess) null);
+    face.registerPrefix(new Name("/fake/prefix"), null, null, (OnRegisterSuccess) null);
     assertTrue(face.getTransport().getIsConnected());
   }
 
@@ -182,7 +181,7 @@
     final State state = new State();
 
     // connect callback
-    face.registerPrefix(new Name("/fake/prefix"), (OnInterestCallback) null, new OnRegisterFailed() {
+    face.registerPrefix(new Name("/fake/prefix"), null, new OnRegisterFailed() {
       @Override
       public void onRegisterFailed(final Name prefix) {
         state.regFailed = true;
diff --git a/src/test/java/com/intel/jndn/mock/MockForwarderTest.java b/src/test/java/com/intel/jndn/mock/MockForwarderTest.java
index 36bb7a8..6bf09ab 100644
--- a/src/test/java/com/intel/jndn/mock/MockForwarderTest.java
+++ b/src/test/java/com/intel/jndn/mock/MockForwarderTest.java
@@ -24,7 +24,6 @@
 import net.named_data.jndn.OnRegisterFailed;
 import net.named_data.jndn.OnRegisterSuccess;
 import net.named_data.jndn.OnTimeout;
-import net.named_data.jndn.security.KeyChain;
 import org.junit.Test;
 
 import java.io.IOException;
@@ -33,7 +32,8 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Logger;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Andrew Brown, andrew.brown@intel.com
diff --git a/src/test/java/com/intel/jndn/mock/MockKeyChainTest.java b/src/test/java/com/intel/jndn/mock/MockKeyChainTest.java
index 3d8ec6f..1448423 100644
--- a/src/test/java/com/intel/jndn/mock/MockKeyChainTest.java
+++ b/src/test/java/com/intel/jndn/mock/MockKeyChainTest.java
@@ -23,7 +23,7 @@
 /**
  * Test MockKeyChain.
  *
- * @author Andrew Brown <andrew.brown@intel.com>
+ * @author Andrew Brown, andrew.brown@intel.com
  */
 public class MockKeyChainTest {
 
diff --git a/src/test/java/com/intel/jndn/mock/forwarder/MockForwarderVisibilityTest.java b/src/test/java/com/intel/jndn/mock/forwarder/MockForwarderVisibilityTest.java
new file mode 100644
index 0000000..c38fa6e
--- /dev/null
+++ b/src/test/java/com/intel/jndn/mock/forwarder/MockForwarderVisibilityTest.java
@@ -0,0 +1,45 @@
+/*
+ * jndn-mock
+ * Copyright (c) 2016, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 3, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ */
+
+package com.intel.jndn.mock.forwarder;
+
+import com.intel.jndn.mock.MockForwarder;
+import net.named_data.jndn.Face;
+import net.named_data.jndn.ForwardingFlags;
+import net.named_data.jndn.Interest;
+import net.named_data.jndn.Name;
+import net.named_data.jndn.transport.Transport;
+import org.junit.Test;
+
+/**
+ * Ensure MockForwarder methods are visible publicly; does not test functionality
+ *
+ * @author Andrew Brown, andrew.brown@intel.com
+ */
+public class MockForwarderVisibilityTest {
+
+  @Test
+  public void ensureVisibility() {
+    MockForwarder forwarder = new MockForwarder();
+
+    forwarder.connect();
+
+    forwarder.register(new Name("/a/b/c"), new MockForwarder.OnInterestReceived() {
+      @Override
+      public void in(Interest interest, Transport destinationTransport, Face sourceFace) {
+        // do nothing
+      }
+    }, new ForwardingFlags());
+  }
+}
\ No newline at end of file
