diff --git a/src/file-manifest.cpp b/src/file-manifest.cpp
index 6310b20..1ccb4ef 100644
--- a/src/file-manifest.cpp
+++ b/src/file-manifest.cpp
@@ -65,7 +65,7 @@
                                               manifestPrefix.toUri() + " and "     +
                                               full_path.toUri()));
   }
-  ndn::Name manifestName = "/ndn/multicast/NTORRENT/";
+  ndn::Name manifestName(SharedConstants::commonPrefix + std::string("/NTORRENT/"));
   // Rebuild the name to be the suffix from the matching component
   for (auto it = (name_component_iter.base() - 1); full_path.end() != it; ++it) {
     manifestName.append(*it);
@@ -331,4 +331,4 @@
 }
 
 }  // end ntorrent
-}  // end ndn
\ No newline at end of file
+}  // end ndn
diff --git a/src/file-manifest.hpp b/src/file-manifest.hpp
index e11b560..ee04fdd 100644
--- a/src/file-manifest.hpp
+++ b/src/file-manifest.hpp
@@ -21,6 +21,8 @@
 #ifndef INCLUDED_FILE_MANIFEST_HPP
 #define INCLUDED_FILE_MANIFEST_HPP
 
+#include "util/shared-constants.hpp"
+
 #include <cstring>
 #include <memory>
 #include <string>
@@ -312,7 +314,9 @@
 inline std::string
 FileManifest::file_name() const
 {
-  return name().getSubName(3, name().size() - 4).toUri();
+  Name scheme(SharedConstants::commonPrefix);
+  return name().getSubName(1 + scheme.size(),
+         name().size() - (2 + scheme.size())).toUri();
 }
 
 
diff --git a/src/main.cpp b/src/main.cpp
index 2fd441d..2a0f69a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -50,6 +50,11 @@
   }
 };
 
+namespace ntorrent {
+
+const char * SharedConstants::commonPrefix = "/ndn";
+
+} // end ntorrent
 } // end ndn
 
 // TODO(msweatt) Add options verification
diff --git a/src/torrent-file.cpp b/src/torrent-file.cpp
index e5ef53e..544f9ce 100644
--- a/src/torrent-file.cpp
+++ b/src/torrent-file.cpp
@@ -252,7 +252,8 @@
   Name directoryPathName(directoryPath);
   fs::recursive_directory_iterator directoryPtr(fs::system_complete(directoryPath).string());
 
-  Name commonPrefix("/ndn/multicast/NTORRENT" +
+  std::string prefix = std::string(SharedConstants::commonPrefix) + "/NTORRENT";
+  Name commonPrefix(prefix +
                     directoryPathName.getSubName(directoryPathName.size() - 1).toUri());
 
   Name torrentName(commonPrefix.toUri() + "/torrent-file");
@@ -265,7 +266,7 @@
   }
   size_t manifestFileCounter = 0u;
   for (const auto& fileName : fileNames) {
-    Name manifestPrefix("/ndn/multicast/NTORRENT" +
+    Name manifestPrefix(prefix +
                         directoryPathName.getSubName(directoryPathName.size() - 1).toUri());
     std::pair<std::vector<FileManifest>, std::vector<Data>> currentManifestPair =
                                                     FileManifest::generate(fileName,
diff --git a/src/torrent-manager.cpp b/src/torrent-manager.cpp
index 892228f..ad7f842 100644
--- a/src/torrent-manager.cpp
+++ b/src/torrent-manager.cpp
@@ -1,3 +1,24 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+* Copyright (c) 2016 Regents of the University of California.
+*
+* This file is part of the nTorrent codebase.
+*
+* nTorrent is free software: you can redistribute it and/or modify it under the
+* terms of the GNU Lesser General Public License as published by the Free Software
+* Foundation, either version 3 of the License, or (at your option) any later version.
+*
+* nTorrent 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 Lesser General Public License for more details.
+*
+* You should have received copies of the GNU General Public License and GNU Lesser
+* General Public License along with nTorrent, e.g., in COPYING.md file. If not, see
+* <http://www.gnu.org/licenses/>.
+*
+* See AUTHORS for complete list of nTorrent authors and contributors.
+*/
+
 #include "torrent-manager.hpp"
 
 #include "file-manifest.hpp"
@@ -168,11 +189,12 @@
 
   // figure out the name of the torrent
   Name torrentName;
+  Name scheme(SharedConstants::commonPrefix);
   if (m_torrentFileName.get(m_torrentFileName.size() - 2).isSequenceNumber()) {
-    torrentName = m_torrentFileName.getSubName(3, m_torrentFileName.size() - 6);
+    torrentName = m_torrentFileName.getSubName(1 + scheme.size(), m_torrentFileName.size() - (4 + scheme.size()));
   }
   else {
-    torrentName = m_torrentFileName.getSubName(3, m_torrentFileName.size() - 5);
+    torrentName = m_torrentFileName.getSubName(1 + scheme.size(), m_torrentFileName.size() - (3 + scheme.size()));
   }
 
   // TODO(spyros) Get update manager working
diff --git a/src/torrent-manager.hpp b/src/torrent-manager.hpp
index 8c638dd..b1fd730 100644
--- a/src/torrent-manager.hpp
+++ b/src/torrent-manager.hpp
@@ -18,6 +18,7 @@
 *
 * See AUTHORS for complete list of nTorrent authors and contributors.
 */
+
 #ifndef INCLUDED_TORRENT_FILE_MANAGER_H
 #define INCLUDED_TORRENT_FILE_MANAGER_H
 
diff --git a/src/util/shared-constants.hpp b/src/util/shared-constants.hpp
new file mode 100644
index 0000000..e29491e
--- /dev/null
+++ b/src/util/shared-constants.hpp
@@ -0,0 +1,30 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+* Copyright (c) 2016 Regents of the University of California.
+*
+* This file is part of the nTorrent codebase.
+*
+* nTorrent is free software: you can redistribute it and/or modify it under the
+* terms of the GNU Lesser General Public License as published by the Free Software
+* Foundation, either version 3 of the License, or (at your option) any later version.
+*
+* nTorrent 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 Lesser General Public License for more details.
+*
+* You should have received copies of the GNU General Public License and GNU Lesser
+* General Public License along with nTorrent, e.g., in COPYING.md file. If not, see
+* <http://www.gnu.org/licenses/>.
+*
+* See AUTHORS for complete list of nTorrent authors and contributors.
+*/
+
+namespace ndn {
+namespace ntorrent {
+
+struct SharedConstants {
+  static const char* commonPrefix;
+};
+
+} // namespace ntorrent
+} // namespace ndn
