Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 7491)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 7532)
@@ -824,5 +824,4 @@
 	}
 
-
 	//ovl.visShowNodeBubble ( ovlId, nodeId, "joining..." );
 	logging_info( "Starting to join spovnet " << id.toString() <<
@@ -830,4 +829,6 @@
 
 	if(bootstrapEp.isUnspecified() && state == BaseOverlayStateInvalid){
+
+		//** FIRST STEP - MANDATORY */
 
 		// bootstrap against ourselfs
@@ -842,9 +843,7 @@
 		//ovl.visChangeNodeColor( ovlId, nodeId, OvlVis::NODE_COLORS_GREEN );
 
-		logging_debug("starting overlay bootstrap module");
-		overlayBootstrap.start(this, spovnetId, nodeId);
-		overlayBootstrap.publish(bc->getEndpointDescriptor());
-
 	} else {
+
+		//** SECOND STEP - OPTIONAL */
 
 		// bootstrap against another node
@@ -857,12 +856,21 @@
 }
 
-void BaseOverlay::leaveSpoVNet() {
-
-	logging_info( "Leaving spovnet " << spovnetId );
-	bool ret = ( state != this->BaseOverlayStateInvalid );
-
+
+void BaseOverlay::startBootstrapModules(vector<pair<BootstrapManager::BootstrapType,string> > modules){
+	logging_debug("starting overlay bootstrap module");
+	overlayBootstrap.start(this, spovnetId, nodeId, modules);
+	overlayBootstrap.publish(bc->getEndpointDescriptor());
+}
+
+void BaseOverlay::stopBootstrapModules(){
 	logging_debug("stopping overlay bootstrap module");
 	overlayBootstrap.stop();
 	overlayBootstrap.revoke();
+}
+
+void BaseOverlay::leaveSpoVNet() {
+
+	logging_info( "Leaving spovnet " << spovnetId );
+	bool ret = ( state != this->BaseOverlayStateInvalid );
 
 	logging_debug( "Dropping all auto-links" );
Index: source/ariba/overlay/BaseOverlay.h
===================================================================
--- source/ariba/overlay/BaseOverlay.h	(revision 7491)
+++ source/ariba/overlay/BaseOverlay.h	(revision 7532)
@@ -274,4 +274,14 @@
 
 	/**
+	 * Start the bootstrap modules
+	 */
+	void startBootstrapModules(vector<pair<BootstrapManager::BootstrapType,string> > modules);
+
+	/**
+	 * Stop the bootstrap modules
+	 */
+	void stopBootstrapModules();
+
+	/**
 	 * Let the node leave the SpoVNet.
 	 */
Index: source/ariba/overlay/OverlayBootstrap.cpp
===================================================================
--- source/ariba/overlay/OverlayBootstrap.cpp	(revision 7491)
+++ source/ariba/overlay/OverlayBootstrap.cpp	(revision 7532)
@@ -66,5 +66,7 @@
 }
 
-void OverlayBootstrap::start(BaseOverlay* _overlay, const SpoVNetID& _spovnetid, const NodeID& _nodeid){
+void OverlayBootstrap::start(BaseOverlay* _overlay,
+		const SpoVNetID& _spovnetid, const NodeID& _nodeid,
+		vector<pair<BootstrapManager::BootstrapType,string> > modules){
 	overlay = _overlay;
 	spovnetid = _spovnetid;
@@ -74,7 +76,9 @@
 
 	manager.registerCallback( this );
-	manager.registerModule( BootstrapManager::BootstrapTypePeriodicBroadcast );
-	//manager.registerModule( BootstrapManager::BootstrapTypeBluetoothSdp );
-	//manager.registerModule( BootstrapManager::BootstrapTypeMulticastDns );
+
+	typedef pair<BootstrapManager::BootstrapType,string> X;
+	BOOST_FOREACH( X i, modules){
+		manager.registerModule( i.first, i.second );
+	}
 
 	watchtimer.startWatchdog();
@@ -89,7 +93,5 @@
 
 	manager.unregisterCallback( this );
-	manager.unregisterModule( BootstrapManager::BootstrapTypePeriodicBroadcast );
-	//manager.unregisterModule( BootstrapManager::BootstrapTypeBluetoothSdp );
-	//manager.unregisterModule( BootstrapManager::BootstrapTypeMulticastDns );
+	manager.unregisterAllModules();
 
 	watchtimer.stopWatchdog();
Index: source/ariba/overlay/OverlayBootstrap.h
===================================================================
--- source/ariba/overlay/OverlayBootstrap.h	(revision 7491)
+++ source/ariba/overlay/OverlayBootstrap.h	(revision 7532)
@@ -44,6 +44,8 @@
 #include <ctime>
 #include <deque>
+#include <vector>
 #include <algorithm>
 #include <boost/thread/mutex.hpp>
+#include <boost/foreach.hpp>
 #include "ariba/utility/logging/Logging.h"
 #include "ariba/utility/types.h"
@@ -60,4 +62,6 @@
 using std::deque;
 using std::string;
+using std::vector;
+using std::pair;
 using std::ostringstream;
 using ariba::utility::SpoVNetID;
@@ -83,5 +87,10 @@
 	virtual ~OverlayBootstrap();
 
-	void start(BaseOverlay* _overlay, const SpoVNetID& _spovnetid, const NodeID& _nodeid);
+	void start(
+			BaseOverlay* _overlay,
+			const SpoVNetID& _spovnetid,
+			const NodeID& _nodeid,
+			vector<pair<BootstrapManager::BootstrapType,string> > modules
+			);
 	void stop();
 
