diff --git a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
index 2d1685e..66201ba 100644
--- a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
+++ b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
@@ -19,16 +19,6 @@
 
 package org.apache.felix.upnp.basedriver;
 
-import org.apache.felix.upnp.extra.controller.DevicesInfo;
-import org.apache.felix.upnp.extra.controller.DriverController;
-
-import org.cybergarage.upnp.UPnP;
-import org.cybergarage.xml.parser.JaxpParser;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
 import org.apache.felix.upnp.basedriver.controller.impl.DriverControllerImpl;
 import org.apache.felix.upnp.basedriver.export.RootDeviceExportingQueue;
 import org.apache.felix.upnp.basedriver.export.RootDeviceListener;
@@ -41,12 +31,26 @@
 import org.apache.felix.upnp.basedriver.importer.core.event.thread.SubScriber;
 import org.apache.felix.upnp.basedriver.tool.Logger;
 import org.apache.felix.upnp.basedriver.tool.Util;
+import org.apache.felix.upnp.extra.controller.DevicesInfo;
+import org.apache.felix.upnp.extra.controller.DriverController;
+import org.cybergarage.upnp.UPnP;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 
 /* 
 * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
 */
 public class Activator implements BundleActivator {
-
+	
+	private final static String BASEDRIVER_LOG_PROP = "felix.upnpbase.log";
+	private final static String EXPORTER_ENABLED_PROP = "felix.upnpbase.exporter.enabled";
+	private final static String IMPORTER_ENABLED_PROP = "felix.upnpbase.importer.enabled";
+	private final static String NET_ONLY_IPV4_PROP = "felix.upnpbase.cyberdomo.net.onlyIPV4";
+	private final static String NET_ONLY_IPV6_PROP = "felix.upnpbase.cyberdomo.net.onlyIPV6";
+	private final static String NET_USE_LOOPBACK_PROP = "felix.upnpbase.cyberdomo.net.loopback";
+	private final static String CYBERDOMO_LOG_PROP = "felix.upnpbase.cyberdomo.log";
+	
     public static BundleContext bc;
     public static Logger logger;        
 	private RootDeviceExportingQueue queue;
@@ -70,36 +74,71 @@
         
  		Activator.bc = context;				
 		
-	    String levelStr = (String) Util.getPropertyDefault(context,"felix.upnpbase.log","2");	    
+ 		//
+ 		// Debugger configuration
+ 		//
+	    String levelStr = Util.getPropertyDefault(context,BASEDRIVER_LOG_PROP,"2");	    
 		Activator.logger = new Logger(levelStr);
-	    String cyberLog = (String) Util.getPropertyDefault(context,"felix.upnpbase.cyberlink.log","false");
+		
+	    String cyberLog = Util.getPropertyDefault(context,CYBERDOMO_LOG_PROP,"false");
 	    Activator.logger.setCyberDebug(cyberLog);
+	    
+	    
+ 		//
+	    // NET configuration
+	   	//
+	    String useOnlyIPV4 = Util.getPropertyDefault(context,NET_ONLY_IPV4_PROP,"true");
+    	if (useOnlyIPV4.equalsIgnoreCase("true"))
+            UPnP.setEnable(UPnP.USE_ONLY_IPV4_ADDR);
+    	else
+    		UPnP.setDisable(UPnP.USE_ONLY_IPV4_ADDR);
+    	
+       	String useOnlyIPV6 = Util.getPropertyDefault(context,NET_ONLY_IPV6_PROP,"false");
+    	if (useOnlyIPV6.equalsIgnoreCase("true"))
+            UPnP.setEnable(UPnP.USE_ONLY_IPV6_ADDR);
+    	else
+    		UPnP.setDisable(UPnP.USE_ONLY_IPV6_ADDR);
 
-        UPnP.setEnable(UPnP.USE_ONLY_IPV4_ADDR);
-        UPnP.setDisable(UPnP.USE_LOOPBACK_ADDR);
-		
-		//Setting up Base Driver Exporter
-		this.queue = new RootDeviceExportingQueue();
-		this.producerDeviceToExport = new RootDeviceListener(queue);
-		producerDeviceToExport.activate();
-		consumerDeviceToExport = new ThreadExporter(queue);
-		new Thread(consumerDeviceToExport, "upnp.basedriver.Exporter").start();
+       	String useLoopback = Util.getPropertyDefault(context,NET_USE_LOOPBACK_PROP,"false");
+    	if (useLoopback.equalsIgnoreCase("true"))
+            UPnP.setEnable(UPnP.USE_LOOPBACK_ADDR);
+    	else
+    		UPnP.setDisable(UPnP.USE_LOOPBACK_ADDR);
 
-		//Setting up Base Driver Importer
-		this.notifierQueue = new NotifierQueue();
-		this.subQueue = new SubscriptionQueue();
-		ctrl = new MyCtrlPoint(context, subQueue, notifierQueue);
-		
-		//Enable CyberLink re-new for Event
-		ctrl.setNMPRMode(true);
+    	//
+    	// Exporter configuration		
+       	//
+    	String useExporter = Util.getPropertyDefault(context,EXPORTER_ENABLED_PROP,"true");
+       	if (useExporter.equalsIgnoreCase("true")){
+			//Setting up Base Driver Exporter
+			this.queue = new RootDeviceExportingQueue();
+			this.producerDeviceToExport = new RootDeviceListener(queue);
+			producerDeviceToExport.activate();
+			consumerDeviceToExport = new ThreadExporter(queue);
+			new Thread(consumerDeviceToExport, "upnp.basedriver.Exporter").start();
+       	}
+
+    	//
+       	// Importer configuration		
+      	//
+       	String useImporter = Util.getPropertyDefault(context,IMPORTER_ENABLED_PROP,"true");
+       	if (useImporter.equalsIgnoreCase("true")){
+			//Setting up Base Driver Importer
+			this.notifierQueue = new NotifierQueue();
+			this.subQueue = new SubscriptionQueue();
+			ctrl = new MyCtrlPoint(context, subQueue, notifierQueue);
 			
-		this.monitor=new Monitor();
-		this.notifier = new Notifier(notifierQueue,monitor);
-		this.subScriber = new SubScriber(ctrl, subQueue,monitor);
-		
-		ctrl.start();
-		subScriber.start();
-		notifier.start();
+			//Enable CyberLink re-new for Event
+			ctrl.setNMPRMode(true);
+				
+			this.monitor=new Monitor();
+			this.notifier = new Notifier(notifierQueue,monitor);
+			this.subScriber = new SubScriber(ctrl, subQueue,monitor);
+			
+			ctrl.start();
+			subScriber.start();
+			notifier.start();
+       	}
         
         doControllerRegistration();
         
@@ -123,15 +162,20 @@
         
         drvControllerRegistrar.unregister();
         
-		//Setting up Base Driver Exporter
-		consumerDeviceToExport.end();
-		consumerDeviceToExport.cleanUp();
-		producerDeviceToExport.deactive();
+		//Base Driver Exporter
+        if (consumerDeviceToExport != null) {
+			consumerDeviceToExport.end();
+			consumerDeviceToExport.cleanUp();
+			producerDeviceToExport.deactive();
+        }
 
-		//Setting up Base Driver Importer
-		ctrl.stop();
-		subScriber.close();
-		notifier.close();
+		//Base Driver Importer
+        if (ctrl != null){
+			ctrl.stop();
+			subScriber.close();
+			notifier.close();
+        }
+        
 		Activator.logger.close();
 		Activator.logger=null;
 		Activator.bc = null;
diff --git a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
index a772516..f5832e4 100644
--- a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
+++ b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
@@ -58,13 +58,24 @@
     }
 
     public String getLocationURL(String udn) {
+    	if (myCtrl == null){
+    		logger.WARNING("UPnP Importer is disabled. getLocationURL is not available");
+    		return null;
+    	}
         if (udn == null || udn.equals(""))  throw new IllegalArgumentException("Invalid udn paramenter");
         Device device = myCtrl.getDevice(udn);
-        if (device == null) logger.WARNING("getLocationURL():: No device data available for UDN:"+udn);
-        return myCtrl.getDevice(udn).getLocation();
+        if (device == null) {
+        	logger.WARNING("getLocationURL():: No device data available for UDN:"+udn);
+        	return null;
+        }
+        return device.getLocation();
     }
     
     public String getSCPDURL(String udn, String serviceId) {
+    	if (myCtrl == null){
+    		logger.WARNING("UPnP Importer is disabled. getSCPDURL() is not available");
+    		return null;
+    	}
         if (udn == null || udn.equals("") )  throw new IllegalArgumentException("Invalid udn paramenter");
         if (serviceId == null || serviceId.equals("") )  throw new IllegalArgumentException("Invalid serviceId paramenter");
         Device device= myCtrl.getDevice(udn);
@@ -82,8 +93,16 @@
     }
     
     public String resolveRelativeUrl(String udn, String link) {
-        if (udn == null || udn.equals(""))  throw new IllegalArgumentException("Invalid udn paramenter");
+       	if (myCtrl == null){
+    		logger.WARNING("UPnP Importer is disabled. resolveRelativeUrl() is not available");
+    		return null;
+    	}
+       if (udn == null || udn.equals(""))  throw new IllegalArgumentException("Invalid udn paramenter");
         Device device = myCtrl.getDevice(udn);
+        if (device == null) {
+            logger.WARNING("resolveRelativeUrl():: No device data available for UDN: "+udn);
+            return null;
+        }
         return resolveRelativeLink(device,link);        
     }
 
@@ -117,7 +136,11 @@
    }
 
     public void search(String target) {
-        myCtrl.search(target);       
+       	if (myCtrl == null){
+    		logger.WARNING("UPnP Importer is disabled. resolveRelativeUrl() is not available");
+    		return ;
+    	}
+       myCtrl.search(target);       
     }
 
 
diff --git a/upnp/doc/config.properties.upnp b/upnp/doc/config.properties.upnp
index fbacad7..95aef41 100644
--- a/upnp/doc/config.properties.upnp
+++ b/upnp/doc/config.properties.upnp
@@ -36,7 +36,6 @@
  file:../org.osgi.core/target/org.osgi.core-1.1.0-SNAPSHOT.jar \
  file:../javax.servlet/target/javax.servlet-0.9.0-SNAPSHOT.jar \
  file:../org.osgi.compendium/target/org.osgi.compendium-0.9.0-SNAPSHOT.jar \
- file:../log/target/org.apache.felix.log-0.9.0-SNAPSHOT.jar \
  file:../http.jetty/target/org.apache.felix.http.jetty-0.9.0-SNAPSHOT.jar \
  file:../upnp/basedriver/target/org.apache.felix.upnp.basedriver-0.3.0-SNAPSHOT.jar \
  file:../upnp/extra/target/org.apache.felix.upnp.extra-0.3.0-SNAPSHOT.jar \
@@ -59,6 +58,23 @@
 
 
 #
+# UPnP Basedriver properties
+#
+#felix.upnpbase.log=2
+#felix.upnpbase.exporter.enabled=true
+#felix.upnpbase.importer.enabled=true
+#felix.upnpbase.cyberdomo.log=false
+#felix.upnpbase.cyberdomo.net.loopback=false
+#felix.upnpbase.cyberdomo.net.onlyIPV4=true
+#felix.upnpbase.cyberdomo.net.onlyIPV6=false
+#cyberdomo.ssdp.mx=5
+#cyberdomo.ssdp.buffersize=2048
+#cyberdomo.ssdp.port=1900
+
+
+
+
+#
 # Java platform package export properties.
 #
 jre-1.3=, \
