diff --git a/src/dispatcher.cc b/src/dispatcher.cc
index fadc224..6beb7c3 100644
--- a/src/dispatcher.cc
+++ b/src/dispatcher.cc
@@ -73,11 +73,15 @@
                          bind(&Dispatcher::Did_SyncLog_StateChange, this, _1), ccnx, DEFAULT_SYNC_INTEREST_INTERVAL);
 
   FetchTaskDbPtr actionTaskDb = make_shared<FetchTaskDb>(m_rootDir, "action");
-  m_actionFetcher = make_shared<FetchManager> (m_ccnx, bind (&SyncLog::LookupLocator, &*m_syncLog, _1), 3,
+  m_actionFetcher = make_shared<FetchManager> (m_ccnx, bind (&SyncLog::LookupLocator, &*m_syncLog, _1),
+                                               Name(BROADCAST_DOMAIN), // no appname suffix now
+                                               3,
                                                bind (&Dispatcher::Did_FetchManager_ActionFetch, this, _1, _2, _3, _4), FetchManager::FinishCallback(), actionTaskDb);
 
   FetchTaskDbPtr fileTaskDb = make_shared<FetchTaskDb>(m_rootDir, "file");
-  m_fileFetcher  = make_shared<FetchManager> (m_ccnx, bind (&SyncLog::LookupLocator, &*m_syncLog, _1), 3,
+  m_fileFetcher  = make_shared<FetchManager> (m_ccnx, bind (&SyncLog::LookupLocator, &*m_syncLog, _1),
+                                              Name(BROADCAST_DOMAIN), // no appname suffix now
+                                              3,
                                               bind (&Dispatcher::Did_FetchManager_FileSegmentFetch, this, _1, _2, _3, _4),
                                               bind (&Dispatcher::Did_FetchManager_FileFetchComplete, this, _1, _2),
                                               fileTaskDb);
diff --git a/src/fetch-manager.cc b/src/fetch-manager.cc
index 1949518..e9463b7 100644
--- a/src/fetch-manager.cc
+++ b/src/fetch-manager.cc
@@ -34,19 +34,19 @@
 using namespace std;
 using namespace Ccnx;
 
-static const Name BROADCAST_DOMAIN = Name ("/ndn/broadcast/chronoshare");
 //The disposer object function
 struct fetcher_disposer { void operator() (Fetcher *delete_this) { delete delete_this; } };
 
 static const string SCHEDULE_FETCHES_TAG = "ScheduleFetches";
 
-FetchManager::FetchManager (Ccnx::CcnxWrapperPtr ccnx
-                , const Mapping &mapping
-                , uint32_t parallelFetches // = 3
-                , const SegmentCallback &defaultSegmentCallback
-                , const FinishCallback &defaultFinishCallback
-                , const FetchTaskDbPtr &taskDb
-                )
+FetchManager::FetchManager (Ccnx::CcnxWrapperPtr ccnx,
+                            const Mapping &mapping,
+                            const Name &broadcastForwardingHint,
+                            uint32_t parallelFetches, // = 3
+                            const SegmentCallback &defaultSegmentCallback,
+                            const FinishCallback &defaultFinishCallback,
+                            const FetchTaskDbPtr &taskDb
+                            )
   : m_ccnx (ccnx)
   , m_mapping (mapping)
   , m_maxParallelFetches (parallelFetches)
@@ -56,6 +56,7 @@
   , m_defaultSegmentCallback(defaultSegmentCallback)
   , m_defaultFinishCallback(defaultFinishCallback)
   , m_taskDb(taskDb)
+  , m_broadcastHint (broadcastForwardingHint)
 {
   m_scheduler->start ();
   m_executor->start();
@@ -194,7 +195,7 @@
     // no need to do anything with the m_fetchList
   }
 
-  if (fetcher.GetForwardingHint () == BROADCAST_DOMAIN)
+  if (fetcher.GetForwardingHint () == m_broadcastHint)
     {
       // try again directly (hopefully with different forwarding hint
 
@@ -205,7 +206,7 @@
     }
   else
     {
-      fetcher.SetForwardingHint (BROADCAST_DOMAIN);
+      fetcher.SetForwardingHint (m_broadcastHint);
     }
 
   double delay = fetcher.GetRetryPause ();
diff --git a/src/fetch-manager.h b/src/fetch-manager.h
index 25ccac0..ecf2286 100644
--- a/src/fetch-manager.h
+++ b/src/fetch-manager.h
@@ -47,12 +47,13 @@
   typedef boost::function<Ccnx::Name(const Ccnx::Name &)> Mapping;
   typedef boost::function<void(Ccnx::Name &deviceName, Ccnx::Name &baseName, uint64_t seq, Ccnx::PcoPtr pco)> SegmentCallback;
   typedef boost::function<void(Ccnx::Name &deviceName, Ccnx::Name &baseName)> FinishCallback;
-  FetchManager (Ccnx::CcnxWrapperPtr ccnx
-                , const Mapping &mapping
-                , uint32_t parallelFetches = 3
-                , const SegmentCallback &defaultSegmentCallback = SegmentCallback()
-                , const FinishCallback &defaultFinishCallback = FinishCallback()
-                , const FetchTaskDbPtr &taskDb = FetchTaskDbPtr()
+  FetchManager (Ccnx::CcnxWrapperPtr ccnx,
+                const Mapping &mapping,
+                const Ccnx::Name &broadcastForwardingHint,
+                uint32_t parallelFetches = 3,
+                const SegmentCallback &defaultSegmentCallback = SegmentCallback(),
+                const FinishCallback &defaultFinishCallback = FinishCallback(),
+                const FetchTaskDbPtr &taskDb = FetchTaskDbPtr()
                 );
   virtual ~FetchManager ();
 
@@ -108,6 +109,8 @@
   SegmentCallback m_defaultSegmentCallback;
   FinishCallback m_defaultFinishCallback;
   FetchTaskDbPtr m_taskDb;
+
+  const Ccnx::Name m_broadcastHint;
 };
 
 Ccnx::CcnxWrapperPtr
diff --git a/test/test-serve-and-fetch.cc b/test/test-serve-and-fetch.cc
index 7919246..a551404 100644
--- a/test/test-serve-and-fetch.cc
+++ b/test/test-serve-and-fetch.cc
@@ -145,7 +145,7 @@
   server.registerPrefix(localPrefix);
   server.registerPrefix(broadcastPrefix);
 
-  FetchManager fm(ccnx_fetch, bind(simpleMap, _1));
+  FetchManager fm(ccnx_fetch, bind(simpleMap, _1), Name("/local/broadcast"));
   HashPtr hash = pub.get<0> ();
   Name baseName = Name ("/")(deviceName)(APPNAME)("file")(hash->GetHash(), hash->GetHashBytes());
 
