diff --git a/src/ncurses/Curses.ml b/src/ncurses/Curses.ml
index e29f596fd7d611df222865ab954ab46022bdd0a5..59ff56fc04dcf555c01f94671bef543874f7ffa3 100644
--- a/src/ncurses/Curses.ml
+++ b/src/ncurses/Curses.ml
@@ -14,4 +14,5 @@ external mvwaddch: window -> int -> int -> char -> unit = "curses_mvwaddch"
 external addstr: string -> unit = "curses_addstr"
 external mvwaddstr: window -> int -> int -> string -> unit = "curses_mvwaddstr"
 external getmaxyx: window -> int * int = "curses_getmaxyx"
+external getch : unit -> int = "curses_getch"
 
diff --git a/src/ncurses/Curses.mli b/src/ncurses/Curses.mli
index ac9b3697f0a8fdd33a91baa785a8aa3a1db1510b..fa72d6864160bb98146611fdae8c86b88aeb46e4 100644
--- a/src/ncurses/Curses.mli
+++ b/src/ncurses/Curses.mli
@@ -13,3 +13,6 @@ val mvwaddch: window -> int -> int -> char -> unit
 val addstr: string -> unit
 val mvwaddstr: window -> int -> int -> string -> unit
 val getmaxyx: window -> int * int
+
+val getch : unit -> int
+
diff --git a/src/ncurses/Curses_stub.c b/src/ncurses/Curses_stub.c
index 39ee0c0dbff17af11e185e35c791e9c15915ff44..1178a0a66eb6b1cf41f1dd97034d5eff742f5535 100644
--- a/src/ncurses/Curses_stub.c
+++ b/src/ncurses/Curses_stub.c
@@ -112,4 +112,9 @@ value curses_getmaxyx(value win)
   CAMLreturn ( hw );
 }
 
+value curses_getch(value unit) {
+    CAMLparam1( unit );
+    CAMLreturn (Val_int(getch()));
+}
+
 }
diff --git a/src/ncurses/NCUI.mli b/src/ncurses/NCUI.mli
index a67d16c57e6be8c1b880b357a2a9c2a21250c754..99984c495aad21f5c6f9b584d172429bd7e835e6 100644
--- a/src/ncurses/NCUI.mli
+++ b/src/ncurses/NCUI.mli
@@ -26,3 +26,5 @@ val set_root_widget : widget -> unit
 val screen_open  : unit -> unit
 val screen_close : unit -> unit
 
+
+