diff --git a/includes/gpio.c b/includes/gpio.c
index b4b6139..51c2b82 100644
--- a/includes/gpio.c
+++ b/includes/gpio.c
@@ -127,7 +127,8 @@
 	do {
 		struct stat st;
 		
-		sprintf(dev,"%s/gpio%d/direction",gpio->dev,gpio->num);
+		sprintf(dev,"%s/gpio%d/value",gpio->dev,gpio->num);
+		//check if gpio is exported, if not export
     		int result = stat(dev, &st);
     		if (result)
 		{
@@ -145,7 +146,12 @@
 				break;
 			}
 		}
-		sprintf(dev,"%s/gpio%d/direction",gpio->dev,gpio->num);
+		const char* file = "edge";
+		if (strcmp(gpio->direction,"in")==0 || strcmp(gpio->direction,"out")==0)
+		{
+			file = "direction";
+		}
+		sprintf(dev,"%s/gpio%d/%s",gpio->dev,gpio->num,file);
 		fd = open(dev,O_WRONLY);
 		if (fd == GPIO_ERROR) {
 			rc = GPIO_WRITE_ERROR;
@@ -158,11 +164,15 @@
 		}
 
 		close(fd);
-		rc = 0;
+		rc = GPIO_OK;
 	} while(0);
 
 	return rc;
 }
+
+
+
+
 char* get_gpio_dev(GPIO* gpio)
 {
 	char* buf;
@@ -170,12 +180,31 @@
 	return buf;
 }
 
+int gpio_open_interrupt(GPIO* gpio, GIOFunc func, gpointer user_data)
+{
+	int rc = GPIO_OK;
+	char* buf;
+	sprintf(buf, "%s/gpio%d/value", gpio->dev, gpio->num);
+	gpio->fd = open(buf, O_RDONLY | O_NONBLOCK );
+	if (gpio->fd == -1)
+	{
+		rc = GPIO_OPEN_ERROR;
+	}
+	else
+	{
+		GIOChannel* channel = g_io_channel_unix_new( gpio->fd );
+		guint id = g_io_add_watch( channel, G_IO_PRI, func, user_data );
+	}
+	return rc;
+}
+
 int gpio_open(GPIO* gpio)
 {
 	g_assert (gpio != NULL);
 	// open gpio for writing or reading
 	char buf[254];
 	int rc = 0;
+	gpio->fd = -1;
 	if (gpio->direction == NULL) {
 		return GPIO_OPEN_ERROR;
 	}
diff --git a/includes/gpio.h b/includes/gpio.h
index 54d912d..d9279e4 100644
--- a/includes/gpio.h
+++ b/includes/gpio.h
@@ -25,6 +25,7 @@
 int gpio_init(GDBusConnection*, GPIO*);
 void gpio_close(GPIO*);
 int  gpio_open(GPIO*);
+int gpio_open_interrupt(GPIO*, GIOFunc, gpointer);
 int gpio_write(GPIO*, uint8_t);
 int gpio_writec(GPIO*, char);
 int gpio_clock_cycle(GPIO*, int);
