     (when feedtitle
       (insert "(" (propertize feedtitle 'face 'elfeed-search-feed-face) ")"))))
 
-(defun elfeed-search-update ()
+(defun elfeed-search-update (&optional force)
   "Update the display to match the database."
   (interactive)
   (with-current-buffer (elfeed-buffer)
-    (let ((inhibit-read-only t)
-          (standard-output (current-buffer))
-          (line (line-number-at-pos)))
-      (erase-buffer)
-      (loop for entry in (setf elfeed-search-entries (elfeed-db-entries))
-            do (elfeed-search-print entry)
-            do (insert "\n"))
-      (insert "End of entries.\n")
-      (goto-line line))))
+    (when (or force (< elfeed-search-last-update (elfeed-db-last-update)))
+      (let ((inhibit-read-only t)
+            (standard-output (current-buffer))
+            (line (line-number-at-pos)))
+        (erase-buffer)
+        (loop for entry in (setf elfeed-search-entries (elfeed-db-entries))
+              do (elfeed-search-print entry)
+              do (insert "\n"))
+        (insert "End of entries.\n")
+        (goto-line line))
+      (setf elfeed-search-last-update (float-time)))))
 
 (defun elfeed-search-update-line (&optional n)
   "Redraw the current line."

         (title (elfeed-entry-title entry))
         (title-faces '(elfeed-search-title-face))
         (feed (elfeed-entry-feed entry))
         (feedtitle (elfeed-feed-title feed)))
    (when (elfeed-tagged-p 'unread entry)
      (push 'bold title-faces))
    (insert (propertize date 'face 'elfeed-search-date-face) " ")

(defvar elfeed-search-entries ()
  "List of the entries currently on display.")

(defvar elfeed-search-last-update 0
  "The last time the buffer was redrawn.")

(defvar elfeed-search-refresh-timer nil
  "The timer used to keep things updated as the database updates.")

(defcustom elfeed-search-refresh-rate 5
  "How often the buffer should update against the datebase in seconds.")

(defun elfeed-expose (function &rest args)
  "Return an interactive version of FUNCTION, 'exposing' it to the user."
  (lambda () (interactive) (apply function args)))
