diff --git a/README.md b/README.md
index 956a7b0647657fc809b6d925e824ad5686bf0ec7..c7c339f7826b47c8f04bd26fa4fb230e5f725a7e 100644
--- a/README.md
+++ b/README.md
@@ -9,20 +9,17 @@ Read maps from the [Tiled Map Editor](http://www.mapeditor.org/) into rust for u
 
 ```rust
 extern crate serialize;
-extern crate xml;
 extern crate tiled;
 
 use std::io::File;
 use std::io::BufferedReader;
-use xml::reader::EventReader;
 use tiled::parse;
 
 fn main() {
     let file = File::open(&Path::new("assets/tiled_base64_zlib.tmx")).unwrap();
     println!("Opened file");
     let reader = BufferedReader::new(file);
-    let mut parser = EventReader::new(reader);
-    let map = parse(&mut parser).unwrap();
+    let map = parse(reader).unwrap();
     println!("{}", map);
     println!("{}", map.get_tileset_by_gid(22));
 }
diff --git a/examples/main.rs b/examples/main.rs
index 0fa4408124aba8c7615f8a4038bb18b8489dba9f..591f7c8f9739e05543ea16b887f3cabc77ce61dd 100644
--- a/examples/main.rs
+++ b/examples/main.rs
@@ -1,20 +1,15 @@
-#![feature(globs)]
-
 extern crate serialize;
-extern crate xml;
 extern crate tiled;
 
 use std::io::File;
 use std::io::BufferedReader;
-use xml::reader::EventReader;
 use tiled::parse;
 
 fn main() {
     let file = File::open(&Path::new("assets/tiled_base64_zlib.tmx")).unwrap();
     println!("Opened file");
     let reader = BufferedReader::new(file);
-    let mut parser = EventReader::new(reader);
-    let map = parse(&mut parser).unwrap();
+    let map = parse(reader).unwrap();
     println!("{}", map);
     println!("{}", map.get_tileset_by_gid(22));
 }
diff --git a/src/lib.rs b/src/lib.rs
index 239a5a6b6183cc6ba30ba3d40be30c20c851b3b1..a2f39a661c0f5d4b452920330c8098a1e7453ddd 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -449,12 +449,13 @@ fn parse_data<B: Buffer>(parser: &mut EventReader<B>, attrs: Vec<Attribute>, wid
 
 /// Parse a buffer hopefully containing the contents of a Tiled file and try to
 /// parse it.
-pub fn parse<B: Buffer>(parser: &mut EventReader<B>) -> Result<Map, TiledError> {
+pub fn parse<B: Buffer>(reader: B) -> Result<Map, TiledError> {
+    let mut parser = EventReader::new(reader);
     loop {
         match parser.next() {
             StartElement {name, attributes, ..}  => {
                 if name.local_name[] == "map" {
-                    return Map::new(parser, attributes);
+                    return Map::new(&mut parser, attributes);
                 }
             }
             EndDocument => return Err(PrematureEnd("Document ended before map was parsed".to_string())),