diff --git a/src/app/core/header/header.component.html b/src/app/core/header/header.component.html
index 07d7e8c06a245ebcd2e6f331bd8977ea086c3699..3b8340b73077c3391f73e222ffb3d90883ba6d3f 100644
--- a/src/app/core/header/header.component.html
+++ b/src/app/core/header/header.component.html
@@ -78,7 +78,7 @@
 
 <mat-menu #mobileActionMenu="matMenu">
   <button mat-menu-item (click)="printPlan()">Print degree plan</button>
-  <button mat-menu-item (click)="downloadPdf()">Download PDF</button>
+  <a mat-menu-item target="_blank" href="/api/degreeplanpdf?roadmapId={{ activeRoadmapId$ | async }}">Download PDF</a>
   <button mat-menu-item (click)="addPlan()">Add degree plan</button>
   <button mat-menu-item (click)="addYear()">Add academic year</button>
 </mat-menu>
diff --git a/src/app/core/header/header.component.ts b/src/app/core/header/header.component.ts
index c9e83d02b2ae6317333191d2c6ffcfdb5a04676d..8327d62d874ed54e9a1c8bdf611d5e9ddc9fd325 100644
--- a/src/app/core/header/header.component.ts
+++ b/src/app/core/header/header.component.ts
@@ -1,10 +1,13 @@
 import { Component } from '@angular/core';
-import { Store } from '@ngrx/store';
-import { DegreePlannerState } from '@app/degree-planner/store/state';
+import { Store, select } from '@ngrx/store';
+import { Observable } from 'rxjs';
+import { map, filter } from 'rxjs/operators';
+import * as selectors from '@app/degree-planner/store/selectors';
 import { MatDialog, MatSnackBar } from '@angular/material';
 import { PromptDialogComponent } from '@app/shared/dialogs/prompt-dialog/prompt-dialog.component';
 import { CreatePlan } from '@app/degree-planner/store/actions/plan.actions';
 import { AddAcademicYearRequest } from '@app/degree-planner/store/actions/addAcademicYear.actions';
+import { GlobalState } from '../state';
 
 @Component({
   selector: 'cse-header',
@@ -12,21 +15,23 @@ import { AddAcademicYearRequest } from '@app/degree-planner/store/actions/addAca
   styleUrls: ['./header.component.scss'],
 })
 export class HeaderComponent {
-  public planId: number;
+  public activeRoadmapId$: Observable<number>;
   constructor(
-    private store: Store<DegreePlannerState>,
+    private store: Store<GlobalState>,
     private dialog: MatDialog,
     private snackBar: MatSnackBar,
-  ) {}
+  ) {
+    this.activeRoadmapId$ = this.store.pipe(
+      select(selectors.selectVisibleDegreePlan),
+      filter(isntUndefined),
+      map(plan => plan.roadmapId),
+    );
+  }
 
   public printPlan() {
     window.print();
   }
 
-  public downloadPdf() {
-    window.open('/api/degreeplanpdf?roadmapId=' + this.planId, '_blank');
-  }
-
   public addPlan() {
     this.dialog
       .open(PromptDialogComponent, {
@@ -51,3 +56,7 @@ export class HeaderComponent {
     this.snackBar.open('New academic year has been created');
   }
 }
+
+const isntUndefined = <T>(anything: T | undefined): anything is T => {
+  return anything !== undefined;
+};
diff --git a/src/app/degree-planner/degree-planner.component.html b/src/app/degree-planner/degree-planner.component.html
index 47ef478eea0bfcaa0dfab1de400d4eb8103e0416..09caf29f1925580ec4bafd4a9c22669ed49bc634 100644
--- a/src/app/degree-planner/degree-planner.component.html
+++ b/src/app/degree-planner/degree-planner.component.html
@@ -112,9 +112,7 @@
             <button mat-menu-item (click)="onPrintPlanClick()">
               Print plan
             </button>
-            <button mat-menu-item (click)="downloadPdf()">
-              Download PDF
-            </button>
+            <a mat-menu-item target="_blank" href="/api/degreeplanpdf?roadmapId={{ degreePlan.roadmapId }}">Download PDF</a>
             <button
               mat-menu-item
               (click)="onDeletePlanClick(degreePlan)"
diff --git a/src/app/degree-planner/degree-planner.component.ts b/src/app/degree-planner/degree-planner.component.ts
index 1526c2c6424c42592a95281b0e8b688c6748f87c..1fb12bd76c43452a962c18c1125d300e4c8e39a1 100644
--- a/src/app/degree-planner/degree-planner.component.ts
+++ b/src/app/degree-planner/degree-planner.component.ts
@@ -53,7 +53,6 @@ export class DegreePlannerComponent implements OnInit, OnDestroy {
   public isLoadingPlan$: Observable<boolean>;
   public activeTermSubscription: Subscription;
   public firstActiveTerm: TermCode;
-  public planId: number;
 
   constructor(
     private store: Store<GlobalState>,
@@ -100,10 +99,6 @@ export class DegreePlannerComponent implements OnInit, OnDestroy {
     this.activeTermSubscription.unsubscribe();
   }
 
-  public downloadPdf() {
-    window.open('/api/degreeplanpdf?roadmapId=' + this.planId, '_blank');
-  }
-
   public handleAcademicYearToggle(year: Year): void {
     // this.store.dispatch(
     // new ToggleAcademicYear({ year: year.twoDigitYearCode.toString() }),
diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html
index c72fe30689c591590d123c492702718c434b8b01..241b48ad2a36adf3fdb4e83e25e132c7e3152a4e 100644
--- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html
+++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html
@@ -73,17 +73,17 @@
           matTooltipPosition="left">print</i>
         Print
       </button>
-      <button mat-menu-item class="sidenav-link-btn" (click)="downloadPdf()">
-          <svg
+      <a mat-button class="sidenav-link-btn" target="_blank" href="/api/degreeplanpdf?roadmapId={{ planId }}">
+        <svg
           alt="Download PDF icon"
           matTooltip="Download PDF"
           matTooltipPosition="left"
-          style="width:24px;height:24px;position:relative;top:7px;"
+          style="width:24px;height:24px;"
           viewBox="0 0 24 24">
           <path fill="#0479a8" d="M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z" />
         </svg>
         Download PDF
-      </button>
+      </a>
       <button mat-button class="sidenav-link-btn" (click)="onCreatePlanClick()">
         <i
           class="material-icons"
diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts
index 8f481ab15b7c25a9b62da82552a5a33c842fee7a..73c2d74430e64bec19ec3979de16405e0300985f 100644
--- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts
+++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts
@@ -53,10 +53,6 @@ export class SidenavMenuItemComponent implements OnDestroy {
     window.print();
   }
 
-  public downloadPdf() {
-    window.open('/api/degreeplanpdf?roadmapId=' + this.planId, '_blank');
-  }
-
   public onCreatePlanClick() {
     this.dialog
       .open(PromptDialogComponent, {