diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs
index 1ddb07e3ea4..36b529cc070 100644
--- a/src/lib/_vec.rs
+++ b/src/lib/_vec.rs
@@ -1,3 +1,6 @@
+import option.none;
+import option.some;
+
 import vbuf = rustrt.vbuf;
 
 type operator2[T,U,V] = fn(&T, &U) -> V;
@@ -115,6 +118,15 @@ fn print_debug_info[T](vec[mutable? T] v) {
     rustrt.vec_print_debug_info[T](v);
 }
 
+// Returns the last element of v.
+fn last[T](vec[mutable? T] v) -> option.t[T] {
+    auto l = len[T](v);
+    if (l == 0u) {
+        ret none[T];
+    }
+    ret some[T](v.(l - 1u));
+}
+
 // Returns elements from [start..end) from v.
 fn slice[T](vec[mutable? T] v, uint start, uint end) -> vec[T] {
     check (start <= end);