diff -ur zabbix-1.8.5.orig/src/libs/zbxsysinfo/linux/sensors.c zabbix-1.8.5/src/libs/zbxsysinfo/linux/sensors.c
--- zabbix-1.8.5.orig/src/libs/zbxsysinfo/linux/sensors.c	2011-04-15 13:17:29.000000000 -0600
+++ zabbix-1.8.5/src/libs/zbxsysinfo/linux/sensors.c	2011-06-16 06:23:29.467388655 -0600
@@ -20,14 +20,20 @@
 #include "common.h"
 #include "sysinfo.h"
 
-#ifdef KERNEL_2_4
+#if defined(KERNEL_2_4) || defined(KERNEL_2_6)
 
 #define DO_ONE	0
 #define DO_AVG	1
 #define DO_MAX	2
 #define DO_MIN	3
 
+#if defined(KERNEL_2_4)
 #define DEVICE_DIR	"/proc/sys/dev/sensors"
+#endif
+
+#if defined(KERNEL_2_6)
+#define DEVICE_DIR	"/sys/class/hwmon/"
+#endif
 
 static void	count_sensor(int do_task, const char *filename, double *aggr, int *cnt)
 {
@@ -46,9 +52,17 @@
 
 	zbx_fclose(f);
 
+#if defined(KERNEL_2_6)
+	if (1 == sscanf(line, "%lf", &value))
+#else
 	if (1 == sscanf(line, "%*lf\t%*lf\t%lf\n", &value))
+#endif
 	{
 		(*cnt)++;
+#if defined(KERNEL_2_6)
+		if(NULL == strstr(filename, "fan"))
+			value = value / 1000;
+#endif
 
 		switch (do_task)
 		{
@@ -74,7 +88,11 @@
 
 	if (DO_ONE == do_task)
 	{
+#if defined(KERNEL_2_6)
+		zbx_snprintf(sensorname, sizeof(sensorname), "%s/%s/%s_input", DEVICE_DIR, device, name);
+#else
 		zbx_snprintf(sensorname, sizeof(sensorname), "%s/%s/%s", DEVICE_DIR, device, name);
+#endif
 		count_sensor(do_task, sensorname, aggr, cnt);
 	}
 	else
@@ -107,6 +125,11 @@
 				if (NULL == zbx_regexp_match(sensorent->d_name, name, NULL))
 					continue;
 
+#if defined(KERNEL_2_6)
+				if (0 != strcmp(sensorent->d_name + strlen(sensorent->d_name) - 6, "_input"))
+					continue;
+#endif
+
 				zbx_snprintf(sensorname, sizeof(sensorname), "%s/%s", devicename, sensorent->d_name);
 				count_sensor(do_task, sensorname, aggr, cnt);
 			}
