diff --git a/src/executor.rs b/src/executor.rs
index 4f07d063..7431dfc4 100644
--- a/src/executor.rs
+++ b/src/executor.rs
@@ -35,7 +35,7 @@ pub enum FieldPath<'a> {
 /// The executor helps drive the query execution in a schema. It keeps track
 /// of the current field stack, context, variables, and errors.
 pub struct Executor<'a, CtxT> where CtxT: 'a {
-    fragments: &'a HashMap<String, Fragment>,
+    fragments: &'a HashMap<&'a str, &'a Fragment>,
     variables: &'a HashMap<String, InputValue>,
     current_selection_set: Option<Vec<Selection>>,
     schema: &'a SchemaType,
@@ -232,7 +232,7 @@ impl<'a, CtxT> Executor<'a, CtxT> {
 
     #[doc(hidden)]
     pub fn fragment_by_name(&self, name: &str) -> Option<&'a Fragment> {
-        self.fragments.get(name)
+        self.fragments.get(name).map(|f| *f)
     }
 
     /// Add an error to the execution engine
@@ -337,7 +337,7 @@ pub fn execute_validated_query<'a, QueryT, MutationT, CtxT>(
 
     {
         let executor = Executor {
-            fragments: &fragments.into_iter().map(|f| (f.item.name.item.clone(), f.item)).collect(),
+            fragments: &fragments.iter().map(|f| (f.item.name.item.as_str(), &f.item)).collect(),
             variables: variables,
             current_selection_set: Some(op.item.selection_set),
             schema: &root_node.schema,