diff --git a/.gitignore b/.gitignore
index 2ebb1e9b34247c445520a8e53260f4e04601a92d..1f9359992fad786029c3cc7877c7031c99da0323 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 .vagrant
 *.retry
 inventory/vagrant_ansible_inventory
+temp
diff --git a/Vagrantfile b/Vagrantfile
index 288ad5be006a99816605ecb08fb5942ce0265827..ac8b918278cbb49758a4b4cc2f6d01d7de44e157 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -11,11 +11,12 @@ CONFIG = File.join(File.dirname(__FILE__), "vagrant/config.rb")
 $num_instances = 3
 $instance_name_prefix = "k8s"
 $vm_gui = false
-$vm_memory = 1024
+$vm_memory = 1536
 $vm_cpus = 1
 $shared_folders = {}
 $forwarded_ports = {}
 $subnet = "172.17.8"
+$box = "bento/ubuntu-14.04"
 
 host_vars = {}
 
@@ -40,22 +41,7 @@ end
 Vagrant.configure("2") do |config|
   # always use Vagrants insecure key
   config.ssh.insert_key = false
-
-  config.vm.box = "ubuntu-14.04"
-  config.vm.box_url = "https://storage.googleapis.com/%s.release.core-os.net/amd64-usr/%s/coreos_production_vagrant.json" % [$update_channel, $image_version]
-
-  ["vmware_fusion", "vmware_workstation"].each do |vmware|
-    config.vm.provider vmware do |v, override|
-      override.vm.box_url = "https://storage.googleapis.com/%s.release.core-os.net/amd64-usr/%s/coreos_production_vagrant_vmware_fusion.json" % [$update_channel, $image_version]
-    end
-  end
-
-  config.vm.provider :virtualbox do |v|
-    # On VirtualBox, we don't have guest additions or a functional vboxsf
-    # in CoreOS, so tell Vagrant that so it can be smarter.
-    v.check_guest_additions = false
-    v.functional_vboxsf     = false
-  end
+  config.vm.box = $box
 
   # plugin conflict
   if Vagrant.has_plugin?("vagrant-vbguest") then
@@ -92,7 +78,9 @@ Vagrant.configure("2") do |config|
         "ip" => ip,
         "access_ip" => ip,
         "flannel_interface" => ip,
-        "flannel_backend_type" => "host-gw"
+        "flannel_backend_type" => "host-gw",
+        "local_release_dir" => "/vagrant/temp",
+        "download_run_once" => "True"
       }
       config.vm.network :private_network, ip: ip
 
@@ -109,6 +97,7 @@ Vagrant.configure("2") do |config|
           ansible.host_key_checking = false
           ansible.raw_arguments = ["--forks=#{$num_instances}"]
           ansible.host_vars = host_vars
+          #ansible.tags = ['download']
           ansible.groups = {
             # The first three nodes should be etcd servers
             "etcd" => ["k8s-0[1:3]"],
diff --git a/roles/download/defaults/main.yml b/roles/download/defaults/main.yml
index 30952f691190fefaa417d8954410bc9b71fff0af..72ae6e2e345e6337f1d1a7eb739ec9906ed24dcc 100644
--- a/roles/download/defaults/main.yml
+++ b/roles/download/defaults/main.yml
@@ -1,6 +1,9 @@
 ---
 local_release_dir: /tmp
 
+# if this is set to true will only download files once
+download_run_once: False
+
 # Versions
 kube_version: "v1.2.4"
 etcd_version: v2.2.5
diff --git a/roles/download/tasks/main.yml b/roles/download/tasks/main.yml
index 746be939ec7a40ccc8abfb264c5576676c3d8946..df9b652b1498921d991a18651f05358e767ee3d9 100644
--- a/roles/download/tasks/main.yml
+++ b/roles/download/tasks/main.yml
@@ -2,6 +2,7 @@
 - name: Create dest directories
   file: path={{local_release_dir}}/{{item.dest|dirname}} state=directory recurse=yes
   with_items: "{{ downloads }}"
+  run_once: "{{ download_run_once|bool }}"
 
 - name: Download items
   get_url:
@@ -11,6 +12,7 @@
     owner: "{{ item.owner|default(omit) }}"
     mode: "{{ item.mode|default(omit) }}"
   with_items: "{{ downloads }}"
+  run_once: "{{ download_run_once|bool }}"
 
 - name: Extract archives
   unarchive:
@@ -21,6 +23,7 @@
     copy: no
   when: "{{item.unarchive is defined and item.unarchive == True}}"
   with_items: "{{ downloads }}"
+  run_once: "{{ download_run_once|bool }}"
 
 - name: Fix permissions
   file:
@@ -30,3 +33,4 @@
     mode: "{{ item.mode|default(omit) }}"
   when: "{{item.unarchive is not defined or item.unarchive == False}}"
   with_items: "{{ downloads }}"
+  run_once: "{{ download_run_once|bool }}"