diff --git a/Makefile b/Makefile
index 907b80df649356ab8705aeca98dd3304b8aec70d..bd8b90055e30c29936f4d47e227660f46a59bced 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 DESTDIR = /usr/local/nagios/libexec/
 SCRIPTS = check_cups check_glsa check_saned check_lpd check_hddtemp \
-	check_link_status check_true
+	check_link_status check_true check_lysrdiff
 
 all:;
 
diff --git a/check_lysrdiff b/check_lysrdiff
new file mode 100755
index 0000000000000000000000000000000000000000..d2eeaaf4c8360db021f37a18920581eb317724b0
--- /dev/null
+++ b/check_lysrdiff
@@ -0,0 +1,116 @@
+#!/bin/sh
+#
+# This check script is maintained in a Subversion repository at
+# http://lsvn.lysator.liu.se/svnroot/nagios-plugins.  Contact
+# <ceder@lysator.liu.se> for commit access.
+
+activity=16
+stale=36
+
+usage () {
+  echo $0: usage: $0 '[ opt ] partno' >&2
+  echo options: >&2
+  echo '  --activty N  Warn if no backup completed in the last N hours.' >&2
+  echo '  --stale N    Critical if oldest backup is more than N hours old.' >&2
+  exit 3
+}
+
+while [ $# -gt 1 ]
+do
+  case "x$1" in
+    x--activity)
+      activity=$2
+      shift	
+      shift;;
+    x--stale)
+      stale=$2
+      shift
+      shift;;
+    x--*)
+      usage
+      exit 1;;
+    x*) break;;
+  esac
+done  
+
+if [ $# != 1 ]
+then
+  usage
+fi
+
+partno=$1
+BASE=/lysrdiff/$partno/perm
+
+if [ ! -f $BASE/lysrdiff.id ]
+then
+    echo CRITICAL - $BASE: no such file
+    exit 2
+fi
+
+if [ "`cat $BASE/lysrdiff.id`" != "$partno perm" ]
+then
+    echo CRITICAL - found `cat $BASE/lysrdiff.id` instead of $lysrdiff >&2
+    exit 2
+fi
+
+acttime=`date '+%Y-%m-%d %H:%M:%S' -d "$activity hours ago"`
+staletime=`date '+%Y-%m-%d %H:%M:%S' -d "$stale hours ago"`
+
+statecache=/tmp/lysrdiff-nagios-state
+state=$statecache-$partno
+
+find $BASE/lysrdiff/state -type f \
+	-printf "%TY-%Tm-%Td %TH:%TM:%TS %P\n" \
+      | sort > $statecache.$partno.$$
+  mv -f $statecache.$partno.$$ $state
+
+echo $staletime MARKER \
+| sort $state - \
+| grep -- '-start$\|MARKER' \
+| sed -e '/MARKER$/,$d' \
+> $state-stale
+
+echo $acttime MARKER \
+| sort $state - \
+| grep -- '-end$\|MARKER' \
+| sed -e '1,/MARKER$/d' \
+> $state-active
+
+STALE=`wc -l < $state-stale`
+
+ACTIVITY=`wc -l < $state-active`
+
+if grep -q -- '-fail$' $state
+then
+  echo -n "CRITICAL - Failed backups: "
+  sed -n 's/-fail$//p' $state \
+    |awk 'BEGIN { sz = 0 }
+	  NR > 1 && sz < 198 { printf ", "; sz += 2 }
+	  sz < 200 { printf "%s", $3; sz += length($3) }
+	  END { if (sz >= 200) printf ", others" } ' \
+    |sed s'/, \([^,]*\)$/ and \1/'
+  echo '. | activity='$ACTIVITY stale=$STALE failed=`grep -c -- '-fail$' $state`
+  exit 2
+fi
+
+if [ $STALE -gt 0 ]
+then
+  echo -n "CRITICAL - Stale backups: "
+  sed 's/-start$//' $state-stale \
+    |awk 'BEGIN { sz = 0 }
+	  NR > 1 && sz < 198 { printf ", "; sz += 2 }
+	  sz < 200 { printf "%s", $3; sz += length($3) }
+	  END { if (sz >= 200) printf ", others" } ' \
+    |sed s'/, \([^,]*\)$/ and \1/'
+  echo '. | activity='$ACTIVITY stale=$STALE failed=0
+  exit 2
+fi
+
+if [ $ACTIVITY = 0 ]
+then
+  echo -n 'WARNING - No activity. | activity='0 stale=$STALE failed=0
+  exit 1
+fi
+
+echo 'OK - all ok. | activity='$ACTIVITY stale=0 failed=0
+exit 0