diff --git a/cluster/libvirt-coreos/.gitignore b/cluster/libvirt-coreos/.gitignore
index f26d8e4020a..3eb6823b0f2 100644
--- a/cluster/libvirt-coreos/.gitignore
+++ b/cluster/libvirt-coreos/.gitignore
@@ -1,2 +1,3 @@
 /libvirt_storage_pool/
 /coreos_production_qemu_image.img.bz2
+/etcd-v2.0.9-linux-amd64.tar.gz
diff --git a/cluster/libvirt-coreos/coreos.xml b/cluster/libvirt-coreos/coreos.xml
index 041f3a01510..a0490e2eadd 100644
--- a/cluster/libvirt-coreos/coreos.xml
+++ b/cluster/libvirt-coreos/coreos.xml
@@ -35,6 +35,11 @@
       
       
     
+    
+      
+      
+      
+    
     
        
        
diff --git a/cluster/libvirt-coreos/user_data.yml b/cluster/libvirt-coreos/user_data.yml
index ae7a430e972..338df478961 100644
--- a/cluster/libvirt-coreos/user_data.yml
+++ b/cluster/libvirt-coreos/user_data.yml
@@ -17,11 +17,22 @@ coreos:
   etcd:
     name: ${name}
     addr: ${public_ip}:4001
-    bind-addr: 0.0.0.0
+    # bind-addr: 0.0.0.0
     peer-addr: ${public_ip}:7001
     # peers: {etcd_peers}
     discovery: ${discovery}
   units:
+    - name: etcd.service
+      drop-ins:
+        - name: opt-etcd2.conf
+          content: |
+            [Unit]
+            After=opt-etcd.mount
+            Requires=opt-etcd.mount
+
+            [Service]
+            ExecStart=
+            ExecStart=/opt/etcd/bin/etcd
     - name: static.network
       command: start
       content: |
@@ -103,6 +114,17 @@ coreos:
         Where=/opt/kubernetes
         Options=ro,trans=virtio,version=9p2000.L
         Type=9p
+    - name: opt-etcd.mount
+      command: start
+      content: |
+        [Unit]
+        ConditionVirtualization=|vm
+
+        [Mount]
+        What=etcd
+        Where=/opt/etcd
+        Options=ro,trans=virtio,version=9p2000.L
+        Type=9p
   update:
     group: ${COREOS_CHANNEL:-alpha}
     reboot-strategy: off
diff --git a/cluster/libvirt-coreos/util.sh b/cluster/libvirt-coreos/util.sh
index 29ce99751f9..d532232ef0c 100644
--- a/cluster/libvirt-coreos/util.sh
+++ b/cluster/libvirt-coreos/util.sh
@@ -25,6 +25,8 @@ export LIBVIRT_DEFAULT_URI=qemu:///system
 readonly POOL=kubernetes
 readonly POOL_PATH="$(cd $ROOT && pwd)/libvirt_storage_pool"
 
+ETCD_VERSION=${ETCD_VERSION:-v2.0.9}
+
 # join  
 # Concatenates the list elements with the delimiter passed as first parameter
 #
@@ -93,6 +95,9 @@ function destroy-pool {
         virsh vol-delete $vol --pool $POOL
       done
 
+  rm -rf "$POOL_PATH"/etcd/*
+  virsh vol-delete etcd --pool $POOL || true
+
   [[ "$1" == 'keep_base_image' ]] && return
 
   set +e
@@ -140,6 +145,18 @@ function initialize-pool {
       render-template "$ROOT/skydns-rc.yaml"  > "$POOL_PATH/kubernetes/addons/skydns-rc.yaml"
   fi
 
+  mkdir -p "$POOL_PATH/etcd"
+  if [[ ! -f "$ROOT/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" ]]; then
+      wget -P "$ROOT" https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz
+  fi
+  if [[ "$ROOT/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" -nt "$POOL_PATH/etcd/etcd" ]]; then
+      tar -x -C "$POOL_PATH/etcd" -f "$ROOT/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" etcd-${ETCD_VERSION}-linux-amd64
+      rm -rf "$POOL_PATH/etcd/bin/*"
+      mkdir -p "$POOL_PATH/etcd/bin"
+      mv "$POOL_PATH"/etcd/etcd-${ETCD_VERSION}-linux-amd64/{etcd,etcdctl} "$POOL_PATH/etcd/bin"
+      rm -rf "$POOL_PATH/etcd/etcd-${ETCD_VERSION}-linux-amd64"
+  fi
+
   virsh pool-refresh $POOL
 }
 
@@ -187,6 +204,7 @@ function kube-up {
 
   readonly ssh_keys="$(cat ~/.ssh/id_*.pub | sed 's/^/  - /')"
   readonly kubernetes_dir="$POOL_PATH/kubernetes"
+  readonly etcd_dir="$POOL_PATH/etcd"
   readonly discovery=$(curl -s https://discovery.etcd.io/new)
 
   readonly machines=$(join , "${KUBE_MINION_IP_ADDRESSES[@]}")