diff --git a/.bashrc b/.bashrc
index f16fae6bb56659062785a272356e8ae07f0bf9d5..e68114d962864f32fa9ba13687d74d6efcd4bd42 100644
--- a/.bashrc
+++ b/.bashrc
@@ -66,18 +66,4 @@ gen-csr () {
     openssl req -new -newkey rsa:4096 -nodes -out $1.csr -keyout $1.key
 }
 
-docker () {
-    local docker_exec="$(which docker)"
-    case "$1" in
-        clean)
-            $docker_exec rm $(docker ps --quiet --filter=status=exited)
-            $docker_exec rm $(docker ps --quiet --filter=status=created)
-            $docker_exec rmi $(docker images --quiet --filter=dangling=true)
-            ;;
-        *)
-            $docker_exec $@
-            ;;
-    esac
-}
-
 . $HOME/Documents/Shore/bundle_certs/bundle_certs
diff --git a/Documents/Shore/cleanup/docker-clean b/Documents/Shore/cleanup/docker-clean
new file mode 100755
index 0000000000000000000000000000000000000000..5e209f1c1b1fdef52917ed5b6b6b753e85499229
--- /dev/null
+++ b/Documents/Shore/cleanup/docker-clean
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+docker rm $(docker ps --quiet --filter=status=exited)
+docker rm $(docker ps --quiet --filter=status=created)
+docker rmi $(docker images --quiet --filter=dangling=true)
diff --git a/Documents/Shore/cleanup/docker-update b/Documents/Shore/cleanup/docker-update
new file mode 100755
index 0000000000000000000000000000000000000000..935af389b66ec4ff6cb384d3083ff568f92b9da8
--- /dev/null
+++ b/Documents/Shore/cleanup/docker-update
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+
+from sh import docker
+from parse import parse
+
+for line in docker.images():
+    image = parse("{REPOSITORY:^} {TAG:^} {ID:^} {CREATED:^} {SIZE:^}",
+                  line).named
+    if image.TAG == "latest":
+        docker.pull(image.REPOSITORY)
diff --git a/Documents/Shore/cleanup/vagrant-clean b/Documents/Shore/cleanup/vagrant-clean
new file mode 100755
index 0000000000000000000000000000000000000000..71411a08153e9a5b9e143386eadd6c1c404c5a86
--- /dev/null
+++ b/Documents/Shore/cleanup/vagrant-clean
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+
+from sh import vagrant
+from parse import parse
+
+boxes = {}
+for line in vagrant.box("list"):
+    box = parse("{name:^} ({provider}, {version}", line)
+    if box.name not in boxes:
+        boxes[box.name] = {box.provider: [box.version]}
+    elif box.provider not in boxes[box.name]:
+        boxes[box.name][box.provider] = [box.version]
+    else:
+        boxes[box.name][box.provider].append(box.version)
+
+for box in boxes.keys():
+    for provider in boxes[box].keys():
+        for version in boxes[box][provider][:-1]:  # Save the latest version.
+            vagrant.box('remove', '--provider', provider, '--box-version',
+                        version)
diff --git a/Documents/Shore/cleanup/vagrant-update b/Documents/Shore/cleanup/vagrant-update
new file mode 100755
index 0000000000000000000000000000000000000000..18564859acd253898f9cb818b2fe72c1b91b1893
--- /dev/null
+++ b/Documents/Shore/cleanup/vagrant-update
@@ -0,0 +1,5 @@
+#!/bin/sh -e
+for box in $(vagrant box list | awk '{print $1}')
+do
+    vagrant box add $box --provider virtualbox
+done