diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c0f2c9466999f885671d41fc7551809771df1fae..0eb6616f7a5d9dfb95eae9edaf5b3fb27436412d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -39,8 +39,8 @@ deploy-esap-gui:
         - echo "Deployed"
     when: manual
     only:
-        - esap-gui-dev
-        - dev-nico
+        - esap-gui-dev-xxx
+        - dev-nico-xxx
         - master
 
 deploy-esap-gui-acceptance:
diff --git a/src/assets/Interactive.css b/src/assets/Interactive.css
index c8313892dc210d3c1ff610bb3f7e0c6e00cdbb49..91d5935f8b8bafa2216fafffebda08ce0efc9439 100644
--- a/src/assets/Interactive.css
+++ b/src/assets/Interactive.css
@@ -72,7 +72,7 @@
     transition: transform 0.15s ease-out, font-size 0.15s ease-out, background-color 0.2s ease-out, color 0.15s ease-out;
 }
 
-input[type=text], .placeholder-text{
+.ida input[type=text], .placeholder-text{
     font-size: 1.4rem;
     padding: 0 1.2rem;
 
diff --git a/src/components/basket/MyBasketPage.js b/src/components/basket/MyBasketPage.js
index ca43ca05f67fbb7a452b6477549866c82d0b676b..565641a384ac21cc17b9b71d4d8ce33cc0e8d23d 100644
--- a/src/components/basket/MyBasketPage.js
+++ b/src/components/basket/MyBasketPage.js
@@ -10,6 +10,7 @@ import APIButton from "./APIButton"
 import EmptyBasketButton from "./EmptyBasketButton"
 import { renderRowApertif, renderHeaderApertif }  from "../services/layout/ApertifResultsLayout"
 import { renderRowAstronVO, renderHeaderAstronVO }  from "../services/layout/AstronVOLayout"
+import { renderRowIVOA, renderHeaderIVOA }  from "../services/layout/IVOALayout"
 
 function renderRow(item) {
     switch(item.archive) {
@@ -44,6 +45,21 @@ function renderRow(item) {
                 </Table>
             </div>
 
+        case 'TODO_vo_reg':
+
+            return <div>
+                <Table className="mt-3" size="sm" responsive>
+                    <thead>
+                    <tr className="bg-light">
+                        {renderHeaderIVOA()}
+                    </tr>
+                    </thead>
+                    <tbody>
+                        {renderRowIVOA((item.record))}
+                    </tbody>
+                </Table>
+            </div>
+
         default:
             return JSON.stringify(item)
     }
diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js
index df0269691c4ba52234cf965107741186d4752e2d..7b6d07d098681b5baae506b41ae8f12b667beb2d 100644
--- a/src/components/query/QueryIVOARegistry.js
+++ b/src/components/query/QueryIVOARegistry.js
@@ -9,7 +9,7 @@ import QueryResults from "../services/query_results/QueryResults";
 import parseQueryForm from "../../utils/form/parseQueryForm";
 import { IVOAContext } from "../../contexts/IVOAContext";
 import parseVOServiceForm from "../../utils/form/parseVOServiceForm";
-import VOServiceResults from "../services/query_results/VOServiceResults";
+import VOServiceResults from "../services/query_results/IVOAResults";
 import { getQueryIcon } from "../../utils/styling";
 
 export default function QueryIVOARegistry() {
@@ -78,7 +78,6 @@ export default function QueryIVOARegistry() {
           if(queryStep === "run-query") {
           let tf_url = api_host + "query/get-tables-fields/?dataset_uri=vo_reg&access_url=" + query.catalog;
           console.log("table fields url: ", tf_url);
-
           axios
             .get(tf_url)
             .then((tfResponse) => {
@@ -208,7 +207,7 @@ export default function QueryIVOARegistry() {
             <div key={catalog} className="mt-3">
               <Row>
                 <Col>
-                  <h4>List of Services</h4>
+                  <h4>List of VO Resources</h4>
                 </Col>
                 <Col>
                   {selectedServices.length === 0 ? (
diff --git a/src/components/services/layout/IVOALayout.js b/src/components/services/layout/IVOALayout.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5f8e02dee1f3c422847a8255cfd88a840a15af8
--- /dev/null
+++ b/src/components/services/layout/IVOALayout.js
@@ -0,0 +1,62 @@
+import React, { useContext, useState, useEffect } from "react";
+import { Button } from "react-bootstrap";
+import Preview from "../../query/Preview";
+
+export function renderHeaderIVOA(queryMap, catalog, indice) {
+
+    return (<>
+        {queryMap.get(catalog).vo_table_schema.fields.map((field, index) => {
+            if ((field.name === "dataproduct_type") || (field.name === "dataproduct_subtype") ||
+                (field.name === "calib_level") || (field.name === "obs_collection") ||
+                (field.name === "obs_id") ||
+                (field.name === "calib_level") || (field.name === "access_url") ||
+                (field.name === "access_estsize") || (field.name === "target_name") ||
+                (field.name === "s_ra") || (field.name === "s_dec") ||
+                (field.name === "s_fov") ||
+                (field.name === "instrument_name") || (field.name === "preview")
+            ) {
+                indice.push(index);
+                return (<th>{field.name}</th>);
+            }
+            return null;
+        })}
+        </>
+    );
+}
+
+export function renderRowIVOA(queryResult, queryMap, catalog, indice, setPreview, setURL) {
+
+    return (<>
+        {queryResult.map((field, index) => {
+
+            if (indice.includes(index)) {
+                if (queryMap.get(catalog).vo_table_schema.fields[index].name === "access_url") {
+                    return (<td><a href={field} rel="noopener noreferrer" download>Download data</a></td>);
+                }
+                if (queryMap.get(catalog).vo_table_schema.fields[index].name === "preview") {
+                    return (<td>
+                        {
+                            <Button
+                                onClick={()=>{
+                                    setPreview(field);
+                                    setURL(field);
+                                }}
+                            >
+                                View Thumbnail
+                            </Button>
+                        }
+                    </td> );
+                }
+                if ((queryMap.get(catalog).vo_table_schema.fields[index].name === "s_ra") ||
+                    (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_dec") ||
+                    (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_fov")
+                ) {
+                    return (<td>{Number(field).toFixed(1)}</td>)
+                }
+                return (<td>{field}</td>) ;
+            }
+            return null;
+        })}
+        </>
+    );
+}
diff --git a/src/components/services/query_results/IVOAResults.js b/src/components/services/query_results/IVOAResults.js
new file mode 100644
index 0000000000000000000000000000000000000000..334e689b8c0218f33134bd032b03c28b8992d52d
--- /dev/null
+++ b/src/components/services/query_results/IVOAResults.js
@@ -0,0 +1,92 @@
+import React, { useContext } from "react";
+import { Alert, Table, Button } from "react-bootstrap"; 
+import { QueryContext } from "../../../contexts/QueryContext";
+import LoadingSpinner from "../../LoadingSpinner";
+import Paginate from "../../Paginate";
+import Preview from "../../query/Preview";
+import AddToBasket from "../../basket/AddToBasketCheckBox";
+import { renderHeaderIVOA, renderRowIVOA }  from "../layout/IVOALayout"
+
+function createBasketItem(record){
+    return {
+        archive: "vo_reg",
+        record: record,
+    };
+}
+
+export default function IVOAResults({ catalog }) {
+  const { queryMap, page, setPage, preview, setPreview, setURL } = useContext(QueryContext);
+
+  if (!queryMap.get(catalog)) return null;
+  console.log("VO service queryMap:", queryMap.get(catalog));
+
+  if (queryMap.get(catalog).status === "fetched") {
+    // if (queryMap.get(catalog).results[0].includes("ERROR"))
+    //   return (
+    //     <Alert variant="warning">{queryMap.get(catalog).results[0]}</Alert>
+    //   );
+      try {
+          if (queryMap.get(catalog).results.results.length === 0)
+              return <Alert variant="warning">No matching results found!</Alert>;
+      } catch (e) {
+          return <Alert variant="warning">No matching results found!</Alert>;
+      }
+
+    const numPages = queryMap.get(catalog).results.pages;
+    let indice = [];
+
+    return (
+      <div>
+        <h1>Results from {catalog}</h1>
+        <Paginate
+          getNewPage={(args) => {
+            return args.target ? setPage(parseFloat(args.target.text)) : null;
+          }}
+          currentPage={page}
+          numAdjacent={3}
+          numPages={numPages}
+        />
+
+        <Table className="mt-3" responsive>
+          <thead>
+              <tr className="bg-light">
+                  <th>Basket</th>
+                  {renderHeaderIVOA(queryMap, catalog, indice)}
+                  <th></th>
+              </tr>
+
+          </thead>
+          <tbody>
+            {queryMap.get(catalog).results.results.map((result) => {
+
+              let queryResult = result.result.split(",");
+
+              return (
+                <>
+                  <tr key={queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "access_url")]}>
+                      <td>
+                          <AddToBasket id={result.id} item={createBasketItem(queryResult)} />
+                      </td>
+                      {renderRowIVOA(queryResult, queryMap, catalog, indice, setPreview, setURL)}
+
+                  </tr>
+                  { 
+                    preview === queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "preview")] && 
+                      <tr key={queryResult.preview}>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td colSpan={queryResult.length-3} ><Preview /></td>
+                      </tr>
+                  }
+                </>
+              );
+            })}
+          </tbody>
+        </Table>
+      </div>
+    );
+  } else {
+    return <LoadingSpinner />;
+  }
+}
diff --git a/src/components/services/query_results/VOServiceResults.js b/src/components/services/query_results/VOServiceResults.js
deleted file mode 100644
index d5e73265782d8286282655b6378d19a4de9d3f65..0000000000000000000000000000000000000000
--- a/src/components/services/query_results/VOServiceResults.js
+++ /dev/null
@@ -1,116 +0,0 @@
-import React, { useContext } from "react";
-import { Alert, Table, Button } from "react-bootstrap"; 
-import { QueryContext } from "../../../contexts/QueryContext";
-import LoadingSpinner from "../../LoadingSpinner";
-import Paginate from "../../Paginate";
-import Preview from "../../query/Preview";
-
-export default function VORegistryResults({ catalog }) {
-  const { queryMap, page, setPage, preview, setPreview, setURL } = useContext(QueryContext);
-
-  if (!queryMap.get(catalog)) return null;
-  console.log("VO service queryMap:", queryMap.get(catalog));
-
-  if (queryMap.get(catalog).status === "fetched") {
-    // if (queryMap.get(catalog).results[0].includes("ERROR"))
-    //   return (
-    //     <Alert variant="warning">{queryMap.get(catalog).results[0]}</Alert>
-    //   );
-    if (queryMap.get(catalog).results.results.length === 0)
-      return <Alert variant="warning">No matching results found!</Alert>;
-
-    const numPages = queryMap.get(catalog).results.pages;
-    let indice = [];
-
-    return (
-      <div>
-        <h1>Results from {catalog}</h1>
-        <Paginate
-          getNewPage={(args) => {
-            return args.target ? setPage(parseFloat(args.target.text)) : null;
-          }}
-          currentPage={page}
-          numAdjacent={3}
-          numPages={numPages}
-        />
-
-        <Table className="mt-3" responsive>
-          <thead>
-            <tr className="bg-light">
-              {queryMap.get(catalog).vo_table_schema.fields.map((field, index) => {
-                if ((field.name === "dataproduct_type") || (field.name === "dataproduct_subtype") ||
-                    (field.name === "calib_level") || (field.name === "obs_collection") ||
-                    (field.name === "obs_id") ||
-                    (field.name === "calib_level") || (field.name === "access_url") ||
-                    (field.name === "access_estsize") || (field.name === "target_name") ||
-                    (field.name === "s_ra") || (field.name === "s_dec") ||
-                    (field.name === "s_fov") ||
-                    (field.name === "instrument_name") || (field.name === "preview")
-                ) {
-                  indice.push(index);
-                  return (<th>{field.name}</th>);
-                }
-                return null;
-              })}
-            </tr>
-          </thead>
-          <tbody>
-            {queryMap.get(catalog).results.results.map((result) => {
-
-              let queryResult = result.result.split(",");
-
-              return (
-                <>
-                  <tr key={queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "access_url")]}>
-
-                    {queryResult.map((field, index) => {
-
-                      if (indice.includes(index)) {
-                        if (queryMap.get(catalog).vo_table_schema.fields[index].name === "access_url") {
-                          return (<td><a href={field} rel="noopener noreferrer" download>Download data</a></td>);
-                        }
-                        if (queryMap.get(catalog).vo_table_schema.fields[index].name === "preview") {
-                          return (<td>
-                            {
-                              <Button
-                                  onClick={()=>{
-                                      setPreview(field);
-                                      setURL(field);
-                                  }}
-                              >
-                                  View Thumbnail
-                              </Button>
-                            }
-                          </td> );
-                        }
-                        if ((queryMap.get(catalog).vo_table_schema.fields[index].name === "s_ra") ||
-                            (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_dec") ||
-                            (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_fov")
-                        ) {
-                          return (<td>{Number(field).toFixed(1)}</td>)
-                        }
-                        return (<td>{field}</td>) ;
-                      }
-                      return null;
-                    })}
-                  </tr>
-                  { 
-                    preview === queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "preview")] && 
-                      <tr key={queryResult.preview}>
-                        <td></td>
-                        <td></td>
-                        <td></td>
-                        <td colSpan={queryResult.length-3} ><Preview /></td>
-                      </tr>
-                  }
-                </>
-              );
-            })}
-          </tbody>
-        </Table>
-      </div>
-    );
-  } else {
-    return <LoadingSpinner />;
-  }
-}
diff --git a/src/routes/Routes.js b/src/routes/Routes.js
index 6b50663aa3d4208f1c3e7cd2c28ec9881c95977a..08970e08824b2bcf9f40efbeb584b659c65f4be6 100644
--- a/src/routes/Routes.js
+++ b/src/routes/Routes.js
@@ -90,7 +90,7 @@ export default function Routes() {
 
         </Switch>
 
-      <footer><small>esap-gui version 8 oct 2021 - 12:30</small></footer>
+      <footer><small>esap-gui version 8 oct 2021 - 15:30</small></footer>
     </Router>
   );
 }