diff --git a/install_helpers/tools/Makefile b/install_helpers/tools/Makefile
index 0d802a4..6a41305 100644
--- a/install_helpers/tools/Makefile
+++ b/install_helpers/tools/Makefile
@@ -3,7 +3,7 @@
 LIBS = `pkg-config --libs libndn-cxx`
 DESTDIR ?= /usr/local
 
-PROGRAMS = test-nack-consumer test-nexthopfaceid-consumer
+PROGRAMS = test-nack-consumer test-nexthopfaceid-consumer generate-link-object
 
 all: $(PROGRAMS)
 
diff --git a/install_helpers/tools/generate-link-object.cpp b/install_helpers/tools/generate-link-object.cpp
new file mode 100644
index 0000000..91d4560
--- /dev/null
+++ b/install_helpers/tools/generate-link-object.cpp
@@ -0,0 +1,35 @@
+/**
+ * Generates a predefined link object and outputs it to a file
+ *
+ * Author: Eric Newberry <enewberry@email.arizona.edu>
+ */
+
+#include <ndn-cxx/link.hpp>
+#include <ndn-cxx/security/key-chain.hpp>
+#include <ndn-cxx/util/io.hpp>
+
+#include <iostream>
+
+int
+main(int argc, char* argv[])
+{
+  if (argc < 5 || argc % 2 != 1) {
+    std::cout << "Usage: " << argv[0] << " [outfile] [name] [pref-1] [delegation-1] ... [pref-n] [delegation-n]" << std::endl;
+    return -1;
+  }
+
+  // Create initial link object
+  ndn::Link link(argv[2]);
+
+  // Load delegations into object
+  for (int i = 0; i < (argc - 3) / 2; i++) {
+    link.addDelegation(std::stoi(argv[2 * i + 3]), argv[2 * i + 4]);
+  }
+
+  // Sign and save object
+  ndn::KeyChain keyChain;
+  keyChain.sign(link);
+  link.wireEncode();
+  ndn::io::save(link, argv[1]);
+  return 0;
+}
diff --git a/test_mobility_link/NDNTrafficServer-A.conf b/test_mobility_link/NDNTrafficServer-A.conf
new file mode 100644
index 0000000..35b3f8b
--- /dev/null
+++ b/test_mobility_link/NDNTrafficServer-A.conf
@@ -0,0 +1,4 @@
+##########
+Name=/net/ndnsim/www
+Content=AAAAAAAA
+##########
diff --git a/test_mobility_link/NDNTrafficServer-B.conf b/test_mobility_link/NDNTrafficServer-B.conf
new file mode 100644
index 0000000..7208647
--- /dev/null
+++ b/test_mobility_link/NDNTrafficServer-B.conf
@@ -0,0 +1,4 @@
+##########
+Name=/net/ndnsim/www
+Content=BBBBBBBB
+##########
diff --git a/test_mobility_link/NDNTrafficServer-C.conf b/test_mobility_link/NDNTrafficServer-C.conf
new file mode 100644
index 0000000..00c27e9
--- /dev/null
+++ b/test_mobility_link/NDNTrafficServer-C.conf
@@ -0,0 +1,4 @@
+##########
+Name=/net/ndnsim/www
+Content=CCCCCCCC
+##########
diff --git a/test_mobility_link/NDNTrafficServer-D.conf b/test_mobility_link/NDNTrafficServer-D.conf
new file mode 100644
index 0000000..1f582e9
--- /dev/null
+++ b/test_mobility_link/NDNTrafficServer-D.conf
@@ -0,0 +1,4 @@
+##########
+Name=/net/ndnsim/www
+Content=DDDDDDDD
+##########
diff --git a/test_mobility_link/README.md b/test_mobility_link/README.md
new file mode 100644
index 0000000..c98255f
--- /dev/null
+++ b/test_mobility_link/README.md
@@ -0,0 +1,30 @@
+# Test Mobility with Link
+
+## Topology
+
+C--B--A--D
+
+## Environment Set-up
+
+1.  Configure network region names on A, B, C, and D:
+    *  C: /arizona/cs
+    *  B: /arizona/cs/telecom
+    *  A: /ucsd/caida
+    *  D: /ucla/cs/irl, /ucla/cs/software
+2.  Start NFD on A, B, C, and D.
+3.  On C, register a default route toward B.
+4.  On B, register a route /ucla toward A.
+5.  On A, register a route /ucla/cs toward D.
+6.  On C, start ndn-traffic-server on /net/ndnsim/www, serving payload "CCCCCCCC".
+7.  On B, start ndn-traffic-server on /net/ndnsim/www, serving payload "BBBBBBBB".
+8.  On A, start ndn-traffic-server on /net/ndnsim/www, serving payload "AAAAAAAA".
+9.  On D, start ndn-traffic-server on /net/ndnsim/www, serving payload "DDDDDDDD".
+
+## Tests
+
+1.  On C, execute a consumer to express an Interest for /net/ndnsim/www/index.html, with a Link object {Name=/net/ndnsim, Delegations={{10, /telia/terabits}, {20, /ucla/cs}}}. Expect Data with payload "DDDDDDDD".
+2.  On C, execute a consumer to express an Interest for /net/ndnsim/www/news.html, with a Link object {Name=/net/ndnsim, Delegations={{10, /telia/terabits}, {20, /waseda/cs}}}. Expect Nack with reason NoRoute.
+3.  On C, execute a consumer to express an Interest for /net/ndnsim/www/contact.html, with a Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs/telecom}}}. Expect Data with payload "BBBBBBBB".
+4.  On C, execute a consumer to express an Interest for /net/ndnsim/www/about.html, with a Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs}}}. Expect Data with payload "CCCCCCCC".
+5.  On C, execute a consumer to express an Interest for /net/ndnsim/www/info.html, with a Link object {Name=/net/ndnsim, Delegations={{10, /arizona}}}. Expect Data with payload "CCCCCCCC".
+6.  On C, execute a consumer to express an Interest for /net/ndnsim/www/logo.jpg, with a Link object {Name=/net/ndnsim, Delegations{{10, /arizona/cs/telecom/east}}}. Expect Nack with reason NoRoute.
diff --git a/test_mobility_link/mobility-link-test.sh b/test_mobility_link/mobility-link-test.sh
new file mode 100755
index 0000000..e658b01
--- /dev/null
+++ b/test_mobility_link/mobility-link-test.sh
@@ -0,0 +1,188 @@
+#!/bin/bash
+source ../multi-host.conf
+echo "host C IP address $IP4_C1"
+echo "host B IP address $IP4_B1"
+echo "host A IP address $IP4_A1"
+echo "host D IP address $IP4_D1"
+
+clean_up() {
+  r=$(ssh $CTRL_B "sudo killall ndn-traffic-server nfd &&
+      sudo infoedit -f /usr/local/etc/ndn/nfd.conf -d tables.network_region./arizona/cs/telecom" 2>&1)
+  r=$(ssh $CTRL_C "sudo killall nfd &&
+      sudo infoedit -f /usr/local/etc/ndn/nfd.conf -d tables.network_region./arizona/cs" 2>&1)
+  r=$(ssh $CTRL_D "sudo killall ndn-traffic-server nfd &&
+      sudo infoedit -f /usr/local/etc/ndn/nfd.conf -d tables.network_region./ucla/cs/irl &&
+      sudo infoedit -f /usr/local/etc/ndn/nfd.conf -d tables.network_region./ucla/cs/software" 2>&1)
+  r=$(sudo killall ndn-traffic-server nfd 2>&1 &&
+      sudo infoedit -f /usr/local/etc/ndn/nfd.conf -d tables.network_region./ucsd/caida 2>&1)
+}
+
+mkdir -p logs
+workdir=$(pwd)
+
+# Remove any old Link objects
+ssh $CTRL_C "rm -f $workdir/link-object"
+
+# C, B, A, D: Configure network region names
+ssh $CTRL_C "sudo infoedit -f /usr/local/etc/ndn/nfd.conf -r tables.network_region <<EOF
+/arizona/cs
+EOF"
+ssh $CTRL_B "sudo infoedit -f /usr/local/etc/ndn/nfd.conf -r tables.network_region <<EOF
+/arizona/cs/telecom
+EOF"
+sudo infoedit -f /usr/local/etc/ndn/nfd.conf -r tables.network_region <<EOF
+/ucsd/caida
+EOF
+ssh $CTRL_D "sudo infoedit -f /usr/local/etc/ndn/nfd.conf -r tables.network_region <<EOF
+/ucla/cs/irl
+/ucla/cs/software
+EOF"
+
+# C, B, A, D: Start NFD and create UDP tunnels
+echo "starting nfd on host C..."
+ssh $CTRL_C "mkdir -p $workdir/logs;\
+  sudo nfd &> $workdir/logs/nfd.log &"
+sleep 1
+
+echo "starting nfd on host B..."
+ssh $CTRL_B "mkdir -p $workdir/logs;\
+  sudo nfd &> $workdir/logs/nfd.log &"
+sleep 1
+
+echo "starting nfd on host A..."
+sudo nfd &> $workdir/logs/nfd.log &
+sleep 1
+
+echo "starting nfd on host D..."
+ssh $CTRL_D "mkdir -p $workdir/logs;\
+  sudo nfd &> $workdir/logs/nfd.log &"
+sleep 1
+
+# C: Register default route toward B
+ssh $CTRL_C "nfdc register / udp4://$IP4_B1"
+if [[ $? -ne 0 ]]
+then
+  echo "Failed to create default route on C toward B"
+  clean_up
+  exit 1
+fi
+
+# B: Register route /ucla toward A
+ssh $CTRL_B "nfdc register /ucla udp4://$IP4_A1"
+if [[ $? -ne 0 ]]
+then
+  echo "Failed to create route /ucla on B toward A"
+  clean_up
+  exit 1
+fi
+
+# A: Register route /ucla/cs toward D
+nfdc register /ucla/cs udp4://$IP4_D1
+if [[ $? -ne 0 ]]
+then
+  echo "Failed to create route /ucla/cs on A toward D"
+  clean_up
+  exit 1
+fi
+
+# C: Run ndn-traffic-server for /net/ndnsim/www serving "CCCCCCCC"
+echo "starting ndn-traffic-server on host C..."
+ssh $CTRL_C "ndn-traffic-server $workdir/NDNTrafficServer-C.conf &> $workdir/logs/server.log &"
+
+# B: Run ndn-traffic-server for /net/ndnsim/www serving "BBBBBBBB"
+echo "starting ndn-traffic-server on host B..."
+ssh $CTRL_B "ndn-traffic-server $workdir/NDNTrafficServer-B.conf &> $workdir/logs/server.log &"
+
+# A: Run ndn-traffic-server for /net/ndnsim/www serving "AAAAAAAA"
+echo "starting ndn-traffic-server on host A..."
+ndn-traffic-server $workdir/NDNTrafficServer-A.conf > $workdir/logs/server.log 2>&1 &
+
+# D: Run ndn-traffic-server for /net/ndnsim/www serving "DDDDDDDD"
+echo "starting ndn-traffic-server on host D..."
+ssh $CTRL_D "ndn-traffic-server $workdir/NDNTrafficServer-D.conf &> $workdir/logs/server.log &"
+
+# C: Express Interest for /net/ndnsim/www/index.html w/
+# Link object {Name=/net/ndnsim, Delegations={{10,/telia/terabits}, {20,/ucla/cs}}}
+# Fail if not answered with Data containing "DDDDDDDD"
+echo "From C, sending Interest for /net/ndnsim/www/index.html w/ Link object {Name=/net/ndnsim, Delegations={{10,/telia/terabits}, {20,/ucla/cs}}}"
+ssh $CTRL_C "generate-link-object $workdir/link-object /net/ndnsim 10 /telia/terabits 20 /ucla/cs"
+output=$(ssh $CTRL_C "ndnpeek -p --link-file $workdir/link-object /net/ndnsim/www/index.html 2>&1")
+if [[ $output != "DDDDDDDD" ]]
+then
+  echo "Interest was not answered with Data containing payload 'DDDDDDDD'"
+  echo "Actual: $output"
+  clean_up
+  exit 2
+fi
+
+# C: Express Interest for /net/ndnsim/www/news.html w/
+# Link object {Name=/net/ndnsim, Delegations={{10,/telia/terabits}, {20,/waseda/cs}}}
+# Fail if not answered with Nack with reason "NoRoute"
+echo "From C, sending Interest for /net/ndnsim/www/news.html w/ Link object {Name=/net/ndnsim, Delegations={{10,/telia/terabits}, {20,/waseda/cs}}}"
+ssh $CTRL_C "generate-link-object $workdir/link-object /net/ndnsim 10 /telia/terabits 20 /waseda/cs"
+output=$(ssh $CTRL_C "ndnpeek -p --link-file $workdir/link-object /net/ndnsim/www/news.html 2>&1")
+if [[ $output != "NoRoute" ]]
+then
+  # TODO: Should fail for now - update when CS/PIT partitioning completed
+  echo "EXPECTED FAILURE: Interest was not answered with Nack with reason 'NoRoute'"
+  echo "Actual: $output"
+fi
+
+# C: Express Interest for /net/ndnsim/www/contact.html w/
+# Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs/telecom}}}
+# Fail if not answered with Data containing "BBBBBBBB"
+echo "From C, sending Interest for /net/ndnsim/www/contact.html w/ Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs/telecom}}}"
+ssh $CTRL_C "generate-link-object $workdir/link-object /net/ndnsim 10 /arizona/cs/telecom"
+output=$(ssh $CTRL_C "ndnpeek -p --link-file $workdir/link-object /net/ndnsim/www/contact.html 2>&1")
+if [[ $output != "BBBBBBBB" ]]
+then
+  echo "Interest was not answered with Data containing payload 'BBBBBBBB'"
+  echo "Actual: $output"
+  clean_up
+  exit 4
+fi
+
+# C: Express Interest for /net/ndnsim/www/about.html w/
+# Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs}}}
+# Fail if not answered with Data containing "CCCCCCCC"
+echo "From C, sending Interest for /net/ndnsim/www/about.html w/ Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs}}}"
+ssh $CTRL_C "generate-link-object $workdir/link-object /net/ndnsim 10 /arizona/cs"
+output=$(ssh $CTRL_C "ndnpeek -p --link-file $workdir/link-object /net/ndnsim/www/about.html 2>&1")
+if [[ $output != "CCCCCCCC" ]]
+then
+  echo "Interest was not answered with Data containing payload 'CCCCCCCC'"
+  echo "Actual: $output"
+  clean_up
+  exit 5
+fi
+
+# C: Express Interest for /net/ndnsim/www/info.html w/
+# Link object {Name=/net/ndnsim, Delegations={{10, /arizona}}}
+# Fail if not answered with Data containing "CCCCCCCC"
+echo "From C, sending Interest for /net/ndnsim/www/info.html w/ Link object {Name=/net/ndnsim, Delegations={{10, /arizona}}}"
+ssh $CTRL_C "generate-link-object $workdir/link-object /net/ndnsim 10 /arizona"
+output=$(ssh $CTRL_C "ndnpeek -p --link-file $workdir/link-object /net/ndnsim/www/info.html 2>&1")
+if [[ $output != "CCCCCCCC" ]]
+then
+  echo "Interest was not answered with Data containing payload 'CCCCCCCC'"
+  echo "Actual: $output"
+  clean_up
+  exit 6
+fi
+
+# C: Express Interest for /net/ndnsim/www/logo.jpg w/
+# Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs/telecom/east}}}
+# Fail if not answered with Nack with reason "NoRoute"
+echo "From C, sending Interest for /net/ndnsim/www/logo.jpg w/ Link object {Name=/net/ndnsim, Delegations={{10, /arizona/cs/telecom/east}}}"
+ssh $CTRL_C "generate-link-object $workdir/link-object /net/ndnsim 10 /arizona/cs/telecom/east"
+output=$(ssh $CTRL_C "ndnpeek -p --link-file $workdir/link-object /net/ndnsim/www/logo.jpg 2>&1")
+if [[ $output != "NoRoute" ]]
+then
+  echo "Interest was not answered with Nack with reason 'NoRoute'"
+  echo "Actual: $output"
+  clean_up
+  exit 7
+fi
+
+clean_up
+echo "Mobility with Link Test PASSED"
diff --git a/test_mobility_link/test_mobility_link.py b/test_mobility_link/test_mobility_link.py
new file mode 100644
index 0000000..b1c9d19
--- /dev/null
+++ b/test_mobility_link/test_mobility_link.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python2
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2016 University of Arizona
+# Author: Eric Newberry <enewberry@cs.arizona.edu>
+# See COPYING for copyright and distribution information.
+#
+
+import os
+import unittest
+import subprocess
+
+class test_mobility_link(unittest.TestCase):
+    """Test case for Mobility with Link"""
+
+    def setUp(self):
+        print "\nTesting Mobility with Link"
+        print "*****************"
+        os.chdir("test_mobility_link")
+
+    def tearDown(self):
+        print "*****************"
+        os.chdir("..")
+
+    def test_mobility_link(self):
+        ret = subprocess.call(["./mobility-link-test.sh"], shell=True)
+        print "Test script return value:", ret
+        errormsg = {
+            1 : "Failed to create required routes",
+            2 : "Interest /net/ndnsim/www/index.html not answered with Data containing payload 'DDDDDDDD'",
+            3 : "Interest /net/ndnsim/www/news.html not answered with Nack with reason 'NoRoute'",
+            4 : "Interest /net/ndnsim/www/contact.html not answered with Data containing payload 'BBBBBBBB'",
+            5 : "Interest /net/ndnsim/www/about.html not answered with Data containing payload 'CCCCCCCC'",
+            6 : "Interest /net/ndnsim/www/info.html not answered with Data containing payload 'CCCCCCCC'",
+            7 : "Interest /net/ndnsim/www/logo.jpg not answered with Nack with reason 'NoRoute'",
+        }
+        if (ret != 0):
+            self.fail(errormsg[ret])
