diff -urN lcdproc-0.4.5/acinclude.m4 lcdproc-my/acinclude.m4
--- lcdproc-0.4.5/acinclude.m4	2004-03-14 17:50:22.000000000 +0200
+++ lcdproc-my/acinclude.m4	2005-12-31 18:10:41.000000000 +0200
@@ -128,9 +128,9 @@
 			;;
 		hd44780)
 			if test "$ac_cv_port_have_lpt" = yes ; then
-				DRIVERS="$DRIVERS hd44780.o hd44780-4bit.o hd44780-ext8bit.o lcd_sem.o hd44780-serialLpt.o hd44780-winamp.o hd44780-picanlcd.o hd44780-usblcd.o hd44780-anslcd.o"
+				DRIVERS="$DRIVERS hd44780.o hd44780-4bit.o hd44780-ext8bit.o lcd_sem.o hd44780-serialLpt.o hd44780-winamp.o hd44780-picanlcd.o hd44780-usblcd.o hd44780-anslcd.o hd44780-i2clcd.o"
 			else
-				DRIVERS="$DRIVERS hd44780.o hd44780-picanlcd.o hd44780-usblcd.o hd44780-anslcd.o"
+				DRIVERS="$DRIVERS hd44780.o hd44780-picanlcd.o hd44780-usblcd.o hd44780-anslcd.o hd44780-i2clcd.o"
 			fi
 			AC_DEFINE(HD44780_DRV)
 			actdrivers=["$actdrivers hd44780"]
diff -urN lcdproc-0.4.5/server/drivers/Makefile.am lcdproc-my/server/drivers/Makefile.am
--- lcdproc-0.4.5/server/drivers/Makefile.am	2004-03-14 17:50:25.000000000 +0200
+++ lcdproc-my/server/drivers/Makefile.am	2005-12-31 18:36:51.000000000 +0200
@@ -11,6 +11,7 @@
 	hd44780-picanlcd.c hd44780-picanlcd.h \
 	hd44780-usblcd.c hd44780-usblcd.h \
 	hd44780-anslcd.c hd44780-anslcd.h \
+	hd44780-i2clcd.c hd44780-i2clcd.h \
 	hd44780-low.h hd44780-drivers.h hd44780-charmap.h \
 	sed1330.c sed1330.h \
 	sed1520.c sed1520.h sed1520fm.c \
diff -urN lcdproc-0.4.5/server/drivers/hd44780-drivers.h lcdproc-my/server/drivers/hd44780-drivers.h
--- lcdproc-0.4.5/server/drivers/hd44780-drivers.h	2003-01-04 18:22:53.000000000 +0200
+++ lcdproc-my/server/drivers/hd44780-drivers.h	2005-12-31 18:36:13.000000000 +0200
@@ -20,9 +20,11 @@
 #include "hd44780-picanlcd.h"
 #include "hd44780-usblcd.h"
 #include "hd44780-anslcd.h"
+#include "hd44780-i2clcd.h"
 // add new connection type header files here
 
 enum connectionType { HD_4bit, HD_8bit, HD_serialLpt, HD_winamp, HD_picanlcd,HD_usblcd,HD_anslcd,
+	HD_i2clcd,
 	// add new connection types here
 	HD_unknown
 };
@@ -49,6 +51,7 @@
 	{ HD_picanlcd, "picanlcd", hd_init_picanlcd, ""},
 	{ HD_usblcd, "usblcd", hd_init_usblcd, ""},
 	{ HD_anslcd, "anslcd", hd_init_anslcd, ""},
+	{ HD_i2clcd, "i2clcd", hd_init_i2clcd, ""},
 		 // add new connection types and their string specifier here
 		 // default, end of structure element (do not delete)
 	{ HD_unknown, "", NULL, ""}
diff -urN lcdproc-0.4.5/server/drivers/hd44780-i2clcd.c lcdproc-my/server/drivers/hd44780-i2clcd.c
--- lcdproc-0.4.5/server/drivers/hd44780-i2clcd.c	1970-01-01 03:00:00.000000000 +0300
+++ lcdproc-my/server/drivers/hd44780-i2clcd.c	2005-12-31 18:39:40.000000000 +0200
@@ -0,0 +1,148 @@
+/*
+ * "i2c-LCD" serial driver module for Hitachi HD44780 based LCD displays.
+ *
+ * Copyright (c)  2005, Tonu Samuel <tonu@no.spam.ee>
+ *
+ * This file is released under the GNU General Public License. Refer to the
+ * COPYING file distributed with this package.
+ *
+ * See the i2c-LCD documentation for data on how it should be connected
+ * to the computer.
+ * http://no.spam.ee/~tonu/i2clcd.xhtml
+ *
+ */
+
+
+#include "lcd.h"					  /* for lcd_logical_driver */
+#include "hd44780-low.h"		  /* for HD44780_functions */
+#include "hd44780.h"		  
+
+#include "shared/str.h"
+#include "shared/report.h"
+#include "configfile.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <termios.h>
+
+#include <errno.h>
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+
+#define BIT(bits) ((value) & (bits) ? "1":"0")
+
+#define OUTPUT \
+	value=value | extra /*| 64*/; \
+	sprintf(buf,"%u\n",value); \
+	write(fd,buf,strlen(buf)); \
+
+#define WriteCommByte(num,flag) { \
+	char buf[32]; \
+	unsigned char newnum= (unsigned char)num; \
+	unsigned int value,extra; \
+	value=num ;\
+	value=((newnum) >> 4); \
+	extra=(flag ? 0 : 16) | 32 | 128; \
+	OUTPUT\
+	value=((newnum) >> 4); \
+	extra=(flag ? 0 : 16); \
+	OUTPUT\
+		value=((newnum) & 0x0F);\
+		extra=(flag ? 0 : 16) | 32 | 128 ;  \
+		OUTPUT\
+		value=((newnum) & 0x0F);\
+		extra=(flag ? 0 : 16); \
+		OUTPUT\
+}
+
+// Generally, any function that accesses the LCD control lines needs to be
+// implemented separately for each HW design. This is typically (but not
+// restricted to):
+// HD44780_senddata
+// HD44780_readkeypad
+
+void i2clcd_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch);
+
+//
+//
+//
+//
+//
+//
+//
+//
+
+#define DEFAULT_DEVICE		"/dev/lcd"
+
+static int fd;
+
+// initialise the driver
+int
+hd_init_i2clcd (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port)
+{
+	char device[256] = DEFAULT_DEVICE;
+	char buf[256+12];
+	/* READ CONFIG FILE */
+
+	/* TODO: replace DriverName with driver->name when that field exists. */
+	#define DriverName "HD44780"
+
+	/* Get i2c device path to use. /sys/bus/i2c/devices/0-0027 for me */
+	strncpy(device, config_get_string ( DriverName , "device" , 0 , DEFAULT_DEVICE),sizeof(device));
+	device[sizeof(device)-1]=0;
+	
+	/* This is bit hack but have no idea how to make it better right now
+	   pca9554 chip I am using has all pins configured as inputs and
+	   direction flags needs to be reset 
+	   Other chips and their drivers may not to have this directory at all. 
+	   So we skip it if opening fails and hope it works.
+	   Some chip drivers like pca9539 uses different name - output0 and output1
+	*/
+
+        snprintf(buf,sizeof(buf),"%s/direction",device );
+        fd = open(buf, O_WRONLY);
+	if (fd == -1) {
+		report(RPT_ERR, "HD44780: i2c-LCD: could not open device %s (%s)\n", device, strerror(errno));
+	} else {
+	        write(fd,"0",1);	
+        	close(fd);
+	}
+
+        snprintf(buf,sizeof(buf),"%s/output",device );
+        fd = open(buf, O_WRONLY);
+	if (fd == -1) {
+		report(RPT_ERR, "HD44780: PC-an-LCD: could not open device %s (%s)\n", device, strerror(errno));
+		return -1;
+	}
+	report (RPT_INFO,"HD44780: i2c-LCD: Using device: %s", device);
+
+	hd44780_functions->senddata = i2clcd_HD44780_senddata;
+
+	common_init (); 
+
+	return 0;
+}
+
+void
+i2clcd_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch)
+{
+
+	if (flags == RS_DATA) {
+    		WriteCommByte((unsigned int)ch, 0);				   
+	}
+	else {
+    		WriteCommByte((unsigned int)ch, 1);
+	}
+}
+
+
+
+
diff -urN lcdproc-0.4.5/server/drivers/hd44780-i2clcd.h lcdproc-my/server/drivers/hd44780-i2clcd.h
--- lcdproc-0.4.5/server/drivers/hd44780-i2clcd.h	1970-01-01 03:00:00.000000000 +0300
+++ lcdproc-my/server/drivers/hd44780-i2clcd.h	2005-12-31 18:35:29.000000000 +0200
@@ -0,0 +1,11 @@
+#ifndef HD_I2CLCD_H
+#define HD_I2CLCD_H
+
+#include "lcd.h"					  /* for lcd_logical_driver */
+#include "hd44780-low.h"		  /* for HD44780_functions */
+
+// initialise this particular driver, args is probably not used but keep
+// for consistency
+int hd_init_i2clcd (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port);
+
+#endif


