diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
index b57b89e..b560ca9 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.elastic.query;
 
+import org.apache.http.entity.ContentType;
+import org.apache.http.nio.entity.NByteArrayEntity;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
@@ -44,8 +46,10 @@
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.lucene.search.WildcardQuery;
 import org.apache.lucene.search.join.ScoreMode;
+import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.client.Request;
-import org.elasticsearch.common.Strings;
+import org.elasticsearch.common.xcontent.XContentHelper;
+import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.InnerHitBuilder;
 import org.elasticsearch.index.query.MatchBoolPrefixQueryBuilder;
@@ -77,6 +81,7 @@
 
 import javax.jcr.PropertyType;
 import java.io.IOException;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -110,7 +115,6 @@
 import static org.apache.jackrabbit.oak.spi.query.QueryConstants.JCR_SCORE;
 import static org.apache.jackrabbit.util.ISO8601.parse;
 import static org.elasticsearch.common.xcontent.ToXContent.EMPTY_PARAMS;
-import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 import static org.elasticsearch.index.query.MoreLikeThisQueryBuilder.Item;
 import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
 import static org.elasticsearch.index.query.QueryBuilders.existsQuery;
@@ -266,16 +270,21 @@
      * Receives a {@link SearchSourceBuilder} as input and converts it to a low level {@link Request} reducing the response
      * in order to reduce size and improve speed.
      * https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#common-options-response-filtering
+     *
      * @param searchSourceBuilder the search request
-     * @param indexName the index to query
+     * @param indexName           the index to query
      * @return a low level {@link Request} instance
      */
     public Request createLowLevelRequest(SearchSourceBuilder searchSourceBuilder, String indexName) {
         String endpoint = "/" + indexName
-                + "/_search?filter_path=took,timed_out,hits.total.value,hits.hits._score,hits.hits.sort,,hits.hits._source,aggregations";
+                + "/_search?filter_path=took,timed_out,hits.total.value,hits.hits._score,hits.hits.sort,hits.hits._source,aggregations";
         Request request = new Request("POST", endpoint);
         try {
-            request.setJsonEntity(Strings.toString(searchSourceBuilder.toXContent(jsonBuilder(), EMPTY_PARAMS)));
+            BytesRef source = XContentHelper.toXContent(searchSourceBuilder, XContentType.JSON, EMPTY_PARAMS, false).toBytesRef();
+            request.setEntity(
+                    new NByteArrayEntity(source.bytes, source.offset, source.length,
+                            ContentType.create(XContentType.JSON.mediaTypeWithoutParameters(), (Charset) null))
+            );
         } catch (IOException e) {
             throw new IllegalStateException("Error creating request entity", e);
         }
diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticResponseHandler.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticResponseHandler.java
index 1513922..8cb54c6 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticResponseHandler.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticResponseHandler.java
@@ -67,24 +67,18 @@
 
     public String getPath(SearchHit hit) {
         Map<String, Object> sourceMap = hit.getSourceAsMap();
-        return  transformPath((String) sourceMap.get(FieldNames.PATH));
+        return transformPath((String) sourceMap.get(FieldNames.PATH));
     }
 
     private String transformPath(String path) {
-        if ("".equals(path)) {
-            path = "/";
-        }
-        if (planResult.isPathTransformed()) {
-            String originalPath = path;
-            path = planResult.transformPath(path);
+        String transformedPath = planResult.transformPath(("".equals(path)) ? "/" : path);
 
-            if (path == null) {
-                LOG.trace("Ignoring path {} : Transformation returned null", originalPath);
-                return null;
-            }
+        if (transformedPath == null) {
+            LOG.trace("Ignoring path {} : Transformation returned null", path);
+            return null;
         }
 
-        return path;
+        return transformedPath;
     }
 
     public boolean isAccessible(String path) {
diff --git a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
index 3af557e..c81412f 100644
--- a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
+++ b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticPerfTest.java
@@ -29,7 +29,6 @@
 
 import java.util.Iterator;
 import java.util.Random;
-import java.util.UUID;
 import java.util.function.Supplier;
 
 import static org.apache.jackrabbit.oak.api.QueryEngine.NO_BINDINGS;
@@ -68,7 +67,7 @@
         builder.indexRule("nt:base").property(PROP_3).analyzed();
         builder.indexRule("nt:base").property(PROP_1).analyzed();
 
-        this.index = setIndex(UUID.randomUUID().toString(), builder);
+        this.index = setIndex("" + System.currentTimeMillis(), builder);
         root.commit();
     }
 
@@ -140,7 +139,7 @@
     }
 
     private void createTestData(Supplier<String> extraContentSupplier) throws Exception {
-        long start = LOG_PERF.start("Starting data indexing");
+        long start = LOG_PERF.startForInfoLog("Starting data indexing");
         Tree content = root.getTree("/").addChild("content");
 
         for (int i = 0; i < NUM_SUB_CONTENT; i++) {
@@ -163,20 +162,20 @@
         assertEventually(() ->
                 assertThat(countDocuments(index), equalTo((long) ((NUM_SUB_CONTENT * NUM_NODES) + NUM_SUB_CONTENT)))
         );
-        LOG_PERF.end(start, -1, "{} documents indexed", countDocuments(index));
+        LOG_PERF.end(start, -1,-1, "{} documents indexed", countDocuments(index));
     }
 
     private void testQuery(String query, String language) throws Exception {
         Result result = executeQuery(query, language, NO_BINDINGS);
         Iterable<ResultRow> it = (Iterable<ResultRow>) result.getRows();
         Iterator<ResultRow> iterator = it.iterator();
-        long start = LOG_PERF.start("Getting result rows");
+        long start = LOG_PERF.startForInfoLog("Getting result rows");
         int i = 0;
         while (iterator.hasNext()) {
             ResultRow row = iterator.next();
             i++;
         }
-        LOG_PERF.end(start, -1, "{} Results fetched", i);
+        LOG_PERF.end(start, -1,-1, "{} Results fetched", i);
     }
 
 }
