diff --git a/Cargo.toml b/Cargo.toml
index 4a1c1bd..aedced4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,7 +21,7 @@
 unicode-segmentation = "1.0"
 
 [target.'cfg(unix)'.dependencies]
-nix = "0.8"
+nix = "0.9"
 
 [target.'cfg(windows)'.dependencies]
 winapi = "0.2"
diff --git a/src/error.rs b/src/error.rs
index 2ac7ef4..db70cae 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -36,7 +36,7 @@
             #[cfg(unix)]
             ReadlineError::Char(ref err) => err.fmt(f),
             #[cfg(unix)]
-            ReadlineError::Errno(ref err) => write!(f, "Errno: {}", err.errno().desc()),
+            ReadlineError::Errno(ref err) => err.fmt(f),
             #[cfg(windows)]
             ReadlineError::WindowResize => write!(f, "WindowResize"),
             #[cfg(windows)]
@@ -54,7 +54,7 @@
             #[cfg(unix)]
             ReadlineError::Char(ref err) => err.description(),
             #[cfg(unix)]
-            ReadlineError::Errno(ref err) => err.errno().desc(),
+            ReadlineError::Errno(ref err) => err.description(),
             #[cfg(windows)]
             ReadlineError::WindowResize => "WindowResize",
             #[cfg(windows)]
diff --git a/src/lib.rs b/src/lib.rs
index 6116ca4..bd94189 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -806,7 +806,7 @@
     prompt: &str,
     initial: Option<(&str, &str)>,
     editor: &mut Editor<H>,
-    original_mode: tty::Mode,
+    original_mode: &tty::Mode,
 ) -> Result<String> {
     let completer = editor.helper.as_ref().map(|h| h.completer());
     let hinter = editor.helper.as_ref().map(|h| h.hinter() as &Hinter);
@@ -1078,12 +1078,12 @@
     Ok(s.line.into_string())
 }
 
-struct Guard(tty::Mode);
+struct Guard<'m>(&'m tty::Mode);
 
 #[allow(unused_must_use)]
-impl Drop for Guard {
+impl<'m> Drop for Guard<'m> {
     fn drop(&mut self) {
-        let Guard(mode) = *self;
+        let Guard(ref mode) = *self;
         mode.disable_raw_mode();
     }
 }
@@ -1096,8 +1096,8 @@
     editor: &mut Editor<H>,
 ) -> Result<String> {
     let original_mode = try!(editor.term.enable_raw_mode());
-    let guard = Guard(original_mode);
-    let user_input = readline_edit(prompt, initial, editor, original_mode);
+    let guard = Guard(&original_mode);
+    let user_input = readline_edit(prompt, initial, editor, &original_mode);
     if editor.config.auto_add_history() {
         if let Ok(ref line) = user_input {
             editor.add_history_entry(line.as_ref());
diff --git a/src/tty/mod.rs b/src/tty/mod.rs
index 95cd762..b6f10af 100644
--- a/src/tty/mod.rs
+++ b/src/tty/mod.rs
@@ -7,7 +7,7 @@
 use line_buffer::LineBuffer;
 
 /// Terminal state
-pub trait RawMode: Copy + Sized {
+pub trait RawMode: Sized {
     /// Disable RAW mode for the terminal.
     fn disable_raw_mode(&self) -> Result<()>;
 }
diff --git a/src/tty/unix.rs b/src/tty/unix.rs
index 6e5280a..7fc3c6e 100644
--- a/src/tty/unix.rs
+++ b/src/tty/unix.rs
@@ -9,6 +9,7 @@
 use nix::poll;
 use nix::sys::signal;
 use nix::sys::termios;
+use nix::sys::termios::SetArg;
 use unicode_segmentation::UnicodeSegmentation;
 use unicode_width::UnicodeWidthStr;
 
@@ -65,7 +66,7 @@
 impl RawMode for Mode {
     /// Disable RAW mode for the terminal.
     fn disable_raw_mode(&self) -> Result<()> {
-        try!(termios::tcsetattr(STDIN_FILENO, termios::TCSADRAIN, self));
+        try!(termios::tcsetattr(STDIN_FILENO, SetArg::TCSADRAIN, self));
         Ok(())
     }
 }
@@ -264,7 +265,7 @@
         let mut key = consts::char_to_key_press(c);
         if key == KeyPress::Esc {
             let mut fds = [
-                poll::PollFd::new(STDIN_FILENO, poll::POLLIN, poll::EventFlags::empty()),
+                poll::PollFd::new(STDIN_FILENO, poll::POLLIN),
             ];
             match poll::poll(&mut fds, self.timeout_ms) {
                 Ok(n) if n == 0 => {
@@ -569,23 +570,24 @@
     fn enable_raw_mode(&self) -> Result<Mode> {
         use nix::errno::Errno::ENOTTY;
         use nix::sys::termios::{CS8, BRKINT, ECHO, ICANON, ICRNL, IEXTEN, INPCK, ISIG, ISTRIP,
-                                IXON, /* OPOST, */ VMIN, VTIME};
+                                IXON, /* OPOST, */};
+        use nix::sys::termios::SpecialCharacterIndices;
         if !self.stdin_isatty {
             try!(Err(nix::Error::from_errno(ENOTTY)));
         }
         let original_mode = try!(termios::tcgetattr(STDIN_FILENO));
-        let mut raw = original_mode;
+        let mut raw = original_mode.clone();
         // disable BREAK interrupt, CR to NL conversion on input,
         // input parity check, strip high bit (bit 8), output flow control
-        raw.c_iflag &= !(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+        raw.input_flags &= !(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
         // we don't want raw output, it turns newlines into straight linefeeds
         // raw.c_oflag = raw.c_oflag & !(OPOST); // disable all output processing
-        raw.c_cflag |= CS8; // character-size mark (8 bits)
-        // disable echoing, canonical mode, extended input processing and signals
-        raw.c_lflag &= !(ECHO | ICANON | IEXTEN | ISIG);
-        raw.c_cc[VMIN] = 1; // One character-at-a-time input
-        raw.c_cc[VTIME] = 0; // with blocking read
-        try!(termios::tcsetattr(STDIN_FILENO, termios::TCSADRAIN, &raw));
+        raw.control_flags |= CS8; // character-size mark (8 bits)
+                            // disable echoing, canonical mode, extended input processing and signals
+        raw.local_flags &= !(ECHO | ICANON | IEXTEN | ISIG);
+        raw.control_chars[SpecialCharacterIndices::VMIN as usize] = 1; // One character-at-a-time input
+        raw.control_chars[SpecialCharacterIndices::VTIME as usize] = 0; // with blocking read
+        try!(termios::tcsetattr(STDIN_FILENO, SetArg::TCSADRAIN, &raw));
         Ok(original_mode)
     }
 
@@ -601,8 +603,9 @@
 
 #[cfg(unix)]
 pub fn suspend() -> Result<()> {
+    use nix::unistd::Pid;
     // suspend the whole process group
-    try!(signal::kill(0, signal::SIGTSTP));
+    try!(signal::kill(Pid::from_raw(0), signal::SIGTSTP));
     Ok(())
 }
 
