diff --git a/library_helpers/process_manager.py b/library_helpers/process_manager.py
index db686f6..78a8f62 100644
--- a/library_helpers/process_manager.py
+++ b/library_helpers/process_manager.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/run-vagrant-tests.sh b/run-vagrant-tests.sh
index 9681797..041b492 100755
--- a/run-vagrant-tests.sh
+++ b/run-vagrant-tests.sh
@@ -5,7 +5,7 @@
 #
 # --
 #
-# Copyright (c) 2014-2017,  Regents of the University of California,
+# Copyright (c) 2014-2018,  Regents of the University of California,
 #                           Arizona Board of Regents,
 #                           Colorado State University,
 #                           University Pierre & Marie Curie, Sorbonne University,
@@ -33,18 +33,13 @@
 mkdir -p temp
 ssh-keygen -t ecdsa -f temp/sshkey -q -N ""
 
-vagrant up router
-
 vagrant up template
 vagrant ssh template -c "sudo apt-get clean"
 vagrant package --output nfd-integ.box template
 vagrant box remove nfd-integ
 vagrant box add --name nfd-integ nfd-integ.box
 
-vagrant up A
-vagrant up B
-vagrant up C
-vagrant up D
+vagrant up router A B C D
 
 vagrant ssh A -c "cd integration-tests && ./run_tests.py test_all 2>&1 | tee run.log"
 vagrant ssh A -c "integration-tests/collect-logs.sh A"
diff --git a/test_congestionmark/test_congestionmark.py b/test_congestionmark/test_congestionmark.py
index e9d5a0a..1d1f7df 100644
--- a/test_congestionmark/test_congestionmark.py
+++ b/test_congestionmark/test_congestionmark.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2017 The University of Arizona
+# Copyright (C) 2017 Arizona Board of Regents.
 # Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_cs_freshness/test_cs_freshness.py b/test_cs_freshness/test_cs_freshness.py
index 4cd6b3e..ef9ce39 100644
--- a/test_cs_freshness/test_cs_freshness.py
+++ b/test_cs_freshness/test_cs_freshness.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_fib_matching/README.md b/test_fib_matching/README.md
index 25b3ec6..5db5212 100644
--- a/test_fib_matching/README.md
+++ b/test_fib_matching/README.md
@@ -1,35 +1,37 @@
-Test Case - fib-matching
+Test Case - fib_matching
 ========================
 
 ## Objective ##
 
-To test NFD's fib matching on a single host.
+Test NFD's FIB matching mechanism on a single host.
 
 ## Description ##
 
-This test case will run the NFD, ndn-traffic and ndn-traffic-server to test NFD's fib matching. The following steps will be followed:
+This test case will run NFD, ndn-traffic, and ndn-traffic-server to test NFD's FIB matching mechanism.
 
-1. Start NFD.
-2. Start ndn-traffic-server to serve ndn:/ with Content "Z", FreshnessPeriod=10ms.
-3. Start ndn-traffic-server to serve ndn:/A with Content "A", FreshnessPeriod=10ms.
-4. Start ndn-traffic-server to serve ndn:/A/B/C with Content "C", FreshnessPeriod=10ms.
-5. Start ndn-traffic-server to serve ndn:/D/E with Content "E", FreshnessPeriod=10ms.
-6. Invoke ndn-traffic to request ndn:/ MustBeFresh=yes. Fail if unanswered. Fail if Content is not "Z".
-7. Wait 100ms.
-8. Invoke ndn-traffic to request ndn:/F MustBeFresh=yes. Fail if unanswered. Fail if Content is not "Z".
-9. Wait 100ms.
-10. Invoke ndn-traffic to request ndn:/A MustBeFresh=yes. Fail if unanswered. Fail if Content is not "A".
+## Steps ##
+
+1.  Start NFD.
+2.  Start ndn-traffic-server to serve / with Content "Z" with FreshnessPeriod=10ms.
+3.  Start ndn-traffic-server to serve /A with Content "A" with FreshnessPeriod=10ms.
+4.  Start ndn-traffic-server to serve /A/B/C with Content "C" with FreshnessPeriod=10ms.
+5.  Start ndn-traffic-server to serve /D/E with Content "E" with FreshnessPeriod=10ms.
+6.  Invoke ndn-traffic to request / with MustBeFresh=true. Fail if unanswered or if received content is not "Z".
+7.  Wait 100ms.
+8.  Invoke ndn-traffic to request /F with MustBeFresh=true. Fail if unanswered or if received content is not "Z".
+9.  Wait 100ms.
+10. Invoke ndn-traffic to request /A with MustBeFresh=true. Fail if unanswered or if received content is not "A".
 11. Wait 100ms.
-12. Invoke ndn-traffic to request ndn:/a MustBeFresh=yes. Fail if unanswered. Fail if Content is not "Z".
+12. Invoke ndn-traffic to request /a with MustBeFresh=true. Fail if unanswered or if received content is not "Z".
 13. Wait 100ms.
-14. Invoke ndn-traffic to request ndn:/A/B MustBeFresh=yes. Fail if unanswered. Fail if Content is not "A".
+14. Invoke ndn-traffic to request /A/B with MustBeFresh=true. Fail if unanswered or if received content is not "A".
 15. Wait 100ms.
-16. Invoke ndn-traffic to request ndn:/A/B/G MustBeFresh=yes. Fail if unanswered. Fail if Content is not "A".
+16. Invoke ndn-traffic to request /A/B/G with MustBeFresh=true. Fail if unanswered or if received content is not "A".
 17. Wait 100ms.
-18. Invoke ndn-traffic to request ndn:/A/B/C MustBeFresh=yes. Fail if unanswered. Fail if Content is not "C".
+18. Invoke ndn-traffic to request /A/B/C with MustBeFresh=true. Fail if unanswered or if received content is not "C".
 19. Wait 100ms.
-20. Invoke ndn-traffic to request ndn:/A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z MustBeFresh=yes. Fail if unanswered. Fail if Content is not "C".
+20. Invoke ndn-traffic to request /A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z with MustBeFresh=true. Fail if unanswered or if received content is not "C".
 21. Wait 100ms.
-22. Invoke ndn-traffic to request ndn:/D MustBeFresh=yes Exclude=[...,D] (... is a zero-length generic component). Fail if unanswered. Fail if Content is not "Z".
+22. Invoke ndn-traffic to request /D with MustBeFresh=true and Exclude=[...,D] (... is a zero-length generic component). Fail if unanswered or if received content is not "Z".
 23. Wait 100ms.
-24. Invoke ndn-traffic to request ndn:/D MustBeFresh=yes Exclude=[...,E] (... is a zero-length generic component). Fail if unanswered. Fail if Content is not "Z".
+24. Invoke ndn-traffic to request /D with MustBeFresh=true and Exclude=[...,E] (... is a zero-length generic component). Fail if unanswered or if received content is not "Z".
diff --git a/test_fib_matching/fib-matching-test.sh b/test_fib_matching/fib-matching-test.sh
new file mode 100755
index 0000000..eb0dc9e
--- /dev/null
+++ b/test_fib_matching/fib-matching-test.sh
@@ -0,0 +1,169 @@
+#!/bin/bash
+source ../multi-host.conf
+
+clean_up() {
+  r=$(sudo killall ndn-traffic-server 2>&1)
+  r=$(sudo killall ndn-traffic 2>&1)
+  r=$(sudo killall nfd 2>&1)
+}
+
+# A: Start NFD
+workdir=$(pwd)
+echo "Starting nfd on A..."
+mkdir -p $workdir/logs; sudo nfd &> $workdir/logs/nfd.log &
+sleep 1
+
+# A: Start instances of ndn-traffic-server
+echo "Starting Traffic Server 1 (Prefix=/, FreshnessPeriod=10ms, Data=Z)..."
+ndn-traffic-server $workdir/test-traffic-server-1.conf &> $workdir/logs/server-1.log &
+sleep 0.1
+echo "Starting Traffic Server 2 (Prefix=/A, FreshnessPeriod=10ms, Data=A)..."
+ndn-traffic-server $workdir/test-traffic-server-2.conf &> $workdir/logs/server-2.log &
+sleep 0.1
+echo "Starting Traffic Server 3 (Prefix=/A/B/C, FreshnessPeriod=10ms, Data=C)..."
+ndn-traffic-server $workdir/test-traffic-server-3.conf &> $workdir/logs/server-3.log &
+sleep 0.1
+echo "Starting Traffic Server 4 (Prefix=/D/E, FreshnessPeriod=10ms, Data=E)..."
+ndn-traffic-server $workdir/test-traffic-server-4.conf &> $workdir/logs/server-4.log &
+sleep 0.1
+
+# A: Request / with MustBeFresh=true. Fail if unanswered or if received content is not "Z".
+echo "Starting Traffic Client 1 (Prefix=/, MustBeFresh=true, ExpectedContent=Z, MaxSuffixComponents=2)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-1.conf &> $workdir/logs/client-1.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 1. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 1 received Data with Content=Z"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /F with MustBeFresh=true. Fail if unanswered or if received content is not "Z".
+echo "Starting Traffic Client 2 (Prefix=/F, MustBeFresh=true, ExpectedContent=Z)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-2.conf &> $workdir/logs/client-2.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 2. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 2 received Data with Content=Z"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /A with MustBeFresh=true. Fail if unanswered or if received content is not "A"
+echo "Starting Traffic Client 3 (Prefix=/A, MustBeFresh=true, ExpectedContent=A)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-3.conf &> $workdir/logs/client-3.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 3. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 3 received Data with Content=A"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /a with MustBeFresh=true. Fail if unanswered or if received content is not "Z".
+echo "Starting Traffic Client 4 (Prefix=/a, MustBeFresh=true, ExpectedContent=Z)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-4.conf &> $workdir/logs/client-4.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 4. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 4 received Data with Content=Z"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /A/B with MustBeFresh=true. Fail if unanswered or if received content is not "A".
+echo "Starting Traffic Client 5 (Prefix=/A/B, MustBeFresh=true, ExpectedContent=A)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-5.conf &> $workdir/logs/client-5.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 5. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 5 received Data with Content=A"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /A/B/G with MustBeFresh=true. Fail if unanswered or if received content is not "A".
+echo "Starting Traffic Client 6 (Prefix=/A/B/G, MustBeFresh=true, ExpectedContent=A)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-6.conf &> $workdir/logs/client-6.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 6. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 6 received Data with Content=A"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /A/B/C with MustBeFresh=true. Fail if unanswered or if received content is not "C".
+echo "Starting Traffic Client 7 (Prefix=/A/B/C, MustBeFresh=true, ExpectedContent=C)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-7.conf &> $workdir/logs/client-7.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 7. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 7 received Data with Content=C"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z with MustBeFresh=true. Fail if unanswered or if received
+# content is not "C".
+echo "Starting Traffic Client 8 (Prefix=/A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z, MustBeFresh=true, ExpectedContent=C)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-8.conf &> $workdir/logs/client-8.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 8. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 8 received Data with Content=C"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /D with MustBeFresh=true and Exclude=[...,D]. Fail if unanswered or if received content
+# is not "Z".
+echo "Starting Traffic Client 9 (Prefix=/D, MustBeFresh=true, ExcludeRange=...,D, ExpectedContent=Z)..."
+ndn-traffic -c 1 $workdir/test-traffic-client-9.conf &> $workdir/logs/client-9.log
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 9. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 9 received Data with Content=Z"
+
+# Sleep for 100ms
+sleep 0.1
+
+# A: Request /D with MustBeFresh=true and Exclude=[...,E]. Fail if unanswered or if received content
+# is not "Z".
+echo "Starting Traffic Client 10 (Prefix=/D MustBeFresh=true, ExcludeRange=...,E, ExpectedContent=Z)..."
+outcode=$?
+if [[ $outcode -ne 0 ]]; then
+  echo "Received non-zero exit code from Traffic Client 10. Actual: $outcode"
+  clean_up
+  exit 1
+fi
+echo "Traffic Client 10 received Data with Content=Z"
+
+clean_up
diff --git a/test_fib_matching/test_fib_matching.py b/test_fib_matching/test_fib_matching.py
index 55c4788..afa23ed 100644
--- a/test_fib_matching/test_fib_matching.py
+++ b/test_fib_matching/test_fib_matching.py
@@ -1,240 +1,33 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014-2018 Arizona Board of Regents.
 # Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
+# Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
 
 import os
-import time
 import unittest
-import process_manager
+import subprocess
 
-class test_fib_matching(unittest.TestCase, process_manager.ProcessManager):
-    """Test case for testing fib matching"""
+class test_fib_matching(unittest.TestCase):
+    """Test case for testing FIB matching"""
 
     def setUp(self):
         print "\nTesting FIB Matching"
         print "********************"
+        os.chdir("test_fib_matching")
 
     def tearDown(self):
-        self.killNfd()
-        try:
-            self.killProcess("ndn-traffic-server-1")
-            self.killProcess("ndn-traffic-server-2")
-            self.killProcess("ndn-traffic-server-3")
-            self.killProcess("ndn-traffic-server-4")
-            self.killProcess("ndn-traffic-client-1")
-            self.killProcess("ndn-traffic-client-2")
-            self.killProcess("ndn-traffic-client-3")
-            self.killProcess("ndn-traffic-client-4")
-            self.killProcess("ndn-traffic-client-5")
-            self.killProcess("ndn-traffic-client-6")
-            self.killProcess("ndn-traffic-client-7")
-            self.killProcess("ndn-traffic-client-8")
-            self.killProcess("ndn-traffic-client-9")
-            self.killProcess("ndn-traffic-client-10")
-            self.cleanupProcesses()
-        except IOError as e:
-            self.cleanupProcesses()
-            pass
+        print "********************"
+        os.chdir("..")
 
-    def checkAndReportFailure(self, processKey, processName):
-        if self.hasProcessCompleted(processKey):
-            if self.getProcessReturnCode(processKey) != 0:
-                print self.getProcessOutput(processKey)
-                print self.getProcessError(processKey)
-                self.fail(">> TEST FAILED - received non-zero return code from " + processName)
-        else:
-            self.fail(">> TEST FAILED - " + processName + " failed to complete")
-
-    def test_matching(self):
-
-        #Start NFD
-        self.startNfd()
-        time.sleep(1)
-
-        #Start ndn-traffic-server to serve ndn:/ with Content "Z", FreshnessPeriod=10ms
-        #Prefix registration using NFD FibMgmt
-        serverConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-server-1.conf")
-        self.startProcess("ndn-traffic-server-1",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 1 (Prefix=ndn:/, FreshnessPeriod=10ms, Data=Z)")
-        time.sleep(0.1)
-
-        #Start ndn-traffic-server to serve ndn:/A with Content "A", FreshnessPeriod=10ms
-        #Prefix registration using NFD FibMgmt
-        serverConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-server-2.conf")
-        self.startProcess("ndn-traffic-server-2",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 2 (Prefix=ndn:/A, FreshnessPeriod=10ms, Data=A)")
-        time.sleep(0.1)
-
-        #Start ndn-traffic-server to serve ndn:/A/B/C with Content "C", FreshnessPeriod=10ms
-        #Prefix registration using NFD FibMgmt
-        serverConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-server-3.conf")
-        self.startProcess("ndn-traffic-server-3",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 3 (Prefix=ndn:/A/B/C, FreshnessPeriod=10ms, Data=C)")
-        time.sleep(0.1)
-
-        #Start ndn-traffic-server to serve ndn:/D/E with Content "E", FreshnessPeriod=10ms
-        #Prefix registration using NFD FibMgmt
-        serverConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-server-4.conf")
-        self.startProcess("ndn-traffic-server-4",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 4 (Prefix=ndn:/D/E, FreshnessPeriod=10ms, Data=E)")
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/ MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "Z".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-1.conf")
-        self.startProcess("ndn-traffic-client-1",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            ("-> Starting Traffic Client 1 (Prefix=ndn:/, MustBeFresh=Yes,"
-             " ExpectedContent=Z, MaxSuffixComponents=2)"))
-        self.waitForProcessCompletion("ndn-traffic-client-1", 10)
-        self.checkAndReportFailure("ndn-traffic-client-1", "Traffic Client 1")
-        print "-> Traffic Client 1 received data with Content=Z"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/F MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "Z".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-2.conf")
-        self.startProcess("ndn-traffic-client-2",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client 2 (Prefix=ndn:/F, MustBeFresh=Yes, ExpectedContent=Z)")
-        self.waitForProcessCompletion("ndn-traffic-client-2", 10)
-        self.checkAndReportFailure("ndn-traffic-client-2", "Traffic Client 2")
-        print "-> Traffic Client 2 received data with Content=Z"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/A MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "A".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-3.conf")
-        self.startProcess("ndn-traffic-client-3",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client 3 (Prefix=ndn:/A, MustBeFresh=Yes, ExpectedContent=A)")
-        self.waitForProcessCompletion("ndn-traffic-client-3", 10)
-        self.checkAndReportFailure("ndn-traffic-client-3", "Traffic Client 3")
-        print "-> Traffic Client 3 received data with Content=A"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/a MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "Z".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-4.conf")
-        self.startProcess("ndn-traffic-client-4",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client 4 (Prefix=ndn:/a, MustBeFresh=Yes, ExpectedContent=Z)")
-        self.waitForProcessCompletion("ndn-traffic-client-4", 10)
-        self.checkAndReportFailure("ndn-traffic-client-4", "Traffic Client 4")
-        print "-> Traffic Client 4 received data with Content=Z"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/A/B MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "A".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-5.conf")
-        self.startProcess("ndn-traffic-client-5",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client 5 (Prefix=ndn:/A/B, MustBeFresh=Yes, ExpectedContent=A)")
-        self.waitForProcessCompletion("ndn-traffic-client-5", 10)
-        self.checkAndReportFailure("ndn-traffic-client-5", "Traffic Client 5")
-        print "-> Traffic Client 5 received data with Content=A"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/A/B/G MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "A".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-6.conf")
-        self.startProcess("ndn-traffic-client-6",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client 6 (Prefix=ndn:/A/B/G, MustBeFresh=Yes, ExpectedContent=A)")
-        self.waitForProcessCompletion("ndn-traffic-client-6", 10)
-        self.checkAndReportFailure("ndn-traffic-client-6", "Traffic Client 6")
-        print "-> Traffic Client 6 received data with Content=A"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/A/B/C MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "C".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-7.conf")
-        self.startProcess("ndn-traffic-client-7",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client 7 (Prefix=ndn:/A/B/C, MustBeFresh=Yes, ExpectedContent=C)")
-        self.waitForProcessCompletion("ndn-traffic-client-7", 10)
-        self.checkAndReportFailure("ndn-traffic-client-7", "Traffic Client 7")
-        print "-> Traffic Client 7 received data with Content=C"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z MustBeFresh=yes
-        #Fail if unanswered. Fail if Content is not "C".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-8.conf")
-        self.startProcess("ndn-traffic-client-8",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            ("-> Starting Traffic Client 8 (Prefix=ndn:/A/B/C/P/Q/R/S/T/U/V/W/X/Y/Z,"
-             " MustBeFresh=Yes, ExpectedContent=C)"))
-        self.waitForProcessCompletion("ndn-traffic-client-8", 10)
-        self.checkAndReportFailure("ndn-traffic-client-8", "Traffic Client 8")
-        print "-> Traffic Client 8 received data with Content=C"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/D MustBeFresh=yes Exclude=[...,D]
-        #Fail if unanswered. Fail if Content is not "Z".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-9.conf")
-        self.startProcess("ndn-traffic-client-9",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            ("-> Starting Traffic Client 9 (Prefix=ndn:/D, MustBeFresh=Yes,"
-             " ExcludeRange=...,D, ExpectedContent=Z)"))
-        self.waitForProcessCompletion("ndn-traffic-client-9", 10)
-        self.checkAndReportFailure("ndn-traffic-client-9", "Traffic Client 9")
-        print "-> Traffic Client 9 received data with Content=Z"
-
-        #Wait 100ms
-        time.sleep(0.1)
-
-        #Invoke ndn-traffic to request ndn:/D MustBeFresh=yes Exclude=[...,E]
-        #Fail if unanswered. Fail if Content is not "Z".
-        clientConfigurationFile = os.path.abspath(
-            "test_fib_matching/test-traffic-client-10.conf")
-        self.startProcess("ndn-traffic-client-10",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            ("-> Starting Traffic Client 10 (Prefix=ndn:/E, MustBeFresh=Yes,"
-             " ExcludeRange=...,E, ExpectedContent=Z)"))
-        self.waitForProcessCompletion("ndn-traffic-client-10", 10)
-        self.checkAndReportFailure("ndn-traffic-client-10", "Traffic Client 10")
-        print "-> Traffic Client 10 received data with Content=Z"
-
-        #Stop all four traffic servers
-        self.killProcess("ndn-traffic-server-1")
-        self.killProcess("ndn-traffic-server-2")
-        self.killProcess("ndn-traffic-server-3")
-        self.killProcess("ndn-traffic-server-4")
-        print ">> TEST SUCCESSFUL"
+    def test_fib_matching(self):
+        ret = subprocess.call(["./fib-matching-test.sh"], shell=True)
+        print "Test script return value:", ret
+        errormsg = {
+            1 : "Traffic Client did not receive a Data or received Data did not contain expected content",
+        }
+        if (ret != 0):
+            self.fail(errormsg[ret])
diff --git a/test_interest_aggregation/README.md b/test_interest_aggregation/README.md
index 33f9551..df57f8e 100644
--- a/test_interest_aggregation/README.md
+++ b/test_interest_aggregation/README.md
@@ -1,22 +1,24 @@
-Test Case - interest-aggregation
+Test Case - interest_aggregation
 ================================
 
 ## Objective ##
 
-To test NFD's interest aggregation on a single host.
+Test NFD's Interest aggregation mechanism on a single host.
 
 ## Description ##
 
-This test case will run NFD, ndnpeek and ndn-traffic-server to check aggregation of interests by NFD. The following steps will be followed:
+This test case will run NFD, ndnpeek, and ndn-traffic-server to check for the proper aggregation of Interests by NFD.
 
-1. Start NFD.
-2. Set NFD to use the best-route v1 strategy.
-3. Start ndn-traffic-server to serve ndn:/test-agg, with -d 2000 flag to delay response for 2000ms.
-4. Start two instances of ndnpeek to request ndn:/test-agg/A. Wait until they terminate. Fail if either is unanswered.
-5. Stop ndn-traffic-server. Fail if total served Interest does not equal 1.
-6. Start ndn-traffic-server to serve ndn:/test-agg, with -d 2000 flag to delay response for 2000ms.
-7. Start ndnpeek to request ndn:/test-agg/B ChildSelector=leftmost, and another instance to request ndn:/test-agg/B ChildSelector=rightmost. Wait until they terminate. Fail if either is unanswered.
-8. Stop ndn-traffic-server. Fail if total served Interest does not equal 2.
-9. Start ndn-traffic-server to serve ndn:/test-agg, with -d 2000 flag to delay response for 2000ms.
-10. Start ndnpeek to request ndn:/test-agg/C InterestLifetime=6000ms, and another instance to request ndn:/test-agg/C InterestLifetime=8000ms. Wait until they terminate. Fail if either is unanswered.
-11. Stop ndn-traffic-server. Fail if total served Interest does not equal 1.
+## Steps ##
+
+1.  Start NFD.
+2.  Set NFD to use the best-route v1 strategy on the / prefix.
+3.  Start ndn-traffic-server to serve /test-agg, with -d 2000 flag to delay response for 2000ms.
+4.  Start two instances of ndnpeek to request /test-agg/A. Fail if either instance fails to exit or if either Interest goes unanswered.
+5.  Stop ndn-traffic-server. Fail if total number of served Interests does not equal 1.
+6.  Start ndn-traffic-server to serve /test-agg, with -d 2000 flag to delay response for 2000ms.
+7.  Start ndnpeek to request /test-agg/B with CanBePrefix=false, and another instance to request /test-agg/B with CanBePrefix=true. Fail if either instance fails to exit or if either Interest goes unanswered.
+8.  Stop ndn-traffic-server. Fail if total number of served Interests does not equal 2.
+9.  Start ndn-traffic-server to serve /test-agg, with -d 2000 flag to delay response for 2000ms.
+10. Start ndnpeek to request /test-agg/C with InterestLifetime=6000ms, and another instance to request /test-agg/C with InterestLifetime=8000ms. Fail if either is instance fails to exit or if either Interest goes unanswered.
+11. Stop ndn-traffic-server. Fail if total number of served Interests does not equal 1.
diff --git a/test_interest_aggregation/__init__.py b/test_interest_aggregation/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/test_interest_aggregation/__init__.py
+++ /dev/null
diff --git a/test_interest_aggregation/interest-aggregation-test.sh b/test_interest_aggregation/interest-aggregation-test.sh
new file mode 100755
index 0000000..c0e3935
--- /dev/null
+++ b/test_interest_aggregation/interest-aggregation-test.sh
@@ -0,0 +1,140 @@
+#!/bin/bash
+source ../multi-host.conf
+
+clean_up() {
+  r=$(sudo killall ndn-traffic-server 2>&1)
+  r=$(sudo killall ndnpeek 2>&1)
+  r=$(sudo killall nfd 2>&1)
+}
+
+check_peek_exit() {
+  ps -p $2 > /dev/null
+  if [[ $? -ne 1 ]]; then
+    echo "Peek Client $1 did not exit"
+    clean_up
+    exit 1
+  fi
+}
+
+check_peek_output() {
+  local out=$(cat $2)
+  if [[ "$out" != "$3" ]]; then
+    echo "Peek Client $1 did not receive a Data containing '$3'. Actual: $out"
+    clean_up
+    exit 2
+  fi
+}
+
+check_server_receive_count() {
+  local actual=$(cat $2 | grep "Total Interests Received" | head -1 | cut -d"=" -f2 | tr -d " ")
+  if [[ $actual -ne $3 ]]; then
+    echo "Traffic Server $1 did not received expected $3 Interests. Actual: $actual"
+    clean_up
+    exit 3
+  fi
+}
+
+# A: Start NFD
+workdir=$(pwd)
+echo "Starting nfd on A..."
+mkdir -p $workdir/logs; sudo nfd &> $workdir/logs/nfd.log &
+sleep 1
+
+# A: Set NFD to use best-route v1 strategy
+echo "Setting strategy to best-route v1"
+nfdc strategy set / /localhost/nfd/strategy/best-route/%FD%01
+sleep 1
+
+# A: Start ndn-traffic-server (Prefix=/text-agg, ContentDelay=2000ms)
+echo "Starting Traffic Server 1 (Prefix=/test-agg, ContentDelay=2000ms)..."
+ndn-traffic-server $workdir/test-traffic-server.conf &> $workdir/logs/test-server-output-1.txt &
+sleep 1
+
+# A: Start two instances of ndnpeek to request /test-agg/A
+echo "Starting Peek Client 1 (Prefix=/test-agg/A)..."
+ndnpeek -p /test-agg/A &> $workdir/logs/test-peek-output-1.txt &
+peek1pid=$!
+echo "Starting Peek Client 2 (Prefix=/test-agg/A)..."
+ndnpeek -p /test-agg/A &> $workdir/logs/test-peek-output-2.txt &
+peek2pid=$!
+sleep 1
+
+# A: Stop ndn-traffic-server instance
+echo "Stopping Traffic Server 1..."
+sudo killall ndn-traffic-server 2>&1
+sleep 2
+
+# A: Ensure ndnpeek instances have quit
+check_peek_exit 1 $peek1pid
+check_peek_exit 2 $peek2pid
+
+# A: Ensure ndnpeek instances both received Data packets with correct payloads in response to their Interests
+check_peek_output 1 $workdir/logs/test-peek-output-1.txt AAAAAAAA
+check_peek_output 2 $workdir/logs/test-peek-output-2.txt AAAAAAAA
+
+# A: Ensure that Traffic Server 1 received only one Interest
+check_server_receive_count 1 $workdir/logs/test-server-output-1.txt 1
+
+# A: Start ndn-traffic-server (Prefix=/test-agg, ContentDelay=2000ms)
+echo "Starting Traffic Server 2 (Prefix=/test-agg, ContentDelay=2000ms)..."
+ndn-traffic-server $workdir/test-traffic-server.conf &> $workdir/logs/test-server-output-2.txt &
+sleep 1
+
+# A: Start two instances of ndnpeek to request /test-agg/B, with one setting CanBePrefix=false and
+# the other setting CanBePrefix=true
+echo "Starting Peek Client 3 (Prefix=/test-agg/B, CanBePrefix=false)..."
+ndnpeek -p /test-agg/B &> $workdir/logs/test-peek-output-3.txt &
+peek3pid=$!
+echo "Starting Peek Client 4 (Prefix=/test-agg/B, CanBePrefix=true)..."
+ndnpeek -P -p /test-agg/B &> $workdir/logs/test-peek-output-4.txt &
+peek4pid=$!
+sleep 1
+
+# A: Stop ndn-traffic-server instance
+echo "Stopping Traffic Server 2..."
+sudo killall ndn-traffic-server 2>&1
+sleep 2
+
+# A: Ensure ndnpeek instances have quit
+check_peek_exit 3 $peek3pid
+check_peek_exit 4 $peek4pid
+
+# A: Ensure ndnpeek instances both received Data packets with correct payload in response to their interests
+check_peek_output 3 $workdir/logs/test-peek-output-3.txt AAAAAAAA
+check_peek_output 4 $workdir/logs/test-peek-output-4.txt AAAAAAAA
+
+# A: Ensure that Traffic Server 2 received two Interests
+check_server_receive_count 2 $workdir/logs/test-server-output-2.txt 2
+
+# A: Start ndn-traffic-server (Prefix=/test-agg, ContentDelay=2000ms)
+echo "Starting Traffic Server 3 (Prefix=/test-agg, ContentDelay=2000ms)..."
+ndn-traffic-server $workdir/test-traffic-server.conf &> $workdir/logs/test-server-output-3.txt &
+sleep 1
+
+# A: Start two instances of ndnpeek to request /test-agg/C, with one setting InterestLifetime=6000ms
+# and the other setting InterestLifetime=8000ms
+echo "Starting Peek Client 5 (Prefix=/test-agg/C, InterestLifetime=6000ms)"
+ndnpeek --lifetime 6000 -p /test-agg/C > $workdir/logs/test-peek-output-5.txt &
+peek5pid=$!
+echo "Starting Peek Client 6 (Prefix=/test-agg/C, InterestLifetime=8000ms)..."
+ndnpeek --lifetime 8000 -p /test-agg/C > $workdir/logs/test-peek-output-6.txt &
+peek6pid=$!
+sleep 1
+
+# A: Stop ndn-traffic-server instance
+echo "Stopping Traffic Server 3..."
+sudo killall ndn-traffic-server 2>&1
+sleep 2
+
+# A: Ensure ndnpeek instances have quit
+check_peek_exit 5 $peek5pid
+check_peek_exit 6 $peek6pid
+
+# A: Ensure ndnpek instances both received Data packets with correct payload in response to their Interests
+check_peek_output 5 $workdir/logs/test-peek-output-5.txt AAAAAAAA
+check_peek_output 6 $workdir/logs/test-peek-output-6.txt AAAAAAAA
+
+# A: Ensure that Traffic Server 3 received only one Interest
+check_server_receive_count 3 $workdir/logs/test-server-output-3.txt 1
+
+clean_up
diff --git a/test_interest_aggregation/test-traffic-server.conf b/test_interest_aggregation/test-traffic-server.conf
index 4fd7531..b3ff461 100644
--- a/test_interest_aggregation/test-traffic-server.conf
+++ b/test_interest_aggregation/test-traffic-server.conf
@@ -1,2 +1,3 @@
 Name=ndn:/test-agg
 ContentDelay=2000
+Content=AAAAAAAA
diff --git a/test_interest_aggregation/test_interest_aggregation.py b/test_interest_aggregation/test_interest_aggregation.py
index 4b1fbe2..ed54fe9 100644
--- a/test_interest_aggregation/test_interest_aggregation.py
+++ b/test_interest_aggregation/test_interest_aggregation.py
@@ -1,169 +1,35 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014-2018 Arizona Board of Regents.
 # Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
+# Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
 
 import os
-import time
 import unittest
-import process_manager
+import subprocess
 
-class test_interest_aggregation(unittest.TestCase, process_manager.ProcessManager):
-    """Test case for testing interest aggregation"""
+class test_interest_aggregation(unittest.TestCase):
+    """Test case for testing Interest aggregation"""
 
     def setUp(self):
         print "\nTesting Interest Aggregation"
         print "****************************"
-        self.logFolder = "test_interest_aggregation/logs/"
-        if not os.path.exists(self.logFolder):
-            os.system("mkdir " + self.logFolder)
+        os.chdir("test_interest_aggregation")
 
     def tearDown(self):
-        self.killNfd()
-        self.killProcess("ndn-traffic-server-1")
-        self.killProcess("ndnpeek-1")
-        self.killProcess("ndnpeek-2")
-        self.killProcess("ndn-traffic-server-2")
-        self.killProcess("ndnpeek-3")
-        self.killProcess("ndnpeek-4")
-        self.killProcess("ndn-traffic-server-3")
-        self.killProcess("ndnpeek-5")
-        self.killProcess("ndnpeek-6")
-        self.cleanupProcesses()
-
-    def checkAndReportFailure(self, processKey, processName):
-        if self.hasProcessCompleted(processKey):
-            if self.getProcessReturnCode(processKey) != 0:
-                print self.getProcessOutput(processKey)
-                print self.getProcessError(processKey)
-                self.fail(">> TEST FAILED - received non-zero return code from " + processName)
-        else:
-            self.fail(">> TEST FAILED - " + processName + " failed to complete")
-
-
-    def checkServerReceiveCount(self, processKey, processName, expectedCount):
-        serverOutput = self.getProcessOutput(processKey).splitlines()
-        isTestSuccessful = False
-        receivedCount = 0
-        for logLine in serverOutput:
-            if "Total Interests Received" in logLine:
-                for value in logLine.split():
-                    if value.isdigit():
-                        receivedCount = int(value)
-                        break
-                if receivedCount == expectedCount:
-                    isTestSuccessful = True
-                break
-        if not isTestSuccessful:
-            self.fail(">> TEST FAILED - " + processName +
-                      " expected to receive only " + str(expectedCount) +
-                      " interest(s) but received " + str(receivedCount) + " interest(s)" )
-        else:
-            print "-> " + processName + " received " + str(receivedCount) + " interest(s)"
+        print "****************************"
+        os.chdir("..")
 
     def test_aggregation(self):
-
-        #Start NFD
-        self.startNfd()
-        time.sleep(1)
-
-        #Set NFD to use best-route v1 strategy
-        self.startProcess("nfdc",
-            ["nfdc", "strategy", "set", "/", "/localhost/nfd/strategy/best-route/%FD%01"],
-            "-> Setting strategy to best-route v1")
-        time.sleep(1)
-
-        #Start ndn-traffic-server to serve /test-agg, with content delay set to 2000ms
-        serverConfigurationFile = os.path.abspath(
-            "test_interest_aggregation/test-traffic-server.conf")
-        self.startProcess("ndn-traffic-server-1",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 1 (Prefix=/test-agg, ContentDelay=2000ms)")
-        time.sleep(1)
-
-        #Start two instances of ndnpeek to request /test-agg/A. Wait until they
-        #terminate. Fail if either is unanswered.
-        peekOutputFile = os.path.abspath(self.logFolder + "test-peek-output-1.txt")
-        self.startProcess("ndnpeek-1",
-            ["ndnpeek", "/test-agg/A"],
-            "-> Starting Peek Client 1 (Prefix=/test-agg/A)",
-            outputFile=peekOutputFile)
-        peekOutputFile = os.path.abspath(self.logFolder + "test-peek-output-2.txt")
-        self.startProcess("ndnpeek-2",
-            ["ndnpeek", "/test-agg/A"],
-            "-> Starting Peek Client 2 (Prefix=/test-agg/A)",
-            outputFile=peekOutputFile)
-        self.waitForProcessCompletion("ndnpeek-1", 10)
-        self.waitForProcessCompletion("ndnpeek-2", 10)
-
-        #Stop ndn-traffic-server. Fail if total served Interest does not equal 1.
-        self.killProcess("ndn-traffic-server-1")
-        time.sleep(1)
-        print "-> Stopping Traffic Server 1"
-        self.checkAndReportFailure("ndnpeek-1", "Peek Client 1")
-        self.checkAndReportFailure("ndnpeek-2", "Peek Client 2")
-        self.checkServerReceiveCount("ndn-traffic-server-1", "Traffic Server 1", 1)
-
-        #Start ndn-traffic-server to serve /test-agg, with content delay set to 2000ms
-        self.startProcess("ndn-traffic-server-2",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 2 (Prefix=/test-agg, ContentDelay=2000ms)")
-        time.sleep(1)
-
-        #Start ndnpeek to request /test-agg/B ChildSelector=leftmost, and another
-        #instance to request /test-agg/B ChildSelector=rightmost. Wait until they terminate.
-        #Fail if either is unanswered.
-        peekOutputFile = os.path.abspath(self.logFolder + "test-peek-output-3.txt")
-        self.startProcess("ndnpeek-3",
-            ["ndnpeek", "/test-agg/B"],
-            "-> Starting Peek Client 3 (Prefix=/test-agg/B, ChildSelector=leftmost)",
-            outputFile=peekOutputFile)
-        peekOutputFile = os.path.abspath(self.logFolder + "test-peek-output-4.txt")
-        self.startProcess("ndnpeek-4",
-            ["ndnpeek", "-r", "/test-agg/B"],
-            "-> Starting Peek Client 4 (Prefix=/test-agg/B, ChildSelector=rightmost)",
-            outputFile=peekOutputFile)
-        self.waitForProcessCompletion("ndnpeek-3", 10)
-        self.waitForProcessCompletion("ndnpeek-4", 10)
-
-        #Stop ndn-traffic-server. Fail if total served Interest does not equal 2.
-        self.killProcess("ndn-traffic-server-2")
-        time.sleep(1)
-        print "-> Stopping Traffic Server 2"
-        self.checkAndReportFailure("ndnpeek-3", "Peek Client 3")
-        self.checkAndReportFailure("ndnpeek-4", "Peek Client 4")
-        self.checkServerReceiveCount("ndn-traffic-server-2", "Traffic Server 2", 2)
-
-        #Start ndn-traffic-server to serve /test-agg, with content delay set to 2000ms
-        self.startProcess("ndn-traffic-server-3",
-            ["ndn-traffic-server", serverConfigurationFile],
-            "-> Starting Traffic Server 3 (Prefix=/test-agg, ContentDelay=2000ms)")
-        time.sleep(1)
-
-        #Start ndnpeek to request /test-agg/C InterestLifetime=6000ms, and another
-        #instance to request /test-agg/C. InterestLifetime=8000ms. Wait until they terminate.
-        #Fail if either is unanswered.
-        peekOutputFile = os.path.abspath(self.logFolder + "test-peek-output-5.txt")
-        self.startProcess("ndnpeek-5",
-            ["ndnpeek", "--lifetime", "6000", "/test-agg/C"],
-            "-> Starting Peek Client 5 (Prefix=/test-agg/C, InterestLifetime=6000ms)",
-            outputFile=peekOutputFile)
-        peekOutputFile = os.path.abspath(self.logFolder + "test-peek-output-6.txt")
-        self.startProcess("ndnpeek-6",
-            ["ndnpeek", "--lifetime", "8000", "/test-agg/C"],
-            "-> Starting Peek Client 6 (Prefix=/test-agg/C, InterestLifetime=8000ms)",
-            outputFile=peekOutputFile)
-        self.waitForProcessCompletion("ndnpeek-5", 10)
-        self.waitForProcessCompletion("ndnpeek-6", 10)
-
-        #Stop ndn-traffic-server. Fail if total served Interest does not equal 1.
-        self.killProcess("ndn-traffic-server-3")
-        time.sleep(1)
-        print "-> Stopping Traffic Server 3"
-        self.checkAndReportFailure("ndnpeek-5", "Peek Client 5")
-        self.checkAndReportFailure("ndnpeek-6", "Peek Client 6")
-        self.checkServerReceiveCount("ndn-traffic-server-3", "Traffic Server 3", 1)
-        print ">> TEST SUCCESSFUL"
+        ret = subprocess.call(["./interest-aggregation-test.sh"], shell=True)
+        print "Test script return value:", ret
+        errormsg = {
+            1 : "Peek Client did not exit",
+            2 : "Peek Client did not Data packet or received Data packet containing incorrect content",
+            3 : "Traffic Server did not received correct count of Interests",
+        }
+        if (ret != 0):
+            self.fail(errormsg[ret])
diff --git a/test_interest_loop/test_interest_loop.py b/test_interest_loop/test_interest_loop.py
index 229f338..4719671 100644
--- a/test_interest_loop/test_interest_loop.py
+++ b/test_interest_loop/test_interest_loop.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_localhop/test_localhop.py b/test_localhop/test_localhop.py
index a2789c8..70db1a2 100644
--- a/test_localhop/test_localhop.py
+++ b/test_localhop/test_localhop.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_localhost_scope/test_localhost_scope.py b/test_localhost_scope/test_localhost_scope.py
index cbc014e..94af576 100644
--- a/test_localhost_scope/test_localhost_scope.py
+++ b/test_localhost_scope/test_localhost_scope.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_mobility_link/test_mobility_link.py b/test_mobility_link/test_mobility_link.py
index b1c9d19..a41d3af 100644
--- a/test_mobility_link/test_mobility_link.py
+++ b/test_mobility_link/test_mobility_link.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2016 University of Arizona
+# Copyright (C) 2016 Arizona Board of Regents.
 # Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_multicast/test_multicast.py b/test_multicast/test_multicast.py
index 2b87789..a72d74e 100644
--- a/test_multicast/test_multicast.py
+++ b/test_multicast/test_multicast.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_ndnpeekpoke/README.md b/test_ndnpeekpoke/README.md
index 145953c..9a652a8 100644
--- a/test_ndnpeekpoke/README.md
+++ b/test_ndnpeekpoke/README.md
@@ -3,10 +3,10 @@
 
 ## Objective ##
 
-To test the ndnpeek and ndnpoke applications on a single host.
+Test the ndnpeek and ndnpoke applications on a single host.
 
 ## Description ##
 
-This test case will run NFD, ndnpeek and ndnpoke.
-This will report SUCCESS if one interest/data is successfully exchanged between ndnpeek and ndnpoke.
-In all other scenarios, the test case will report FAILURE
+This test case will run NFD, ndnpeek, and ndnpoke.
+It will succeed if one Interest/Data exchange is completed between the instances of ndnpeek and ndnpoke.
+Otherwise, it will fail.
diff --git a/test_ndnpeekpoke/__init__.py b/test_ndnpeekpoke/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/test_ndnpeekpoke/__init__.py
+++ /dev/null
diff --git a/test_ndnpeekpoke/ndnpeekpoke-test.sh b/test_ndnpeekpoke/ndnpeekpoke-test.sh
new file mode 100755
index 0000000..9dff5b1
--- /dev/null
+++ b/test_ndnpeekpoke/ndnpeekpoke-test.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+source ../multi-host.conf
+
+clean_up() {
+  r=$(sudo killall ndnpeek 2>&1)
+  r=$(sudo killall ndnpoke 2>&1)
+  r=$(sudo killall nfd 2>&1)
+}
+
+# A: Start NFD
+workdir=$(pwd)
+echo "Starting nfd on A..."
+mkdir -p $workdir/logs; sudo nfd &> $workdir/logs/nfd.log &
+sleep 1
+
+# A: Start ndnpoke
+echo "Starting ndnpoke on A..."
+ndnpoke /test/peekpoke < $workdir/test-poke-input.txt &
+pokepid=$!
+sleep 1
+
+# A: Run ndnpeek
+echo "Running ndnpeek on A..."
+ndnpeek /test/peekpoke > $workdir/logs/test-peek-output.txt
+exitcode=$?
+
+if [[ $exitcode -ne 0 ]]; then
+  echo "Received non-zero exit code from ndnpeek - actual: $exitcode"
+  clean_up
+  exit 1
+fi
+
+sleep 1
+
+# Verify that ndnpoke has exited
+# ps -p returns 1 if no matching process is found
+ps -p $pokepid > /dev/null
+if [[ $? -ne 1 ]]; then
+  echo "ndnpoke did not exit"
+  clean_up
+  exit 2
+fi
+
+clean_up
diff --git a/test_ndnpeekpoke/test_ndnpeekpoke.py b/test_ndnpeekpoke/test_ndnpeekpoke.py
index 9f218e9..f2ea543 100644
--- a/test_ndnpeekpoke/test_ndnpeekpoke.py
+++ b/test_ndnpeekpoke/test_ndnpeekpoke.py
@@ -1,59 +1,34 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014-2018 Arizona Board of Regents.
 # Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
+# Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
 
 import os
-import time
 import unittest
-import process_manager
+import subprocess
 
-class test_ndnpeekpoke(unittest.TestCase, process_manager.ProcessManager):
-    """Test case for testing ndnpeek and ndnpoke applications"""
+class test_ndnpeekpoke(unittest.TestCase):
+    """Test case for the ndnpeek and ndnpoke applications"""
 
     def setUp(self):
-        print "\nTesting ndnpeek & ndnpoke"
-        print "***********************************"
-        os.system("mkdir -p test_ndnpeekpoke/logs/")
+        print "\nTesting ndnpeek and ndnpoke"
+        print "***************************"
+        os.chdir("test_ndnpeekpoke")
 
     def tearDown(self):
-        self.killNfd()
-        self.killProcess("ndnpoke")
-        self.killProcess("ndnpeek")
-        self.cleanupProcesses()
+        print "***************************"
+        os.chdir("..")
 
-    def test_peekpoke(self):
-        self.startNfd()
-        time.sleep(1)
-        pokeInputFile = os.path.abspath("test_ndnpeekpoke/test-poke-input.txt")
-        self.startProcess("ndnpoke",
-            ["ndnpoke", "ndn:/test/peekpoke"],
-            "-> Starting Poke",
-            inputFile=pokeInputFile)
-        time.sleep(1)
-        peekOutputFile = os.path.abspath("test_ndnpeekpoke/logs/test-peek-output.txt")
-        self.startProcess("ndnpeek",
-            ["ndnpeek", "ndn:/test/peekpoke"],
-            "-> Starting Peek",
-            outputFile=peekOutputFile)
-        time.sleep(1)
-        self.waitForProcessCompletion("ndnpeek", 10)
-        self.waitForProcessCompletion("ndnpoke", 10)
-        if self.hasProcessCompleted("ndnpeek"):
-            if self.getProcessReturnCode("ndnpeek") != 0:
-                print self.getProcessReturnCode("ndnpeek")
-                print self.getProcessError("ndnpeek")
-                print self.getProcessOutput("ndnpeek")
-                self.fail(">> TEST FAILED - received non-zero return code from ndnpeek")
-        else:
-            self.fail(">> TEST FAILED - ndnpeek failed to complete")
-        if self.hasProcessCompleted("ndnpoke"):
-            if self.getProcessReturnCode("ndnpoke") != 0:
-                print self.getProcessError("ndnpoke")
-                self.fail(">> TEST FAILED - received non-zero return code from ndnpoke")
-        else:
-            self.fail(">> TEST FAILED - ndnpoke failed to complete")
-        print ">> TEST SUCCESSFUL"
+    def test_ndnpeekpoke(self):
+        ret = subprocess.call(["./ndnpeekpoke-test.sh"], shell=True)
+        print "Test script return value:", ret
+        errormsg = {
+            1 : "ndnpeek did not receive a Data packet satisfying its Interest",
+            2 : "ndnpoke did not exit after sending a Data packet",
+        }
+        if (ret != 0):
+            self.fail(errormsg[ret])
diff --git a/test_ndnping/README.md b/test_ndnping/README.md
index 46a5ebb..4120e49 100644
--- a/test_ndnping/README.md
+++ b/test_ndnping/README.md
@@ -3,10 +3,10 @@
 
 ## Objective ##
 
-To test the ndnping application on a single host.
+Test the ndnping and ndnpingserver applications on a single host.
 
 ## Description ##
 
-This test case will run NFD, ndnping and ndnpingserver.
-This will report SUCCESS if one ping interest/data is successfully exchanged between the ndnping and ndnpingserver.
-In all other scenarios, the test case will report FAILURE
+This test case will run NFD, ndnping, and ndnpingserver.
+It will succeed if five ping Interest/Data exchanges are completed between the instances of ndnping and ndnpingserver.
+Otherwise, it will fail.
diff --git a/test_ndnping/__init__.py b/test_ndnping/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/test_ndnping/__init__.py
+++ /dev/null
diff --git a/test_ndnping/ndnping-test.sh b/test_ndnping/ndnping-test.sh
new file mode 100755
index 0000000..ae3ac17
--- /dev/null
+++ b/test_ndnping/ndnping-test.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+source ../multi-host.conf
+
+clean_up() {
+  r=$(sudo killall ndnpingserver 2>&1)
+  r=$(sudo killall ndnping 2>&1)
+  r=$(sudo killall nfd 2>&1)
+}
+
+# A: Start NFD
+workdir=$(pwd)
+echo "Starting nfd on A..."
+mkdir -p $workdir/logs; sudo nfd &> $workdir/logs/nfd.log &
+sleep 1
+
+# A: Start ndnpingserver
+echo "Starting ndnpingserver on A..."
+ndnpingserver -p5 /test/ndnping &> $workdir/logs/ndnpingserver.log &
+serverpid=$!
+sleep 1
+
+# A: Run ndnping
+echo "Running ndnping on A..."
+ndnping -c5 /test/ndnping
+exitcode=$?
+sleep 1
+
+# An exit code of zero indicates the number of received Data packets equals the number of sent Interests
+if [[ $exitcode -ne 0 ]]; then
+  echo "Received non-zero exit code from ndnping - actual: $exitcode"
+  clean_up
+  exit 1
+fi
+
+# Verify that ndnpingserver has exited
+# ps -p returns 1 if no matching process is found
+ps -p $serverpid > /dev/null
+if [[ $? -ne 1 ]]; then
+  echo "ndnpingserver did not exit"
+  clean_up
+  exit 2
+fi
+
+clean_up
+
+nReceivedInterests=$(grep -c "interest received" $workdir/logs/ndnpingserver.log)
+if [[ $nReceivedInterests -ne 5 ]]; then
+  echo "ndnpingserver did not receive 5 Interests - actual: $nReceivedInterests"
+  clean_up
+  exit 3
+fi
diff --git a/test_ndnping/test_ndnping.py b/test_ndnping/test_ndnping.py
index 4ee2c3d..b88ed59 100644
--- a/test_ndnping/test_ndnping.py
+++ b/test_ndnping/test_ndnping.py
@@ -1,50 +1,35 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014-2018 Arizona Board of Regents.
 # Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
+# Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
 
-import time
+import os
 import unittest
-import process_manager
+import subprocess
 
-class test_ndnping(unittest.TestCase, process_manager.ProcessManager):
-    """Test case for testing ndnping application"""
+class test_ndnping(unittest.TestCase):
+    """Test case for the ndnping application"""
 
     def setUp(self):
         print "\nTesting ndnping"
-        print "********************"
+        print "***************"
+        os.chdir("test_ndnping")
 
     def tearDown(self):
-        self.killNfd()
-        self.killProcess("ndnpingserver")
-        self.killProcess("ndnping")
-        self.cleanupProcesses()
+        print "***************"
+        os.chdir("..")
 
-    def test_ping(self):
-        self.startNfd()
-        time.sleep(1)
-        time.sleep(1)
-        self.startProcess("ndnpingserver",
-            ["ndnpingserver", "-p1", "/test/ndnping"], "-> Starting Ping Server")
-        time.sleep(1)
-        self.startProcess("ndnping",
-            ["ndnping", "-c1", "/test/ndnping"], "-> Starting Ping Client")
-        time.sleep(1)
-        self.waitForProcessCompletion("ndnping", 10)
-        self.waitForProcessCompletion("ndnpingserver", 10)
-        if self.hasProcessCompleted("ndnping"):
-            if self.getProcessReturnCode("ndnping") != 0:
-                print self.getProcessError("ndnping")
-                self.fail(">> TEST FAILED - received non-zero return code from ndnping")
-        else:
-            self.fail(">> TEST FAILED - ndnping failed to complete")
-        if self.hasProcessCompleted("ndnpingserver"):
-            if self.getProcessReturnCode("ndnpingserver") != 0:
-                print self.getProcessError("ndnpingserver")
-                self.fail(">> TEST FAILED - received non-zero return code from ndnpingserver")
-        else:
-            self.fail(">> TEST FAILED - ndnpingserver failed to complete")
-        print ">> TEST SUCCESSFUL"
+    def test_ndnping(self):
+        ret = subprocess.call(["./ndnping-test.sh"], shell=True)
+        print "Test script return value:", ret
+        errormsg = {
+            1 : "ndnping did not receive a Data packet satisfying its Interest",
+            2 : "ndnpingserver did not exit after sending 5 Data packets",
+            3 : "ndnpingserver did not receive 5 Interests",
+        }
+        if (ret != 0):
+            self.fail(errormsg[ret])
diff --git a/test_ndntraffic/README.md b/test_ndntraffic/README.md
index 531c651..85384f0 100644
--- a/test_ndntraffic/README.md
+++ b/test_ndntraffic/README.md
@@ -3,10 +3,10 @@
 
 ## Objective ##
 
-To test the ndn-traffic-generator application on a single host.
+Test ndn-traffic-generator application on a single host.
 
 ## Description ##
 
-This test case will run NFD, ndn-traffic and ndn-traffic-server.
-This will report SUCCESS if one interest/data is successfully exchanged without any data inconsistency between ndn-traffic and ndn-traffic-server.
-In all other scenarios, the test case will report FAILURE
+This test case will run NFD, ndn-traffic, and ndn-traffic-server.
+This will report SUCCESS if one Interest/Data exchange is completed without any data inconsistency between ndn-traffic and ndn-traffic-server.
+Otherwise, it will fail.
diff --git a/test_ndntraffic/__init__.py b/test_ndntraffic/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/test_ndntraffic/__init__.py
+++ /dev/null
diff --git a/test_ndntraffic/ndntraffic-test.sh b/test_ndntraffic/ndntraffic-test.sh
new file mode 100755
index 0000000..3f494cd
--- /dev/null
+++ b/test_ndntraffic/ndntraffic-test.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+source ../multi-host.conf
+
+clean_up() {
+  r=$(sudo killall ndn-traffic-server 2>&1)
+  r=$(sudo killall ndn-traffic 2>&1)
+  r=$(sudo killall nfd 2>&1)
+}
+
+# A: Start NFD
+workdir=$(pwd)
+echo "starting nfd on A..."
+mkdir -p $workdir/logs; sudo nfd &> $workdir/logs/nfd.log &
+sleep 1
+
+# A: Start ndn-traffic-server
+echo "starting ndn-traffic-server on A..."
+ndn-traffic-server -c 1 $workdir/test-traffic-server.conf &> $workdir/logs/ndn-traffic-server.log &
+serverpid=$!
+sleep 1
+
+# A: Run ndn-traffic
+echo "Running ndn-traffic on A..."
+ndn-traffic -c 1 $workdir/test-traffic-client.conf &> $workdir/logs/ndn-traffic.log
+exitcode=$?
+
+if [[ $exitcode -ne 0 ]]; then
+  echo "Received non-zero exit code from ndn-traffic - actual: $exitcode"
+  clean_up
+  exit 1
+fi
+
+sleep 1
+
+# Verify that ndn-traffic-server has exited
+# ps -p returns 1 if no matching process is found
+ps -p $serverpid > /dev/null
+if [[ $? -ne 1 ]]; then
+  echo "ndn-traffic-server did not exit"
+  clean_up
+  exit 2
+fi
+
+clean_up
diff --git a/test_ndntraffic/test_ndntraffic.py b/test_ndntraffic/test_ndntraffic.py
index 632c4fe..e81c2cc 100644
--- a/test_ndntraffic/test_ndntraffic.py
+++ b/test_ndntraffic/test_ndntraffic.py
@@ -1,54 +1,34 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014-2018 Arizona Board of Regents.
 # Author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
+# Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
 
 import os
-import time
 import unittest
-import process_manager
+import subprocess
 
-class test_ndntraffic(unittest.TestCase, process_manager.ProcessManager):
-    """Test case for testing ndn-traffic-generator application"""
+class test_ndntraffic(unittest.TestCase):
+    """Test case for ndn-traffic-generator"""
 
     def setUp(self):
         print "\nTesting ndn-traffic-generator"
         print "*****************************"
+        os.chdir("test_ndntraffic")
 
     def tearDown(self):
-        self.killNfd()
-        self.killProcess("ndn-traffic-server")
-        self.killProcess("ndn-traffic")
-        self.cleanupProcesses()
+        print "*****************************"
+        os.chdir("..")
 
-    def test_traffic(self):
-        self.startNfd()
-        time.sleep(1)
-        serverConfigurationFile = os.path.abspath("test_ndntraffic/test-traffic-server.conf")
-        self.startProcess("ndn-traffic-server",
-            ["ndn-traffic-server", "-c 1", serverConfigurationFile],
-            "-> Starting Traffic Server")
-        time.sleep(1)
-        clientConfigurationFile = os.path.abspath("test_ndntraffic/test-traffic-client.conf")
-        self.startProcess("ndn-traffic",
-            ["ndn-traffic", "-c 1", clientConfigurationFile],
-            "-> Starting Traffic Client")
-        time.sleep(1)
-        self.waitForProcessCompletion("ndn-traffic", 10)
-        self.waitForProcessCompletion("ndn-traffic-server", 10)
-        if self.hasProcessCompleted("ndn-traffic"):
-            if self.getProcessReturnCode("ndn-traffic") != 0:
-                print self.getProcessError("ndn-traffic")
-                self.fail(">> TEST FAILED - received non-zero return code from ndn-traffic")
-        else:
-            self.fail(">> TEST FAILED - ndn-traffic failed to complete")
-        if self.hasProcessCompleted("ndn-traffic-server"):
-            if self.getProcessReturnCode("ndn-traffic-server") != 0:
-                print self.getProcessError("ndn-traffic-server")
-                self.fail(">> TEST FAILED - received non-zero return code from ndn-traffic-server")
-        else:
-            self.fail(">> TEST FAILED - ndn-traffic-server failed to complete")
-        print ">> TEST SUCCESSFUL"
+    def test_ndntraffic(self):
+        ret = subprocess.call(["./ndntraffic-test.sh"], shell=True)
+        print "Test script return  value:", ret
+        errormsg = {
+            1 : "ndn-traffic did not receive a Data satisfying its Interest",
+            2 : "ndn-traffic-server did not exit after sending a Data packet",
+        }
+        if (ret != 0):
+            self.fail(errormsg[ret])
diff --git a/test_nexthopfaceid/test_nexthopfaceid.py b/test_nexthopfaceid/test_nexthopfaceid.py
index 7b56df9..00a229b 100644
--- a/test_nexthopfaceid/test_nexthopfaceid.py
+++ b/test_nexthopfaceid/test_nexthopfaceid.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2016 University of Arizona
+# Copyright (C) 2016 Arizona Board of Regents.
 # Author: Eric Newberry <enewberry@cs.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_nrd/test_nrd.py b/test_nrd/test_nrd.py
index b64909b..0d3d73b 100644
--- a/test_nrd/test_nrd.py
+++ b/test_nrd/test_nrd.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_tcp_udp_tunnel/test_tcp_udp_tunnel.py b/test_tcp_udp_tunnel/test_tcp_udp_tunnel.py
index 50195e1..1e0baec 100644
--- a/test_tcp_udp_tunnel/test_tcp_udp_tunnel.py
+++ b/test_tcp_udp_tunnel/test_tcp_udp_tunnel.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
diff --git a/test_unixface/test_unixface.py b/test_unixface/test_unixface.py
index 0dbfaeb..171f850 100644
--- a/test_unixface/test_unixface.py
+++ b/test_unixface/test_unixface.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python2
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2014 University of Arizona
+# Copyright (C) 2014 Arizona Board of Regents.
 # Author: Yi Huang <ltr120@email.arizona.edu>
 # See COPYING for copyright and distribution information.
 #
