diff --git a/server/main.go b/server/main.go
index 51db34f9da2202a26f2e89fda7b7f632ed6060f7..ec6a5a6fc8def6b1b2ebcc142f650841ab8bcefd 100644
--- a/server/main.go
+++ b/server/main.go
@@ -226,12 +226,24 @@ func (s *server) Query(ctx context.Context,
 	// TODO(pawan): Refactor query parsing and graph processing code to a common
 	// function used by Query and queryHandler
 	glog.WithField("q", req.Query).Debug("Query received.")
-	gq, _, err := gql.Parse(req.Query)
+	gq, mu, err := gql.Parse(req.Query)
 	if err != nil {
 		x.Err(glog, err).Error("While parsing query")
 		return resp, err
 	}
 
+	// If we have mutations, run them first.
+	if mu != nil && len(mu.Set) > 0 {
+		if err = mutationHandler(mu); err != nil {
+			glog.WithError(err).Error("While handling mutations.")
+			return resp, err
+		}
+	}
+
+	if gq == nil || (gq.UID == 0 && len(gq.XID) == 0) {
+		return resp, err
+	}
+
 	sg, err := query.ToSubGraph(gq)
 	if err != nil {
 		x.Err(glog, err).Error("While conversion to internal format")