diff --git a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/Activator.java b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/Activator.java
index d85b755..e35af12 100644
--- a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/Activator.java
+++ b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/Activator.java
@@ -9,6 +9,8 @@
  * Contributors:
  *    Jan S. Rellermeyer - initial API and implementation
  *    Markus Alexander Kuppe - enhancements and bug fixes
+ *    Md.Jamal MohiUddin (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
+ *    P Sowjanya (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
  *
 *****************************************************************************/
 
@@ -40,7 +42,6 @@
 		context.registerService("ch.ethz.iks.slp.Advertiser", new ServiceFactory() {
 			public Object getService(Bundle bundle, ServiceRegistration registration) {
 				SLPCore.init();
-				SLPCore.initMulticastSocket();
 				return new AdvertiserImpl();
 			}
 			public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
diff --git a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/AdvertiserImpl.java b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/AdvertiserImpl.java
index 8d5d5d3..7cf242e 100644
--- a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/AdvertiserImpl.java
+++ b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/AdvertiserImpl.java
@@ -9,6 +9,8 @@
  * Contributors:
  *    Jan S. Rellermeyer - initial API and implementation
  *    Markus Alexander Kuppe - enhancements and bug fixes
+ *    Md.Jamal MohiUddin (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
+ *    P Sowjanya (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
  *
 *****************************************************************************/
 package ch.ethz.iks.slp.impl;
@@ -112,6 +114,7 @@
 				.getServiceType(), scopes, SLPUtils.dictToAttrList(attributes),
 				locale);
 		try {
+			SLPCore.initMulticastSocket(url);
 			reg.address = InetAddress.getLocalHost();
 		} catch (UnknownHostException e) {
 			reg.address = SLPCore.getMyIP();
diff --git a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPCore.java b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPCore.java
index a33c136..7c25bdb 100644
--- a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPCore.java
+++ b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPCore.java
@@ -9,6 +9,8 @@
  * Contributors:
  *    Jan S. Rellermeyer - initial API and implementation
  *    Markus Alexander Kuppe - enhancements and bug fixes
+ *    Md.Jamal MohiUddin (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
+ *    P Sowjanya (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
  *
 *****************************************************************************/
 
@@ -41,6 +43,7 @@
 
 import ch.ethz.iks.slp.ServiceLocationException;
 import ch.ethz.iks.slp.ServiceType;
+import ch.ethz.iks.slp.ServiceURL;
 
 /**
  * the core class of the jSLP implementation.
@@ -77,10 +80,40 @@
 	 */
 	static final String SLP_MCAST_ADDRESS = "239.255.255.253";
 
+	
+	/**
+	 * SVRLOC multicast group id is for receiving
+	 * Attribute Request and Service Type Request
+	 * Messages	
+	 */
+	static final String SLP_SVRLOC = "FF02::123";
+
 	/**
 	 * 
 	 */
-	static final InetAddress MCAST_ADDRESS;
+	static final InetAddress SVRLOC = null;
+
+	/**
+	 * SVRLOC-DA group is used for receiving DA Advertisements
+	 */
+	static final String SLP_SVRLOC_DA = "FF02::116";
+
+	/**
+	 * 
+	 */
+	static final InetAddress DA_ADDRESS;
+
+	static final InetAddress SVRLOC_ADDRESS;
+
+	/**
+	 * Service Request Multicast Group Id
+	 */
+	static final String SLP_ServiceRqst = "";
+
+	/**
+	 * 
+	 */
+	static InetAddress serviceRqst = null;
 
 	/**
 	 * the SLP configuration.
@@ -257,14 +290,17 @@
 		// initialize the XID with a random number
 		nextXid = (short) Math.round(Math.random() * Short.MAX_VALUE);
 
-		InetAddress mcast = null;
+		InetAddress SVRLOC=null;
+		InetAddress SVRLOC_DA=null;
 		try {
-			mcast = InetAddress.getByName(SLPCore.SLP_MCAST_ADDRESS);
+			SVRLOC    = InetAddress.getByName(SLPCore.SLP_SVRLOC); 
+ 			SVRLOC_DA = InetAddress.getByName(SLPCore.SLP_SVRLOC_DA);
 		} catch (UnknownHostException e1) {
 			e1.printStackTrace();
 		}
 
-		MCAST_ADDRESS = mcast;
+		DA_ADDRESS=SVRLOC_DA;
+		SVRLOC_ADDRESS=SVRLOC;
 	}
 
 	protected static void init() {
@@ -327,8 +363,14 @@
 	}
 
 	// a pure UA doesn't need a multicast listener which is only required by a SA or DA
-	protected static void initMulticastSocket() {
+	protected static void initMulticastSocket(ServiceURL aUrl) {
 		if(isMulticastSocketInitialized) {
+			try {
+				serviceRqst = InetAddress.getByName(SLPUtils.hash(aUrl));
+				mtcSocket.joinGroup(serviceRqst);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 			return;
 		}
 		isMulticastSocketInitialized = true;
@@ -343,7 +385,10 @@
 					platform.logDebug("Setting multicast socket interface to " + myIPs[0] + " failed.",t);
 				}
 			}
-			mtcSocket.joinGroup(MCAST_ADDRESS);
+			mtcSocket.joinGroup(SVRLOC_ADDRESS);
+			mtcSocket.joinGroup(DA_ADDRESS);
+			serviceRqst = InetAddress.getByName(SLPUtils.hash(aUrl));
+			mtcSocket.joinGroup(serviceRqst);
 		} catch (BindException be) {
 			platform.logError(be.getMessage(), be);
 			throw new RuntimeException("You have to be root to open port "
@@ -614,11 +659,11 @@
 						SLP_DA_TYPE), scopes, null, SLPCore.DEFAULT_LOCALE);
 				sreq.xid = SLPCore.nextXid();
 				sreq.scopeList = scopes;
-				sreq.address = MCAST_ADDRESS;
+				sreq.address = DA_ADDRESS;
 				sreq.multicast = true;
 				byte[] bytes = sreq.getBytes();
 				DatagramPacket d = new DatagramPacket(bytes, bytes.length,
-						MCAST_ADDRESS, SLP_PORT);
+						DA_ADDRESS, SLP_PORT);
 				platform.logTraceMessage("SENT " + sreq + "(udp multicast)");
 				setupReceiverThread(socket, CONFIG.getWaitTime(), sreq);
 				try {
@@ -762,7 +807,7 @@
 		try {
 
 			long start = System.currentTimeMillis();
-
+			InetAddress destination;
 			List replyQueue = new ArrayList();
 			List responders = new ArrayList();
 			List responses = new ArrayList();
@@ -791,8 +836,27 @@
 					throw e;
 				}
 			}
+			byte type = SLPMessage.getMessageType(msg);
+			switch (type) {
+			case SLPMessage.SRVRQST:
+				ServiceRequest srq = (ServiceRequest) msg;
+				msg.address = InetAddress.getByName(SLPUtils
+						.hash(srq.serviceType));
+				destination = msg.address;
+				break;
 
-			msg.address = MCAST_ADDRESS;
+			case SLPMessage.ATTRRQST:
+			case SLPMessage.SRVTYPERQST:
+				msg.address = SVRLOC_ADDRESS;
+				destination = msg.address;
+				break;
+
+			default:
+				System.out
+						.println("\n Unknown request Message has been received"
+								+ SLPMessage.getType(type));
+				return null;
+			}
 			ReplyMessage reply;
 
 			for (int i = 0; i < myIPs.length; i++) {
@@ -833,8 +897,7 @@
 
 					// send the message
 					DatagramPacket p = new DatagramPacket(message,
-							message.length, InetAddress
-									.getByName(SLP_MCAST_ADDRESS), SLP_PORT);
+							message.length, destination, SLP_PORT);
 
 					try {
 						socket.send(p);
diff --git a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPMessage.java b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPMessage.java
index b68f8fa..22b38b1 100644
--- a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPMessage.java
+++ b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPMessage.java
@@ -9,6 +9,8 @@
  * Contributors:
  *    Jan S. Rellermeyer - initial API and implementation
  *    Markus Alexander Kuppe - enhancements and bug fixes
+ *    Md.Jamal MohiUddin (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
+ *    P Sowjanya (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
  *
 *****************************************************************************/
 package ch.ethz.iks.slp.impl;
@@ -493,4 +495,12 @@
 		rule.visit(visitor);
 		return visitor.getAttributes();
 	}
+
+	/**
+	 * Returns the Type of The Request Message
+	 * 
+	 */
+	static byte getMessageType(RequestMessage msg) {
+		return msg.funcID;
+	}
 }
diff --git a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPUtils.java b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPUtils.java
index cc9a939..8d5d931 100644
--- a/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPUtils.java
+++ b/protocols/bundles/ch.ethz.iks.slp/src/main/java/ch/ethz/iks/slp/impl/SLPUtils.java
@@ -9,6 +9,8 @@
  * Contributors:
  *    Jan S. Rellermeyer - initial API and implementation
  *    Markus Alexander Kuppe - enhancements and bug fixes
+ *    Md.Jamal MohiUddin (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
+ *    P Sowjanya (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
  *
 *****************************************************************************/
 package ch.ethz.iks.slp.impl;
@@ -23,6 +25,9 @@
 import java.util.Map;
 import java.util.Set;
 
+import ch.ethz.iks.slp.ServiceType;
+import ch.ethz.iks.slp.ServiceURL;
+
 /**
  * Utility class.
  * 
@@ -244,4 +249,51 @@
 					: equalsWithWildcard(val, ++valIndex, attr, ++attrIndex);
 		}
 	}
+	
+	static String hash(ServiceURL aURL) {
+		String service = extractService(aURL.toString());
+		return hash(service);
+	}
+
+	static String hash(ServiceType aType) {
+		String service = extractService(aType.toString());
+		return hash(service);
+	}
+	
+	/* Hash Algorithm for SLP Service Type String(RFC 3111) */
+	private static String hash(String pc) {
+		String ip = "FF02::1:1";
+		
+		/*
+		 * An unsigned 32-bit value v is initialized to 0.Each byte of the
+		 * character is considered consecutively
+		 */
+		int h = 0;
+
+		for (int i = 0; i < pc.length(); i++) {
+			/*
+			 * The current value v is multiplied by 33.then the value of the
+			 * current string byte is added ,Each byte in the service type
+			 * string is processed in this manner
+			 */
+			h *= 33;
+			h += pc.charAt(i);
+		}
+		/* The result is contained in the low order 10 bits of v */
+		int j = (0x3ff & h);
+		// Concatenating the value with the IP
+		return ip + Integer.toHexString(j);
+	}
+
+	private static String extractService(String url) {
+		int position = url.indexOf(':', 0);
+		if (position == -1) {
+			return url;
+		}
+		position = url.indexOf(':', position + 1);
+		if (position == -1) {
+			return url;
+		}
+		return url.substring(0, position);
+	}
 }
diff --git a/protocols/bundles/ch.ethz.iks.slp/standalone/inclusions/ch/ethz/iks/slp/ServiceLocationManager.java b/protocols/bundles/ch.ethz.iks.slp/standalone/inclusions/ch/ethz/iks/slp/ServiceLocationManager.java
index 6482852..515cf27 100644
--- a/protocols/bundles/ch.ethz.iks.slp/standalone/inclusions/ch/ethz/iks/slp/ServiceLocationManager.java
+++ b/protocols/bundles/ch.ethz.iks.slp/standalone/inclusions/ch/ethz/iks/slp/ServiceLocationManager.java
@@ -9,6 +9,8 @@
  * Contributors:
  *    Jan S. Rellermeyer - initial API and implementation
  *    Markus Alexander Kuppe - enhancements and bug fixes
+ *    Md.Jamal MohiUddin (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
+ *    P Sowjanya (Ubiquitous Computing, C-DAC Hyderabad) - IPv6 support
  *
 *****************************************************************************/
 package ch.ethz.iks.slp;
@@ -65,6 +67,7 @@
 		init();
 		if (locator != null) {
 			try {
+				//TODO::We have to Initialize the Multicast Socket for UA also for receiving DA Advt Messages
 				return (Locator) locator.newInstance(new Object[] { locale });
 			} catch (Exception e) {
 				throw new ServiceLocationException(
@@ -90,7 +93,6 @@
 	public static Advertiser getAdvertiser(final Locale locale)
 			throws ServiceLocationException {
 		init();
-		SLPCore.initMulticastSocket();
 		if (advertiser != null) {
 			try {
 				return (Advertiser) advertiser
