diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/hibernate/query/HqlQueryExecutor.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/hibernate/query/HqlQueryExecutor.java
index 07eaf97275e4cbadc64d10fdb4406e7589a838e8..7aa34ab0aceb5e1a2558137d1233b7fb459be9c9 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/hibernate/query/HqlQueryExecutor.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/hibernate/query/HqlQueryExecutor.java
@@ -41,6 +41,7 @@
 import org.xwiki.component.phase.Initializable;
 import org.xwiki.component.phase.InitializationException;
 import org.xwiki.context.Execution;
+import org.xwiki.job.event.status.JobProgressManager;
 import org.xwiki.query.Query;
 import org.xwiki.query.QueryException;
 import org.xwiki.query.QueryExecutor;
@@ -88,6 +89,9 @@ public class HqlQueryExecutor implements QueryExecutor, Initializable
     @Inject
     private ContextualAuthorizationManager authorization;
 
+    @Inject
+    private JobProgressManager progress;
+
     private volatile Set<String> allowedNamedQueries;
 
     @Override
@@ -117,7 +121,7 @@ private Set<String> getAllowedNamedQueries()
                 }
             }
         }
-        
+
         return this.allowedNamedQueries;
     }
 
@@ -153,6 +157,8 @@ public <T> List<T> execute(final Query query) throws QueryException
 
         String oldDatabase = getContext().getWikiId();
         try {
+            this.progress.startStep(query, "query.hql.progress.execute", "Execute HQL query [{}]", query);
+
             if (query.getWiki() != null) {
                 getContext().setWikiId(query.getWiki());
             }
@@ -178,6 +184,8 @@ public List<T> doInHibernate(Session session)
             throw new QueryException("Exception while executing query", query, e);
         } finally {
             getContext().setWikiId(oldDatabase);
+
+            this.progress.endStep(query);
         }
     }
 
diff --git a/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-manager/src/main/java/org/xwiki/query/internal/DefaultQuery.java b/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-manager/src/main/java/org/xwiki/query/internal/DefaultQuery.java
index b55b9e1076c839d1047f3164294e7e8767dcc56b..bd101da64537e006f15071d6d74b0e398a5e0d46 100644
--- a/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-manager/src/main/java/org/xwiki/query/internal/DefaultQuery.java
+++ b/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-manager/src/main/java/org/xwiki/query/internal/DefaultQuery.java
@@ -103,7 +103,7 @@ public class DefaultQuery implements SecureQuery
     /**
      * field for {@link #getExecuter()}.
      */
-    private QueryExecutor executer;
+    private transient QueryExecutor executer;
 
     /**
      * Create a Query.
@@ -294,4 +294,10 @@ protected QueryExecutor getExecuter()
     {
         return this.executer;
     }
+
+    @Override
+    public String toString()
+    {
+        return getStatement();
+    }
 }
diff --git a/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-xwql/src/main/java/org/xwiki/query/xwql/internal/XWQLQueryExecutor.java b/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-xwql/src/main/java/org/xwiki/query/xwql/internal/XWQLQueryExecutor.java
index 91e1b70ab1f9eb724d27bb8e41c7f3b06076f619..c6528fb5121f1732453168c33fc5d2a030fdceaa 100644
--- a/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-xwql/src/main/java/org/xwiki/query/xwql/internal/XWQLQueryExecutor.java
+++ b/xwiki-platform-core/xwiki-platform-query/xwiki-platform-query-xwql/src/main/java/org/xwiki/query/xwql/internal/XWQLQueryExecutor.java
@@ -30,6 +30,7 @@
 import org.xwiki.component.annotation.Component;
 import org.xwiki.component.manager.ComponentLookupException;
 import org.xwiki.component.manager.ComponentManager;
+import org.xwiki.job.event.status.JobProgressManager;
 import org.xwiki.model.EntityType;
 import org.xwiki.model.ModelContext;
 import org.xwiki.model.reference.EntityReference;
@@ -56,6 +57,9 @@ public class XWQLQueryExecutor implements QueryExecutor
     @Inject
     private ModelContext context;
 
+    @Inject
+    private JobProgressManager progress;
+
     public QueryManager getQueryManager() throws ComponentLookupException
     {
         // We can't inject QueryManager because of cyclic dependency.
@@ -78,6 +82,8 @@ public <T> List<T> execute(Query query) throws QueryException
 
         Query nativeQuery;
         try {
+            this.progress.startStep(query, "query.xwql.progress.execute", "Execute XWQL query [{}]", query);
+
             if (query.getWiki() != null) {
                 if (currentEntityReference.getType() == EntityType.WIKI) {
                     this.context.setCurrentEntityReference(new WikiReference(query.getWiki()));
@@ -124,6 +130,8 @@ public <T> List<T> execute(Query query) throws QueryException
                 + this.translator.getOutputLanguage() + "] language", query, e);
         } finally {
             this.context.setCurrentEntityReference(currentEntityReference);
+
+            this.progress.endStep(query);
         }
     }