diff --git a/src/components/DIRAC.js b/src/components/DIRAC.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ab4fe56b54f42df6bd3b8bcf3371d40ed406d47
--- /dev/null
+++ b/src/components/DIRAC.js
@@ -0,0 +1,13 @@
+import React from "react";
+
+export default function DIRAC() {
+  return (
+    <div className="embed-responsive embed-responsive-16by9">
+      <iframe
+        title="dirac"
+        className="embed-responsive-item"
+        allowFullScreen
+      ></iframe>
+    </div>
+  );
+}
diff --git a/src/components/query/QueryCatalogs.js b/src/components/query/QueryCatalogs.js
index bc5a17e5d6e40e11b2d9711329406b3f09daacb5..43b6bd51673b14d828f035dc84bb8dbc471ca960 100644
--- a/src/components/query/QueryCatalogs.js
+++ b/src/components/query/QueryCatalogs.js
@@ -39,6 +39,9 @@ export default function QueryCatalogs() {
       case "esap_zenodo":
         setConfigName("esap_zenodo");
         break;
+      case "esap_dirac":
+        setConfigName("esap_dirac");
+        break;
       case "astron_vo":
         setConfigName("astron_vo");
         break;
diff --git a/src/components/services/query_results/DIRACResults.js b/src/components/services/query_results/DIRACResults.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a55c7cc514371d80da114802e53f1dc6dbc7877
--- /dev/null
+++ b/src/components/services/query_results/DIRACResults.js
@@ -0,0 +1,48 @@
+import React, { useContext } from "react";
+import { Table, Alert, Form } from "react-bootstrap";
+import { QueryContext } from "../../../contexts/QueryContext";
+import LoadingSpinner from "../../LoadingSpinner";
+import Paginate from "../../Paginate";
+import AddToBasket from "../../basket/AddToBasketCheckBox";
+
+export default function DIRACResults({ catalog }) {
+  const context = useContext(QueryContext);
+  const { queryMap, page, setPage } = context;
+  const regex = /(<([^>]+)>)/ig;
+
+  if (!context.queryMap) return null;
+
+  if (context.queryMap.get(catalog).status === "fetched") {
+    if (context.queryMap.get(catalog).length === 0)
+      return <Alert variant="warning">No matching results found!</Alert>;
+    else if (catalog === "dirac") {
+      const diracResults = queryMap.get("dirac").map((hits, counter) => (
+/*
+        <>
+        <br/>
+        <br/>
+        <h4><a href={hits.links.latest_html} target="_blank"> {hits.metadata.title.replaceAll(regex, '')} </a></h4>
+        <a href={hits.links.conceptdoi} target="_blank"> <img src={hits.links.badge} alt="DOI"/> </a>
+        <br/>
+        {hits.metadata.description.replaceAll(regex, '').substring(0,200)}...
+        </>
+*/
+<>
+</>
+      ));
+
+      return (
+
+       <>
+         {diracResults}
+       </>
+
+      ); 
+
+    }
+  }
+  else {
+    return <LoadingSpinner />;
+  }
+}
+
diff --git a/src/components/services/query_results/QueryResults.js b/src/components/services/query_results/QueryResults.js
index 79c2e3529ed97674df5fa37b9043d0a1d64c5c36..c98f36f9273f87510c547a01b5b029742f9f53f1 100644
--- a/src/components/services/query_results/QueryResults.js
+++ b/src/components/services/query_results/QueryResults.js
@@ -6,6 +6,7 @@ import VORegListResults from "./VORegListResults";
 import LOFARResults from "./LOFARResults";
 import RucioResults from "./RucioResults";
 import ZenodoResults from "./ZenodoResults";
+import DIRACResults from "./DIRACResults";
 import SampResults from "./SampResults";
 
 export default function QueryResults({ catalog }) {
@@ -26,6 +27,8 @@ export default function QueryResults({ catalog }) {
       return <RucioResults catalog={catalog} />;
     case "zenodo":
       return <ZenodoResults catalog={catalog} />;
+    case "dirac":
+      return <DIRACResults catalog={catalog} />;
     case "samp":
       return <SampResults catalog={catalog} />;
     default:
diff --git a/src/utils/form/parseDIRACForm.js b/src/utils/form/parseDIRACForm.js
new file mode 100644
index 0000000000000000000000000000000000000000..7440fbe9fa276649a2142f8ba83dac0d721c8acb
--- /dev/null
+++ b/src/utils/form/parseDIRACForm.js
@@ -0,0 +1,21 @@
+export default function parseDIRACForm(formData) {
+  let formInput = Object.entries(formData);
+
+  let query = "";
+
+  for (let [key, value] of formInput) {
+    query += `${`${query}` ? "&" : ""}` + key + "=" + value;
+  }
+
+  let esapquery = [
+    query,
+    "archive_uri=esap_dirac",
+    `catalog=dirac`,
+  ].join("&");
+
+  console.log("DIRAC Job Submission (helloworld):", query);
+  return [{
+    catalog: "dirac",
+    esapquery: esapquery
+  }];
+}
diff --git a/src/utils/form/parseQueryForm.js b/src/utils/form/parseQueryForm.js
index 5e94a0e40eccacd584d4afab05cae3edadff1948..5b524136a8ba4c675f167baa15cb1657a04cc6f8 100644
--- a/src/utils/form/parseQueryForm.js
+++ b/src/utils/form/parseQueryForm.js
@@ -6,6 +6,7 @@ import parseApertifForm from "./parseApertifForm";
 import parseASTRONVOForm from "./parseASTRONVOForm";
 import parseRucioForm from "./parseRucioForm";
 import parseZenodoForm from "./parseZenodoForm";
+import parseDIRACForm from "./parseDIRACForm";
 
 export default function parseQueryForm(gui, formData) {
   switch (gui) {
@@ -25,6 +26,8 @@ export default function parseQueryForm(gui, formData) {
         return parseRucioForm(formData);
     case "zenodo":
         return parseZenodoForm(formData);
+    case "dirac":
+        return parseDIRACForm(formData);
     default:
       return null;
   }