diff --git a/grapher.sh b/grapher.sh
index 6eb65d0e967d092b710025298d8e8beb8da39e67..cc24c8fe9ff6f55d8a10af4bb86a7f4980ccf649 100755
--- a/grapher.sh
+++ b/grapher.sh
@@ -6,141 +6,44 @@ cd `dirname $0`
 # Load settings
 . ./settings.sh
 
-rrdtool graph $GRAPHDIR/hour.png \
-    --start end-1h \
-    --step 60 \
-    --title "Mail statistics for `hostname -f` - Last hour" \
-    --vertical-label "mails/minute" \
-    -h 200 -w 800 --slope-mode \
-    DEF:log_lines=$RRDFILE:log_lines:AVERAGE \
-    DEF:mail_sent=$RRDFILE:mail_sent:AVERAGE \
-    DEF:mail_deferred=$RRDFILE:mail_deferred:AVERAGE \
-    DEF:mail_bounced_total=$RRDFILE:mail_bounced_total:AVERAGE \
-    DEF:mail_bounced_spam=$RRDFILE:mail_bounced_spam:AVERAGE \
-    DEF:mail_bounced_reputation=$RRDFILE:mail_bounced_reputation:AVERAGE \
-    AREA:mail_deferred#77777733 \
-    LINE:mail_deferred#777777:'deferred' \
-    AREA:mail_sent#00DD0055 \
-    LINE:mail_sent#00DD00:'sent' \
-    AREA:mail_bounced_total#0000FF77 \
-    LINE:mail_bounced_total#0000FF:'bounced total' \
-    AREA:mail_bounced_spam#FF0000AA \
-    LINE:mail_bounced_spam#FF0000:'bounced due to SPAM' \
-    AREA:mail_bounced_reputation#FF00FFFF \
-    LINE:mail_bounced_reputation#FF00FFFF:'reputation event'
-
-rrdtool graph $GRAPHDIR/6hour.png \
-    --start end-6h \
-    --step 60 \
-    --title "Mail statistics for `hostname -f` - Last 6 hours" \
-    --vertical-label "mails/minute" \
-    -h 200 -w 800 --slope-mode \
-    DEF:log_lines=$RRDFILE:log_lines:AVERAGE \
-    DEF:mail_sent=$RRDFILE:mail_sent:AVERAGE \
-    DEF:mail_deferred=$RRDFILE:mail_deferred:AVERAGE \
-    DEF:mail_bounced_total=$RRDFILE:mail_bounced_total:AVERAGE \
-    DEF:mail_bounced_spam=$RRDFILE:mail_bounced_spam:AVERAGE \
-    DEF:mail_bounced_reputation=$RRDFILE:mail_bounced_reputation:AVERAGE \
-    AREA:mail_deferred#77777733 \
-    LINE:mail_deferred#777777:'deferred' \
-    AREA:mail_sent#00DD0055 \
-    LINE:mail_sent#00DD00:'sent' \
-    AREA:mail_bounced_total#0000FF77 \
-    LINE:mail_bounced_total#0000FF:'bounced total' \
-    AREA:mail_bounced_spam#FF0000AA \
-    LINE:mail_bounced_spam#FF0000:'bounced due to SPAM' \
-    AREA:mail_bounced_reputation#FF00FFFF \
-    LINE:mail_bounced_reputation#FF00FFFF:'reputation event'
-
-rrdtool graph $GRAPHDIR/day.png \
-    --start end-24h \
-    --step 60 \
-    --title "Mail statistics for `hostname -f` - Last day" \
-    --vertical-label "mails/minute" \
-    -h 200 -w 800 --slope-mode \
-    DEF:log_lines=$RRDFILE:log_lines:AVERAGE \
-    DEF:mail_sent=$RRDFILE:mail_sent:AVERAGE \
-    DEF:mail_deferred=$RRDFILE:mail_deferred:AVERAGE \
-    DEF:mail_bounced_total=$RRDFILE:mail_bounced_total:AVERAGE \
-    DEF:mail_bounced_spam=$RRDFILE:mail_bounced_spam:AVERAGE \
-    DEF:mail_bounced_reputation=$RRDFILE:mail_bounced_reputation:AVERAGE \
-    AREA:mail_deferred#77777733 \
-    LINE:mail_deferred#777777:'deferred' \
-    AREA:mail_sent#00DD0055 \
-    LINE:mail_sent#00DD00:'sent' \
-    AREA:mail_bounced_total#0000FF77 \
-    LINE:mail_bounced_total#0000FF:'bounced total' \
-    AREA:mail_bounced_spam#FF0000AA \
-    LINE:mail_bounced_spam#FF0000:'bounced due to SPAM' \
-    AREA:mail_bounced_reputation#FF00FFFF \
-    LINE:mail_bounced_reputation#FF00FFFF:'reputation event'
-
-rrdtool graph $GRAPHDIR/week.png \
-    --start end-7d \
-    --step 60 \
-    --title "Mail statistics for `hostname -f` - Last week" \
-    --vertical-label "mails/minute" \
-    -h 200 -w 800 --slope-mode \
-    DEF:log_lines=$RRDFILE:log_lines:AVERAGE \
-    DEF:mail_sent=$RRDFILE:mail_sent:AVERAGE \
-    DEF:mail_deferred=$RRDFILE:mail_deferred:AVERAGE \
-    DEF:mail_bounced_total=$RRDFILE:mail_bounced_total:AVERAGE \
-    DEF:mail_bounced_spam=$RRDFILE:mail_bounced_spam:AVERAGE \
-    DEF:mail_bounced_reputation=$RRDFILE:mail_bounced_reputation:AVERAGE \
-    AREA:mail_deferred#77777733 \
-    LINE:mail_deferred#777777:'deferred' \
-    AREA:mail_sent#00DD0055 \
-    LINE:mail_sent#00DD00:'sent' \
-    AREA:mail_bounced_total#0000FF77 \
-    LINE:mail_bounced_total#0000FF:'bounced total' \
-    AREA:mail_bounced_spam#FF0000AA \
-    LINE:mail_bounced_spam#FF0000:'bounced due to SPAM' \
-    AREA:mail_bounced_reputation#FF00FFFF \
-    LINE:mail_bounced_reputation#FF00FFFF:'reputation event'
-
-rrdtool graph $GRAPHDIR/month.png \
-    --start end-1m \
-    --step 60 \
-    --title "Mail statistics for `hostname -f` - Last month" \
-    --vertical-label "mails/minute" \
-    -h 200 -w 800 --slope-mode \
-    DEF:log_lines=$RRDFILE:log_lines:AVERAGE \
-    DEF:mail_sent=$RRDFILE:mail_sent:AVERAGE \
-    DEF:mail_deferred=$RRDFILE:mail_deferred:AVERAGE \
-    DEF:mail_bounced_total=$RRDFILE:mail_bounced_total:AVERAGE \
-    DEF:mail_bounced_spam=$RRDFILE:mail_bounced_spam:AVERAGE \
-    DEF:mail_bounced_reputation=$RRDFILE:mail_bounced_reputation:AVERAGE \
-    AREA:mail_deferred#77777733 \
-    LINE:mail_deferred#777777:'deferred' \
-    AREA:mail_sent#00DD0055 \
-    LINE:mail_sent#00DD00:'sent' \
-    AREA:mail_bounced_total#0000FF77 \
-    LINE:mail_bounced_total#0000FF:'bounced total' \
-    AREA:mail_bounced_spam#FF0000AA \
-    LINE:mail_bounced_spam#FF0000:'bounced due to SPAM' \
-    AREA:mail_bounced_reputation#FF00FFFF \
-    LINE:mail_bounced_reputation#FF00FFFF:'reputation event'
-
-rrdtool graph $GRAPHDIR/year.png \
-    --start end-1y \
-    --step 60 \
-    --title "Mail statistics for `hostname -f` - Last year" \
-    --vertical-label "mails/minute" \
-    -h 200 -w 800 --slope-mode \
-    DEF:log_lines=$RRDFILE:log_lines:AVERAGE \
-    DEF:mail_sent=$RRDFILE:mail_sent:AVERAGE \
-    DEF:mail_deferred=$RRDFILE:mail_deferred:AVERAGE \
-    DEF:mail_bounced_total=$RRDFILE:mail_bounced_total:AVERAGE \
-    DEF:mail_bounced_spam=$RRDFILE:mail_bounced_spam:AVERAGE \
-    DEF:mail_bounced_reputation=$RRDFILE:mail_bounced_reputation:AVERAGE \
-    AREA:mail_deferred#77777733 \
-    LINE:mail_deferred#777777:'deferred' \
-    AREA:mail_sent#00DD0055 \
-    LINE:mail_sent#00DD00:'sent' \
-    AREA:mail_bounced_total#0000FF77 \
-    LINE:mail_bounced_total#0000FF:'bounced total' \
-    AREA:mail_bounced_spam#FF0000AA \
-    LINE:mail_bounced_spam#FF0000:'bounced due to SPAM' \
-    AREA:mail_bounced_reputation#FF00FFFF \
-    LINE:mail_bounced_reputation#FF00FFFF:'reputation event'
-
+period_filenames=("hour.png" "6hours.png" "day.png" "week.png" "month.png" "6months.png" "year.png")
+period_startparams=("end-1h" "end-6h" "end-24h" "end-7d" "end-1m" "end-6m" "end-1y")
+period_texts=("Last hour" "Last 6 hours" "Last day" "Last week" "Last month" "Last 6 months" "Last year")
+
+for index in ${!period_filenames[*]}; do
+    filename=${period_filenames[$index]}
+    startparam=${period_startparams[$index]}
+    text=${period_texts[$index]}
+
+    # Draw the graphs
+
+    # Outbound mail
+    rrdtool graph $GRAPHDIR/$filename \
+        --start $startparam \
+        --step 60 \
+        --title "Mail statistics for `hostname -f` - $text" \
+        --vertical-label "mails/minute" \
+        -h 200 -w 800 --slope-mode \
+        DEF:mo_sent=$RRDFILE:mo_sent:AVERAGE \
+        DEF:mo_deferred=$RRDFILE:mo_deferred:AVERAGE \
+        DEF:mo_bounced_total=$RRDFILE:mo_bounced_total:AVERAGE \
+        DEF:mo_bounced_spam=$RRDFILE:mo_bounced_spam:AVERAGE \
+        DEF:mo_bounced_reputation=$RRDFILE:mo_bounced_reputation:AVERAGE \
+        DEF:mo_deliverable=$RRDFILE:mo_deliverable:AVERAGE \
+        DEF:mo_undeliverable=$RRDFILE:mo_undeliverable:AVERAGE \
+        AREA:mo_deferred#77777733 \
+        LINE:mo_deferred#777777:'deferred' \
+        AREA:mo_sent#00DD0055 \
+        LINE:mo_sent#00DD00:'sent' \
+        AREA:mo_deliverable#00AA0077 \
+        LINE:mo_deliverable#00AA00:'deliverable' \
+        AREA:mo_undeliverable#AA880077 \
+        LINE:mo_undeliverable#AA8800:'undeliverable' \
+        AREA:mo_bounced_total#0000FF77 \
+        LINE:mo_bounced_total#0000FF:'bounced total' \
+        AREA:mo_bounced_spam#FF0000AA \
+        LINE:mo_bounced_spam#FF0000:'bounced due to SPAM' \
+        AREA:mo_bounced_reputation#FF00FFFF \
+        LINE:mo_bounced_reputation#FF00FFFF:'reputation event'
+
+done