diff --git a/Cargo.toml b/Cargo.toml
index 6182de4..8a66198 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,4 +14,4 @@
 
 [dependencies]
 nom = { version = "1.2.4", optional = true }
-quote = { version = "0.1", optional = true }
+quote = { version = "0.1.1", optional = true }
diff --git a/src/attr.rs b/src/attr.rs
index 828006f..d2d78ed 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -104,12 +104,7 @@
                 MetaItem::List(ref ident, ref inner) => {
                     tokens.append(&ident);
                     tokens.append("(");
-                    for (i, meta_item) in inner.iter().enumerate() {
-                        if i > 0 {
-                            tokens.append(",");
-                        }
-                        meta_item.to_tokens(tokens);
-                    }
+                    tokens.append_separated(inner, ",");
                     tokens.append(")");
                 }
                 MetaItem::NameValue(ref name, ref value) => {
diff --git a/src/generics.rs b/src/generics.rs
index 51f56b9..a2a66a5 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -192,12 +192,7 @@
             self.lifetime.to_tokens(tokens);
             if !self.bounds.is_empty() {
                 tokens.append(":");
-                for (i, bound) in self.bounds.iter().enumerate() {
-                    if i > 0 {
-                        tokens.append("+");
-                    }
-                    bound.to_tokens(tokens);
-                }
+                tokens.append_separated(&self.bounds, "+");
             }
         }
     }
diff --git a/src/ty.rs b/src/ty.rs
index 3d1cb1d..896cb7e 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -455,12 +455,7 @@
                 }
                 Ty::Tup(ref elems) => {
                     tokens.append("(");
-                    for (i, elem) in elems.iter().enumerate() {
-                        if i > 0 {
-                            tokens.append(",");
-                        }
-                        elem.to_tokens(tokens);
-                    }
+                    tokens.append_separated(elems, ",");
                     if elems.len() == 1 {
                         tokens.append(",");
                     }
@@ -498,12 +493,7 @@
                 Ty::PolyTraitRef(_) => unimplemented!(),
                 Ty::ImplTrait(ref bounds) => {
                     tokens.append("impl");
-                    for (i, bound) in bounds.iter().enumerate() {
-                        if i > 0 {
-                            tokens.append("+");
-                        }
-                        bound.to_tokens(tokens);
-                    }
+                    tokens.append_separated(bounds, "+");
                 }
                 Ty::Paren(ref inner) => {
                     tokens.append("(");
@@ -597,12 +587,7 @@
     impl ToTokens for ParenthesizedParameterData {
         fn to_tokens(&self, tokens: &mut Tokens) {
             tokens.append("(");
-            for (i, input) in self.inputs.iter().enumerate() {
-                if i > 0 {
-                    tokens.append(",");
-                }
-                input.to_tokens(tokens);
-            }
+            tokens.append_separated(&self.inputs, ",");
             tokens.append(")");
             if let Some(ref output) = self.output {
                 tokens.append("->");
@@ -615,12 +600,7 @@
         fn to_tokens(&self, tokens: &mut Tokens) {
             if !self.bound_lifetimes.is_empty() {
                 tokens.append("<");
-                for (i, lifetime) in self.bound_lifetimes.iter().enumerate() {
-                    if i > 0 {
-                        tokens.append(",");
-                    }
-                    lifetime.to_tokens(tokens);
-                }
+                tokens.append_separated(&self.bound_lifetimes, ",");
                 tokens.append(">");
             }
             self.trait_ref.to_tokens(tokens);
