diff --git a/Cargo.toml b/Cargo.toml
index ae02729a50c868a51f189695ca20d26c104004cf..f0dcbe69aee3f605234adbcad56a1400926f37db 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,6 +20,6 @@ name = "example"
 path = "examples/main.rs"
 
 [dependencies]
-base64 = "0.5.2"
-xml-rs = "0.3.0"
-flate2 = "1.0.1"
+base64  = "0.5.2"
+xml-rs  = "0.3.0"
+libflate = "0.1.18"
diff --git a/src/lib.rs b/src/lib.rs
index 7f1af7e25fc7f67ae22dcd0a918041067e30a705..f453d27224649358623b9c2813792c8f01bbfd19 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,4 @@
-extern crate flate2;
+extern crate libflate;
 extern crate xml;
 extern crate base64;
 
@@ -11,7 +11,6 @@ use std::fmt;
 use xml::reader::{EventReader, Error as XmlError};
 use xml::reader::XmlEvent;
 use xml::attribute::OwnedAttribute;
-use flate2::read::{ZlibDecoder, GzDecoder};
 
 #[derive(Debug, Copy, Clone)]
 pub enum ParseTileError {
@@ -841,7 +840,9 @@ fn parse_base64<R: Read>(parser: &mut EventReader<R>) -> Result<Vec<u8>, TiledEr
 }
 
 fn decode_zlib(data: Vec<u8>) -> Result<Vec<u8>, TiledError> {
-    let mut zd = ZlibDecoder::new(BufReader::new(&data[..]));
+    use libflate::zlib::{Decoder};
+    let mut zd = Decoder::new(BufReader::new(&data[..]))
+        .map_err(|e|TiledError::DecompressingError(e))?;
     let mut data = Vec::new();
     match zd.read_to_end(&mut data) {
         Ok(_v) => {},
@@ -851,9 +852,12 @@ fn decode_zlib(data: Vec<u8>) -> Result<Vec<u8>, TiledError> {
 }
 
 fn decode_gzip(data: Vec<u8>) -> Result<Vec<u8>, TiledError> {
-    let mut gzd = GzDecoder::new(BufReader::new(&data[..]));
+    use libflate::gzip::{Decoder};
+    let mut zd = Decoder::new(BufReader::new(&data[..]))
+        .map_err(|e|TiledError::DecompressingError(e))?;
+
     let mut data = Vec::new();
-    gzd.read_to_end(&mut data).map_err(|e| TiledError::DecompressingError(e))?;
+    zd.read_to_end(&mut data).map_err(|e| TiledError::DecompressingError(e))?;
     Ok(data)
 }