diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f8ebe5b..e28c78b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -32,6 +32,10 @@
             android:name=".FaceListActivity"
             android:label="Faces" />
 
+        <activity
+            android:name=".RouteListActivity"
+            android:label="Routes" />
+
         <service
             android:name=".service.NfdService"
             android:process="net.named_data.nfd.service.NfdService"
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 883bef1..c92011f 100644
--- a/app/src/main/java/net/named_data/nfd/MainActivity.java
+++ b/app/src/main/java/net/named_data/nfd/MainActivity.java
@@ -85,6 +85,22 @@
                 return true;
               }
             });
+
+          ///////////////////////////////////////////////////////////////////////////
+          // Routes settings
+          ///////////////////////////////////////////////////////////////////////////
+          addPreferencesFromResource(R.xml.pref_routes);
+
+          findPreference("create_route")
+            .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+              @Override
+              public boolean onPreferenceClick(Preference preference)
+              {
+                DialogFragment dialog = new RouteCreateDialog();
+                dialog.show(getFragmentManager(), "RouteCreateFragment");
+                return true;
+              }
+            });
         }
       })
       .commit();
diff --git a/app/src/main/java/net/named_data/nfd/RouteCreateDialog.java b/app/src/main/java/net/named_data/nfd/RouteCreateDialog.java
new file mode 100644
index 0000000..aef371a
--- /dev/null
+++ b/app/src/main/java/net/named_data/nfd/RouteCreateDialog.java
@@ -0,0 +1,96 @@
+/* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2015 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.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.WindowManager;
+import android.widget.EditText;
+
+import net.named_data.jndn.Name;
+import net.named_data.jndn_xx.util.FaceUri;
+import net.named_data.nfd.utils.Nfdc;
+import net.named_data.nfd.utils.NfdcAsyncTask;
+
+public class RouteCreateDialog extends DialogFragment
+{
+  @Override
+  public Dialog
+  onCreateDialog(Bundle savedInstanceState) {
+    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+    LayoutInflater inflater = getActivity().getLayoutInflater();
+    builder
+      .setView(inflater.inflate(R.layout.create_route, null))
+      .setPositiveButton("Create route", new DialogInterface.OnClickListener()
+      {
+        @Override
+        public void onClick(DialogInterface dialog, int id)
+        {
+          EditText prefixBox = (EditText)getDialog().findViewById(R.id.prefix);
+          EditText uriBox = (EditText)getDialog().findViewById(R.id.faceUri);
+          final String prefix = prefixBox.getText().toString();
+          final String uri = uriBox.getText().toString();
+          new NfdcAsyncTask(getActivity(),
+                            new NfdcAsyncTask.Task()
+                            {
+                              public String
+                              runTask() throws Exception
+                              {
+                                try {
+                                  Nfdc nfdc = new Nfdc();
+                                  int faceId = nfdc.faceCreate(m_uri);
+                                  boolean ok = nfdc.ribRegisterPrefix(new Name(prefix), faceId, 10, true, false);
+                                  nfdc.shutdown();
+                                  if (ok) {
+                                    return "OK";
+                                  }
+                                  else {
+                                    return "Failed register prefix";
+                                  }
+                                } catch (FaceUri.CanonizeError e) {
+                                  return "Error creating face (" + e.getMessage() + ")";
+                                } catch (FaceUri.Error e) {
+                                  return "Error creating face (" + e.getMessage() + ")";
+                                }
+                              }
+
+                              ///////////////////////////
+                              private String m_uri = uri;
+                            }).execute();
+        }
+      })
+      .setNegativeButton("Cancel", new DialogInterface.OnClickListener()
+      {
+        public void onClick(DialogInterface dialog, int id)
+        {
+          RouteCreateDialog.this.getDialog().cancel();
+        }
+      })
+    ;
+
+    Dialog faceCreateDialog = builder.create();
+    faceCreateDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+    return faceCreateDialog;
+  }
+}
diff --git a/app/src/main/java/net/named_data/nfd/RouteListActivity.java b/app/src/main/java/net/named_data/nfd/RouteListActivity.java
new file mode 100644
index 0000000..5eca4cd
--- /dev/null
+++ b/app/src/main/java/net/named_data/nfd/RouteListActivity.java
@@ -0,0 +1,192 @@
+/* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2015 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.app.Activity;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.app.ListFragment;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.intel.jndn.management.types.RibEntry;
+import com.intel.jndn.management.types.Route;
+
+import net.named_data.nfd.utils.Nfdc;
+import net.named_data.nfd.utils.NfdcAsyncTask;
+
+import org.apache.commons.lang.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RouteListActivity extends Activity
+{
+  @Override
+  public void
+  onCreate(Bundle savedInstanceState)
+  {
+    super.onCreate(savedInstanceState);
+
+    FragmentManager fm = getFragmentManager();
+    FragmentTransaction ft = fm.beginTransaction();
+    if (fm.findFragmentById(android.R.id.content) == null) {
+      ft.add(android.R.id.content, m_routeListFragment);
+    }
+    else {
+      ft.replace(android.R.id.content, m_routeListFragment);
+    }
+    ft.commit();
+  }
+
+  public static class RouteListFragment extends ListFragment {
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState)
+    {
+      super.onActivityCreated(savedInstanceState);
+
+      RouteListAdapter adapter = new RouteListAdapter(getActivity());
+      setListAdapter(adapter);
+
+      adapter.updateFaceList();
+    }
+
+    private class RouteListAdapter extends BaseAdapter
+    {
+      public RouteListAdapter(Context context)
+      {
+        this.m_inflater = LayoutInflater.from(context);
+        this.m_context = context;
+      }
+
+      public void
+      updateFaceList()
+      {
+        new NfdcAsyncTask(m_context,
+                          new NfdcAsyncTask.Task() {
+                            public String
+                            runTask() throws Exception
+                            {
+                              synchronized (m_routesLock) {
+                                Nfdc nfdc = new Nfdc();
+                                m_routes = nfdc.ribList();
+                                nfdc.shutdown();
+                              }
+
+                              getActivity().runOnUiThread(new Runnable() {
+                                @Override
+                                public void run()
+                                {
+                                  notifyDataSetChanged();
+                                }
+                              });
+                              return null;
+                            }
+                          }).execute();
+      }
+
+      @Override
+      public int
+      getCount()
+      {
+        synchronized (m_routesLock) {
+          if (m_routes == null)
+            return 0;
+          else
+            return m_routes.size();
+        }
+      }
+
+      @Override
+      public Object
+      getItem(int position)
+      {
+        synchronized (m_routesLock) {
+          assert m_routes != null && position < m_routes.size();
+          return m_routes.get(position);
+        }
+      }
+
+      @Override
+      public long
+      getItemId(int position)
+      {
+        return position;
+      }
+
+      @Override
+      public View
+      getView(int position, View convertView, ViewGroup parent)
+      {
+        RouteListItemViewHolder holder;
+        if (convertView == null) {
+          convertView = this.m_inflater.inflate(android.R.layout.simple_list_item_2, parent, false);
+          holder = new RouteListItemViewHolder(convertView);
+          convertView.setTag(holder);
+        } else {
+          holder = (RouteListItemViewHolder)convertView.getTag();
+        }
+
+        RibEntry e;
+        synchronized (m_routesLock) {
+          e = m_routes.get(position);
+        }
+        holder.text1.setText(e.getName().toUri());
+
+        List<String> faceList = new ArrayList<>();
+        for (Route r : e.getRoutes()) {
+          faceList.add(String.valueOf(r.getFaceId()));
+        }
+        holder.text2.setText(StringUtils.join(faceList, ", "));
+
+        return convertView;
+      }
+
+      /////////////////////////////////////////////////////////////////////////
+      private LayoutInflater m_inflater;
+      private Context m_context;
+      private List<RibEntry> m_routes;
+      private final Object m_routesLock = new Object();
+
+    }
+
+    private static class RouteListItemViewHolder
+    {
+      RouteListItemViewHolder(View v)
+      {
+        text1 = (TextView)v.findViewById(android.R.id.text1);
+        text2 = (TextView)v.findViewById(android.R.id.text2);
+      }
+
+      /////////////////////////////////////////////////////////////////////////
+      public TextView text1;
+      public TextView text2;
+    }
+  }
+
+  /////////////////////////////////////////////////////////////////////////////
+  private RouteListFragment m_routeListFragment = new RouteListFragment();
+}
diff --git a/app/src/main/java/net/named_data/nfd/utils/Nfdc.java b/app/src/main/java/net/named_data/nfd/utils/Nfdc.java
index a266ef2..5517449 100644
--- a/app/src/main/java/net/named_data/nfd/utils/Nfdc.java
+++ b/app/src/main/java/net/named_data/nfd/utils/Nfdc.java
@@ -21,8 +21,11 @@
 
 import com.intel.jndn.management.NFD;
 import com.intel.jndn.management.types.FaceStatus;
+import com.intel.jndn.management.types.RibEntry;
 
+import net.named_data.jndn.ControlParameters;
 import net.named_data.jndn.Face;
+import net.named_data.jndn.ForwardingFlags;
 import net.named_data.jndn.Name;
 import net.named_data.jndn.security.*;
 import net.named_data.jndn.security.identity.IdentityManager;
@@ -69,8 +72,8 @@
   }
 
   /**
-   * @brief Adds a nexthop to a FIB entry
-   *
+   * Adds a nexthop to a FIB entry
+   * <p>
    * If the FIB entry does not exist, it is inserted automatically
    */
   public void
@@ -79,36 +82,56 @@
   }
 
   /**
-   * @brief Removes a nexthop from an existing FIB entry
-   *
+   * Removes a nexthop from an existing FIB entry
+   * <p>
    * If the last nexthop record in a FIB entry is removed, the FIB entry is also deleted
    */
   public void
   fibRemoveNextHop(Name prefix, int faceId)
   {
-
   }
 
   /**
-   * @brief Registers name to the given faceId or faceUri
+   * Registers name to the given faceId or faceUri
+   */
+  public boolean
+  ribRegisterPrefix(Name prefix, int faceId, int cost, boolean isChildInherit, boolean isCapture) throws Exception
+  {
+    ForwardingFlags flags = new ForwardingFlags();
+    flags.setChildInherit(isChildInherit);
+    flags.setCapture(isCapture);
+    return NFD.register(m_face,
+                        new ControlParameters()
+                          .setName(prefix)
+                          .setFaceId(faceId)
+                          .setCost(cost)
+                          .setForwardingFlags(flags));
+  }
+
+  /**
+   * Unregisters name from the given faceId/faceUri
    */
   public void
-  ribRegisterPrefix(Name prefix, int faceId, int cost, boolean isChildInherit, boolean isCapture)
+  ribUnregisterPrefix(Name prefix, int faceId) throws Exception
   {
+    NFD.unregister(m_face,
+                   new ControlParameters()
+                     .setName(prefix)
+                     .setFaceId(faceId));
   }
 
   /**
-   * @brief Unregisters name from the given faceId/faceUri
+   * List all of routes (RIB entries)
    */
-  public void
-  ribUnregisterPrefix(Name prefix, int faceIdName)
+  public List<RibEntry>
+  ribList() throws Exception
   {
-
+    return NFD.getRouteList(m_face);
   }
 
   /**
-   * @brief Creates new face
-   *
+   * Creates new face
+   * <p>
    * This command allows creation of UDP unicast and TCP faces only
    */
   public int
@@ -118,7 +141,7 @@
   }
 
   /**
-   * @brief Destroys face
+   * Destroys face
    */
   public void
   faceDestroy(int faceId) throws Exception
@@ -127,7 +150,7 @@
   }
 
   /**
-   * @brief List all faces
+   * List all faces
    */
   public List<FaceStatus>
   faceList() throws Exception
@@ -136,16 +159,15 @@
   }
 
   /**
-   * @brief Sets the strategy for a namespace
+   * Sets the strategy for a namespace
    */
   public void
   strategyChoiceSet(Name namespace, Name strategy)
   {
-
   }
 
   /**
-   * @brief Unset the strategy for a namespace
+   * Unset the strategy for a namespace
    */
   public void
   strategyChoiceUnset(Name namespace)
diff --git a/app/src/main/res/layout/create_route.xml b/app/src/main/res/layout/create_route.xml
new file mode 100644
index 0000000..ddf7fb2
--- /dev/null
+++ b/app/src/main/res/layout/create_route.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        style="@style/dialog_margin"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="Enter prefix and FaceUri to register with NDN daemon"
+        android:layout_gravity="center_horizontal"/>
+
+    <EditText
+        android:id="@+id/prefix"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="@style/dialog_margin"
+        android:hint="Prefix"
+        android:inputType="text"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:selectAllOnFocus="true">
+        <requestFocus />
+    </EditText>
+
+    <EditText
+        android:id="@+id/faceUri"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="@style/dialog_margin"
+        android:hint="Face URI"
+        android:inputType="text"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:selectAllOnFocus="true">
+     </EditText>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/xml/pref_routes.xml b/app/src/main/res/xml/pref_routes.xml
new file mode 100644
index 0000000..322f584
--- /dev/null
+++ b/app/src/main/res/xml/pref_routes.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+  <PreferenceCategory
+      android:key="routes"
+      android:title="Routes">
+
+    <Preference android:title="Create route" android:key="create_route" />
+
+    <PreferenceScreen android:title="List routes" android:key="list_routes">
+        <intent android:action="android.intent.action.VIEW"
+                android:targetPackage="net.named_data.nfd"
+                android:targetClass="net.named_data.nfd.RouteListActivity" />
+    </PreferenceScreen>
+
+  </PreferenceCategory>
+</PreferenceScreen>
