diff --git a/src/gpio_port.c b/src/gpio_port.c
index 0e22908..0143aee 100644
--- a/src/gpio_port.c
+++ b/src/gpio_port.c
@@ -52,6 +52,7 @@ struct gpio {
     enum gpio_state state;
     int fd;
     int pin_number;
+    char edge[8];
 };
 
 /**
@@ -197,6 +198,7 @@ int gpio_set_int(struct gpio *pin, const char *mode)
     sprintf(path, "/sys/class/gpio/gpio%d/edge", pin->pin_number);
     if (!sysfs_write_file(path, mode))
         return -1;
+    (void)strncpy(pin->edge, mode, sizeof(pin->edge)); /* Remember edge */
 
     if (strcmp(mode, "none") == 0)
         pin->state = GPIO_INPUT;
@@ -222,7 +224,10 @@ void gpio_process(struct gpio *pin)
     ei_encode_version(resp, &resp_index);
     ei_encode_tuple_header(resp, &resp_index, 2);
     ei_encode_atom(resp, &resp_index, "gpio_interrupt");
-    ei_encode_atom(resp, &resp_index, value ? "rising" : "falling");
+    if (strcmp(pin->edge, "both") == 0)
+        ei_encode_atom(resp, &resp_index, value ? "rising" : "falling");
+    else
+        ei_encode_atom(resp, &resp_index, pin->edge);
     erlcmd_send(resp, resp_index);
 }
 
@@ -263,7 +268,7 @@ void gpio_handle_request(const char *req, void *cookie)
         long value;
         if (ei_decode_long(req, &req_index, &value) < 0)
             errx(EXIT_FAILURE, "write: didn't get value to write");
-        debug("write %d", value);
+        debug("write %d", (int)value);
         if (gpio_write(pin, value))
             ei_encode_atom(resp, &resp_index, "ok");
         else {
@@ -275,7 +280,7 @@ void gpio_handle_request(const char *req, void *cookie)
         char mode[32];
         if (ei_decode_atom(req, &req_index, mode) < 0)
             errx(EXIT_FAILURE, "set_int: didn't get value");
-        debug("write %s", mode);
+        debug("mode %s", mode);
 
         if (gpio_set_int(pin, mode))
             ei_encode_atom(resp, &resp_index, "ok");