diff --git a/src/app/analysis.service.ts b/src/app/analysis.service.ts
index 4acb83f3cd09d85c4a3ea5a0372cda2560382781..30b5b4f3ba7799a3dc22f0de04560c5306e95611 100644
--- a/src/app/analysis.service.ts
+++ b/src/app/analysis.service.ts
@@ -7,22 +7,30 @@ import {environment} from '../environments/environment';
 @Injectable({
   providedIn: 'root'
 })
+
 export class AnalysisService {
 
   private selectedProteins = new Map<string, Protein>();
-  private selectSubject = new Subject<{protein: Protein, selected: boolean}>();
+  private selectSubject = new Subject<{ protein: Protein, selected: boolean }>();
 
-  private token: string | null = null;
+  public tokens: any[] = [];
   private stats: any;
-  private task: any;
+  public tasks: any[] = [];
 
   private intervalId: any;
 
   constructor(private http: HttpClient) {
-    this.token = localStorage.getItem('token');
-    if (this.token) {
-      this.startWatching();
+    const tokens = localStorage.getItem('tokens');
+    if (tokens) {
+      this.tokens = JSON.parse(tokens);
     }
+    this.startWatching();
+  }
+
+  async getTasks() {
+    return await this.http.get<any>(`${environment.backend}tasks/?tokens=${JSON.stringify(this.tokens)}`).toPromise().catch((e) => {
+      clearInterval(this.intervalId);
+    });
   }
 
   addProtein(protein: Protein) {
@@ -56,13 +64,17 @@ export class AnalysisService {
     });
   }
 
-  getTask(): any {
-    return this.task;
+  getTask(token): any {
+    this.tasks.forEach((task) => {
+      if (task.token === token) {
+        return task;
+      }
+    });
   }
 
   reset() {
-    this.token = null;
-    this.task = null;
+    this.tokens = null;
+    this.tasks = null;
     this.stats = null;
     if (this.intervalId) {
       clearInterval(this.intervalId);
@@ -78,20 +90,15 @@ export class AnalysisService {
       algorithm,
       parameters,
     }).toPromise();
-    this.token = resp.token;
-    localStorage.setItem('token', this.token);
+    this.tokens.push(resp.token);
+    localStorage.setItem('tokens', JSON.stringify(this.tokens));
     this.startWatching();
   }
 
-  async startWatching() {
+  startWatching() {
     this.intervalId = setInterval(async () => {
-      const resp = await this.http.get<any>(`${environment.backend}task/?token=${this.token}`).toPromise().catch((e) => {
-        clearInterval(this.intervalId);
-      });
-      this.task = resp.task;
-      this.stats = resp.stats;
-      if (this.task.done) {
-        clearInterval(this.intervalId);
+      if (this.tokens.length > 0) {
+        this.tasks = await this.getTasks();
       }
     }, 1000);
   }
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 93855b9854318c676bd976f8a5f42d22a80b71f2..12e1934716a9cb637ca1e4f6d5e4693a2670fbb3 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -16,6 +16,7 @@ import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
 import {ProteinAnalysisComponent} from './components/protein-analysis/protein-analysis.component';
 import {SelectDatasetComponent} from './components/select-dataset/select-dataset.component';
 import {AnalysisWindowComponent} from './components/analysis-window/analysis-window.component';
+import { TaskListComponent } from './components/task-list/task-list.component';
 
 
 @NgModule({
@@ -28,6 +29,7 @@ import {AnalysisWindowComponent} from './components/analysis-window/analysis-win
     ProteinAnalysisComponent,
     SelectDatasetComponent,
     AnalysisWindowComponent,
+    TaskListComponent,
   ],
   imports: [
     BrowserModule,
diff --git a/src/app/components/analysis-window/analysis-window.component.html b/src/app/components/analysis-window/analysis-window.component.html
index 8321b431728def9dd4c101f9aacb51e52f0dd4ea..f8f3f26ce5515a0f1153e30a754e96ae1918331e 100644
--- a/src/app/components/analysis-window/analysis-window.component.html
+++ b/src/app/components/analysis-window/analysis-window.component.html
@@ -1,34 +1,100 @@
-<div class="card analysis">
-  <header class="card-header">
-    <p class="card-header-title">
-      <span class="icon">
-        <i class="fas fa-flask" aria-hidden="true"></i>
-      </span>
-      Analysis
-    </p>
-    <a (click)="closeAnalysisWindow()" class="card-header-icon" aria-label="more options">
-      <span class="icon">
-        <i class="fas fa-times" aria-hidden="true"></i>
-      </span>
-    </a>
-  </header>
-  <div class="card-content">
-    <div class="content">
-      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.
-      <a href="#">@bulmaio</a>. <a href="#">#css</a> <a href="#">#responsive</a>
-      <br>
-      <time datetime="2016-1-1">11:09 PM - 1 Jan 2016</time>
+<div *ngIf="token">
+  <div class="card analysis" *ngIf="info && info.done">
+    <header class="card-header">
+      <p class="card-header-title">
+        <span class="icon">
+          <i class="fas fa-flask" aria-hidden="true"></i>
+        </span>
+        Analysis Results
+      </p>
+      <a (click)="close()" class="card-header-icon" aria-label="close">
+        <span class="icon">
+          <i class="fas fa-times" aria-hidden="true"></i>
+        </span>
+      </a>
+    </header>
+    <div class="card-content">
+      <div class="content">
+        <div class="network center" #network>
+          <button class="button is-loading center">Loading</button>
+        </div>
+      </div>
+      <button (click)="toggleDrugs()">Show/hide</button>
     </div>
+    <footer class="card-footer">
+    </footer>
+  </div>
+
+  <div class="card analysis" *ngIf="info && !info.startedAt">
+    <header class="card-header">
+      <p class="card-header-title">
+        <span class="icon">
+          <i class="fas fa-cog" aria-hidden="true"></i>
+        </span>
+        Analysis Queued...
+      </p>
+      <a (click)="close()" class="card-header-icon" aria-label="close">
+        <span class="icon">
+          <i class="fas fa-times" aria-hidden="true"></i>
+        </span>
+      </a>
+    </header>
+    <div class="card-content">
+      <div class="content">
+        The analysis is queued
+        <!--TODO: Display queue information-->
+      </div>
+    </div>
+    <footer class="card-footer">
+    </footer>
+  </div>
+
+  <div class="card analysis" *ngIf="info && info.startedAt && !info.done">
+    <header class="card-header">
+      <p class="card-header-title">
+        <span class="icon">
+          <i class="fas fa-cog fa-spin" aria-hidden="true"></i>
+        </span>
+        Analysis in Progress...
+      </p>
+      <a (click)="close()" class="card-header-icon" aria-label="close">
+        <span class="icon">
+          <i class="fas fa-times" aria-hidden="true"></i>
+        </span>
+      </a>
+    </header>
+    <div class="card-content">
+      <div class="content">
+        The analysis is in progress
+        <!--TODO: Display analysis progress-->
+      </div>
+    </div>
+    <footer class="card-footer">
+    </footer>
+  </div>
+
+  <div class="card analysis" *ngIf="!info">
+    <header class="card-header">
+      <p class="card-header-title">
+        <span class="icon">
+          <i class="fas fa-question" aria-hidden="true"></i>
+        </span>
+        Analysis not found
+      </p>
+      <a (click)="close()" class="card-header-icon" aria-label="more options">
+        <span class="icon">
+          <i class="fas fa-times" aria-hidden="true"></i>
+        </span>
+      </a>
+    </header>
+    <div class="card-content">
+      <div class="content">
+        <span class="notification is-danger">
+          The analysis you were looking for is either gone or never existed.
+        </span>
+      </div>
+    </div>
+    <footer class="card-footer">
+    </footer>
   </div>
-  <footer class="card-footer">
-    <button [disabled]="true" (click)="export()" class="card-footer-item button is-primary"><span class="icon">
-        <i class="fas fa-cloud-download-alt" aria-hidden="true"></i>
-      </span><span>Export</span></button>
-    <button [disabled]="true" (click)="discard()" class="card-footer-item button is-danger"><span>Discard</span><span class="icon">
-        <i class="fas fa-trash" aria-hidden="true"></i>
-      </span></button>
-    <button (click)="closeAnalysisWindow()" class="card-footer-item button"><span>Close</span> <span class="icon">
-        <i class="fas fa-times" aria-hidden="true"></i>
-      </span></button>
-  </footer>
 </div>
diff --git a/src/app/components/analysis-window/analysis-window.component.spec.ts b/src/app/components/analysis-window/analysis-window.component.spec.ts
index 9ce1f4a019a8b355c5bea0a1f077824f7c686039..35a1330d5bcca33d20bf430e237388f3e10e810f 100644
--- a/src/app/components/analysis-window/analysis-window.component.spec.ts
+++ b/src/app/components/analysis-window/analysis-window.component.spec.ts
@@ -1,6 +1,7 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { AnalysisWindowComponent } from './analysis-window.component';
+import {AnalysisWindowComponent} from './analysis-window.component';
+import {HttpClientModule} from '@angular/common/http';
 
 describe('AnalysisWindowComponent', () => {
   let component: AnalysisWindowComponent;
@@ -8,9 +9,10 @@ describe('AnalysisWindowComponent', () => {
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [ AnalysisWindowComponent ]
+      declarations: [AnalysisWindowComponent],
+      imports: [HttpClientModule],
     })
-    .compileComponents();
+      .compileComponents();
   }));
 
   beforeEach(() => {
diff --git a/src/app/components/analysis-window/analysis-window.component.ts b/src/app/components/analysis-window/analysis-window.component.ts
index 1c6e12d3a314f2699ebfde0371e89970828aedc1..2516905c582fb7547b69f751f2749f20166cd890 100644
--- a/src/app/components/analysis-window/analysis-window.component.ts
+++ b/src/app/components/analysis-window/analysis-window.component.ts
@@ -1,22 +1,57 @@
-import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
+import {Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild} from '@angular/core';
+import {HttpClient} from '@angular/common/http';
+import {environment} from '../../../environments/environment';
+import {Edge, Effect, getDatasetFilename, Protein, ProteinNetwork} from '../../pages/protein-network';
+import {AnalysisService} from '../../analysis.service';
+
+declare var vis: any;
 
 @Component({
   selector: 'app-analysis-window',
   templateUrl: './analysis-window.component.html',
   styleUrls: ['./analysis-window.component.scss']
 })
-export class AnalysisWindowComponent implements OnInit {
+export class AnalysisWindowComponent implements OnInit, OnChanges {
+
+  @Input() token: string | null = null;
+  @Output() tokenChange = new EventEmitter<string | null>();
+
+  public info: any = null;
+  public stats: any = null;
 
-  @Input() analysisWindow: boolean;
-  @Output() closeWindow = new EventEmitter<boolean>();
+  @ViewChild('network', {static: false}) networkEl: ElementRef;
 
-  constructor() { }
+  private network: any;
+  private nodeData: { nodes: any, edges: any } = {nodes: null, edges: null};
+  private drugNodes = [];
+  private showDrugs = false;
 
-  ngOnInit(): void {
+  constructor(private http: HttpClient, private analysis: AnalysisService) {
   }
 
-  closeAnalysisWindow() {
-    this.closeWindow.emit(this.analysisWindow);
+  async ngOnInit() {
+  }
+
+  async ngOnChanges(changes: SimpleChanges) {
+    if (this.token) {
+      const {info, stats} = await this.getTask(this.token);
+      this.info = info;
+      this.stats = stats;
+
+      if (this.info && this.info.done) {
+        const result = await this.http.get<any>(`${environment.backend}result/?token=${this.token}`).toPromise();
+        this.createNetwork(result);
+      }
+    }
+  }
+
+  private async getTask(token: string): Promise<any> {
+    return await this.http.get(`${environment.backend}task/?token=${token}`).toPromise();
+  }
+
+  close() {
+    this.token = null;
+    this.tokenChange.emit(this.token);
   }
 
   discard() {
@@ -26,4 +61,100 @@ export class AnalysisWindowComponent implements OnInit {
   export() {
 
   }
+
+  public async createNetwork(result: any) {
+    const {nodes, edges} = this.mapDataToNodes(result);
+    this.nodeData.nodes = new vis.DataSet(nodes);
+    this.nodeData.edges = new vis.DataSet(edges);
+
+    const container = this.networkEl.nativeElement;
+    const options = {
+      layout: {
+        improvedLayout: false,
+      },
+    };
+
+    this.network = new vis.Network(container, this.nodeData, options);
+  }
+
+  private mapProteinToNode(protein: any): any {
+    let color = '#e2b600';
+    if (this.analysis.inSelection(protein)) {
+      color = '#c42eff';
+    }
+    return {
+      id: `p_${protein.proteinAc}`,
+      label: `${protein.proteinAc}`,
+      size: 10, color, shape: 'ellipse', shadow: false,
+    };
+  }
+
+  private mapDrugToNode(drug: any): any {
+    let color = '#ffffff';
+    if (drug.status === 'investigational') {
+      color = '#ffa066';
+    } else if (drug.status === 'approved') {
+      color = '#a0ff66';
+    }
+    return {
+      id: `d_${drug.drugId}`,
+      label: `${drug.name}`,
+      size: 10, color, shape: 'ellipse', shadow: true, font: {color: '#000000', size: 5},
+    };
+  }
+
+  private mapProteinProteinInteractionToEdge(edge: any): any {
+    return {
+      from: `p_${edge.from}`,
+      to: `p_${edge.to}`,
+      color: {color: '#afafaf', highlight: '#854141'},
+    };
+  }
+
+  private mapDrugProteinInteractionToEdge(edge: any): any {
+    return {
+      from: `p_${edge.proteinAc}`,
+      to: `d_${edge.drugId}`,
+      color: {color: '#afafaf', highlight: '#854141'},
+    };
+  }
+
+  private mapDataToNodes(result: any): { nodes: any[], edges: any[] } {
+    const nodes = [];
+    const edges = [];
+
+    for (const protein of result.proteins) {
+      nodes.push(this.mapProteinToNode(protein));
+    }
+
+    for (const drug of result.drugs) {
+      this.drugNodes.push(this.mapDrugToNode(drug));
+    }
+
+    for (const network of result.networks) {
+      for (const edge of network.ppEdges) {
+        edges.push(this.mapProteinProteinInteractionToEdge(edge));
+      }
+    }
+
+    for (const edge of result.dpEdges) {
+      edges.push(this.mapDrugProteinInteractionToEdge(edge));
+    }
+
+    return {
+      nodes,
+      edges,
+    };
+  }
+
+  public toggleDrugs() {
+    this.showDrugs = !this.showDrugs;
+
+    if (!this.showDrugs) {
+      this.nodeData.nodes.remove(this.drugNodes);
+    } else {
+      this.nodeData.nodes.add(this.drugNodes);
+    }
+  }
+
 }
diff --git a/src/app/components/protein-analysis/protein-analysis.component.html b/src/app/components/protein-analysis/protein-analysis.component.html
index 5786a67ec773aac7a442a43b6247c2b2707f3292..925105f96ba63b6e0533a172e29cb4431bc4e27e 100644
--- a/src/app/components/protein-analysis/protein-analysis.component.html
+++ b/src/app/components/protein-analysis/protein-analysis.component.html
@@ -1,6 +1,6 @@
 <div class="modal" [class.is-active]="show">
   <div class="modal-background"></div>
-  <div class="modal-card" *ngIf="!analysis.getTask()">
+  <div class="modal-card">
     <header class="modal-card-head">
       <p class="modal-card-title">Launch Protein Analysis</p>
       <button class="delete" aria-label="close" (click)="close()"></button>
@@ -35,62 +35,10 @@
         <span class="icon"><i class="fa fa-play"></i></span>
         <span>Key Pathway Miner</span>
       </button>
-      <button class="button is-primary" (click)="startTask()">
+      <button class="button is-primary" (click)="startTask(); close()">
         <span class="icon"><i class="fa fa-play"></i></span>
         <span>Demo</span>
       </button>
     </footer>
   </div>
-  <div class="modal-card" *ngIf="analysis.getTask()">
-    <div *ngIf="!analysis.getTask().startedAt">
-      <header class="modal-card-head">
-        <p class="modal-card-title">Queued...</p>
-        <button class="delete" aria-label="close" (click)="close()"></button>
-      </header>
-      <section class="modal-card-body">
-        <p>
-          Queue position: {{analysis.getStats().queuePosition}}
-        </p>
-        <p>
-          Queue length: {{analysis.getStats().queueLength}}
-        </p>
-      </section>
-      <footer class="modal-card-foot">
-        <button class="button is-danger" (click)="analysis.reset()">
-          <span class="icon"><i class="fa fa-stop"></i></span>
-          <span>Stop</span>
-        </button>
-      </footer>
-    </div>
-    <div *ngIf="analysis.getTask().startedAt && !analysis.getTask().done">
-      <header class="modal-card-head">
-        <p class="modal-card-title">Running...</p>
-        <button class="delete" aria-label="close" (click)="close()"></button>
-      </header>
-      <section class="modal-card-body">
-        <progress class="progress is-primary" [value]="analysis.getTask().progress * 100" max="100">15%</progress>
-      </section>
-      <footer class="modal-card-foot">
-        <button class="button is-danger" (click)="analysis.reset()">
-          <span class="icon"><i class="fa fa-stop"></i></span>
-          <span>Stop</span>
-        </button>
-      </footer>
-    </div>
-    <div *ngIf="analysis.getTask().done">
-      <header class="modal-card-head">
-        <p class="modal-card-title">View Results</p>
-        <button class="delete" aria-label="close" (click)="close()"></button>
-      </header>
-      <section class="modal-card-body">
-        <pre>{{analysis.getTask().result}}</pre>
-      </section>
-      <footer class="modal-card-foot">
-        <button class="button is-danger" (click)="analysis.reset()">
-          <span class="icon"><i class="fa fa-stop"></i></span>
-          <span>Discard</span>
-        </button>
-      </footer>
-    </div>
-  </div>
 </div>
diff --git a/src/app/components/task-list/task-list.component.html b/src/app/components/task-list/task-list.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..470df2baf919bb9d194cecc31e3b7a668d2e8fc0
--- /dev/null
+++ b/src/app/components/task-list/task-list.component.html
@@ -0,0 +1,21 @@
+<div class="content">
+  <div class="list is-hoverable">
+    <a *ngFor="let task of analysis.tasks" class="list-item">
+      <div *ngIf="!task.info.startedAt">
+        <a (click)="open(task.token)"><b>Algorithm: {{task.info.algorithm}}</b></a><br>
+        Queue Length: {{task.stats.queueLength}}<br>
+        Queue Position:{{task.stats.queuePosition}}
+      </div>
+      <div *ngIf="task.info.startedAt && !task.info.done">
+        <a (click)="open(task.token)">Algorithm: {{task.info.algorithm}}</a><br>
+        <progress class="progress is-primary" [value]="task.info.progress * 100" max="100"></progress>
+      </div>
+      <div *ngIf="task.info.done">
+        <a (click)="open(task.token)"><span>Algorithm: {{task.info.algorithm}}</span>
+          <span class="icon is-success"><i class="fas fa-check is-success"
+                                           aria-hidden="true"></i>
+        </span></a>
+      </div>
+    </a>
+  </div>
+</div>
diff --git a/src/app/components/task-list/task-list.component.scss b/src/app/components/task-list/task-list.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/app/components/task-list/task-list.component.spec.ts b/src/app/components/task-list/task-list.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f246c0881e31f11887bcc9735d6d74f7dcdb679a
--- /dev/null
+++ b/src/app/components/task-list/task-list.component.spec.ts
@@ -0,0 +1,27 @@
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {TaskListComponent} from './task-list.component';
+import {HttpClientModule} from '@angular/common/http';
+
+describe('TaskListComponent', () => {
+  let component: TaskListComponent;
+  let fixture: ComponentFixture<TaskListComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [TaskListComponent],
+      imports: [HttpClientModule],
+    })
+      .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(TaskListComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/components/task-list/task-list.component.ts b/src/app/components/task-list/task-list.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0ada658a9185ad41c0fe51195b935e787c1b0893
--- /dev/null
+++ b/src/app/components/task-list/task-list.component.ts
@@ -0,0 +1,26 @@
+import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
+import {AnalysisService} from '../../analysis.service';
+
+
+@Component({
+  selector: 'app-task-list',
+  templateUrl: './task-list.component.html',
+  styleUrls: ['./task-list.component.scss']
+})
+
+export class TaskListComponent implements OnInit {
+
+
+  @Output() token: EventEmitter<any> = new EventEmitter();
+
+  constructor(public analysis: AnalysisService) {
+  }
+
+  ngOnInit(): void {
+  }
+
+  open(token) {
+    this.token.emit(token);
+  }
+
+}
diff --git a/src/app/pages/explorer-page/explorer-page.component.html b/src/app/pages/explorer-page/explorer-page.component.html
index d46b84e54f3f356c78d24ce3f294e14da70621a2..5a75d80cec96652b3500416b8fddef135953b272 100644
--- a/src/app/pages/explorer-page/explorer-page.component.html
+++ b/src/app/pages/explorer-page/explorer-page.component.html
@@ -1,10 +1,10 @@
 <app-protein-analysis [(show)]="showAnalysisDialog"></app-protein-analysis>
 
-<div class="content explorer">
+<div class="covex explorer">
 
-  <div class="content left-window">
+  <div class="covex left-window">
     <div>
-      <div class="content bar-left">
+      <div class="covex bar-left">
 
         <div class="card bar-small">
           <header class="card-header">
@@ -95,9 +95,7 @@
         </div>
       </div>
 
-
-      <div class="content network">
-
+      <div class="covex network">
         <div class="card network">
           <header class="card-header">
             <p class="card-header-title">
@@ -127,12 +125,12 @@
       </div>
     </div>
 
-    <div class="analysis-view" [hidden]="!analysisWindow">
-      <app-analysis-window (closeWindow)="closeAnalysisWindow()"></app-analysis-window>
+    <div class="analysis-view" *ngIf="selectedAnalysisToken">
+      <app-analysis-window [(token)]="selectedAnalysisToken"></app-analysis-window>
     </div>
   </div>
 
-  <div class="content bar-right">
+  <div class="covex bar-right">
 
     <div class="card bar-medium">
       <header class="card-header">
@@ -158,7 +156,7 @@
 
         <div *ngIf="!showDetails">
           Please select a node for further information.
-          <a (click)="showAnalysisWindow()"> Open Analysis Window </a>
+          <!--          <a (click)="selectedAnalysisToken = 'oy4UsXfBDobTucdQBhN9IUzfnpqKwzqx'"> Open Analysis Window </a>-->
         </div>
 
       </div>
@@ -181,13 +179,9 @@
         </button>
         <p></p>
         <button (click)="showAnalysisDialog = true"
-                class="button"
-                [class.is-info]="!analysis.getTask()"
-                [class.is-warning]="analysis.getTask() && !analysis.getTask().startedAt"
-                [class.is-primary]="analysis.getTask() && analysis.getTask().startedAt && !analysis.getTask().done"
-                [class.is-success]="analysis.getTask() && analysis.getTask().done"
-                [disabled]="analysis.getCount() === 0 && !analysis.getTask()">
-          <span *ngIf="!analysis.getTask()">
+                class="button is-primary"
+                [disabled]="analysis.getCount() === 0">
+          <span>
             <span class="icon">
               <i class="fa fa-list"></i>
             </span>
@@ -196,67 +190,55 @@
             </span>
           </span>
 
-          <span *ngIf="analysis.getTask() && !analysis.getTask().startedAt">
-            <span class="icon">
-              <i class="fa fa-cog"></i>
-            </span>
-            <span>
-              Analysis queued...
-            </span>
-          </span>
+        </button>
+      </div>
 
-          <span *ngIf="analysis.getTask() && !analysis.getTask().done && analysis.getTask().startedAt">
-            <span class="icon">
-              <i class="fa fa-cog fa-spin"></i>
-            </span>
-            <span>
-              Analysis running ({{analysis.getTask().progress | percent}})
-            </span>
-          </span>
 
-          <span *ngIf="analysis.getTask() && analysis.getTask().done">
-            <span class="icon">
-              <i class="fa fa-check"></i>
-            </span>
-            <span>
-              Analysis done
-            </span>
-          </span>
-        </button>
+      <div class="card bar-large">
+        <header class="card-header">
+          <p class="card-header-title">
+                <span class="icon">
+              <i class="fas fa-filter" aria-hidden="true"></i>
+            </span> Tasks
+          </p>
+        </header>
+        <div class="card-content">
+          <app-task-list (token)="selectedAnalysisToken = $event"></app-task-list>
+        </div>
       </div>
-    </div>
 
-    <div class="card bar-large">
-      <header class="card-header">
-        <p class="card-header-title">
+      <div class="card bar-large">
+        <header class="card-header">
+          <p class="card-header-title">
                 <span class="icon">
               <i class="fas fa-filter" aria-hidden="true"></i>
             </span> Selection
-        </p>
-      </header>
-      <div class="card-content overflow">
-        <table class="table">
-          <thead>
-          <tr>
-            <td>AC</td>
-            <td>Actions</td>
-          </tr>
-          </thead>
-          <tbody>
-          <tr *ngFor="let p of analysis.getSelection()">
-            <td>{{p.proteinAc}}</td>
-            <td>
-              <button (click)="analysis.removeProtein(p)" class="button is-small is-danger">
-                <i class="fa fa-trash"></i>
-              </button>
-            </td>
-          </tr>
-          </tbody>
-        </table>
+          </p>
+        </header>
+        <div class="card-content overflow">
+          <table class="table">
+            <thead>
+            <tr>
+              <td>AC</td>
+              <td>Actions</td>
+            </tr>
+            </thead>
+            <tbody>
+            <tr *ngFor="let p of analysis.getSelection()">
+              <td>{{p.proteinAc}}</td>
+              <td>
+                <button (click)="analysis.removeProtein(p)" class="button is-small is-danger">
+                  <i class="fa fa-trash"></i>
+                </button>
+              </td>
+            </tr>
+            </tbody>
+          </table>
+        </div>
       </div>
-    </div>
 
 
-  </div>
+    </div>
 
+  </div>
 </div>
diff --git a/src/app/pages/explorer-page/explorer-page.component.ts b/src/app/pages/explorer-page/explorer-page.component.ts
index 0704eac86bcfe26f1f26f158de84c9a1949711c7..3f900b5355863f1352ca7c2901985931b3cc6739 100644
--- a/src/app/pages/explorer-page/explorer-page.component.ts
+++ b/src/app/pages/explorer-page/explorer-page.component.ts
@@ -4,8 +4,6 @@ import {
   ElementRef,
   OnInit,
   ViewChild,
-  Output,
-  EventEmitter,
   HostListener
 } from '@angular/core';
 import {ActivatedRoute, Router} from '@angular/router';
@@ -51,7 +49,7 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
   public queryItems = [];
   public showAnalysisDialog = false;
 
-  public analysisWindow = false;
+  public selectedAnalysisToken: string | null = null;
 
   public currentDataset = [];
   private array = [0];
@@ -88,15 +86,6 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
     }
   }
 
-  closeAnalysisWindow() {
-    this.analysisWindow = false;
-  }
-
-  showAnalysisWindow() {
-    this.analysisWindow = true;
-  }
-
-
   constructor(private http: HttpClient,
               private route: ActivatedRoute,
               private router: Router,
@@ -416,15 +405,6 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
     };
   }
 
-  // TODO: Remove this:
-  private random() {
-    const x = Math.sin(this.seed++) * 10000;
-    return x - Math.floor(x);
-  }
-
-  // Selection
-  // TODO: Improve usage of group ids, revise this after models have been changed to just protein
-
   inSelection(proteinAc: string): boolean {
     if (!this.proteinData || !proteinAc) {
       return false;
diff --git a/src/styles.scss b/src/styles.scss
index 32bf1fab80e1b1ac4bfe10206afb51e2416407a2..3124c5321156b285f1bed68933802cbd68890de6 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -60,14 +60,14 @@ input.checkbox {
   margin-left: 15px;
 }
 
-div.content.bar-left {
+div.covex.bar-left {
   float: left;
   width: 350px;
   height: calc(100vh - 102px);
   overflow: auto;
 }
 
-div.content.bar-right {
+div.covex.bar-right {
   float: right;
   width: 350px;
   height: calc(100vh - 102px);
@@ -96,14 +96,13 @@ div.card-content.overflow {
   height: 500px;
 }
 
-
-div.content.left-window {
+div.covex.left-window {
   float: left;
   width: calc(100vw - 350px - 2 * 20px);
   height: 100%;
 }
 
-div.content.network {
+div.covex.network {
   width: calc(100% - 350px - 40px);
   height: calc(100vh - 100px);
   margin-left: 20px;
@@ -127,13 +126,13 @@ div.center {
 }
 
 
-div.content.explorer {
+div.covex.explorer {
   height: calc(100vh - 90px);
   margin-left: 20px;
   margin-right: 20px;
 }
 
-div.analysis-view {
+.analysis-view {
   height: 100%;
   width: calc(100% - 20px);
   position: relative;
@@ -143,5 +142,9 @@ div.analysis-view {
   padding: 0;
 }
 
+i.fas.is-success {
+
+}
+
 html, body { height: 100%; }
 body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }