diff --git a/README.txt b/README.txt
index 5e495fb..c43b157 100644
--- a/README.txt
+++ b/README.txt
@@ -64,7 +64,7 @@ If you have more than one memcached instance running, you need to add two arrays
 to $conf; memcache_servers and memcache_bins. The arrays follow this pattern:
 
 'memcache_servers' => array(
-  server1:port => cluster1,
+  server1:port => array('cluster' => cluster1, 'weight' => 10),
   server2:port => cluster2,
   serverN:port => clusterN,
   'unix:///path/to/socket' => clusterS
@@ -79,7 +79,8 @@ to $conf; memcache_servers and memcache_bins. The arrays follow this pattern:
 
 The bin/cluster/server model can be described as follows:
 
-- Servers are memcached instances identified by host:port.
+- Servers are memcached instances identified by host:port. Each server can be
+  given an optional weight to specify their likelihood of use.
 
 - Clusters are groups of servers that act as a memory pool. Each cluster can
   contain one or more servers.
diff --git a/dmemcache.inc b/dmemcache.inc
index 40e9db6..c4230d4 100644
--- a/dmemcache.inc
+++ b/dmemcache.inc
@@ -362,6 +362,12 @@ function dmemcache_object($bin = NULL, $flush = FALSE) {
 
       // Link all the servers to this cluster.
       foreach ($memcache_servers as $s => $c) {
+        $conf = is_array($c) ? $c : array('cluster' => $c);
+        $conf += array(
+          'cluster' => 'default',
+          'weight' => 1,
+        );
+        $c = $conf['cluster'];
         if ($c == $cluster && !isset($failed_connection_cache[$s])) {
           list($host, $port) = explode(':', $s);
 
@@ -394,7 +400,7 @@ function dmemcache_object($bin = NULL, $flush = FALSE) {
               ini_set('track_errors', $track_errors);
             }
             else {
-              $memcache->addServer($host, $port, $memcache_persistent);
+              $memcache->addServer($host, $port, $memcache_persistent, $conf['weight']);
             }
           }
           else {
@@ -405,7 +411,7 @@ function dmemcache_object($bin = NULL, $flush = FALSE) {
               // Port is always 0 for unix sockets.
               $port = 0;
             }
-            if ($memcache->addServer($host, $port) && !$init) {
+            if ($memcache->addServer($host, $port, $conf['weight']) && !$init) {
               $init = TRUE;
             }
           }
