diff --git a/deploy/csp/index.js b/deploy/csp/index.js
index b194ff12e7879ed94c7bdbb832732abbfb4c1c0f..5c11e142c406619f9f08df70220e568c69f4b9ac 100644
--- a/deploy/csp/index.js
+++ b/deploy/csp/index.js
@@ -85,7 +85,8 @@ module.exports = (app) => {
         'cdn.jsdelivr.net/npm/vue@2.5.16/', // plugin load external lib -> vue 2
         'cdn.jsdelivr.net/npm/preact@8.4.2/', // plugin load external lib -> preact
         'unpkg.com/react@16/umd/', // plugin load external lib -> react
-        'unpkg.com/kg-dataset-previewer@1.0.6/', // preview component
+        'unpkg.com/kg-dataset-previewer@1.1.4/', // preview component
+        'cdnjs.cloudflare.com/ajax/libs/mathjax/', // math jax
         (req, res) => res.locals.nonce ? `'nonce-${res.locals.nonce}'` : null,
         ...SCRIPT_SRC,
         ...WHITE_LIST_SRC,
diff --git a/src/atlasViewer/pluginUnit/pluginFactory.directive.ts b/src/atlasViewer/pluginUnit/pluginFactory.directive.ts
index fbc76ac7bf830258620539a0301a4cac71778713..28e0de95a724b0a0d06452d91bdf6f529b05dbf8 100644
--- a/src/atlasViewer/pluginUnit/pluginFactory.directive.ts
+++ b/src/atlasViewer/pluginUnit/pluginFactory.directive.ts
@@ -24,6 +24,9 @@ export const SUPPORT_LIBRARY_MAP: Map<string, Map<string, string>> = new Map([
   ['d3', new Map([
     ['5.7.0', 'https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js']
   ])],
+  ['mathjax', new Map([
+    ['3.1.2', 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.1.2/es5/tex-svg.js']
+  ])]
 ])
 
 export const parseLibrary = (libVer: string) => {
diff --git a/src/index.html b/src/index.html
index 96c74ac49e440c5a7da8dc195ceb5e6f38837aeb..3fce358392e951472c13d4b67c4edd4d58ffb887 100644
--- a/src/index.html
+++ b/src/index.html
@@ -12,7 +12,7 @@
   <link rel="stylesheet" href="theme.css">
   <link rel="stylesheet" href="version.css">
   
-  <script src="https://unpkg.com/kg-dataset-previewer@1.0.6/dist/kg-dataset-previewer/kg-dataset-previewer.js" defer>
+  <script src="https://unpkg.com/kg-dataset-previewer@1.1.4/dist/kg-dataset-previewer/kg-dataset-previewer.js" defer>
   </script>
 
   <title>Interactive Atlas Viewer</title>
diff --git a/src/ui/regionalFeatures/regionalFeature.service.ts b/src/ui/regionalFeatures/regionalFeature.service.ts
index e10a5390ba9d3dac1c68fcacc9b7b351686e5a1e..3151f329660b047def9fe630e4a294da0768dd1b 100644
--- a/src/ui/regionalFeatures/regionalFeature.service.ts
+++ b/src/ui/regionalFeatures/regionalFeature.service.ts
@@ -1,14 +1,20 @@
 import { HttpClient } from "@angular/common/http";
-import { Injectable, OnDestroy } from "@angular/core";
+import { Inject, Injectable, OnDestroy, Optional } from "@angular/core";
 import { PureContantService } from "src/util";
 import { getIdFromFullId, getRegionHemisphere, getStringIdsFromRegion, flattenReducer } from 'common/util'
-import { forkJoin, Subject, Subscription } from "rxjs";
-import { map, switchMap } from "rxjs/operators";
+import { forkJoin, from, Observable, of, Subject, Subscription } from "rxjs";
+import { catchError, map, mapTo, shareReplay, switchMap, tap } from "rxjs/operators";
 import { IHasId } from "src/util/interfaces";
 import { select, Store } from "@ngrx/store";
 import { viewerStateSelectedTemplateSelector } from "src/services/state/viewerState/selectors";
 import { viewerStateAddUserLandmarks, viewreStateRemoveUserLandmarks } from "src/services/state/viewerState/actions";
 import { uiStateMouseoverUserLandmark } from "src/services/state/uiState/selectors";
+import { APPEND_SCRIPT_TOKEN } from "src/util/constants";
+
+const libraries = [
+  'https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js',
+  'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.1.2/es5/tex-svg.js'
+]
 
 export interface IFeature extends IHasId{
   type: string
@@ -22,18 +28,31 @@ export interface IFeature extends IHasId{
 
 export class RegionalFeaturesService implements OnDestroy{
 
+  public depScriptLoaded$: Observable<boolean>
+
   private subs: Subscription[] = []
   private templateSelected: any
   constructor(
     private http: HttpClient,
     private pureConstantService: PureContantService,
-    private store$: Store<any>
+    private store$: Store<any>,
+    @Optional() @Inject(APPEND_SCRIPT_TOKEN) private appendScript: (src: string) => Promise<HTMLScriptElement>
   ){
     this.subs.push(
       this.store$.pipe(
         select(viewerStateSelectedTemplateSelector)
       ).subscribe(val => this.templateSelected = val)
     )
+
+    this.depScriptLoaded$ = this.appendScript
+      ? from(
+        libraries.map(this.appendScript)
+      ).pipe(
+        mapTo(true),
+        catchError(() => of(false)),
+        shareReplay(1),
+      )
+      : of(false)
   }
 
   public mapFeatToCmp = new Map<string, any>()
diff --git a/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.component.ts b/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.component.ts
index 77aad9acc9a4b057464ba003d48d97c46153965c..533e5ea2818a13d8655fcad988a243dda4141e6e 100644
--- a/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.component.ts
+++ b/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.component.ts
@@ -1,6 +1,7 @@
-import { Component, EventEmitter, OnDestroy } from "@angular/core";
-import { Subscription } from "rxjs";
+import { Component, EventEmitter, OnDestroy, Optional } from "@angular/core";
+import { Observable, of, Subscription } from "rxjs";
 import { RegionalFeaturesService } from "src/ui/regionalFeatures/regionalFeature.service";
+import { PureContantService } from "src/util";
 import { RegionFeatureBase } from "../../base/regionFeature.base";
 import { ISingleFeature } from "../../interfaces";
 
@@ -15,12 +16,21 @@ export class ReceptorDensityFeatureCmp extends RegionFeatureBase implements ISin
   public DS_PREVIEW_URL = DATASET_PREVIEW_URL
   viewChanged: EventEmitter<null> = new EventEmitter()
 
-  private subs: Subscription[] = []
+  public darktheme$: Observable<boolean>
 
+  private subs: Subscription[] = []
+  public depScriptLoaded$: Observable<boolean>
   constructor(
-    regService: RegionalFeaturesService
+    regService: RegionalFeaturesService,
+    @Optional() pureConstantService: PureContantService
   ){
     super(regService)
+    this.depScriptLoaded$ = regService.depScriptLoaded$
+    if (pureConstantService) {
+      this.darktheme$ = pureConstantService.darktheme$
+    } else {
+      this.darktheme$ = of(false)
+    }
   }
 
   public selectedReceptor: string
diff --git a/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.template.html b/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.template.html
index a061700c4a95b5e1ee3dab4ed0d6d5c32ffb0a1e..90ac2e367b2e7112948ab4c613cab2a0481cd89c 100644
--- a/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.template.html
+++ b/src/ui/regionalFeatures/singleFeatures/receptorDensity/receptorDensity/receptorDensity.template.html
@@ -1,14 +1,16 @@
 <label for="fingerprint-cmp" class="d-block mat-h4 mt-4 text-muted">
   Fingerprint
 </label>
-<kg-dataset-previewer
-  *ngFor="let datum of (data$ | async | filterReceptorByType : '_fp_')"
-  id="fingerprint-cmp"
-  (renderEvent)="viewChanged.emit()"
-  [backendUrl]="DS_PREVIEW_URL"
-  [kgId]="feature['@id'] | getId"
-  [filename]="datum['@id']">
-</kg-dataset-previewer>
+
+<ng-container *ngFor="let datum of (data$ | async | filterReceptorByType : '_fp_')">
+  <ng-container *ngTemplateOutlet="datasetPreviewTmpl; context: {
+    id: 'fingerprint-cmp',
+    kgId: (feature['@id'] | getId),
+    filename: datum['@id']
+  }">
+  
+  </ng-container>
+</ng-container>
 
 <mat-form-field class="mt-2">
   <mat-label>
@@ -39,12 +41,33 @@
       </label>
     </ng-template>
 
+    <ng-container *ngTemplateOutlet="datasetPreviewTmpl; context: {
+      id: label + '-cmp',
+      kgId: (feature['@id'] | getId),
+      filename: datum['@id']
+    }">
+    </ng-container>
+  </ng-container>
+</ng-template>
+
+<ng-template #datasetPreviewTmpl let-id="id" let-kgId="kgId" let-filename="filename">
+  <kg-ds-prv-regional-feature-view
+    *ngIf="depScriptLoaded$ | async; else fallbackTmpl"
+    [attr.id]="id"
+    [darkmode]="darktheme$ | async"
+    (renderEvent)="viewChanged.emit()"
+    [backendUrl]="DS_PREVIEW_URL"
+    [kgId]="kgId"
+    [filename]="filename">
+  </kg-ds-prv-regional-feature-view>
+
+  <ng-template #fallbackTmpl>
     <kg-dataset-previewer
-      [attr.id]="label + '-cmp'"
+      [attr.id]="id"
       (renderEvent)="viewChanged.emit()"
       [backendUrl]="DS_PREVIEW_URL"
-      [kgId]="feature['@id'] | getId"
-      [filename]="datum['@id']">
+      [kgId]="kgId"
+      [filename]="filename">
     </kg-dataset-previewer>
-  </ng-container>
-</ng-template>
+  </ng-template>
+</ng-template>
\ No newline at end of file