diff --git a/README.md b/README.md
index c8cf38d..e061436 100644
--- a/README.md
+++ b/README.md
@@ -90,13 +90,15 @@ You'd do well to replace `~/.emacs.d` with the value of
 
 ## Updating Prelude
 
+### Manual update
+
 The update procedure is fairly straightforward and consists of 3 steps:
 
-### Update all bundled packages
+#### Update all bundled packages
 
-Just run <kbd>M-x package-list-packages RET U x</kbd>. Unfortunately this step cannot be automated.
+Just run <kbd>M-x package-list-packages RET U x</kbd>.
 
-### Update Prelude's code
+#### Update Prelude's code
 
 ```bash
 cd path/to/prelude/installation
@@ -106,14 +108,16 @@ git pull
 The `path/to/prelude/installation` is usually `~/.emacs.d` (at least
 on Unix systems).
 
-Alternatively you can run <kbd>M-x prelude-update</kbd> from Emacs itself.
-
-### Restart Prelude
+#### Restart Prelude
 
 It's generally a good idea to stop Emacs after you do the update. The
 next time Prelude starts it will install any new dependencies (if
 there are such).
 
+### Automatic update
+
+Simply run <kbd>M-x prelude-update</kbd> from Emacs itself and restart Emacs afterwards.
+
 ## Enabling additional modules
 
 By default most of the modules that ship with Prelude are not loaded. For more information on the functionality provided by these modules visit the [docs](modules/doc/README.md).
@@ -428,16 +432,17 @@ If you're not fond of spellchecking on the fly:
 
 ### Updating bundled packages
 
-Currently there is no Emacs Lisp API for updating packages, so you'll
-have to update manually the packages that came with Prelude from time
-to time.
+Generally it's a good idea to do a package update before running
+updating Prelude, since the latest Prelude code might depend on newer
+versions of the bundled packages than you would currently have
+installed.
+
+If you're doing manual Prelude updates you should always do a package update first.
 
 `M-x package-list-packages RET U x`
 
-Generally it's a good idea to do a package update before running
-`prelude-update`, since the latest Prelude code might depend on newer
-versions of the bundled packages than you would currently have
-installed.
+That's not necessary if you're using `M-x prelude-update`, since it
+will automatically update the installed packages.
 
 ### Problems with flyspell-mode
 
diff --git a/core/prelude-core.el b/core/prelude-core.el
index cce55f2..e58cded 100644
--- a/core/prelude-core.el
+++ b/core/prelude-core.el
@@ -450,10 +450,14 @@ Doesn't mess with special buffers."
   (exchange-point-and-mark)
   (deactivate-mark nil))
 
+(require 'epl)
+
 (defun prelude-update ()
   "Update Prelude to its latest version."
   (interactive)
   (when (y-or-n-p "Do you want to update Prelude? ")
+    (message "Updating installed packages...")
+    (epl-upgrade)
     (message "Updating Prelude...")
     (cd prelude-dir)
     (shell-command "git pull")
diff --git a/core/prelude-packages.el b/core/prelude-packages.el
index be853dd..82499a4 100644
--- a/core/prelude-packages.el
+++ b/core/prelude-packages.el
@@ -42,7 +42,7 @@
 
 (defvar prelude-packages
   '(ace-jump-mode ack-and-a-half anzu dash diminish elisp-slime-nav
-    expand-region flx-ido flycheck gist
+    epl expand-region flx-ido flycheck gist
     git-commit-mode gitconfig-mode gitignore-mode grizzl
     guru-mode helm helm-projectile ido-ubiquitous
     key-chord magit move-text rainbow-mode