diff --git a/src/client/containers/SemanticPortal.js b/src/client/containers/SemanticPortal.js
index 2f1095bae23125278f5b0242454b8ef75ff83935..42712868405303f0497faf49acf66a1604bbad56 100644
--- a/src/client/containers/SemanticPortal.js
+++ b/src/client/containers/SemanticPortal.js
@@ -64,7 +64,8 @@ const {
   portalID,
   rootUrl,
   perspectives,
-  layoutConfig
+  layoutConfig,
+  knowledgeGraphMetadataSource
 } = portalConfig
 const perspectiveConfig = await createPerspectiveConfig({
   portalID,
@@ -627,31 +628,33 @@ const SemanticPortal = props => {
 
           />
           {/* create routes for info buttons */}
-          <Route
-            path={`${rootUrlWithLang}/about`}
-            render={() =>
-              <div className={classNames(classes.mainContainer, classes.textPageContainer)}>
-                <TextPage>
-                  {intl.getHTML('aboutThePortalPartOne')}
-                  <KnowledgeGraphMetadataTable
-                    portalConfig={portalConfig}
-                    layoutConfig={layoutConfig}
-                    perspectiveID='perspective1'
-                    resultClass='perspective1KnowledgeGraphMetadata'
-                    fetchKnowledgeGraphMetadata={props.fetchKnowledgeGraphMetadata}
-                    knowledgeGraphMetadata={props.perspective1.knowledgeGraphMetadata}
-                  />
-                  {intl.getHTML('aboutThePortalPartTwo')}
-                </TextPage>
-              </div>}
-          />
-          <Route
-            path={`${rootUrlWithLang}/instructions`}
-            render={() =>
-              <div className={classNames(classes.mainContainer, classes.textPageContainer)}>
-                <TextPage>{intl.getHTML('instructions')}</TextPage>
-              </div>}
-          />
+          {!layoutConfig.topBar.externalAboutPage &&
+            <Route
+              path={`${rootUrlWithLang}/about`}
+              render={() =>
+                <div className={classNames(classes.mainContainer, classes.textPageContainer)}>
+                  <TextPage>
+                    {intl.getHTML('aboutThePortalPartOne')}
+                    <KnowledgeGraphMetadataTable
+                      portalConfig={portalConfig}
+                      layoutConfig={layoutConfig}
+                      perspectiveID={knowledgeGraphMetadataSource}
+                      resultClass='knowledgeGraphMetadata'
+                      fetchKnowledgeGraphMetadata={props.fetchKnowledgeGraphMetadata}
+                      knowledgeGraphMetadata={props[knowledgeGraphMetadataSource].knowledgeGraphMetadata}
+                    />
+                    {intl.getHTML('aboutThePortalPartTwo')}
+                  </TextPage>
+                </div>}
+            />}
+          {!layoutConfig.topBar.externalInstructions &&
+            <Route
+              path={`${rootUrlWithLang}/instructions`}
+              render={() =>
+                <div className={classNames(classes.mainContainer, classes.textPageContainer)}>
+                  <TextPage>{intl.getHTML('instructions')}</TextPage>
+                </div>}
+            />}
         </>
       </div>
     </MuiPickersUtilsProvider>
diff --git a/src/client/epics/index.js b/src/client/epics/index.js
index dfcf8fae7cd330e97c462b1a728f038cc2d8cbca..85a619f175356e4e8f814cd6ab452cd4a6e5355e 100644
--- a/src/client/epics/index.js
+++ b/src/client/epics/index.js
@@ -545,7 +545,7 @@ const fetchKnowledgeGraphMetadataEpic = (action$, state$) => action$.pipe(
     }).pipe(
       map(ajaxResponse => updateKnowledgeGraphMetadata({
         resultClass: action.resultClass,
-        data: ajaxResponse.response.data[0],
+        data: ajaxResponse.response.data ? ajaxResponse.response.data[0] : null,
         sparqlQuery: ajaxResponse.response.sparqlQuery
       })),
       catchError(error => of({
diff --git a/src/configs/portalConfig.json b/src/configs/portalConfig.json
index 30b6dc74227a9365457e68ec4def59531dcf6a43..41fee6fae56657a3ec0cd854c92ad440a3619e01 100644
--- a/src/configs/portalConfig.json
+++ b/src/configs/portalConfig.json
@@ -19,6 +19,7 @@
             "places"
         ]
     },
+    "knowledgeGraphMetadataSource": "perspective1",
     "localeConfig": {
         "defaultLocale": "en",
         "readTranslationsFromGoogleSheets": "false",
@@ -60,6 +61,8 @@
         "topBar": {
             "showLanguageButton": true,
             "feedbackLink": "https://link.webropolsurveys.com/...",
+            "externalInstructions": false,
+            "externalAboutPage": false,
             "reducedHeight": 44,
             "defaultHeight": 64,
             "mobileMenuBreakpoint": 1360,
diff --git a/src/configs/sampo/search_perspectives/perspective1.json b/src/configs/sampo/search_perspectives/perspective1.json
index 53152059e441fcc1e7234ea2633f7c523e29dc15..42b7771cec0c014a608e383a5cddf6554436bc4d 100644
--- a/src/configs/sampo/search_perspectives/perspective1.json
+++ b/src/configs/sampo/search_perspectives/perspective1.json
@@ -55,7 +55,7 @@
             "resultClass": "perspective1",
             "facetClass": "perspective1"
         },
-        "perspective1KnowledgeGraphMetadata": {
+        "knowledgeGraphMetadata": {
             "sparqlQuery": "knowledgeGraphMetadataQuery",
             "resultMapper": "makeObjectList"
         }
diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js
index 6970933874c80c089f19a90675c402071e6cdccc..5a29697b4d1f18ddb06c7f3dfdf667d62148c210 100644
--- a/src/server/sparql/FacetResults.js
+++ b/src/server/sparql/FacetResults.js
@@ -118,6 +118,13 @@ export const getAllResults = ({
     langTagSecondary = null
   } = perspectiveConfig
   const resultClassConfig = perspectiveConfig.resultClasses[resultClass]
+  if (resultClassConfig === undefined) {
+    console.log(`Error: result class "${resultClass}" not defined for perspective "${perspectiveID}"`)
+    return Promise.resolve({
+      data: null,
+      sparqlQuery: ''
+    })
+  }
   const {
     sparqlQuery,
     sparqlQueryNodes = null,