Index: src/java/org/apache/cassandra/locator/DatacenterEndPointSnitch.java
===================================================================
--- src/java/org/apache/cassandra/locator/DatacenterEndPointSnitch.java	(revision 831118)
+++ src/java/org/apache/cassandra/locator/DatacenterEndPointSnitch.java	(working copy)
@@ -49,7 +49,6 @@
     public DatacenterEndPointSnitch() throws IOException,
                                              ParserConfigurationException, SAXException
     {
-        super();
         xmlUtils = new XMLUtils(DEFAULT_RACK_CONFIG_FILE);
         reloadConfiguration();
     }
Index: src/java/org/apache/cassandra/locator/DatacenterShardStategy.java
===================================================================
--- src/java/org/apache/cassandra/locator/DatacenterShardStategy.java	(revision 831118)
+++ src/java/org/apache/cassandra/locator/DatacenterShardStategy.java	(working copy)
@@ -48,11 +48,12 @@
      *
      * @param tokenToEndPointMap - Provided the endpoint map which will be mapped with the DC's
      */
-    private void loadEndPoints(Map<Token, InetAddress> tokenToEndPointMap, Collection<Token> tokens) throws IOException
+    private synchronized void loadEndPoints(Map<Token, InetAddress> tokenToEndPointMap, Collection<Token> tokens) throws IOException
     {
         endPointSnitch = (DatacenterEndPointSnitch) StorageService.instance().getEndPointSnitch();
         this.tokens = new ArrayList<Token>(tokens);
         String localDC = endPointSnitch.getLocation(InetAddress.getLocalHost());
+        dcMap = new HashMap<String, List<Token>>();
         for (Token token : this.tokens)
         {
             InetAddress endPoint = tokenToEndPointMap.get(token);
@@ -150,6 +151,7 @@
                 if ((replicas_ - 1) > foundCount)
                 {
                     forloopReturn.add(endPointOfIntrest);
+                    foundCount++;
                     continue;
                 }
                 else
@@ -205,7 +207,7 @@
         if (consistency_level == ConsistencyLevel.DCQUORUM)
         {
             List<InetAddress> endpoints = getLocalEndPoints();
-            return new DatacenterQuorumResponseHandler<T>(endpoints, locQFactor, responseResolver);
+            return new DatacenterQuorumResponseHandler<T>(locQFactor, responseResolver);
         }
         else if (consistency_level == ConsistencyLevel.DCQUORUMSYNC)
         {
Index: src/java/org/apache/cassandra/service/DatacenterQuorumResponseHandler.java
===================================================================
--- src/java/org/apache/cassandra/service/DatacenterQuorumResponseHandler.java	(revision 831118)
+++ src/java/org/apache/cassandra/service/DatacenterQuorumResponseHandler.java	(working copy)
@@ -4,8 +4,11 @@
 package org.apache.cassandra.service;
 
 import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.List;
 
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.locator.IEndPointSnitch;
 import org.apache.cassandra.net.Message;
 
 /**
@@ -15,36 +18,50 @@
  */
 public class DatacenterQuorumResponseHandler<T> extends QuorumResponseHandler<T>
 {
-    private final List<InetAddress> waitList;
     private int blockFor;
+    private IEndPointSnitch endpointsnitch;
+    private InetAddress localEndpoint;
 
-    public DatacenterQuorumResponseHandler(List<InetAddress> waitList, int blockFor, IResponseResolver<T> responseResolver)
+    public DatacenterQuorumResponseHandler(int blockFor, IResponseResolver<T> responseResolver)
     throws InvalidRequestException
     {
         // Response is been managed by the map so the waitlist size really doesnt matter.
         super(blockFor, responseResolver);
         this.blockFor = blockFor;
-        this.waitList = waitList;
+        this.endpointsnitch = DatabaseDescriptor.getEndPointSnitch();
+        try
+	{
+	    this.localEndpoint = InetAddress.getLocalHost();
+	} catch (UnknownHostException e)
+	{
+	    throw new InvalidRequestException("Local host Address could not be determined: ");
+	}
     }
 
     @Override
     public void response(Message message)
     {
-        if (condition_.isSignaled())
-        {
-            return;
-        }
-
-        if (waitList.contains(message.getFrom()))
-        {
-            blockFor--;
-        }
-        responses_.add(message);
-        // If done then the response count will be empty after removing
-        // everything.
-        if (blockFor <= 0)
-        {
-            condition_.signal();
-        }
+	//IF done look no futher.
+	if (condition_.isSignaled())
+	    return;
+	try
+	{
+	    //Is optimal to check if same datacenter than comparing Arrays.
+	    if (endpointsnitch.isInSameDataCenter(localEndpoint, message.getFrom()))
+	    {
+		blockFor--;
+	    }
+	} catch (UnknownHostException ex)
+	{
+	    logger_.error("Cannot read the incoming message from Address: ", ex);
+	}
+	responses_.add(message);
+	if (blockFor <= 0)
+	{
+	    //Singnal when Quorum is recived.
+	    condition_.signal();
+	}
+	if (logger_.isDebugEnabled())
+	    logger_.debug("Processed Message: "+ message.toString());
     }
 }
Index: src/java/org/apache/cassandra/service/StorageProxy.java
===================================================================
--- src/java/org/apache/cassandra/service/StorageProxy.java	(revision 831118)
+++ src/java/org/apache/cassandra/service/StorageProxy.java	(working copy)
@@ -215,6 +215,10 @@
         {
             blockFor = (naturalTargets / 2) + 1 + bootstrapTargets;
         }
+        else if (consistency_level == ConsistencyLevel.DCQUORUM || consistency_level == ConsistencyLevel.DCQUORUMSYNC)
+        {
+            blockFor = naturalTargets;
+        }
         else if (consistency_level == ConsistencyLevel.ALL)
         {
             blockFor = naturalTargets + bootstrapTargets;
Index: conf/DC-Config.xml
===================================================================
--- conf/DC-Config.xml	(revision 0)
+++ conf/DC-Config.xml	(revision 0)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<EndPoints>
+	<DataCenter>
+		<name>SJ1</name>
+		<description>Vijay's test</description>
+		<ip2ndQuad>69</ip2ndQuad>
+		<replicationFactor>2</replicationFactor>
+		<rack>
+			<name>rc1</name>
+			<description>My desk</description>
+			<ip3rdQuad>119</ip3rdQuad>
+		</rack>
+		<rack>
+			<name>rc2</name>
+			<description>My desk</description>
+			<ip3rdQuad>49</ip3rdQuad>
+		</rack>
+	</DataCenter>
+	<DataCenter>
+		<name>DV1</name>
+		<description>Vijay's test</description>
+		<ip2ndQuad>120</ip2ndQuad>
+		<replicationFactor>2</replicationFactor>
+		<rack>
+			<name>rc1</name>
+			<description>My desk</description>
+			<ip3rdQuad>39</ip3rdQuad>
+		</rack>
+		<rack>
+			<name>rc2</name>
+			<description>My desk</description>
+			<ip3rdQuad>59</ip3rdQuad>
+		</rack>
+	</DataCenter>
+</EndPoints>
\ No newline at end of file
