diff --git a/src/server/index.js b/src/server/index.js
index 049489bc09fa187cab5aebdadb7978d87625ce96..0d503a5176343f7570467745c07cf399bbdd6395 100644
--- a/src/server/index.js
+++ b/src/server/index.js
@@ -17,61 +17,73 @@ app.use(function(req, res, next) {
   next();
 });
 
-app.get(`${apiPath}/:resultClass/paginated`, (req, res, next) => {
-  return getPaginatedResults({
-    resultClass: req.params.resultClass,
-    page: parseInt(req.query.page) || null,
-    pagesize: parseInt(req.query.pagesize) || null,
-    uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
-    spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
-    sortBy: req.query.sortBy || null,
-    sortDirection: req.query.sortDirection || null
-  }).then(data => {
+// https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016
+app.get(`${apiPath}/:resultClass/paginated`, async (req, res, next) => {
+  try {
+    const data = await getPaginatedResults({
+      resultClass: req.params.resultClass,
+      page: parseInt(req.query.page) || null,
+      pagesize: parseInt(req.query.pagesize) || null,
+      uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
+      spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
+      sortBy: req.query.sortBy || null,
+      sortDirection: req.query.sortDirection || null
+    });
     res.json(data);
-  }).catch(next);
+  } catch(error) {
+    next(error);
+  }
 });
 
-app.get(`${apiPath}/:resultClass/all`, (req, res, next) => {
-  return getAllResults({
-    resultClass: req.params.resultClass,
-    facetClass: req.query.facetClass || null,
-    uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
-    spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
-    variant: req.query.variant || null,
-  }).then(data => {
+app.get(`${apiPath}/:resultClass/all`, async (req, res, next) => {
+  try {
+    const data = await getAllResults({
+      resultClass: req.params.resultClass,
+      facetClass: req.query.facetClass || null,
+      uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
+      spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
+      variant: req.query.variant || null,
+    });
     res.json({
       resultCount: data.count,
       results: data
     });
-  }).catch(next);
+  } catch(error) {
+    next(error);
+  }
 });
 
-app.get(`${apiPath}/:resultClass/instance/:uri`, (req, res, next) => {
-  return getByURI({
-    resultClass: req.params.resultClass,
-    facetClass: req.query.facetClass || null,
-    uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
-    spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
-    variant: req.query.variant || null,
-    uri: req.params.uri
-  })
-    .then(data => {
-      res.json(data[0]);
-    }).catch(next);
+app.get(`${apiPath}/:resultClass/instance/:uri`, async (req, res, next) => {
+  try {
+    const data = await getByURI({
+      resultClass: req.params.resultClass,
+      facetClass: req.query.facetClass || null,
+      uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
+      spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
+      variant: req.query.variant || null,
+      uri: req.params.uri
+    });
+    // there is always one object in the 'data' array
+    res.json(data[0]);
+  } catch(error) {
+    next(error);
+  }
 });
 
-app.get(`${apiPath}/:facetClass/facet/:id`, (req, res, next) => {
-  return getFacet({
-    facetClass: req.params.facetClass,
-    facetID: req.params.id,
-    sortBy: req.query.sortBy,
-    sortDirection: req.query.sortDirection,
-    uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
-    spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters)
-  })
-    .then(data => {
-      res.json(data);
-    }).catch(next);
+app.get(`${apiPath}/:facetClass/facet/:id`, async (req, res, next) => {
+  try {
+    const data = await getFacet({
+      facetClass: req.params.facetClass,
+      facetID: req.params.id,
+      sortBy: req.query.sortBy,
+      sortDirection: req.query.sortDirection,
+      uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
+      spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters)
+    });
+    res.json(data);
+  } catch(error) {
+    next(error);
+  }
 });
 
 /*  Routes are matched to a url in order of their definition
diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js
index 99e17b4d80cbe410d602c6cce22e13227764cb08..2eeb45348b9d42f50508ede73990c6f2b293f5b4 100644
--- a/src/server/sparql/FacetResults.js
+++ b/src/server/sparql/FacetResults.js
@@ -1,4 +1,4 @@
-import SparqlSearchEngine from './SparqlSearchEngine';
+import { runSelectQuery } from './SparqlApi';
 import { prefixes } from './SparqlQueriesPrefixes';
 import { endpoint, countQuery, facetResultSetQuery } from './SparqlQueriesGeneral';
 import { manuscriptProperties, productionPlacesQuery, migrationsQuery } from './SparqlQueriesManuscripts';
@@ -11,9 +11,7 @@ import { mapCount } from './Mappers';
 import { makeObjectList } from './SparqlObjectMapper';
 import { generateFilter } from './Filters';
 
-const sparqlSearchEngine = new SparqlSearchEngine();
-
-export const getPaginatedResults = ({
+export const getPaginatedResults = async ({
   resultClass,
   page,
   pagesize,
@@ -22,22 +20,34 @@ export const getPaginatedResults = ({
   sortBy,
   sortDirection
 }) => {
-  return Promise.all([
+  const [ resultCount, paginatedData ] = await Promise.all([
     getResultCount(resultClass, uriFilters, spatialFilters),
     getPaginatedData({ resultClass, page, pagesize, uriFilters, spatialFilters, sortBy, sortDirection }),
-  ])
-    .then(data => {
-      return {
-        resultCount: data[0].count,
-        pagesize: pagesize,
-        page: page,
-        results: data[1]
-      };
-    });
+  ]);
+  return {
+    resultCount: resultCount,
+    pagesize: pagesize,
+    page: page,
+    results: paginatedData
+  };
 };
 
+  // return Promise.all([
+  //   getResultCount(resultClass, uriFilters, spatialFilters),
+  //   getPaginatedData({ resultClass, page, pagesize, uriFilters, spatialFilters, sortBy, sortDirection }),
+  // ])
+  //   .then(data => {
+  //     return {
+  //       resultCount: data[0].count,
+  //       pagesize: pagesize,
+  //       page: page,
+  //       results: data[1]
+  //     };
+  //   });
+
+
 export const getAllResults = ({
-  resultClass,
+  resultClass, // TODO: handle other classes than manuscripts
   facetClass,
   uriFilters,
   spatialFilters,
@@ -73,7 +83,7 @@ export const getAllResults = ({
   // if (variant == 'productionPlaces') {
   //   console.log(prefixes + q)
   // }
-  return sparqlSearchEngine.doSearch(prefixes + q, endpoint, makeObjectList);
+  return runSelectQuery(prefixes + q, endpoint, makeObjectList);
 };
 
 const getResultCount = (resultClass, uriFilters, spatialFilters) => {
@@ -91,7 +101,7 @@ const getResultCount = (resultClass, uriFilters, spatialFilters) => {
       facetID: null
     }));
   }
-  return sparqlSearchEngine.doSearch(prefixes + q, endpoint, mapCount);
+  return runSelectQuery(prefixes + q, endpoint, mapCount);
 };
 
 const getPaginatedData = ({
@@ -142,7 +152,7 @@ const getPaginatedData = ({
   }
   q = q.replace('<RESULT_SET_PROPERTIES>', resultSetProperties);
   // console.log(prefixes + q)
-  return sparqlSearchEngine.doSearch(prefixes + q, endpoint, makeObjectList);
+  return runSelectQuery(prefixes + q, endpoint, makeObjectList);
 };
 
 export const getByURI = ({
@@ -173,5 +183,5 @@ export const getByURI = ({
   // if (variant === 'productionPlaces') {
   //   console.log(prefixes + q)
   // }
-  return sparqlSearchEngine.doSearch(prefixes + q, endpoint, makeObjectList);
+  return runSelectQuery(prefixes + q, endpoint, makeObjectList);
 };
diff --git a/src/server/sparql/FacetValues.js b/src/server/sparql/FacetValues.js
index ba62438f35dd85ddfeeb3bf90e65af651205b1ae..a380dadb4cc03d36310e0096467f58719f6dfeab 100644
--- a/src/server/sparql/FacetValues.js
+++ b/src/server/sparql/FacetValues.js
@@ -1,5 +1,5 @@
 import { has } from 'lodash';
-import SparqlSearchEngine from './SparqlSearchEngine';
+import { runSelectQuery } from './SparqlApi';
 import { endpoint, facetValuesQuery } from './SparqlQueriesGeneral';
 import { prefixes } from './SparqlQueriesPrefixes';
 import { facetConfigs } from './FacetConfigs';
@@ -9,8 +9,6 @@ import {
   mapHierarchicalFacet,
 } from './Mappers';
 
-const sparqlSearchEngine = new SparqlSearchEngine();
-
 export const getFacet = ({
   facetClass,
   facetID,
@@ -77,5 +75,5 @@ export const getFacet = ({
   //   //console.log(uriFilters)
   //   console.log(prefixes + q)
   // }
-  return sparqlSearchEngine.doSearch(prefixes + q, endpoint, mapper);
+  return runSelectQuery(prefixes + q, endpoint, mapper);
 };
diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js
index b944a7c78cb9a2ff9f8b298451ed6e1ff4452240..6f88a5e5cb1ea1a59f6dd4d003637ee6292e5945 100644
--- a/src/server/sparql/Mappers.js
+++ b/src/server/sparql/Mappers.js
@@ -18,10 +18,8 @@ export const mapPlaces = (sparqlBindings) => {
   return results;
 };
 
-export const mapCount = (sparqlBindings) => {
-  return {
-    count: sparqlBindings[0].count.value
-  };
+export const mapCount = sparqlBindings => {
+  return sparqlBindings[0].count.value;
 };
 
 export const mapFacet = sparqlBindings => {
diff --git a/src/server/sparql/SparqlApi.js b/src/server/sparql/SparqlApi.js
index 920ee226ea368c765e72b51fa95d64249b84b598..f0e21425017410e499c2131e9c0c34614dfdac25 100644
--- a/src/server/sparql/SparqlApi.js
+++ b/src/server/sparql/SparqlApi.js
@@ -1,64 +1,41 @@
-//import fetch from 'node-fetch';
 import axios from 'axios';
-// const { URLSearchParams } = require('url');
+import querystring from 'querystring';
 
 const defaultSelectHeaders = {
   'Content-Type': 'application/x-www-form-urlencoded',
   'Accept': 'application/sparql-results+json; charset=utf-8'
 };
-const defaultConstructHeaders = {
-  'Content-Type': 'application/x-www-form-urlencoded',
-  'Accept': 'text/turtle'
-};
-
-class SparqlApi {
-
-  constructor({ endpoint }) {
-    this.endpoint = endpoint;
-  }
+// const defaultConstructHeaders = {
+//   'Content-Type': 'application/x-www-form-urlencoded',
+//   'Accept': 'text/turtle'
+// };
 
-  // query(query, { headers }) {
-  //   return new Promise((resolve, reject) => {
-  //     const params = new URLSearchParams();
-  //     params.append('query', query);
-  //     fetch(this.endpoint, {
-  //       method: 'post',
-  //       body:    params,
-  //       headers: headers,
-  //     })
-  //       .then(res => {
-  //         if (res.ok) { // res.status >= 200 && res.status < 300
-  //           return resolve(res.text());
-  //         } else {
-  //           return reject(res.statusText);
-  //         }
-  //       });
-  //   });
-  // }
-
-  selectQuery = async query => {
-    try {
-      const response = await axios({
-        method: 'post',
-        headers: defaultSelectHeaders,
-        url: this.endpoint,
-        data: { query }
-      });
-      return JSON.parse(response);
-    } catch(error) {
-      console.error(error);
+export const runSelectQuery = async (query, endpoint, resultMapper) => {
+  try {
+    const response = await axios({
+      method: 'post',
+      headers: defaultSelectHeaders,
+      url: endpoint,
+      data: querystring.stringify({ query }),
+    });
+    const { bindings } = response.data.results;
+    return bindings.length === 0 ? [] : resultMapper(bindings);
+  } catch(error) {
+    if (error.response) {
+    // The request was made and the server responded with a status code
+    // that falls out of the range of 2xx
+      console.log(error.response.data);
+    //console.log(error.response.status);
+    //console.log(error.response.headers);
+    } else if (error.request) {
+      // The request was made but no response was received
+      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
+      // http.ClientRequest in node.js
+      console.log(error.request);
+    } else {
+    // Something happened in setting up the request that triggered an Error
+      console.log('Error', error.message);
     }
+    console.log(error.config);
   }
-
-  // selectQuery(query, params = { headers: defaultSelectHeaders }) {
-  //   return this.query(query, params).then(data => {
-  //     return JSON.parse(data);
-  //   });
-  // }
-  //
-  // constructQuery(query, params = { headers: defaultConstructHeaders }) {
-  //   return this.query(query, params);
-  // }
-}
-
-export default SparqlApi;
+};
diff --git a/src/server/sparql/SparqlSearchEngine.js b/src/server/sparql/SparqlSearchEngine.js
deleted file mode 100644
index d2c08c106a1a5c46a69bdaa66814351a86608706..0000000000000000000000000000000000000000
--- a/src/server/sparql/SparqlSearchEngine.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import SparqlApi from './SparqlApi';
-
-class SparqlSearchEngine {
-  doSearch(sparqlQuery, endpoint, mapper) {
-    const sparqlApi = new SparqlApi({ endpoint });
-    return sparqlApi.selectQuery(sparqlQuery)
-      .then((data) => {
-        if (data.results.bindings.length === 0) {
-          return [];
-        }
-        return mapper ? mapper(data.results.bindings) : data.results.bindings;
-      });
-  }
-}
-
-export default SparqlSearchEngine;