diff --git a/tests/unit-tests/empty.t.cpp b/tests/unit-tests/empty.t.cpp
deleted file mode 100644
index 4c56570..0000000
--- a/tests/unit-tests/empty.t.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2011-2016  Regents of the University of California.
- *
- * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
- * contributors.
- *
- * ndnSIM 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.
- *
- * ndnSIM 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
- * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-#include "boost-test.hpp"
-
-namespace ns3 {
-namespace ndn {
-namespace tests {
-
-BOOST_AUTO_TEST_SUITE(Empty)
-
-BOOST_AUTO_TEST_CASE(Nothing)
-{
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace tests
-} // namespace ndn
-} // namespace ns3
diff --git a/tests/unit-tests/model/ndn-l3-protocol.t.cpp b/tests/unit-tests/model/ndn-l3-protocol.t.cpp
index 2863de1..b2d77ca 100644
--- a/tests/unit-tests/model/ndn-l3-protocol.t.cpp
+++ b/tests/unit-tests/model/ndn-l3-protocol.t.cpp
@@ -133,10 +133,10 @@
                                 receivedDatasets.begin(), receivedDatasets.end());
 }
 
-BOOST_AUTO_TEST_CASE(DisabledStatusServer)
+BOOST_AUTO_TEST_CASE(DisabledForwarderStatusManager)
 {
-  // Disable Status Server manager
-  disableStatusServer();
+  // Disable Forwarder Status Manager
+  disableForwarderStatusManager();
 
   setupAndRun();
 
diff --git a/tests/wscript b/tests/wscript
index 5bd65f4..76996dc 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -6,14 +6,13 @@
 
     # Unit tests
     tests = bld.create_ns3_program('ndnSIM-unit-tests', all_modules)
-    tests.source = bld.path.ant_glob(['main.cpp', 'unit-tests/**/*.cpp'],
-                                     excl=['unit-tests/*/**/*.cpp'])
+    tests.source = bld.path.ant_glob(['main.cpp', 'unit-tests/**/*.cpp'])
     tests.includes = ['#', '.', '../NFD/', "../NFD/daemon", "../NFD/core", "../helper", "../model", "../apps", "../utils", "../examples"]
     tests.defines = 'TEST_CONFIG_PATH=\"%s/conf-test\"' %(bld.bldnode)
 
-    # # Other tests
-    # for i in bld.path.ant_glob(['other/*.cpp']):
-    #     name = str(i)[:-len(".cpp")]
-    #     obj = bld.create_ns3_program(name, all_modules)
-    #     obj.source = [i] + bld.path.ant_glob(['%s/**/*.cpp' % name])
-    #     obj.install_path = None
+    # Other tests
+    for i in bld.path.ant_glob(['other/*.cpp']):
+        name = str(i)[:-len(".cpp")]
+        obj = bld.create_ns3_program(name, all_modules)
+        obj.source = [i] + bld.path.ant_glob(['%s/**/*.cpp' % name])
+        obj.install_path = None
