diff --git a/check_hddtemp b/check_hddtemp
index 6e1438cd4ee689e7c6b22d8fd45c7e844e8ed2a8..34cc338d7e28c75a356412c18cd3b21f512975b7 100755
--- a/check_hddtemp
+++ b/check_hddtemp
@@ -2,7 +2,7 @@
 #
 # Check the hddtemp daemon on a remote host
 #
-# Usage: check_hddtemp host drive warn crit
+# Usage: check_hddtemp host drive warn crit [ hysteresis ]
 #
 # This check script is maintained in a Subversion repository at
 # http://lsvn.lysator.liu.se/svnroot/nagios-plugins.  Contact
@@ -21,7 +21,50 @@ def connect(host):
 	sys.exit(2)
     return s
 
-def check_hddtemp(host, drive, warn, crit):
+
+def fs_quote(s):
+    return s.replace("\\", "\\p").replace("/", "\\s").replace("\0", "\\0")
+
+def hysteresis_file(host, drive):
+    return "/tmp/check_hddtemp-%s-%s" % (
+        fs_quote(host), fs_quote(drive))
+
+def load_hysteresis(host, drive, hysteresis):
+    if not hysteresis:
+        return 1, 1
+    try:
+        fp = open(hysteresis_file(host, drive), "r")
+    except IOError:
+        return 1, 1
+    line = fp.read(2)
+    fp.close()
+    if len(line) < 2:
+        return 1, 1
+    def x(s):
+        if s == "0":
+            return 0
+        else:
+            return 1
+    return x(line[0]), x(line[1])
+
+def save_hysteresis(host, drive, warn_enable, crit_enable):
+    fn = hysteresis_file(host, drive)
+    try:
+        os.remove(fn)
+    except:
+        pass
+    fp = open(hysteresis_file(host, drive), "w")
+    if warn_enable > 0:
+        fp.write("1")
+    else:
+        fp.write("0")
+    if crit_enable > 0:
+        fp.write("1\n")
+    else:
+        fp.write("0\n")
+    fp.close()
+
+def check_hddtemp(host, drive, warn, crit, hysteresis):
     s = connect(host)
     res = ''
     while True:
@@ -30,6 +73,7 @@ def check_hddtemp(host, drive, warn, crit):
 	    break
 	res += tmp
     s.close()
+    warn_enable, crit_enable = load_hysteresis(host, drive, hysteresis)
     for drive_desc in res.split('||'):
 	drive_info = drive_desc.split('|')
         if len(drive_info) >= 5 and drive_info[0] == "":
@@ -43,29 +87,36 @@ def check_hddtemp(host, drive, warn, crit):
         if drv_unit != "C":
             print "UNKNOWN - drive uses F, not C"
             sys.exit(3)
-	if drv_temp >= crit:
+	if drv_temp >= crit + crit_enable * hysteresis:
 	    print "CRITICAL -", drv_temp, "C | temp=%d" % drv_temp
+            save_hysteresis(host, drive, -1, -1)
 	    sys.exit(2)
-        elif drv_temp >= warn:
+        elif drv_temp >= warn + warn_enable * hysteresis:
 	    print "WARNING -", drv_temp, "C | temp=%d" % drv_temp
+            save_hysteresis(host, drive, -1, 1)
 	    sys.exit(1)
         else:
 	    print "OK -", drv_temp, "C | temp=%d" % drv_temp
+            save_hysteresis(host, drive, 1, 1)
 	    sys.exit(0)
     print "UNKNOWN -", drive, "not found"
     sys.exit(3)
 
 def usage(): 
-    sys.stderr.write("usage: check_hddtemp host drive warn crit\n")
+    sys.stderr.write("usage: check_hddtemp host drive warn crit [ hysteresis ]\n")
     sys.exit(64)
 
 if __name__ == '__main__':
-    if len(sys.argv) == 5:
+    if len(sys.argv) in [5, 6]:
 	host = sys.argv[1]
 	drive = sys.argv[2]
 	warn = int(sys.argv[3])
 	crit = int(sys.argv[4])
+        if len(sys.argv) == 6:
+            hysteresis = int(sys.argv[5])
+        else:
+            hysteresis = 0
     else:
         usage()
 
-    check_hddtemp(host, drive, warn, crit)
+    check_hddtemp(host, drive, warn, crit, hysteresis)