diff --git a/Cargo.toml b/Cargo.toml
index 9f42ae0..dfd17e5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 
 name = "rand"
-version = "0.2.0"
+version = "0.2.1"
 authors = ["The Rust Project Developers"]
 license = "MIT/Apache-2.0"
 readme = "README.md"
diff --git a/src/distributions/exponential.rs b/src/distributions/exponential.rs
index e732232..6a77270 100644
--- a/src/distributions/exponential.rs
+++ b/src/distributions/exponential.rs
@@ -121,8 +121,6 @@
 mod bench {
     extern crate test;
 
-    use std::prelude::v1::*;
-
     use self::test::Bencher;
     use std::mem::size_of;
     use super::Exp;
diff --git a/src/distributions/gamma.rs b/src/distributions/gamma.rs
index c42b6e9..5f6aaa4 100644
--- a/src/distributions/gamma.rs
+++ b/src/distributions/gamma.rs
@@ -379,7 +379,6 @@
 #[cfg(test)]
 mod bench {
     extern crate test;
-    use std::prelude::v1::*;
     use self::test::Bencher;
     use std::mem::size_of;
     use distributions::IndependentSample;
diff --git a/src/distributions/mod.rs b/src/distributions/mod.rs
index 6bbd22a..703b316 100644
--- a/src/distributions/mod.rs
+++ b/src/distributions/mod.rs
@@ -263,7 +263,6 @@
 
 #[cfg(test)]
 mod tests {
-    use std::prelude::v1::*;
 
     use {Rng, Rand};
     use super::{RandSample, WeightedChoice, Weighted, Sample, IndependentSample};
diff --git a/src/distributions/normal.rs b/src/distributions/normal.rs
index a01f9ef..6a410ef 100644
--- a/src/distributions/normal.rs
+++ b/src/distributions/normal.rs
@@ -196,7 +196,6 @@
 #[cfg(test)]
 mod bench {
     extern crate test;
-    use std::prelude::v1::*;
     use self::test::Bencher;
     use std::mem::size_of;
     use distributions::{Sample};
diff --git a/src/distributions/range.rs b/src/distributions/range.rs
index 713ceac..4fe281c 100644
--- a/src/distributions/range.rs
+++ b/src/distributions/range.rs
@@ -164,7 +164,6 @@
 #[cfg(test)]
 mod tests {
     use std::num::Int;
-    use std::prelude::v1::*;
     use distributions::{Sample, IndependentSample};
     use super::Range as Range;
 
diff --git a/src/isaac.rs b/src/isaac.rs
index eb64d03..bf80152 100644
--- a/src/isaac.rs
+++ b/src/isaac.rs
@@ -13,7 +13,7 @@
 #![allow(non_camel_case_types)]
 
 use std::slice;
-use std::iter::{range_step, repeat};
+use std::iter::repeat;
 use std::num::wrapping::Wrapping as w;
 
 use {Rng, SeedableRng, Rand, w32, w64};
@@ -91,7 +91,7 @@
         if use_rsl {
             macro_rules! memloop {
                 ($arr:expr) => {{
-                    for i in range_step(0, RAND_SIZE_USIZE, 8) {
+                    for i in (0..RAND_SIZE_USIZE).step_by(8) {
                         a=a+$arr[i  ]; b=b+$arr[i+1];
                         c=c+$arr[i+2]; d=d+$arr[i+3];
                         e=e+$arr[i+4]; f=f+$arr[i+5];
@@ -108,7 +108,7 @@
             memloop!(self.rsl);
             memloop!(self.mem);
         } else {
-            for i in range_step(0, RAND_SIZE_USIZE, 8) {
+            for i in (0..RAND_SIZE_USIZE).step_by(8) {
                 mix!();
                 self.mem[i  ]=a; self.mem[i+1]=b;
                 self.mem[i+2]=c; self.mem[i+3]=d;
@@ -167,7 +167,7 @@
                 }}
             }
 
-            for i in range_step(0, MIDPOINT, 4) {
+            for i in (0..MIDPOINT).step_by(4) {
                 rngstepp!(i + 0, 13);
                 rngstepn!(i + 1, 6);
                 rngstepp!(i + 2, 2);
diff --git a/src/lib.rs b/src/lib.rs
index c543689..2e9b494 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -224,7 +224,7 @@
 #![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/rand/")]
-#![feature(core, io)]
+#![feature(core, io, step_by)]
 
 #![cfg_attr(test, feature(test))]
 
diff --git a/src/os.rs b/src/os.rs
index 97c150c..8cb5a51 100644
--- a/src/os.rs
+++ b/src/os.rs
@@ -104,8 +104,8 @@
             let mut buf: [u8; 0] = [];
             let result = getrandom(&mut buf);
             let available = if result == -1 {
-                let err = ::std::os::errno() as libc::c_int;
-                err != libc::ENOSYS
+                let err = io::Error::last_os_error().raw_os_error();
+                err != Some(libc::ENOSYS)
             } else {
                 true
             };
