diff --git a/AUTHORS.md b/AUTHORS.md
index 583fcb0..c629200 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -3,8 +3,8 @@
 
 ## The primary authors are (and/or have been):
 
-* Ivan Yeo              <ivanyeo@cs.ucla.edu>
 * Alexander Afanasyev   <http://lasr.cs.ucla.edu/afanasyev/index.html>
+* Ivan Yeo              <ivanyeo@cs.ucla.edu>
 
 ## All project authors and contributors
 
@@ -13,7 +13,9 @@
 in NFD Android:
 
 * Lixia Zhang           <http://www.cs.ucla.edu/~lixia/>
-* Beichuan Zhang        <http://www.cs.arizona.edu/~bzhang/>
-* Junxiao Shi           <http://www.cs.arizona.edu/people/shijunxiao/>
+* Beichuan Zhang        <https://www.cs.arizona.edu/~bzhang/>
+* Junxiao Shi           <https://www.cs.arizona.edu/people/shijunxiao/>
 * Yi Huang              <ethanhuang1991@gmail.com>
 * Sanjeev Mehrotra      <smehrotra@ucla.edu>
+* Zhou Tang             <https://www.linkedin.com/in/zhoutang>
+* Eric Newberry         <https://www.cs.arizona.edu/~enewberry/>
diff --git a/app/build.gradle b/app/build.gradle
index cf11041..f86e645 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -149,7 +149,7 @@
     compile('com.intel.jndn.management:jndn-management:1.1.0') {
       exclude group: 'net.named-data', module: 'jndn'
     }
-    compile('net.named-data:jndn-android:0.10') {
+    compile('net.named-data:jndn-android:0.14') {
       exclude group: 'org.xerial'
     }
     compile 'net.named-data.jndn-xx:jndn-xx-util:0.0.1'
diff --git a/app/src/main/java/net/named_data/nfd/MainActivity.java b/app/src/main/java/net/named_data/nfd/MainActivity.java
index 05b1e72..4152545 100644
--- a/app/src/main/java/net/named_data/nfd/MainActivity.java
+++ b/app/src/main/java/net/named_data/nfd/MainActivity.java
@@ -44,7 +44,6 @@
                FaceListFragment.Callbacks,
                RouteListFragment.Callbacks
 {
-
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
@@ -65,6 +64,8 @@
                                               DRAWER_ITEM_FACES));
       items.add(new DrawerFragment.DrawerItem(R.string.drawer_item_routes, 0,
                                               DRAWER_ITEM_ROUTES));
+      items.add(new DrawerFragment.DrawerItem(R.string.drawer_item_ping, 0,
+                                              DRAWER_ITEM_PING));
       //    items.add(new DrawerFragment.DrawerItem(R.string.drawer_item_strategies, 0,
       //                                            DRAWER_ITEM_STRATEGIES));
       items.add(new DrawerFragment.DrawerItem(R.string.drawer_item_logcat, 0,
@@ -147,6 +148,9 @@
         case DRAWER_ITEM_ROUTES:
           fragment = RouteListFragment.newInstance();
           break;
+        case DRAWER_ITEM_PING:
+          fragment = PingClientFragment.newInstance();
+          break;
         // TODO: Placeholders; Fill these in when their fragments have been created
         //    case DRAWER_ITEM_STRATEGIES:
         //      break;
@@ -195,6 +199,7 @@
   public static final int DRAWER_ITEM_GENERAL = 1;
   public static final int DRAWER_ITEM_FACES = 2;
   public static final int DRAWER_ITEM_ROUTES = 3;
-  public static final int DRAWER_ITEM_STRATEGIES = 4;
+  public static final int DRAWER_ITEM_PING = 4;
+  //public static final int DRAWER_ITEM_STRATEGIES = 4;
   public static final int DRAWER_ITEM_LOGCAT = 5;
 }
diff --git a/app/src/main/java/net/named_data/nfd/PingClient.java b/app/src/main/java/net/named_data/nfd/PingClient.java
new file mode 100644
index 0000000..70abdfc
--- /dev/null
+++ b/app/src/main/java/net/named_data/nfd/PingClient.java
@@ -0,0 +1,288 @@
+/* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2015-2016 Regents of the University of California
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
+ * See AUTHORS.md for complete list of NFD Android authors and contributors.
+ *
+ * NFD Android is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.named_data.nfd;
+
+import android.os.Handler;
+import android.os.HandlerThread;
+
+import net.named_data.jndn.Data;
+import net.named_data.jndn.Face;
+import net.named_data.jndn.Interest;
+import net.named_data.jndn.Name;
+import net.named_data.jndn.NetworkNack;
+import net.named_data.jndn.OnData;
+import net.named_data.jndn.OnNetworkNack;
+import net.named_data.jndn.OnTimeout;
+import net.named_data.jndn.encoding.EncodingException;
+import net.named_data.nfd.utils.G;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Locale;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+class PingClient {
+
+  interface PingClientListener {
+    void onPingResponse(final String prefix, final long seq, final double elapsedTime);
+
+    void onPingTimeout(final String prefix, final long seq);
+
+    void onPingNack(final String prefix, final long seq, final NetworkNack.Reason reason);
+
+    void onCalcStatistics(final String msg);
+
+    void onPingFinish();
+  }
+
+  private class PingStats implements Serializable {
+    int dataCount = 0;
+    int timeoutCount = 0;
+    int nackCount = 0;
+
+    double timeSum = 0;
+    double timeMin = Double.MAX_VALUE;
+    double timeMax = 0;
+    double timeSquareSum = 0;
+  }
+
+  private PingStats m_pingStats;
+  private PingClientListener m_listener;
+  private String m_pingPrefix;
+  private long m_pingSeq;
+  private AtomicBoolean m_isRunning = new AtomicBoolean(false);
+  private Handler m_handler;
+  private Face m_face;
+  private HandlerThread m_thread;
+
+  /////////////////////////////////////////////////////////////////////////
+
+  PingClient(String pingPrefix)
+  {
+    m_pingPrefix = pingPrefix;
+    m_pingStats = new PingStats();
+  }
+
+  PingClient(String pingPrefix, Serializable savedStats)
+  {
+    m_pingPrefix = pingPrefix;
+    m_pingStats = (PingStats)savedStats;
+  }
+
+  Serializable getState() {
+    return m_pingStats;
+  }
+
+  void setListener(PingClientListener listener) {
+    m_listener = listener;
+  }
+
+  public void start() {
+    m_thread = new HandlerThread("PingClientThread");
+    m_thread.start();
+    m_handler = new Handler(m_thread.getLooper());
+    m_handler.post(new Runnable() {
+      @Override
+      public void run()
+      {
+        initiate();
+      }
+    });
+  }
+
+  public void stop() {
+    m_isRunning.set(false);
+    // thread will be killed shorty, but don't wait to so we not going to block UI
+  }
+
+  /////////////////////////////////////////////////////////////////////////
+
+  private void notifyPingResponse(String prefix, long seq, double elapsedTime) {
+    if (m_listener == null) return;
+    m_listener.onPingResponse(prefix, seq, elapsedTime);
+  }
+
+  private void notifyPingTimeout(String prefix, long seq) {
+    if (m_listener == null) return;
+    m_listener.onPingTimeout(prefix, seq);
+  }
+
+  private void notifyPingNack(String prefix, long seq, NetworkNack.Reason reason) {
+    if (m_listener == null) return;
+    m_listener.onPingNack(prefix, seq, reason);
+  }
+
+  private void onCalcStatistics(String msg) {
+    if (m_listener == null) return;
+    m_listener.onCalcStatistics(msg);
+  }
+
+  private void notifyPingFinish() {
+    if (m_listener == null) return;
+    m_listener.onPingFinish();
+  }
+
+  private void calculateStatistics() {
+    int count = m_pingStats.dataCount + m_pingStats.timeoutCount + m_pingStats.nackCount;
+    if (count == 0) {
+      return;
+    }
+    StringBuilder stat = new StringBuilder();
+    stat
+      .append("--- ").append(m_pingPrefix).append(" ping statistics ---")
+      .append("\n")
+      .append(count).append(" packets transmitted, ")
+      .append(m_pingStats.dataCount).append(" received, ")
+      .append(m_pingStats.timeoutCount * 100 / count).append("% packet loss, ")
+      .append("time ")
+      .append(String.format(Locale.getDefault(), "%.3f", m_pingStats.timeSum))
+      .append(" ms");
+
+    if (m_pingStats.dataCount != 0 && m_pingStats.timeSum > 0) {
+      double avg = m_pingStats.timeSum * 1.0 / m_pingStats.dataCount;
+      double mdev = Math.sqrt(m_pingStats.timeSquareSum / m_pingStats.dataCount - avg * avg);
+      stat
+        .append("\n")
+        .append("rtt min/avg/max/mdev = ")
+        .append(String.format(Locale.getDefault(), "%.3f", m_pingStats.timeMin))
+        .append("/")
+        .append(String.format(Locale.getDefault(), "%.4f", avg))
+        .append("/")
+        .append(String.format(Locale.getDefault(), "%.3f", m_pingStats.timeMax))
+        .append("/")
+        .append(String.format(Locale.getDefault(), "%.4f", mdev)).append(" ms");
+    }
+
+    onCalcStatistics(stat.toString());
+  }
+
+  private void initiate() {
+    G.Log("INITIATE ping");
+    m_isRunning.set(true);
+    m_pingSeq = Math.abs(new Random().nextLong());
+
+    m_face = new Face();
+    requestNextPing(0);
+    processEvents();
+  }
+
+  private void processEvents() {
+    try {
+      if (m_isRunning.get()) {
+        m_face.processEvents();
+        m_handler.postDelayed(new Runnable() {
+          @Override
+          public void run()
+          {
+            processEvents();
+          }
+        }, 100);
+      }
+      else {
+        terminate();
+      }
+    }
+    catch (IOException e) {
+      G.Log("Face error: " + e.getMessage());
+    }
+    catch (EncodingException e) {
+      G.Log("Encoding error: " + e.getMessage());
+    }
+  }
+
+  private void terminate() {
+    G.Log("TERMINATE ping, " + m_face.hashCode());
+    calculateStatistics();
+    notifyPingFinish();
+
+    m_face.shutdown();
+    m_face = null;
+    m_isRunning.set(false);
+    m_thread.quit();
+  }
+
+  private void requestNextPing(long delay) {
+    m_handler.postDelayed(new Runnable() {
+      @Override
+      public void run()
+      {
+        newPing();
+      }
+    }, delay);
+  }
+
+  private void newPing()
+  {
+    if (m_face == null) {
+      G.Log("Requested new ping, but face is not available");
+      return;
+    }
+    Name name = new Name(m_pingPrefix + "/ping/" + m_pingSeq++);
+    Interest interest = new Interest(name, 1000);
+    interest.setMustBeFresh(true);
+
+    final long startTime = System.nanoTime();
+    try {
+      m_face.expressInterest(interest,
+                             new OnData() {
+                               @Override
+                               public void onData(Interest interest, Data data)
+                               {
+                                 double elapsedTime = (System.nanoTime() - startTime) / 1000000.0;
+                                 ++m_pingStats.dataCount;
+                                 m_pingStats.timeSum += elapsedTime;
+                                 m_pingStats.timeSquareSum += elapsedTime * elapsedTime;
+                                 if (elapsedTime > m_pingStats.timeMax)
+                                   m_pingStats.timeMax = elapsedTime;
+                                 if (elapsedTime < m_pingStats.timeMin)
+                                   m_pingStats.timeMin = elapsedTime;
+
+                                 // Send a result to Screen
+                                 notifyPingResponse(m_pingPrefix, m_pingSeq, elapsedTime);
+                                 requestNextPing(1000);
+                               }
+                             },
+                             new OnTimeout() {
+                               @Override
+                               public void onTimeout(Interest interest)
+                               {
+                                 ++m_pingStats.timeoutCount;
+
+                                 notifyPingTimeout(m_pingPrefix, m_pingSeq);
+                                 requestNextPing(0);
+                               }
+                             },
+                             new OnNetworkNack() {
+                               @Override
+                               public void onNetworkNack(Interest interest, NetworkNack networkNack)
+                               {
+                                 ++m_pingStats.nackCount;
+
+                                 notifyPingNack(m_pingPrefix, m_pingSeq, networkNack.getReason());
+                                 requestNextPing(1000);
+                               }
+                             });
+    }
+    catch (IOException e) {
+      G.Log("Error expressing the interest: " + e.getMessage());
+    }
+  }
+}
diff --git a/app/src/main/java/net/named_data/nfd/PingClientFragment.java b/app/src/main/java/net/named_data/nfd/PingClientFragment.java
new file mode 100644
index 0000000..12f06f6
--- /dev/null
+++ b/app/src/main/java/net/named_data/nfd/PingClientFragment.java
@@ -0,0 +1,313 @@
+/* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2015-2016 Regents of the University of California
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
+ * See AUTHORS.md for complete list of NFD Android authors and contributors.
+ *
+ * NFD Android is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.named_data.nfd;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import net.named_data.jndn.NetworkNack;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Locale;
+
+public class PingClientFragment extends Fragment implements PingClient.PingClientListener {
+
+  private PingClient m_client;
+
+  /**
+   *  View holder object for holding the output.
+   */
+  private static class PingResultEntryViewHolder {
+    public TextView pingResultTextView;
+  }
+
+  /** ListView for displaying ping output in */
+  private ListView m_pingResultListView;
+
+  private EditText m_pingNameEditText;
+
+  private Button m_pingStartButton;
+  private boolean m_isStartState = true;
+
+  /** Customized ListAdapter for controlling ping output */
+  private PingResultListAdapter m_pingResultListAdapter;
+
+  private final String TAG_PING_STATUS = "PingStatus";
+  private final String TAG_PING_NAME = "PingName";
+  private final String TAG_PING_DATA = "PingData";
+  private final String TAG_PING_STATE = "PingState";
+
+  /////////////////
+
+  public static PingClientFragment newInstance() {
+    return new PingClientFragment();
+  }
+
+  @Override
+  public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+  }
+
+  @Override
+  public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                           Bundle savedInstanceState) {
+    // Inflate the layout for this fragment
+    View v = inflater.inflate(R.layout.fragment_ping_client, container, false);
+
+    // Get UI Elements
+    m_pingResultListView = (ListView) v.findViewById(R.id.pingResult);
+
+    m_pingNameEditText = (EditText) v.findViewById(R.id.pingName);
+    m_pingStartButton = (Button) v.findViewById(R.id.pingStart);
+    m_pingStartButton.setOnClickListener(new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+          InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+          imm.hideSoftInputFromWindow(m_pingNameEditText.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
+          if (m_isStartState) {
+            setButtonState(false);
+            String pingPrefix = m_pingNameEditText.getText().toString();
+
+            m_pingResultListAdapter.clearMessages();
+            m_pingResultListAdapter.addMessage("PING " + pingPrefix);
+            m_pingResultListView.setSelection(m_pingResultListAdapter.getCount() - 1);
+
+            m_client = new PingClient(pingPrefix);
+            m_client.setListener(PingClientFragment.this);
+            m_client.start();
+          } else {
+            setButtonState(true);
+            if (m_client != null) {
+              m_client.stop();
+            }
+          }
+        }
+      });
+
+    return v;
+  }
+
+  private void setButtonState(boolean isStartState)
+  {
+    if (isStartState) {
+      m_pingStartButton.setText(R.string.start);
+    }
+    else {
+      m_pingStartButton.setText(R.string.stop);
+    }
+    m_isStartState = isStartState;
+  }
+
+  @Override
+  public void onActivityCreated(@Nullable Bundle savedInstanceState)
+  {
+    super.onActivityCreated(savedInstanceState);
+    if (m_pingResultListAdapter == null) {
+      m_pingResultListAdapter = new PingResultListAdapter(getActivity());
+    }
+    m_pingResultListView.setAdapter(m_pingResultListAdapter);
+
+    if (savedInstanceState != null) {
+      setButtonState(savedInstanceState.getBoolean(TAG_PING_STATUS));
+      m_pingNameEditText.setText(savedInstanceState.getString(TAG_PING_NAME));
+      m_pingResultListAdapter.setData(savedInstanceState.getStringArrayList(TAG_PING_DATA));
+
+      Serializable state = savedInstanceState.getSerializable(TAG_PING_STATE);
+      if (!m_isStartState && state != null) {
+        m_client = new PingClient(m_pingNameEditText.getText().toString(), state);
+      }
+    }
+  }
+
+  @Override
+  public void onStop() {
+    super.onStop();
+    if (m_client != null) {
+      m_client.setListener(null);
+      m_client.stop();
+    }
+  }
+
+  @Override
+  public void onSaveInstanceState(Bundle outState)
+  {
+    super.onSaveInstanceState(outState);
+    outState.putBoolean(TAG_PING_STATUS, m_isStartState);
+    outState.putString(TAG_PING_NAME, m_pingNameEditText.getText().toString());
+    outState.putStringArrayList(TAG_PING_DATA, m_pingResultListAdapter.m_data);
+    if (!m_isStartState && m_client != null) {
+      outState.putSerializable(TAG_PING_STATE, m_client.getState());
+    }
+  }
+
+  @Override
+  public void onStart() {
+    super.onStart();
+    if (m_client != null) {
+      m_client.setListener(this);
+      m_client.start();
+    }
+  }
+
+  @Override
+  public void onPingResponse(final String prefix, final long seq, final double elapsedTime) {
+    this.getActivity().runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          m_pingResultListAdapter.addMessage("content from " + prefix + ": seq=" + seq
+                                             + " time=" + String.format(Locale.getDefault(), "%.3f", elapsedTime) + " ms");
+          m_pingResultListView.setSelection(m_pingResultListAdapter.getCount() - 1);
+        }
+      });
+  }
+
+  @Override
+  public void onPingTimeout(final String prefix, final long seq) {
+    this.getActivity().runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          m_pingResultListAdapter.addMessage("timeout from " + prefix + ": seq=" + seq);
+          m_pingResultListView.setSelection(m_pingResultListAdapter.getCount() - 1);
+        }
+      });
+  }
+
+  @Override
+  public void onPingNack(final String prefix, final long seq, final NetworkNack.Reason reason) {
+    this.getActivity().runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          m_pingResultListAdapter.addMessage("NACK from " + prefix + ": seq=" + seq
+                                             + " reason=" + reason);
+          m_pingResultListView.setSelection(m_pingResultListAdapter.getCount() - 1);
+        }
+      });
+  }
+
+  @Override
+  public void onCalcStatistics(final String msg) {
+    this.getActivity().runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          m_pingResultListAdapter.addMessage(msg);
+          m_pingResultListView.setSelection(m_pingResultListAdapter.getCount() - 1);
+        }
+      });
+  }
+
+  @Override
+  public void onPingFinish() {
+    this.getActivity().runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          m_pingStartButton.setTag(null);
+          m_pingStartButton.setText(R.string.start);
+        }
+      });
+  }
+
+  ////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private class PingResultListAdapter extends BaseAdapter {
+
+    /**
+     * Create a ListView compatible adapter with an
+     * upper bound on the maximum number of entries that will
+     * be displayed in the ListView.
+     */
+    PingResultListAdapter(Context context) {
+      m_data = new ArrayList<>();
+      m_layoutInflater = LayoutInflater.from(context);
+    }
+
+    /**
+     * Add a message to be displayed in the ping result's list view.
+     *
+     * @param message Message to be added to the underlying data store
+     *                and displayed on thi UI.
+     */
+    void addMessage(String message) {
+      m_data.add(message);
+      notifyDataSetChanged();
+    }
+
+    /**
+     * Convenience method to clear all messages from the underlying
+     * data store and update the UI.
+     */
+    void clearMessages() {
+      m_data.clear();
+      this.notifyDataSetChanged();
+    }
+
+    void setData(ArrayList<String> data) {
+      m_data.clear();
+      m_data.addAll(data);
+      this.notifyDataSetChanged();
+    }
+
+    @Override
+    public int getCount() {
+      return m_data.size();
+    }
+
+    @Override
+    public Object getItem(int position) {
+      return m_data.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+      return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+      PingResultEntryViewHolder holder;
+
+      if (convertView == null) {
+        holder = new PingResultEntryViewHolder();
+        convertView = m_layoutInflater.inflate(R.layout.list_item_ping_result, null);
+        convertView.setTag(holder);
+        holder.pingResultTextView = (TextView) convertView.findViewById(R.id.ping_result);
+      } else {
+        holder = (PingResultEntryViewHolder) convertView.getTag();
+      }
+
+      holder.pingResultTextView.setText(m_data.get(position));
+      return convertView;
+    }
+
+    private final ArrayList<String> m_data;
+    private final LayoutInflater m_layoutInflater;
+  }
+}
diff --git a/app/src/main/java/net/named_data/nfd/RouteListFragment.java b/app/src/main/java/net/named_data/nfd/RouteListFragment.java
index 1b666cc..69854a7 100644
--- a/app/src/main/java/net/named_data/nfd/RouteListFragment.java
+++ b/app/src/main/java/net/named_data/nfd/RouteListFragment.java
@@ -72,11 +72,11 @@
   }
 
   @Override
-  public void onAttach(Activity activity)
+  public void onAttach(Context context)
   {
-    super.onAttach(activity);
+    super.onAttach(context);
     try {
-      m_callbacks = (Callbacks)activity;
+      m_callbacks = (Callbacks)context;
     } catch (Exception e) {
       G.Log("Hosting activity must implement this fragment's callbacks: " + e);
     }
diff --git a/app/src/main/jni/cryptopp b/app/src/main/jni/cryptopp
index 3a081d5..5ac4019 160000
--- a/app/src/main/jni/cryptopp
+++ b/app/src/main/jni/cryptopp
@@ -1 +1 @@
-Subproject commit 3a081d5e25ad1c54f27a104f8e0f01c7e2ff4145
+Subproject commit 5ac4019f0893bae2e40c2698427afc8ea374c1d3
diff --git a/app/src/main/res/layout/fragment_ping_client.xml b/app/src/main/res/layout/fragment_ping_client.xml
new file mode 100644
index 0000000..82760b3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ping_client.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/default_linear_layout_padding"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dp"
+        android:paddingBottom="10dp"
+        android:orientation="horizontal">
+
+        <EditText
+            android:id="@+id/pingName"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="10"
+            android:hint="@string/ping_client_prefix_hint"/>
+
+        <Button
+            android:id="@+id/pingStart"
+            style="?android:attr/buttonStyleSmall"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="@string/start" />
+
+    </LinearLayout>
+
+    <ListView
+        android:id="@+id/pingResult"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+    </ListView>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item_ping_result.xml b/app/src/main/res/layout/list_item_ping_result.xml
new file mode 100644
index 0000000..e487ff5
--- /dev/null
+++ b/app/src/main/res/layout/list_item_ping_result.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/default_linear_layout_padding"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/ping_result"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5691bdd..d25909a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,4 +1,6 @@
 <resources>
+    <string name="start">Start</string>
+    <string name="stop">Stop</string>
     <string name="app_name">NFD</string>
     <string name="service_name">NFD Service</string>
     <string name="action_settings">Settings</string>
@@ -15,6 +17,7 @@
     <string name="drawer_item_general">General</string>
     <string name="drawer_item_faces">Faces</string>
     <string name="drawer_item_routes">Routes</string>
+    <string name="drawer_item_ping">Ping</string>
     <string name="drawer_item_strategies">Strategies</string>
     <string name="drawer_item_logcat">Logcat</string>
     <string name="menu_item_delete_setting_item">Delete</string>
@@ -72,4 +75,5 @@
     <string name="fragment_route_details_title">Route Details</string>
     <string name="fragment_route_details_next_hops">List of next hops</string>
     <string name="fragment_route_route_name_title">Route Name</string>
+    <string name="ping_client_prefix_hint">Prefix (e.g., /ndn/edu/arizona)</string>
 </resources>
