diff --git a/src/libstd/rt/io/file.rs b/src/libstd/rt/io/file.rs
index c4ec19b6d27..816f7e08eab 100644
--- a/src/libstd/rt/io/file.rs
+++ b/src/libstd/rt/io/file.rs
@@ -170,15 +170,9 @@ impl Seek for FileStream {
     }
 
     fn seek(&mut self, pos: i64, style: SeekStyle) {
-        use libc::{SEEK_SET, SEEK_CUR, SEEK_END};
-        let whence = match style {
-            SeekSet => SEEK_SET,
-            SeekCur => SEEK_CUR,
-            SeekEnd => SEEK_END
-        } as i64;
-        match self.fd.seek(pos, whence) {
+        match self.fd.seek(pos, style) {
             Ok(_) => {
-                // successful seek resets EOF indocator
+                // successful seek resets EOF indicator
                 self.last_nread = -1;
                 ()
             },
diff --git a/src/libstd/rt/rtio.rs b/src/libstd/rt/rtio.rs
index 3a14f679fa7..b73200bcda1 100644
--- a/src/libstd/rt/rtio.rs
+++ b/src/libstd/rt/rtio.rs
@@ -17,6 +17,7 @@ use super::io::net::ip::{IpAddr, SocketAddr};
 use rt::uv::uvio;
 use path::Path;
 use super::io::support::PathLike;
+use super::io::{SeekStyle};
 
 // XXX: ~object doesn't work currently so these are some placeholder
 // types to use instead
@@ -118,7 +119,7 @@ pub trait RtioFileStream {
     fn write(&mut self, buf: &[u8]) -> Result<(), IoError>;
     fn pread(&mut self, buf: &mut [u8], offset: u64) -> Result<int, IoError>;
     fn pwrite(&mut self, buf: &[u8], offset: u64) -> Result<(), IoError>;
-    fn seek(&mut self, pos: i64, whence: i64) -> Result<(), IoError>;
+    fn seek(&mut self, pos: i64, whence: SeekStyle) -> Result<u64, IoError>;
     fn tell(&self) -> Result<u64, IoError>;
     fn flush(&mut self) -> Result<(), IoError>;
 }
diff --git a/src/libstd/rt/uv/uvio.rs b/src/libstd/rt/uv/uvio.rs
index 63ff446ecf0..93d87fb5495 100644
--- a/src/libstd/rt/uv/uvio.rs
+++ b/src/libstd/rt/uv/uvio.rs
@@ -21,7 +21,7 @@ use str;
 use result::*;
 use rt::io::IoError;
 use rt::io::net::ip::{SocketAddr, IpAddr};
-use rt::io::{standard_error, OtherIoError};
+use rt::io::{standard_error, OtherIoError, SeekStyle, SeekSet, SeekCur, SeekEnd};
 use rt::local::Local;
 use rt::rtio::*;
 use rt::sched::{Scheduler, SchedHandle};
@@ -31,7 +31,7 @@ use rt::uv::idle::IdleWatcher;
 use rt::uv::net::{UvIpv4SocketAddr, UvIpv6SocketAddr};
 use unstable::sync::Exclusive;
 use super::super::io::support::PathLike;
-use libc::{lseek, c_long, SEEK_CUR};
+use libc::{lseek, c_long};
 
 #[cfg(test)] use container::Container;
 #[cfg(test)] use unstable::run_in_bare_thread;
@@ -1122,6 +1122,22 @@ impl UvFileStream {
         };
         result_cell.take()
     }
+    fn seek_common(&mut self, pos: i64, whence: c_int) ->
+        Result<u64, IoError>{
+        #[fixed_stack_segment]; #[inline(never)];
+        unsafe {
+            match lseek((*self.fd), pos as c_long, whence) {
+                -1 => {
+                    Err(IoError {
+                        kind: OtherIoError,
+                        desc: "Failed to lseek.",
+                        detail: None
+                    })
+                },
+                n => Ok(n as u64)
+            }
+        }
+    }
 }
 
 impl Drop for UvFileStream {
@@ -1155,35 +1171,20 @@ impl RtioFileStream for UvFileStream {
     fn pwrite(&mut self, buf: &[u8], offset: u64) -> Result<(), IoError> {
         self.base_write(buf, offset as i64)
     }
-    fn seek(&mut self, pos: i64, whence: i64) -> Result<(), IoError> {
-        #[fixed_stack_segment]; #[inline(never)];
-        unsafe {
-            match lseek((*self.fd), pos as c_long, whence as c_int) {
-                -1 => {
-                    Err(IoError {
-                        kind: OtherIoError,
-                        desc: "Failed to lseek.",
-                        detail: None
-                    })
-                },
-                _ => Ok(())
-            }
-        }
+    fn seek(&mut self, pos: i64, whence: SeekStyle) -> Result<u64, IoError> {
+        use libc::{SEEK_SET, SEEK_CUR, SEEK_END};
+        let whence = match whence {
+            SeekSet => SEEK_SET,
+            SeekCur => SEEK_CUR,
+            SeekEnd => SEEK_END
+        };
+        self.seek_common(pos, whence)
     }
     fn tell(&self) -> Result<u64, IoError> {
-        #[fixed_stack_segment]; #[inline(never)];
-        unsafe {
-            match lseek((*self.fd), 0, SEEK_CUR) {
-                -1 => {
-                    Err(IoError {
-                        kind: OtherIoError,
-                        desc: "Failed to lseek, needed to tell().",
-                        detail: None
-                    })
-                },
-                n=> Ok(n as u64)
-            }
-        }
+        use libc::SEEK_CUR;
+        // this is temporary
+        let self_ = unsafe { cast::transmute::<&UvFileStream, &mut UvFileStream>(self) };
+        self_.seek_common(0, SEEK_CUR)
     }
     fn flush(&mut self) -> Result<(), IoError> {
         Ok(())