diff --git a/src/components/query/ASTRONVOResults.js b/src/components/query/ASTRONVOResults.js
index 76937c2d05845f7bc1f3bd89f15e83578a2d4005..c52549672f77dc93ed8033029a7258c1b63889a3 100644
--- a/src/components/query/ASTRONVOResults.js
+++ b/src/components/query/ASTRONVOResults.js
@@ -1,13 +1,47 @@
-import React, { useContext } from "react";
+import React, { useContext, useState, useEffect } from "react";
 import { Table, Alert } from "react-bootstrap";
+import axios from "axios";
 import { QueryContext } from "../../contexts/QueryContext";
+import { GlobalContext } from "../../contexts/GlobalContext";
 import LoadingSpinner from "../LoadingSpinner";
 import Paginate from "../Paginate";
 import HandlePreview from "./HandlePreview";
 import Preview from "./Preview";
 
 export default function ASTRONVOResults({ catalog }) {
-  const { queryMap, page, setPage, preview } = useContext(QueryContext);
+  const { queryMap, preview } = useContext(QueryContext);
+  const { api_host } = useContext(GlobalContext);
+  const [page, setPage] = useState(queryMap.get(catalog).page);
+
+  useEffect(() => {
+    queryMap.set(catalog, {
+      catalog: catalog,
+      page: page,
+      esapquery: queryMap.get(catalog).esapquery + `&page=${page}`,
+    });
+    const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery;
+    axios
+      .get(url)
+      .then((queryResponse) => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "fetched",
+          results: queryResponse.data,
+        });
+      })
+      .catch(() => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "error",
+          results: null,
+        });
+      });
+  }, [page])
+
   if (!queryMap) return null;
   if (queryMap.get(catalog).status === "fetched") {
     if (!("results" in queryMap.get(catalog).results))
diff --git a/src/components/query/ApertifResults.js b/src/components/query/ApertifResults.js
index 15b35243b35cd29cc5d0dd3d4439504bcd2481ac..e5b08f4f090fff002a60f5eb603c140180e056ba 100644
--- a/src/components/query/ApertifResults.js
+++ b/src/components/query/ApertifResults.js
@@ -1,13 +1,47 @@
-import React, { useContext } from "react";
+import React, { useContext, useState, useEffect } from "react";
 import { Table, Alert } from "react-bootstrap";
+import axios from "axios";
 import { QueryContext } from "../../contexts/QueryContext";
+import { GlobalContext } from "../../contexts/GlobalContext";
 import LoadingSpinner from "../LoadingSpinner";
 import Paginate from "../Paginate";
 import HandlePreview from "./HandlePreview";
 import Preview from "./Preview";
 
 export default function ApertifResults({ catalog }) {
-  const { queryMap, page, setPage, preview } = useContext(QueryContext);
+  const { queryMap, preview } = useContext(QueryContext);
+  const { api_host } = useContext(GlobalContext);
+  const [page, setPage] = useState(queryMap.get(catalog).page);
+
+  useEffect(() => {
+    queryMap.set(catalog, {
+      catalog: catalog,
+      page: page,
+      esapquery: queryMap.get(catalog).esapquery + `&page=${page}`,
+    });
+    const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery;
+    axios
+      .get(url)
+      .then((queryResponse) => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "fetched",
+          results: queryResponse.data,
+        });
+      })
+      .catch(() => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "error",
+          results: null,
+        });
+      });
+  }, [page])
+
   if (!queryMap) return null;
   if (queryMap.get(catalog).status === "fetched") {
     if (!("results" in queryMap.get(catalog).results))
@@ -21,9 +55,9 @@ export default function ApertifResults({ catalog }) {
       <>
         <Paginate
           getNewPage={(args) => {
-            return args.target ? setPage(parseFloat(args.target.text)) : null;
+            return args.target ? setPage(parseInt(args.target.text)) : null;
           }}
-          currentPage={page}
+          currentPage={queryMap.get(catalog).page}
           numAdjacent={3}
           numPages={numPages}
         />
diff --git a/src/components/query/LOFARResults.js b/src/components/query/LOFARResults.js
index 0aaf6bd37cf93b60bf9d9fd277993681a2dfd05f..54a4ce05d3b9939e01ab52c03bdd28b85dc0f761 100644
--- a/src/components/query/LOFARResults.js
+++ b/src/components/query/LOFARResults.js
@@ -1,10 +1,44 @@
-import React, { useContext } from "react";
+import React, { useContext, useState, useEffect } from "react";
 import { Table, Alert } from "react-bootstrap";
+import axios from "axios";
 import { QueryContext } from "../../contexts/QueryContext";
+import { GlobalContext } from "../../contexts/GlobalContext";
 import LoadingSpinner from "../LoadingSpinner";
 
 export default function LOFARResults({ catalog }) {
   const { queryMap } = useContext(QueryContext);
+  const { api_host } = useContext(GlobalContext);
+  const [page, setPage] = useState(queryMap.get(catalog).page);
+
+  useEffect(() => {
+    queryMap.set(catalog, {
+      catalog: catalog,
+      page: page,
+      esapquery: queryMap.get(catalog).esapquery + `&page=${page}`,
+    });
+    const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery;
+    axios
+      .get(url)
+      .then((queryResponse) => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "fetched",
+          results: queryResponse.data,
+        });
+      })
+      .catch(() => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "error",
+          results: null,
+        });
+      });
+  }, [page])
+  
   if (!queryMap) return null;
   if (queryMap.get(catalog).status === "fetched") {
     if (!("results" in queryMap.get(catalog).results))
diff --git a/src/components/query/QueryCatalogs.js b/src/components/query/QueryCatalogs.js
index fc9d4c3c181310c9cd31a3b40c3ad059aa06f80d..574cd74ba209ba39199eadc6c490d824e2b80536 100644
--- a/src/components/query/QueryCatalogs.js
+++ b/src/components/query/QueryCatalogs.js
@@ -15,10 +15,8 @@ export default function QueryCatalogs() {
   //  "catalogquery": "querystring",
   //  "status": "fetching|fechted",
   //  "results": null}
-  const { config, setConfigName, defaultConf, queryMap, formData, setFormData, page, setPage } = useContext(QueryContext);
-  const { api_host } = useContext(
-    GlobalContext
-  );
+  const { config, setConfigName, defaultConf, queryMap, formData, setFormData } = useContext(QueryContext);
+  const { api_host } = useContext(GlobalContext);
   const { uri } = useParams();
   console.log("uri:", uri);
   console.log("default conf:", defaultConf);
@@ -50,7 +48,6 @@ export default function QueryCatalogs() {
     return () => {
       console.log("cleaned up");
       queryMap.clear();
-      setPage(1);
       setFormData();
       setConfigName(defaultConf);
     };
@@ -59,16 +56,22 @@ export default function QueryCatalogs() {
   useEffect(() => {
     console.log(config.query_schema);
     if (!formData) return;
-    const gui = config.query_schema.name;
-    const queries = parseQueryForm(gui, formData, page);
-
-    // Ideally query for each catalog is sent to ESAP API Gateway, and query results is returned
-    // This is under development in the backend at the moment
     queryMap.clear();
+    const gui = config.query_schema.name;
+    const queries = parseQueryForm(gui, formData);
     queries.forEach((query) => {
+      queryMap.set(query.catalog, {
+        catalog: query.catalog,
+        page: 1,
+        esapquery: query.esapquery,
+      });
+    });
+
+    queryMap.forEach((query) => {
       queryMap.set(query.catalog, {
         catalog: query.catalog,
         esapquery: query.esapquery,
+        page: query.page,
         status: "fetching",
         results: null,
       });
@@ -79,6 +82,7 @@ export default function QueryCatalogs() {
           queryMap.set(query.catalog, {
             catalog: query.catalog,
             esapquery: query.esapquery,
+            page: query.page,
             status: "fetched",
             results: queryResponse.data,
           });
@@ -87,12 +91,13 @@ export default function QueryCatalogs() {
           queryMap.set(query.catalog, {
             catalog: query.catalog,
             esapquery: query.esapquery,
+            page: query.page,
             status: "error",
             results: null,
           });
         });
     });
-  }, [formData, page]);
+  }, [formData]);
 
   function formTemplate({ TitleField, properties, title, description }) {
     return (
diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js
index 45938b436bc48db9f4528b36a7e22f64387fc396..ad404fdf1299b4e2b1f2c332eee2d98da83a0a77 100644
--- a/src/components/query/QueryIVOARegistry.js
+++ b/src/components/query/QueryIVOARegistry.js
@@ -52,7 +52,6 @@ export default function QueryIVOARegistry() {
     return () => {
       console.log("cleaned up");
       queryMap.clear();
-      setPage(1);
       setFormData();
       setConfigName(defaultConf);
     };
diff --git a/src/components/query/ZooniverseResults.js b/src/components/query/ZooniverseResults.js
index aef7c46823e3d2cb49b457924272817ba37033a0..4b80c522cb975d50d61e34ad9cdf29ea822f81b3 100644
--- a/src/components/query/ZooniverseResults.js
+++ b/src/components/query/ZooniverseResults.js
@@ -1,6 +1,7 @@
-import React, { useContext, useState } from "react";
-import { Table, Alert, Form, Button } from "react-bootstrap";
-import * as deepEqual from "deep-equal";
+import React, { useContext, useEffect } from "react";
+import { Table, Alert, Form } from "react-bootstrap";
+import axios from "axios";
+import { GlobalContext } from "../../contexts/GlobalContext";
 import { QueryContext } from "../../contexts/QueryContext";
 import { BasketContext } from "../../contexts/BasketContext";
 import LoadingSpinner from "../LoadingSpinner";
@@ -335,6 +336,38 @@ function ZooniverseWorkflowResults(context) {
 export default function ZooniverseResults({ catalog }) {
   const context = useContext(QueryContext);
   const basketContext = useContext(BasketContext);
+
+  const { queryMap, page } = useContext(QueryContext);
+  const { api_host } = useContext(GlobalContext);
+  useEffect(() => {
+    queryMap.set(catalog, {
+      catalog: catalog,
+      page: page,
+      esapquery: queryMap.get(catalog).esapquery + `&page=${page}`,
+    });
+    const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery;
+    axios
+      .get(url)
+      .then((queryResponse) => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "fetched",
+          results: queryResponse.data,
+        });
+      })
+      .catch(() => {
+        queryMap.set(catalog, {
+          catalog: catalog,
+          esapquery: queryMap.get(catalog).esapquery,
+          page: page,
+          status: "error",
+          results: null,
+        });
+      });
+  }, [page])
+
   if (!context.queryMap) return null;
   if (context.queryMap.get(catalog).status === "fetched") {
     if (context.queryMap.get(catalog).results.results.length === 0)
diff --git a/src/utils/form/parseADEXForm.js b/src/utils/form/parseADEXForm.js
index 75f134d0e1ae7407460128178484854c52e4ae1d..27bfa31c28a333d38b6e6c550026476fb643eb56 100644
--- a/src/utils/form/parseADEXForm.js
+++ b/src/utils/form/parseADEXForm.js
@@ -1,4 +1,4 @@
-export default function ParseADEXForm(formData, page) {
+export default function ParseADEXForm(formData) {
   let catalogs = ["apertif", "astron_vo", "lofar"];
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
@@ -39,8 +39,7 @@ export default function ParseADEXForm(formData, page) {
     let esapquery =
       query +
       `${`${query}` ? "&" : ""}archive_uri=` +
-      catalog +
-      `&page_size=30&page=${page}`;
+      catalog + `&page_size=30`;
 
     queries.push({
       catalog: catalog,
diff --git a/src/utils/form/parseASTRONVOForm.js b/src/utils/form/parseASTRONVOForm.js
index 6406cf850f4d9ce0453210e69e1bef7cb9ff5269..9162c828a9635cabe750e5dbbcccfd933dc8ea4c 100644
--- a/src/utils/form/parseASTRONVOForm.js
+++ b/src/utils/form/parseASTRONVOForm.js
@@ -1,4 +1,4 @@
-export default function ParseASTRONVOForm(formData, page) {
+export default function ParseASTRONVOForm(formData) {
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
   // {"catalog": "catalogname",
@@ -19,9 +19,7 @@ export default function ParseASTRONVOForm(formData, page) {
   //  "status": "null|fetching|fetched",
   //  "results": null}
   let catalog = formInput.find(([key]) => key === "catalog")[1];
-  let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; //+ `&page=${page}`
-  // testing api with page=1, failing at the backend at the moment
-  page === 1 ? console.log("Page number is 1") : (esapquery += `&page=${page}`);
+  let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog;
   queries.push({
     catalog: catalog,
     esapquery: esapquery,
diff --git a/src/utils/form/parseApertifForm.js b/src/utils/form/parseApertifForm.js
index 6aab904362942e15d814bdf12d9ca3f12d7b244e..4b43e2816a9cd5e54cff0727a8a5ab061a80f421 100644
--- a/src/utils/form/parseApertifForm.js
+++ b/src/utils/form/parseApertifForm.js
@@ -1,4 +1,4 @@
-export default function ParseApertifForm(formData, page) {
+export default function ParseApertifForm(formData) {
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
   // {"catalog": "catalogname",
@@ -20,7 +20,7 @@ export default function ParseApertifForm(formData, page) {
   //  "results": null}
   let catalog = formInput.find(([key]) => key === "catalog")[1];
   let esapquery =
-    query + `${`${query}` ? "&" : ""}archive_uri=` + catalog + `&page=${page}`;
+    query + `${`${query}` ? "&" : ""}archive_uri=` + catalog;
   queries.push({
     catalog: catalog,
     esapquery: esapquery,
diff --git a/src/utils/form/parseIVOAForm.js b/src/utils/form/parseIVOAForm.js
index 2b3fadcf898d051b1ed7b733e549fd25e049fe1b..b9aa15cb545dd507a4806c0d70f56504e8d8718f 100644
--- a/src/utils/form/parseIVOAForm.js
+++ b/src/utils/form/parseIVOAForm.js
@@ -1,4 +1,4 @@
-export default function ParseIVOAForm(formData, page) {
+export default function ParseIVOAForm(formData) {
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
   // {"catalog": "catalogname",
@@ -28,8 +28,7 @@ export default function ParseIVOAForm(formData, page) {
     "get-services/?" +
     query +
     `${`${query}` ? "&" : ""}dataset_uri=` +
-    catalog +
-    `&page=${page}`;
+    catalog;
 
   queries.push({
     catalog: catalog,
diff --git a/src/utils/form/parseLOFARForm.js b/src/utils/form/parseLOFARForm.js
index 8f8ff91cf9c6cd1e297449c00b2e41702ed20a51..fb06e3d302fe9edfc571b2797167ef8f220cbbb8 100644
--- a/src/utils/form/parseLOFARForm.js
+++ b/src/utils/form/parseLOFARForm.js
@@ -1,4 +1,4 @@
-export default function ParseLOFARForm(formData, page) {
+export default function ParseLOFARForm(formData) {
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
   // {"catalog": "catalogname",
@@ -20,7 +20,7 @@ export default function ParseLOFARForm(formData, page) {
   //  "results": null}
   let catalog = formInput.find(([key]) => key === "catalog")[1];
   let esapquery =
-    query + `${`${query}` ? "&" : ""}archive_uri=` + catalog + `&page=${page}`;
+    query + `${`${query}` ? "&" : ""}archive_uri=` + catalog ;
   queries.push({
     catalog: catalog,
     esapquery: esapquery,
diff --git a/src/utils/form/parseQueryForm.js b/src/utils/form/parseQueryForm.js
index 62d7ec47344ccab0d0631caf302fb3369b441a42..92126fbc7c620b5b30e861dd77af06710f398610 100644
--- a/src/utils/form/parseQueryForm.js
+++ b/src/utils/form/parseQueryForm.js
@@ -6,22 +6,22 @@ import parseApertifForm from "./parseApertifForm";
 import parseASTRONVOForm from "./parseASTRONVOForm";
 import parseRucioForm from "./parseRucioForm";
 
-export default function parseQueryForm(gui, formData, page) {
+export default function parseQueryForm(gui, formData) {
   switch (gui) {
     case "adex":
-      return parseADEXForm(formData, page);
+      return parseADEXForm(formData);
     case "zooniverse":
-      return parseZooniverseForm(formData, page);
+      return parseZooniverseForm(formData);
     case "lofar":
-      return parseLOFARForm(formData, page);
+      return parseLOFARForm(formData);
     case "apertif":
-      return parseApertifForm(formData, page);
+      return parseApertifForm(formData);
     case "astron_vo":
-      return parseASTRONVOForm(formData, page);
+      return parseASTRONVOForm(formData);
     case "ivoa":
-      return parseIVOAForm(formData, page);
+      return parseIVOAForm(formData);
     case "rucio":
-        return parseRucioForm(formData, page);
+        return parseRucioForm(formData);
     default:
       return null;
   }
diff --git a/src/utils/form/parseRucioForm.js b/src/utils/form/parseRucioForm.js
index a0571bb15f2f15432fc230ea49a9d0309eaa281c..c460b203eca02fe1eb89e0076be6f78ce94e57d7 100644
--- a/src/utils/form/parseRucioForm.js
+++ b/src/utils/form/parseRucioForm.js
@@ -1,4 +1,4 @@
-export default function parseRucioForm(formData, page) {
+export default function parseRucioForm(formData) {
   let formInput = Object.entries(formData);
 
   let query = "";
@@ -16,6 +16,6 @@ export default function parseRucioForm(formData, page) {
   console.log("Rucio Query", query);
   return [{
     catalog: "rucio",
-    esapquery: esapquery + `&page=${page}`
+    esapquery: esapquery
   }];
 }
diff --git a/src/utils/form/parseVOServiceForm.js b/src/utils/form/parseVOServiceForm.js
index 69d411fc81eab9f8780108629e78264c70f23caa..6a4898bee252bd2535881e34aa1146946b83734c 100644
--- a/src/utils/form/parseVOServiceForm.js
+++ b/src/utils/form/parseVOServiceForm.js
@@ -1,4 +1,4 @@
-export default function ParseVOServiceForm(formData, access_url, page) {
+export default function ParseVOServiceForm(formData, access_url) {
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
   // {"catalog": "catalogname",
@@ -31,9 +31,7 @@ export default function ParseVOServiceForm(formData, access_url, page) {
   let esapquery =
     "query/?" +
     query +
-    `${`${query}` ? "&" : ""}dataset_uri=` +
-    catalog +
-    `&page=${page}`;
+    `${`${query}` ? "&" : ""}dataset_uri=` + catalog;
 
   queries.push({
     catalog: access_url,
diff --git a/src/utils/form/parseZooniverseForm.js b/src/utils/form/parseZooniverseForm.js
index 50284bb4c8ab1e2db35e4cd2b3446662b477e284..65618c354e53c316ef0b96626588d172596ba83a 100644
--- a/src/utils/form/parseZooniverseForm.js
+++ b/src/utils/form/parseZooniverseForm.js
@@ -1,4 +1,4 @@
-export default function parseZooniverseForm(formData, page) {
+export default function parseZooniverseForm(formData) {
   let catalogs = ["zooniverse_projects", "zooniverse_workflows"];
   let queries = [];
   // queries is an array of dictionaries, where each dictionary consists of
@@ -45,7 +45,7 @@ export default function parseZooniverseForm(formData, page) {
 
     queries.push({
       catalog: catalog,
-      esapquery: esapquery + `&page=${page}`,
+      esapquery: esapquery,
     });
   }
   console.log("Queries:", queries);