diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
index 2949722..997975e 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
@@ -40,11 +40,9 @@
 import org.apache.felix.upnp.basedriver.tool.Logger;
 import org.apache.felix.upnp.basedriver.tool.Util;
 
-/**
- * @author Stefano "Kismet" Lenzi, 
- * @author Francesco Furfari
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Activator implements BundleActivator {
 
     public static BundleContext bc;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
index 49719c6..a9c984f 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
@@ -28,11 +28,9 @@
 import org.apache.felix.upnp.basedriver.importer.core.MyCtrlPoint;
 import org.apache.felix.upnp.basedriver.tool.Logger;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class DriverControllerImpl implements DriverController, DevicesInfo{
     private MyCtrlPoint myCtrl;
     private Logger logger = Activator.logger;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ActionDispatcher.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ActionDispatcher.java
index 0417997..2959b27 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ActionDispatcher.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ActionDispatcher.java
@@ -23,10 +23,9 @@
 import org.osgi.framework.ServiceReference;
 
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ActionDispatcher implements ActionListener{
     /**
      * 
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/BuildDevice.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/BuildDevice.java
index a960d8d..60cf1d7 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/BuildDevice.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/BuildDevice.java
@@ -1,268 +1,267 @@
-/*
- *   Copyright 2006 The Apache Software Foundation
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-
-package org.apache.felix.upnp.basedriver.export;
-
-
-import org.cybergarage.upnp.Action;
-import org.cybergarage.upnp.AllowedValueList;
-import org.cybergarage.upnp.AllowedValueRange;
-import org.cybergarage.upnp.Argument;
-import org.cybergarage.upnp.ArgumentList;
-import org.cybergarage.upnp.Device;
-import org.cybergarage.upnp.Service;
-import org.cybergarage.upnp.StateVariable;
-import org.cybergarage.upnp.xml.DeviceData;
-import org.cybergarage.xml.Node;
-
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.upnp.UPnPAction;
-import org.osgi.service.upnp.UPnPDevice;
-import org.osgi.service.upnp.UPnPService;
-import org.osgi.service.upnp.UPnPStateVariable;
-
-import org.ungoverned.device.RootDescription;
-
-import org.apache.felix.upnp.basedriver.Activator;
-import org.apache.felix.upnp.extra.util.Converter;
-/**
- * 
- * @author Stefano "Kismet" Lenzi 
- * 
- */
-public class BuildDevice {
-	
-	private static Node buildRootNode(){
-		Node root = new Node(RootDescription.ROOT_ELEMENT);
-		root.setAttribute("xmlns",RootDescription.ROOT_ELEMENT_NAMESPACE);
-		Node spec = new Node(RootDescription.SPECVERSION_ELEMENT);
-		Node maj =new Node(RootDescription.MAJOR_ELEMENT);
-		maj.setValue("1");
-		Node min =new Node(RootDescription.MINOR_ELEMENT);
-		min.setValue("0");
-		spec.addNode(maj);
-		spec.addNode(min);
-		root.addNode(spec);
-		return root;
-	}
-	
-	private static Device buildRootDeviceNode(Node root,ServiceReference sr){		
-		Node dev = new Node(Device.ELEM_NAME);
-		root.addNode(dev);
-		DeviceData dd = new DeviceData();
-		dd.setDescriptionURI("/gen-desc.xml");
-		dev.setUserData(dd);
-		Device devUPnP = new Device(root,dev);
-
-
-		Object aux = sr.getProperty(UPnPDevice.TYPE);
-		if(aux==null){
-			devUPnP.setDeviceType(null);		
-		}else if(aux instanceof String){
-			devUPnP.setDeviceType((String) aux);
-		}else if(aux instanceof String[]){
-			//The property key UPnP.device.type should be a String
-			String[] v = (String[]) aux;
-			int maxindex=0;
-			int max=Integer.parseInt(v[0].substring(v[0].lastIndexOf(":")+1));
-			int tmp;
-			for (int i = 1; i < v.length; i++) {
-				tmp=Integer.parseInt(v[i].substring(v[i].lastIndexOf(":")+1));				
-				if(max<tmp){
-					max=tmp;
-					maxindex=i;
-				}				
-			}
-			devUPnP.setDeviceType(v[maxindex]);
-		}				
-		
-		devUPnP.setFriendlyName((String) sr.getProperty(UPnPDevice.FRIENDLY_NAME));
-		devUPnP.setManufacture((String) sr.getProperty(UPnPDevice.MANUFACTURER));
-		devUPnP.setManufactureURL((String) sr.getProperty(UPnPDevice.MANUFACTURER_URL));
-		devUPnP.setModelDescription((String) sr.getProperty(UPnPDevice.MODEL_DESCRIPTION));
-		devUPnP.setModelName((String) sr.getProperty(UPnPDevice.MODEL_NAME));
-		devUPnP.setModelNumber((String) sr.getProperty(UPnPDevice.MODEL_NUMBER));
-		devUPnP.setModelURL((String) sr.getProperty(UPnPDevice.MODEL_URL));
-		devUPnP.setSerialNumber((String) sr.getProperty(UPnPDevice.SERIAL_NUMBER));
-		devUPnP.setUDN((String) sr.getProperty(UPnPDevice.UDN));
-		devUPnP.setUPC((String) sr.getProperty(UPnPDevice.UPC));
-		devUPnP.setLocation("/gen-desc.xml");		
-
-		addServices("",devUPnP,sr);
-		addDevices("",devUPnP,sr);
-		devUPnP.setPresentationURL((String) sr.getProperty(UPnPDevice.PRESENTATION_URL));
-		
-		return devUPnP;
-	}
-	
-	private static void addDevices(String id,Device devUPnP, ServiceReference sr) {
-
-		String[] udns=(String[]) sr.getProperty(UPnPDevice.CHILDREN_UDN);
-		if(udns==null) {
-			return;
-		}
-		for (int i = 0; i < udns.length; i++) {
-			try {
-				ServiceReference[] aux = Activator.bc.getServiceReferences(
-						UPnPDevice.class.getName(),"("+UPnPDevice.UDN+"="+udns[i]+")"
-					);
-				if(aux==null || aux.length == 0)
-					continue;
-				//id=+"/device/"+i;						// twa: wrong in recursion
-				//buildDevice(id,devUPnP,aux[0]);		// twa: wrong in recursion
-				String localId = new StringBuffer(id).append("/device/").append(i).toString();		
-				buildDevice(localId,devUPnP,aux[0]); 	// twa: better
-			} catch (InvalidSyntaxException ignored) {}						
-		}		
-	}
-
-	private static void buildDevice(String id,Device parent, ServiceReference sr) {
-		Node dev = new Node(Device.ELEM_NAME);
-		DeviceData dd = new DeviceData();
-		dd.setDescriptionURI(id+"/gen-desc.xml");
-		dev.setUserData(dd);
-		
-		Device devUPnP = new Device(dev);
-		
-		devUPnP.setFriendlyName((String) sr.getProperty(UPnPDevice.FRIENDLY_NAME));
-		devUPnP.setManufacture((String) sr.getProperty(UPnPDevice.MANUFACTURER));
-		devUPnP.setManufactureURL((String) sr.getProperty(UPnPDevice.MANUFACTURER_URL));
-		devUPnP.setModelDescription((String) sr.getProperty(UPnPDevice.MODEL_DESCRIPTION));
-		devUPnP.setModelName((String) sr.getProperty(UPnPDevice.MODEL_NAME));
-		devUPnP.setModelNumber((String) sr.getProperty(UPnPDevice.MODEL_NUMBER));
-		devUPnP.setModelURL((String) sr.getProperty(UPnPDevice.MODEL_URL));
-		devUPnP.setSerialNumber((String) sr.getProperty(UPnPDevice.SERIAL_NUMBER));
-		devUPnP.setUDN((String) sr.getProperty(UPnPDevice.UDN));
-		devUPnP.setUPC((String) sr.getProperty(UPnPDevice.UPC));
-		devUPnP.setLocation(id+"/gen-desc.xml");		
-
-		addServices(id,devUPnP,sr);
-		addDevices(id,devUPnP,sr);
-
-		parent.addDevice(devUPnP); //		twa: essential!!!!!!!
-		devUPnP.setPresentationURL((String) sr.getProperty(UPnPDevice.PRESENTATION_URL));
-		
-	}
-	
-	/**
-	* Method used to create a new Service in CyberLink world without creating the XML
-	*
-	* @param id ServiceId
-	* @param devUPnP the CyberLink device that where the new Service will be created
-	* @param sr ServiceReference to OSGi Device that used as source of the information
-	*              for the creation of the device
-	*/
-	private static void addServices(String id,Device devUPnP, ServiceReference sr) {
-		UPnPDevice devOSGi = (UPnPDevice) Activator.bc.getService(sr);
-
-		if( devOSGi == null) {	//added by twa to prevent a null pointer exception
-			Activator.logger.WARNING("UPnP Device taht cotains serviceId="
-					+id+" is deregistered from the framework while is exported");
-			return;
-		}
-
-		UPnPService[] services =  devOSGi.getServices();
-		if(services==null || services.length==0)
-			return;
-		
-		
-		
-		for (int i = 0; i < services.length; i++) {
-			Service ser = new Service();
-			devUPnP.addService(ser);
-			ser.setServiceType(services[i].getType() );
-			ser.setServiceID(services[i].getId());
-			ser.setSCPDURL(id+"/service/"+i+"/gen-desc.xml");
-			ser.setDescriptionURL(id+"/service/"+i+"/gen-desc.xml");
-			ser.setControlURL(id+"/service/"+i+"/ctrl");
-			ser.setEventSubURL(id+"/service/"+i+"/event");
-
-			UPnPAction[] actions = services[i].getActions();
-			for (int j = 0; j < actions.length; j++) {
-				Action act = new Action(ser.getServiceNode());
-				act.setName(actions[j].getName());
-				ArgumentList al = new ArgumentList();
-				
-				String[] names=actions[j].getInputArgumentNames();				
-				if(names!=null){
-					for (int k = 0; k < names.length; k++) {
-						Argument a = new Argument();
-						a.setDirection(Argument.IN);
-						a.setName(names[k]);
-						a.setRelatedStateVariableName(
-								actions[j].getStateVariable(names[k]).getName()
-						);						
-						al.add(a);						
-					}
-				}
-				names=actions[j].getOutputArgumentNames();
-				if(names!=null){
-					for (int k = 0; k < names.length; k++) {
-						Argument a = new Argument();
-						a.setDirection(Argument.OUT);
-						a.setName(names[k]);
-						a.setRelatedStateVariableName(
-								actions[j].getStateVariable(names[k]).getName()
-						);						
-						al.add(a);						
-					}
-				}
-				act.setArgumentList(al);
-				ser.addAction(act);
-			}			
-			
-			UPnPStateVariable[] vars = services[i].getStateVariables();
-			for (int j = 0; j < vars.length; j++) {
-				StateVariable var = new StateVariable();
-				var.setDataType(vars[j].getUPnPDataType());
-				var.setName(vars[j].getName());
-				var.setSendEvents(vars[j].sendsEvents());
-				String[] values = vars[j].getAllowedValues();
-				if(values!=null){
-					AllowedValueList avl = new AllowedValueList(values);
-					var.setAllowedValueList(avl);
-				}else if(vars[j].getMaximum()!= null){
-					AllowedValueRange avr = new AllowedValueRange(
-							vars[j].getMaximum(),
-							vars[j].getMinimum(),
-							vars[j].getStep()
-						);
-					var.setAllowedValueRange(avr);
-				}
-				if(vars[j].getDefaultValue()!=null)
-					try {
-						var.setDefaultValue(Converter.toString(
-								vars[j].getDefaultValue(),vars[j].getUPnPDataType()
-							));
-					} catch (Exception ignored) {
-					}
-				ser.addStateVariable(var);				
-			}
-						
-			Activator.bc.ungetService(sr);
-		}
-		
-		
-	}
-
-	public static Device createCyberLinkDevice(ServiceReference sr){
-		Node root = buildRootNode();
-		Device devUPnP = buildRootDeviceNode(root,sr);		
-		return devUPnP;
-	}
-}
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.felix.upnp.basedriver.export;
+
+
+import org.cybergarage.upnp.Action;
+import org.cybergarage.upnp.AllowedValueList;
+import org.cybergarage.upnp.AllowedValueRange;
+import org.cybergarage.upnp.Argument;
+import org.cybergarage.upnp.ArgumentList;
+import org.cybergarage.upnp.Device;
+import org.cybergarage.upnp.Service;
+import org.cybergarage.upnp.StateVariable;
+import org.cybergarage.upnp.xml.DeviceData;
+import org.cybergarage.xml.Node;
+
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.upnp.UPnPAction;
+import org.osgi.service.upnp.UPnPDevice;
+import org.osgi.service.upnp.UPnPService;
+import org.osgi.service.upnp.UPnPStateVariable;
+
+import org.ungoverned.device.RootDescription;
+
+import org.apache.felix.upnp.basedriver.Activator;
+import org.apache.felix.upnp.extra.util.Converter;
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
+public class BuildDevice {
+	
+	private static Node buildRootNode(){
+		Node root = new Node(RootDescription.ROOT_ELEMENT);
+		root.setAttribute("xmlns",RootDescription.ROOT_ELEMENT_NAMESPACE);
+		Node spec = new Node(RootDescription.SPECVERSION_ELEMENT);
+		Node maj =new Node(RootDescription.MAJOR_ELEMENT);
+		maj.setValue("1");
+		Node min =new Node(RootDescription.MINOR_ELEMENT);
+		min.setValue("0");
+		spec.addNode(maj);
+		spec.addNode(min);
+		root.addNode(spec);
+		return root;
+	}
+	
+	private static Device buildRootDeviceNode(Node root,ServiceReference sr){		
+		Node dev = new Node(Device.ELEM_NAME);
+		root.addNode(dev);
+		DeviceData dd = new DeviceData();
+		dd.setDescriptionURI("/gen-desc.xml");
+		dev.setUserData(dd);
+		Device devUPnP = new Device(root,dev);
+
+
+		Object aux = sr.getProperty(UPnPDevice.TYPE);
+		if(aux==null){
+			devUPnP.setDeviceType(null);		
+		}else if(aux instanceof String){
+			devUPnP.setDeviceType((String) aux);
+		}else if(aux instanceof String[]){
+			//The property key UPnP.device.type should be a String
+			String[] v = (String[]) aux;
+			int maxindex=0;
+			int max=Integer.parseInt(v[0].substring(v[0].lastIndexOf(":")+1));
+			int tmp;
+			for (int i = 1; i < v.length; i++) {
+				tmp=Integer.parseInt(v[i].substring(v[i].lastIndexOf(":")+1));				
+				if(max<tmp){
+					max=tmp;
+					maxindex=i;
+				}				
+			}
+			devUPnP.setDeviceType(v[maxindex]);
+		}				
+		
+		devUPnP.setFriendlyName((String) sr.getProperty(UPnPDevice.FRIENDLY_NAME));
+		devUPnP.setManufacture((String) sr.getProperty(UPnPDevice.MANUFACTURER));
+		devUPnP.setManufactureURL((String) sr.getProperty(UPnPDevice.MANUFACTURER_URL));
+		devUPnP.setModelDescription((String) sr.getProperty(UPnPDevice.MODEL_DESCRIPTION));
+		devUPnP.setModelName((String) sr.getProperty(UPnPDevice.MODEL_NAME));
+		devUPnP.setModelNumber((String) sr.getProperty(UPnPDevice.MODEL_NUMBER));
+		devUPnP.setModelURL((String) sr.getProperty(UPnPDevice.MODEL_URL));
+		devUPnP.setSerialNumber((String) sr.getProperty(UPnPDevice.SERIAL_NUMBER));
+		devUPnP.setUDN((String) sr.getProperty(UPnPDevice.UDN));
+		devUPnP.setUPC((String) sr.getProperty(UPnPDevice.UPC));
+
+		devUPnP.setLocation("/gen-desc.xml");		
+
+		addServices("",devUPnP,sr);
+		addDevices("",devUPnP,sr);
+		devUPnP.setPresentationURL((String) sr.getProperty(UPnPDevice.PRESENTATION_URL));
+		
+		return devUPnP;
+	}
+	
+	private static void addDevices(String id,Device devUPnP, ServiceReference sr) {
+
+		String[] udns=(String[]) sr.getProperty(UPnPDevice.CHILDREN_UDN);
+		if(udns==null) {
+			return;
+		}
+		for (int i = 0; i < udns.length; i++) {
+			try {
+				ServiceReference[] aux = Activator.bc.getServiceReferences(
+						UPnPDevice.class.getName(),"("+UPnPDevice.UDN+"="+udns[i]+")"
+					);
+				if(aux==null || aux.length == 0)
+					continue;
+				//id=+"/device/"+i;						// twa: wrong in recursion
+				//buildDevice(id,devUPnP,aux[0]);		// twa: wrong in recursion
+				String localId = new StringBuffer(id).append("/device/").append(i).toString();		
+				buildDevice(localId,devUPnP,aux[0]); 	// twa: better
+			} catch (InvalidSyntaxException ignored) {}						
+		}		
+	}
+
+	private static void buildDevice(String id,Device parent, ServiceReference sr) {
+		Node dev = new Node(Device.ELEM_NAME);
+		DeviceData dd = new DeviceData();
+		dd.setDescriptionURI(id+"/gen-desc.xml");
+		dev.setUserData(dd);
+		
+		Device devUPnP = new Device(dev);
+		
+		devUPnP.setFriendlyName((String) sr.getProperty(UPnPDevice.FRIENDLY_NAME));
+		devUPnP.setManufacture((String) sr.getProperty(UPnPDevice.MANUFACTURER));
+		devUPnP.setManufactureURL((String) sr.getProperty(UPnPDevice.MANUFACTURER_URL));
+		devUPnP.setModelDescription((String) sr.getProperty(UPnPDevice.MODEL_DESCRIPTION));
+		devUPnP.setModelName((String) sr.getProperty(UPnPDevice.MODEL_NAME));
+		devUPnP.setModelNumber((String) sr.getProperty(UPnPDevice.MODEL_NUMBER));
+		devUPnP.setModelURL((String) sr.getProperty(UPnPDevice.MODEL_URL));
+		devUPnP.setSerialNumber((String) sr.getProperty(UPnPDevice.SERIAL_NUMBER));
+		devUPnP.setUDN((String) sr.getProperty(UPnPDevice.UDN));
+		devUPnP.setUPC((String) sr.getProperty(UPnPDevice.UPC));
+		devUPnP.setLocation(id+"/gen-desc.xml");		
+
+		addServices(id,devUPnP,sr);
+		addDevices(id,devUPnP,sr);
+
+		parent.addDevice(devUPnP); //		twa: essential!!!!!!!
+		devUPnP.setPresentationURL((String) sr.getProperty(UPnPDevice.PRESENTATION_URL));
+		
+	}
+	
+	/**
+	* Method used to create a new Service in CyberLink world without creating the XML
+	*
+	* @param id ServiceId
+	* @param devUPnP the CyberLink device that where the new Service will be created
+	* @param sr ServiceReference to OSGi Device that used as source of the information
+	*              for the creation of the device
+	*/
+	private static void addServices(String id,Device devUPnP, ServiceReference sr) {
+		UPnPDevice devOSGi = (UPnPDevice) Activator.bc.getService(sr);
+
+		if( devOSGi == null) {	//added by twa to prevent a null pointer exception
+			Activator.logger.WARNING("UPnP Device taht cotains serviceId="
+					+id+" is deregistered from the framework while is exported");
+			return;
+		}
+
+		UPnPService[] services =  devOSGi.getServices();
+		if(services==null || services.length==0)
+			return;
+		
+		
+		
+		for (int i = 0; i < services.length; i++) {
+			Service ser = new Service();
+			devUPnP.addService(ser);
+			ser.setServiceType(services[i].getType() );
+			ser.setServiceID(services[i].getId());
+			ser.setSCPDURL(id+"/service/"+i+"/gen-desc.xml");
+			ser.setDescriptionURL(id+"/service/"+i+"/gen-desc.xml");
+			ser.setControlURL(id+"/service/"+i+"/ctrl");
+			ser.setEventSubURL(id+"/service/"+i+"/event");
+
+			UPnPAction[] actions = services[i].getActions();
+			for (int j = 0; j < actions.length; j++) {
+				Action act = new Action(ser.getServiceNode());
+				act.setName(actions[j].getName());
+				ArgumentList al = new ArgumentList();
+				
+				String[] names=actions[j].getInputArgumentNames();				
+				if(names!=null){
+					for (int k = 0; k < names.length; k++) {
+						Argument a = new Argument();
+						a.setDirection(Argument.IN);
+						a.setName(names[k]);
+						a.setRelatedStateVariableName(
+								actions[j].getStateVariable(names[k]).getName()
+						);						
+						al.add(a);						
+					}
+				}
+				names=actions[j].getOutputArgumentNames();
+				if(names!=null){
+					for (int k = 0; k < names.length; k++) {
+						Argument a = new Argument();
+						a.setDirection(Argument.OUT);
+						a.setName(names[k]);
+						a.setRelatedStateVariableName(
+								actions[j].getStateVariable(names[k]).getName()
+						);						
+						al.add(a);						
+					}
+				}
+				act.setArgumentList(al);
+				ser.addAction(act);
+			}			
+			
+			UPnPStateVariable[] vars = services[i].getStateVariables();
+			for (int j = 0; j < vars.length; j++) {
+				StateVariable var = new StateVariable();
+				var.setDataType(vars[j].getUPnPDataType());
+				var.setName(vars[j].getName());
+				var.setSendEvents(vars[j].sendsEvents());
+				String[] values = vars[j].getAllowedValues();
+				if(values!=null){
+					AllowedValueList avl = new AllowedValueList(values);
+					var.setAllowedValueList(avl);
+				}else if(vars[j].getMaximum()!= null){
+					AllowedValueRange avr = new AllowedValueRange(
+							vars[j].getMaximum(),
+							vars[j].getMinimum(),
+							vars[j].getStep()
+						);
+					var.setAllowedValueRange(avr);
+				}
+				if(vars[j].getDefaultValue()!=null)
+					try {
+						var.setDefaultValue(Converter.toString(
+								vars[j].getDefaultValue(),vars[j].getUPnPDataType()
+							));
+					} catch (Exception ignored) {
+					}
+				ser.addStateVariable(var);				
+			}
+						
+			Activator.bc.ungetService(sr);
+		}
+		
+		
+	}
+
+	public static Device createCyberLinkDevice(ServiceReference sr){
+		Node root = buildRootNode();
+		Device devUPnP = buildRootDeviceNode(root,sr);		
+		return devUPnP;
+	}
+}
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/DeviceNode.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/DeviceNode.java
index a2c1d0c..9ebf4d3 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/DeviceNode.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/DeviceNode.java
@@ -25,11 +25,9 @@
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.upnp.UPnPDevice;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco "Sygent" Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class DeviceNode {
 	
 	private ServiceReference sr;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ExporterUPnPEventListener.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ExporterUPnPEventListener.java
index b99cb17..8aea581 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ExporterUPnPEventListener.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ExporterUPnPEventListener.java
@@ -30,10 +30,9 @@
 
 import org.apache.felix.upnp.extra.util.Converter;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ExporterUPnPEventListener implements UPnPEventListener {
 
 	private Device d;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/GeneralActionListener.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/GeneralActionListener.java
index 91cd966..665248d 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/GeneralActionListener.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/GeneralActionListener.java
@@ -40,11 +40,9 @@
 import org.apache.felix.upnp.extra.util.Converter;
 import org.osgi.service.upnp.UPnPException;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * 
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class GeneralActionListener implements ServiceListener,ActionListener {
 
 	private ServiceReference dev;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceExportingQueue.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceExportingQueue.java
index 5ddaf99..776bfd0 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceExportingQueue.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceExportingQueue.java
@@ -19,10 +19,9 @@
 
 import java.util.Vector;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class RootDeviceExportingQueue {
 	
     private Vector v;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceListener.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceListener.java
index 4e4f73f..5bb4d95 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceListener.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/RootDeviceListener.java
@@ -31,10 +31,9 @@
 
 import org.apache.felix.upnp.basedriver.Activator;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco "Sygent" Furfari 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class RootDeviceListener implements ServiceListener {
 
 	private RootDeviceExportingQueue queue;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
index a0a1141..2eabaa2 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
@@ -42,10 +42,9 @@
 
 import org.apache.felix.upnp.basedriver.Activator;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ThreadExporter implements Runnable,ServiceListener {
 
 	private boolean end;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
index ffd9a79..293d72a 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
@@ -66,13 +66,9 @@
 import org.apache.felix.upnp.basedriver.importer.util.ParseUSN;
 import org.apache.felix.upnp.extra.util.Converter;
 
-/**
- * @author Matteo "matted" Demuru 
- * @author Stefano "Kismet" Lenzi
- * @author Francesco Furfari 
- * 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class MyCtrlPoint extends ControlPoint
 		implements
 			NotifyListener,
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/OSGiDeviceInfo.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/OSGiDeviceInfo.java
index 1fa69c6..a02eb17 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/OSGiDeviceInfo.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/OSGiDeviceInfo.java
@@ -22,10 +22,9 @@
 
 import org.apache.felix.upnp.basedriver.importer.core.upnp.UPnPDeviceImpl;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class OSGiDeviceInfo {
 	private UPnPDeviceImpl osgidevice;
 	private ServiceRegistration registration;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
index c599165..dffe44d 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
@@ -27,9 +27,9 @@
  * This is message is related to a registration of listener for a 
  * CyberLink Service during the registering of the UPnP Event Listener
  * 
- * @author Matteo "matted" Demuru
- *
- */
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
+ 
 
 public class FirstMessage {
 	private Service service;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerModified.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerModified.java
index 7b15d59..5117899 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerModified.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerModified.java
@@ -24,10 +24,9 @@
 /**
  * Message that is euqueued for Suscriber, only when a UPnPEventListener changes 
  * his properties
- * 
- * @author Matteo "matted" Demuru
- *
- */
+ *  
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ListenerModified {
 	private Vector newServices;
 	private UPnPEventListener listener;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerUnRegistration.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerUnRegistration.java
index 434c9ce..d4ddb3f 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerUnRegistration.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/ListenerUnRegistration.java
@@ -19,10 +19,9 @@
 
 import org.osgi.service.upnp.UPnPEventListener;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ListenerUnRegistration {
 	private UPnPEventListener listener;
 	/**
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/SidExipired.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/SidExipired.java
index 0324c7f..2c9857a 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/SidExipired.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/SidExipired.java
@@ -20,10 +20,9 @@
 
 import org.cybergarage.upnp.Service;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class SidExipired {
 private String sid;
 private Service service;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
index 7f26339..c7cf616 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
@@ -22,10 +22,9 @@
 import org.cybergarage.upnp.Device;
 import org.cybergarage.upnp.Service;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class StateChanged {
 	private String sid;
 	private Dictionary dic;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Listener2Sids.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Listener2Sids.java
index 9d2e492..9aa22b4 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Listener2Sids.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Listener2Sids.java
@@ -22,11 +22,9 @@
 
 import org.osgi.service.upnp.UPnPEventListener;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Francesco Furfari 
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Listener2Sids {
 	private Hashtable listenerSid;
     
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
index d178122..96bf5fb 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
@@ -32,12 +32,10 @@
 import org.apache.felix.upnp.basedriver.importer.core.event.message.FirstMessage;
 import org.apache.felix.upnp.basedriver.importer.core.event.message.ListenerModified;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Francesco Furfari 
- * 
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
+
 public class Monitor {
 	private Hashtable sidStateVars;
 	private SidsListenersMaps sidListSid;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java
index 409e04c..d2ca81d 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/NotifierQueue.java
@@ -19,10 +19,9 @@
 
 import java.util.Vector;
 
-/**
- * @author Matteo "matted" Demuru
- *         
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class NotifierQueue {
 	private Vector queue;
 	
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Sid2Listeners.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Sid2Listeners.java
index 85ddfd3..fdff4d0 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Sid2Listeners.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Sid2Listeners.java
@@ -23,10 +23,9 @@
 
 import org.osgi.service.upnp.UPnPEventListener;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Sid2Listeners {
 	private Hashtable sidListener;
 	private Hashtable alreadyfirst;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidRenewer.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidRenewer.java
index 4525048..1eda514 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidRenewer.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidRenewer.java
@@ -22,10 +22,9 @@
 
 import org.apache.felix.upnp.basedriver.importer.core.event.thread.Renewer;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class SidRenewer {
 private Hashtable hash;
 
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidsListenersMaps.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidsListenersMaps.java
index 3e47be2..41031f1 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidsListenersMaps.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SidsListenersMaps.java
@@ -27,12 +27,8 @@
  *  - sid2listener: have SID of Suscribed Service as key and a Vector of UPnPEventListener as value
  *  - listener2sids: have an UPnPEventListener as kay and a Vector of SID of Scriscrobed Service 
  * 
- * @author Matteo "matted" Demuru
- * @author Francesco Furfari 
- * @author Stefano "Kismet" Lenzi
- * 
- *
- */
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class SidsListenersMaps {
 	private Sid2Listeners sid2Listeners;
 	private Listener2Sids listeners2Sids;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/StateVarsToNotify.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/StateVarsToNotify.java
index e9ec10f..c29fe3c 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/StateVarsToNotify.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/StateVarsToNotify.java
@@ -23,10 +23,9 @@
 
 import org.apache.felix.upnp.basedriver.importer.core.event.message.StateChanged;
 
-/**
- * @author Matteo "matted" Demuru
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class StateVarsToNotify {
 	private Dictionary stateVars;
 	private String sid;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java
index 4275f9e..a8cde26 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/SubscriptionQueue.java
@@ -21,10 +21,9 @@
 
 
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class SubscriptionQueue {
 	private Vector queue;
 	
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
index 30ca333..6fa20b3 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
@@ -23,11 +23,10 @@
 import org.apache.felix.upnp.basedriver.importer.core.event.structs.StateVarsToNotify;
 
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefano "kismet-sl" Lenzi
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
+
 public class Notifier extends Thread {
 
 	private NotifierQueue notifierQueue;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Renewer.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Renewer.java
index cf87bcf..ccf616a 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Renewer.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Renewer.java
@@ -24,13 +24,9 @@
 import org.apache.felix.upnp.basedriver.importer.core.event.message.SidExipired;
 import org.apache.felix.upnp.basedriver.importer.core.event.structs.SubscriptionQueue;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefano "kismet-sl" Lenzi
- * @author Francesco Furfari
- *         
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Renewer extends Thread {
 	private long timeout;
 	private String sid;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
index ab36182..6bb1048 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
@@ -31,13 +31,9 @@
 import org.apache.felix.upnp.basedriver.importer.core.event.structs.Monitor;
 import org.apache.felix.upnp.basedriver.importer.core.event.structs.SubscriptionQueue;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefano "kismet-sl" Lenzi
- * @author Francesco Furfari
- *         
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class SubScriber extends Thread {
 
 	private MyCtrlPoint ctrl;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPActionImpl.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPActionImpl.java
index 4708015..d301bbd 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPActionImpl.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPActionImpl.java
@@ -32,11 +32,9 @@
 import org.apache.felix.upnp.extra.util.Converter;
 import org.osgi.service.upnp.UPnPException;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefanoi "kismet-sl" Lenzi
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPActionImpl implements UPnPAction {
 
 	private Action act;	
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
index f877dc3..a78ff0b 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
@@ -33,11 +33,9 @@
 import org.apache.felix.upnp.basedriver.importer.util.DeviceSetup;
 import org.apache.felix.upnp.basedriver.importer.util.DictionaryProp;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefanoi "kismet-sl" Lenzi
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPDeviceImpl implements UPnPDevice {
 
 	/**
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPIconImpl.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPIconImpl.java
index 24248ff..fbdcd71 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPIconImpl.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPIconImpl.java
@@ -29,11 +29,9 @@
 import org.apache.felix.upnp.basedriver.importer.util.HTTPRequestForIcon;
 import org.apache.felix.upnp.basedriver.importer.util.ParseLocation;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefanoi "kismet-sl" Lenzi
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPIconImpl implements UPnPIcon {
 
 	/* (non-Javadoc)
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
index d7c46f7..183015f 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
@@ -31,11 +31,9 @@
 import org.osgi.service.upnp.UPnPService;
 import org.osgi.service.upnp.UPnPStateVariable;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefanoi "kismet-sl" Lenzi
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPServiceImpl implements UPnPService {
 	private Service service;
 	private Hashtable actions;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java
index 55577b0..6fd1336 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java
@@ -29,11 +29,9 @@
 
 import org.apache.felix.upnp.extra.util.Converter;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefanoi "kismet-sl" Lenzi
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPStateVariableImpl implements UPnPStateVariable {
 
 	private StateVariable variable;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DeviceSetup.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DeviceSetup.java
index 11fa8b7..738c679 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DeviceSetup.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DeviceSetup.java
@@ -37,11 +37,10 @@
 import org.apache.felix.upnp.basedriver.importer.core.upnp.UPnPServiceImpl;
 import org.apache.felix.upnp.extra.util.Constants;
 
-/**
- * @author Matteo "matted" Demuru 
- * @author Stefano "Kismet" Lenzi
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
+
 public class DeviceSetup {
 
 	public static void deviceSetup(DictionaryProp properties, Device dev,Vector icons,Hashtable services) {
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DictionaryProp.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DictionaryProp.java
index f3e8af0..7673c2c 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DictionaryProp.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/DictionaryProp.java
@@ -19,10 +19,9 @@
 
 import java.util.*;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class DictionaryProp extends Dictionary {
 	private Hashtable hash=null;
 	/* (non-Javadoc)
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/HTTPRequestForIcon.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/HTTPRequestForIcon.java
index dd19673..eb8e605 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/HTTPRequestForIcon.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/HTTPRequestForIcon.java
@@ -20,14 +20,9 @@
 import java.io.*;
 import java.net.*;
 
-/**
- * @author Matteo "matted" Demuru
- * @author Stefanoi "kismet-sl" Lenzi
- *
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class HTTPRequestForIcon {
 	private URL url;
 
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseLocation.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseLocation.java
index a401090..887ad17 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseLocation.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseLocation.java
@@ -17,10 +17,9 @@
 
 package org.apache.felix.upnp.basedriver.importer.util;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ParseLocation {
 	public static String getUrlBase(String location){
 		//http://148.12.14.144:65888/
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseUSN.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseUSN.java
index 511abff..5056cd7 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseUSN.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/util/ParseUSN.java
@@ -17,10 +17,9 @@
 
 package org.apache.felix.upnp.basedriver.importer.util;
 
-/**
- * @author Matteo "matted" Demuru
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ParseUSN {
 	boolean service;
 	boolean device;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Logger.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Logger.java
index f253dfc..baa294f 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Logger.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Logger.java
@@ -30,11 +30,9 @@
 
 import org.apache.felix.upnp.basedriver.Activator;
 
-/**
- * @author Stefano "Kismet" Lenzi
- * @author Francesco Furfari
- *         
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Logger implements ServiceListener {
 	
 	private ServiceReference rls;
diff --git a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Util.java b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Util.java
index bc8f046..4334acb 100644
--- a/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Util.java
+++ b/org.apache.felix.upnp.basedriver/src/main/java/org/apache/felix/upnp/basedriver/tool/Util.java
@@ -24,10 +24,9 @@
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.upnp.UPnPDevice;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Util {
 	
 	public static boolean isUPnPDevice(ServiceReference sr){
diff --git a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DevicesInfo.java b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DevicesInfo.java
index 5a142a3..2fdd24b 100644
--- a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DevicesInfo.java
+++ b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DevicesInfo.java
@@ -16,10 +16,9 @@
  */
 package org.apache.felix.upnp.extra.controller;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public interface DevicesInfo{
     /**
      * 
diff --git a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DriverController.java b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DriverController.java
index 13d0342..456330d 100644
--- a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DriverController.java
+++ b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/controller/DriverController.java
@@ -18,10 +18,9 @@
 
 //import java.net.InetAddress;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public interface DriverController {
 	/**
 	 * String for searching all the device on UPnP Network
diff --git a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Constants.java b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Constants.java
index dde33a2..066d8c8 100644
--- a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Constants.java
+++ b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Constants.java
@@ -15,11 +15,9 @@
  *
  */
 package org.apache.felix.upnp.extra.util;
-/**
- * 
- * @author Stefano "Kismet" Lenzi 
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public interface Constants {
 	/**
 	 * If this property is set on a UPnP Device means that the 
diff --git a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Converter.java b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Converter.java
index 275bce8..6e76a20 100644
--- a/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Converter.java
+++ b/org.apache.felix.upnp.extra/src/main/java/org/apache/felix/upnp/extra/util/Converter.java
@@ -25,11 +25,9 @@
 import org.apache.xerces.impl.dv.util.HexBin;
 import org.osgi.service.upnp.*;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * 
- *
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Converter {
 	
 	/**
diff --git a/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/LightIcon.java b/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/LightIcon.java
index cef3a36..4937ea3 100644
--- a/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/LightIcon.java
+++ b/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/LightIcon.java
@@ -52,7 +52,7 @@
 	 * @see org.osgi.service.upnp.UPnPIcon#getSize()
 	 */
 	public int getSize() {
-		return 0;
+		return 1072;
 	}
 
 	/* (non-Javadoc)
diff --git a/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/SetTargetAction.java b/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/SetTargetAction.java
index 42fb290..54b41e2 100644
--- a/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/SetTargetAction.java
+++ b/org.apache.felix.upnp.sample.binaryLight/src/main/java/org/apache/felix/upnp/sample/binaryLight/SetTargetAction.java
@@ -79,6 +79,7 @@
 	 * @see org.osgi.service.upnp.UPnPAction#invoke(java.util.Dictionary)
 	 */
 	public Dictionary invoke(Dictionary args) throws Exception {
+		System.out.println("Accesa"); 
 		Boolean value = (Boolean) args.get(NEW_TARGET_VALUE);
 		model.doSwitch(value.booleanValue());
 		return null;
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/Activator.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/Activator.java
index 1184908..29ad3b1 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/Activator.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/Activator.java
@@ -24,10 +24,9 @@
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.upnp.UPnPDevice;
 
-/**
- * @author Francesco Furfari
- */
-
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Activator implements BundleActivator {
 
 	static BundleContext context;
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/EventSource.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/EventSource.java
index 3a21d23..c64b5e4 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/EventSource.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/EventSource.java
@@ -18,9 +18,9 @@
 package org.apache.felix.upnp.sample.tv;
 
 import java.beans.PropertyChangeListener;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public interface EventSource {
 	void addPropertyChangeListener(PropertyChangeListener listener);
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/GetPowerAction.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/GetPowerAction.java
index 61f9ec0..524bea9 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/GetPowerAction.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/GetPowerAction.java
@@ -22,9 +22,9 @@
 
 import org.osgi.service.upnp.UPnPAction;
 import org.osgi.service.upnp.UPnPStateVariable;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class GetPowerAction implements UPnPAction {
 
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerService.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerService.java
index ce37959..12d6abe 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerService.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerService.java
@@ -22,9 +22,9 @@
 import org.osgi.service.upnp.UPnPAction;
 import org.osgi.service.upnp.UPnPService;
 import org.osgi.service.upnp.UPnPStateVariable;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class PowerService implements UPnPService {
 	final private String SERVICE_ID = "urn:schemas-upnp-org:serviceId:power:1";
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerStateVariable.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerStateVariable.java
index dfd5b2d..97db353 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerStateVariable.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/PowerStateVariable.java
@@ -17,9 +17,9 @@
 
 package org.apache.felix.upnp.sample.tv;
 import java.beans.PropertyChangeEvent;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class PowerStateVariable implements UPnPStateVariableDescriptor {
 	
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/ResultStateVariable.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/ResultStateVariable.java
index 430fbf3..202b60d 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/ResultStateVariable.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/ResultStateVariable.java
@@ -17,9 +17,9 @@
 
 package org.apache.felix.upnp.sample.tv;
 import org.osgi.service.upnp.UPnPStateVariable;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class ResultStateVariable implements UPnPStateVariable{
 	
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/SetPowerAction.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/SetPowerAction.java
index 944516f..797d28d 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/SetPowerAction.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/SetPowerAction.java
@@ -22,9 +22,9 @@
 
 import org.osgi.service.upnp.UPnPAction;
 import org.osgi.service.upnp.UPnPStateVariable;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class SetPowerAction implements UPnPAction {
 
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvDevice.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvDevice.java
index 557e237..926e48c 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvDevice.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvDevice.java
@@ -32,9 +32,9 @@
 import org.osgi.service.upnp.UPnPEventListener;
 import org.osgi.service.upnp.UPnPIcon;
 import org.osgi.service.upnp.UPnPService;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class TvDevice implements UPnPDevice,UPnPEventListener,ServiceListener  {
 	
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvFrame.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvFrame.java
index 758a659..db226b9 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvFrame.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvFrame.java
@@ -26,9 +26,9 @@
 import javax.swing.JFrame;
 
 import org.osgi.framework.BundleException;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class TvFrame extends JFrame implements Runnable 
 {
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvIcon.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvIcon.java
index 22de04d..b22b0fc 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvIcon.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvIcon.java
@@ -20,9 +20,9 @@
 import java.io.InputStream;
 
 import org.osgi.service.upnp.UPnPIcon;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class TvIcon implements UPnPIcon {
 
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvPane.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvPane.java
index 0787f69..75c1413 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvPane.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/TvPane.java
@@ -27,9 +27,9 @@
 
 import javax.imageio.ImageIO;
 import javax.swing.JPanel;
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class TvPane extends JPanel  // MouseListener
 {
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java
index 398d67b..45a46c1 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPEventNotifier.java
@@ -35,9 +35,9 @@
 import org.osgi.service.upnp.UPnPService;
 import org.osgi.service.upnp.UPnPStateVariable;
 
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class UPnPEventNotifier implements PropertyChangeListener,ServiceListener {
 	BundleContext context;
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPStateVariableDescriptor.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPStateVariableDescriptor.java
index b08d4bc..4dc430f 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPStateVariableDescriptor.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPStateVariableDescriptor.java
@@ -19,10 +19,9 @@
 
 import org.osgi.service.upnp.UPnPStateVariable;
 
-/**
- * UPnPStateVariableDescriptor.java 22-gen-2005
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public interface UPnPStateVariableDescriptor extends UPnPStateVariable {
     Object getValue();
 
diff --git a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPSubscriber.java b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPSubscriber.java
index 34f5313..720613b 100644
--- a/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPSubscriber.java
+++ b/org.apache.felix.upnp.sample.tv/src/main/java/org/apache/felix/upnp/sample/tv/UPnPSubscriber.java
@@ -26,9 +26,9 @@
 import org.osgi.service.upnp.UPnPEventListener;
 import org.osgi.service.upnp.UPnPService;
 
-/**
- * @author Francesco Furfari
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class UPnPSubscriber {
 	ServiceRegistration registration = null;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Activator.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Activator.java
index 4a0a8f7..deacc18 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Activator.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Activator.java
@@ -21,11 +21,9 @@
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
-/**
- * @author Stefano "Kismet" Lenzi
- * @author Francesco Furfari 
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class Activator implements BundleActivator {
 
 	public static BundleContext context;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/ControlPoint.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/ControlPoint.java
index 995598d..ed036d4 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/ControlPoint.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/ControlPoint.java
@@ -50,11 +50,9 @@
 import org.apache.felix.upnp.tester.gui.Util;
 import org.osgi.framework.BundleException;
  
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ControlPoint implements PopupMenuListener {
 	RootDeviceListener x;
 	RootDeviceListener listener;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Mediator.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Mediator.java
index 7a7c3da..035efd9 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Mediator.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/Mediator.java
@@ -23,11 +23,9 @@
 import org.apache.felix.upnp.tester.discovery.*;
 import org.apache.felix.upnp.tester.gui.*;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public  class Mediator {
 	static PropertiesViewer props;
 	static JTree tree;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/UPnPSubscriber.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/UPnPSubscriber.java
index 27ae36f..42c4674 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/UPnPSubscriber.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/UPnPSubscriber.java
@@ -22,11 +22,9 @@
 import org.osgi.framework.*;
 import org.osgi.service.upnp.*;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- * 
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPSubscriber {
 	private BundleContext context;
 	private UPnPEventListener listener;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceChangeListener.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceChangeListener.java
index 5999ddd..d1036d4 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceChangeListener.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceChangeListener.java
@@ -17,11 +17,9 @@
 
 package org.apache.felix.upnp.tester.discovery;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public interface DeviceChangeListener {
 	
 	public void addedDevice(DeviceNode dn);
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNode.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNode.java
index fd24dd2..4816448 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNode.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNode.java
@@ -21,11 +21,9 @@
 import org.osgi.framework.*;
 import org.osgi.service.upnp.*;
 
-/**
- * @author Stefano "Kismet" Lenzi
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class DeviceNode {
 	
 	private ServiceReference sr;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNodeListener.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNodeListener.java
index d9becb3..c3142aa 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNodeListener.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DeviceNodeListener.java
@@ -17,11 +17,9 @@
 
 package org.apache.felix.upnp.tester.discovery;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public interface DeviceNodeListener {
 	public void deviceDetected(DeviceNode d);
 	public void rootDeviceUnplugged(String udn);
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DevicesList.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DevicesList.java
index fcfe4b3..8097e3a 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DevicesList.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DevicesList.java
@@ -19,11 +19,9 @@
 
 import java.util.*;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class DevicesList {
 	
 	ArrayList devices;	
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DriverProxy.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DriverProxy.java
index fce3e03..b3fd4d7 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DriverProxy.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/DriverProxy.java
@@ -21,11 +21,9 @@
 import org.apache.felix.upnp.tester.*;
 
 import org.osgi.framework.*;
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class DriverProxy implements ServiceListener {
     private DevicesInfo devicesInfo;
     private DriverController drvController;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/RootDeviceListener.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/RootDeviceListener.java
index 12d62a1..2422d02 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/RootDeviceListener.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/discovery/RootDeviceListener.java
@@ -25,11 +25,9 @@
 import org.osgi.framework.*;
 import org.osgi.service.upnp.*;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class RootDeviceListener implements ServiceListener {
 		
 	//This list contains all partial tree of UPnP Device
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/ActionPanel.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/ActionPanel.java
index d44ff36..a446ad1 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/ActionPanel.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/ActionPanel.java
@@ -49,11 +49,9 @@
 import org.osgi.service.upnp.UPnPAction;
 import org.osgi.service.upnp.UPnPStateVariable;
 
-/**
- * @author Stefano "Kismet" Lenzi 
-  * @author Francesco  Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class ActionPanel extends JPanel {
 	
 	UPnPAction action;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/LogPanel.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/LogPanel.java
index 9300686..3ba3d03 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/LogPanel.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/LogPanel.java
@@ -25,11 +25,9 @@
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class LogPanel extends JPanel {
     private static JTextArea logArea = new JTextArea(4,50);
     private static JPanel statusBar = new JPanel(new BorderLayout());
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/PropertiesViewer.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/PropertiesViewer.java
index 917bbb7..6675405 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/PropertiesViewer.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/PropertiesViewer.java
@@ -41,11 +41,9 @@
 import org.osgi.service.upnp.UPnPAction;
 import org.osgi.service.upnp.UPnPDevice;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco  Furfari
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class PropertiesViewer extends JPanel {
 
     ActionPanel actionsPanel;
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/SubscriptionPanel.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/SubscriptionPanel.java
index 18476f8..ca4e48b 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/SubscriptionPanel.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/SubscriptionPanel.java
@@ -36,11 +36,9 @@
 import org.osgi.service.upnp.UPnPDevice;
 import org.osgi.service.upnp.UPnPEventListener;
 import org.osgi.service.upnp.UPnPService;
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class SubscriptionPanel extends JPanel implements UPnPEventListener{
 	public SubscriptionPanel() {
 		super();
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/TreeViewer.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/TreeViewer.java
index e155fb9..a82e746 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/TreeViewer.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/TreeViewer.java
@@ -50,11 +50,10 @@
 import org.osgi.service.upnp.UPnPService;
 import org.osgi.service.upnp.UPnPStateVariable;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
+
 public class TreeViewer extends JPanel 	implements DeviceNodeListener 
 {
 	
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/UPnPDeviceTreeNode.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/UPnPDeviceTreeNode.java
index ecda361..780492e 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/UPnPDeviceTreeNode.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/UPnPDeviceTreeNode.java
@@ -39,11 +39,9 @@
 import org.osgi.service.upnp.UPnPService;
 import org.osgi.service.upnp.UPnPStateVariable;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 public class UPnPDeviceTreeNode extends DefaultMutableTreeNode {
 	public final static String ROOT_DEVICE = "RootDeviceNode";
 	public final static String DEVICE = "DeviceNode";
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/Util.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/Util.java
index 75338ac..182fc9a 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/Util.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/gui/Util.java
@@ -21,11 +21,9 @@
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 
-/**
- * @author Stefano "Kismet" Lenzi 
- * @author Francesco Furfari 
- *  
- */
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class Util {
 	final static GridBagConstraints constrains = new GridBagConstraints();
diff --git a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/test.java b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/test.java
index 4ab9df3..c2c57ab 100644
--- a/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/test.java
+++ b/org.apache.felix.upnp.tester/src/main/java/org/apache/felix/upnp/tester/test.java
@@ -24,6 +24,9 @@
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+/* 
+* @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+*/
 
 public class test extends JFrame {
 
