diff --git a/src/app/degree-planner/shared/course-item/course-item.component.html b/src/app/degree-planner/shared/course-item/course-item.component.html
index 5874c903fd786129b38f50307dfbe7626cc45d65..ebf8cb5c3848d732a91063da711562010d9b7896 100644
--- a/src/app/degree-planner/shared/course-item/course-item.component.html
+++ b/src/app/degree-planner/shared/course-item/course-item.component.html
@@ -22,20 +22,20 @@
 
     <div fxLayout="column" fxLayoutAlign="space-between end" fxFlex="20">
       <div fxLayout="row" fxLayoutAlign="end center">
-        <mat-icon [matMenuTriggerFor]="courseMenu" aria-label="Course menu" matTooltip="Course Menu" matTooltipPosition="right"
+        <mat-icon [matMenuTriggerFor]="courseMenu" (menuOpened)="onMenuOpen()" aria-label="Course menu" matTooltip="Course Menu" matTooltipPosition="right"
           class="material-icons">more_horiz</mat-icon>
         <mat-menu #courseMenu="matMenu" class="course-item-menu">
           <button mat-menu-item (click)="openCourseDetailsDialog(course)">Course Details</button>
           <button mat-menu-item [matMenuTriggerFor]="academicYearsGroup">Move</button>
           <mat-menu #academicYearsGroup="matMenu" class="course-item-submenu">
-            <!-- <button mat-menu-item (click)="moveToFavorites(course)" *ngIf="!savedForLater" class="favorites-list">Saved for later</button>
-							<button mat-menu-item *ngFor="let termCode of termCodes" (click)="savedForLater ? addToTerm(termCode) : switchTerm(termCode)">{{ termCode | getTermDescription }}</button> -->
+            <button mat-menu-item (click)="moveToFavorites(course)" *ngIf="type != 'saved'" class="favorites-list">Saved for later</button>
+            <button mat-menu-item *ngFor="let term of visibleTerms" (click)="(type == 'saved') ? addToTerm(course, term) : switchTerm(course, term)">{{ term | getTermDescription }}</button>
           </mat-menu>
           <button *ngIf="!disabled" mat-menu-item (click)="openRemoveConfirmationDialog()">Remove</button>
         </mat-menu>
       </div>
       <div fxLayout="row" fxLayoutAlign="end center">
-        <p class="course-credits">{{ course.credits !== undefined ? course.credits : "--" }} Cr</p>
+        <p class="course-credits">{{ course.credits ? course.credits : "--" }} Cr</p>
       </div>
     </div>
   </div>
diff --git a/src/app/degree-planner/shared/course-item/course-item.component.ts b/src/app/degree-planner/shared/course-item/course-item.component.ts
index 9c19e2d8b2ea7e32de5330a61a74cb8844e4d5d4..5e8aa9df2e9634ad4245b6372ad0f614bbdaef45 100644
--- a/src/app/degree-planner/shared/course-item/course-item.component.ts
+++ b/src/app/degree-planner/shared/course-item/course-item.component.ts
@@ -1,6 +1,14 @@
 import { Component, Input, OnInit } from '@angular/core';
 import { MatDialog } from '@angular/material';
+import { Store, select } from '@ngrx/store';
 
+import {
+  AddCourse,
+  AddSaveForLater,
+  MoveCourseBetweenTerms,
+} from './../../store/actions/course.actions';
+import { getDropableTerms } from '@app/degree-planner/store/selectors';
+import { GlobalState } from '@app/core/state';
 import { Course } from '@app/core/models/course';
 
 import { DegreePlannerApiService } from '@app/degree-planner/services/api.service';
@@ -15,15 +23,49 @@ import { RemoveCourseConfirmDialogComponent } from '@app/degree-planner/dialogs/
   styleUrls: ['./course-item.component.scss'],
 })
 export class CourseItemComponent implements OnInit {
-  status; // TODO make this work k thx plz!?
   @Input() course: Course;
   @Input() disabled: string;
   @Input() type: 'saved' | 'course' | 'search';
+  status; // TODO make this work k thx plz!?
+  visibleTerms: any;
 
-  constructor(private api: DegreePlannerApiService, public dialog: MatDialog) {}
+  constructor(
+    private api: DegreePlannerApiService,
+    public dialog: MatDialog,
+    private store: Store<GlobalState>,
+  ) {}
 
   ngOnInit() {}
 
+  onMenuOpen() {
+    this.store
+      .pipe(select(getDropableTerms))
+      .subscribe(terms => (this.visibleTerms = terms));
+  }
+
+  moveToFavorites(course) {
+    this.store.dispatch(
+      new AddSaveForLater({
+        courseId: course.courseId,
+        subjectCode: course.subjectCode,
+        title: course.title,
+        catalogNumber: course.catalogNumber,
+      }),
+    );
+  }
+
+  addToTerm(course, term) {
+    const { subjectCode, courseId } = course;
+    const termCode = term;
+    this.store.dispatch(new AddCourse({ subjectCode, courseId, termCode }));
+  }
+
+  switchTerm(course, term) {
+    const { id, termCode: from } = course;
+    const to = term;
+    this.store.dispatch(new MoveCourseBetweenTerms({ to, from, id }));
+  }
+
   openCourseDetailsDialog(course) {
     this.api
       .getCourseDetails(course.subjectCode, course.courseId)
diff --git a/src/app/degree-planner/store/selectors.ts b/src/app/degree-planner/store/selectors.ts
index bbfa1571da8c87df1a500a50c247058a32b8141f..d13ce80112ffb9972a3b5f9b4e5df852c3cc515e 100644
--- a/src/app/degree-planner/store/selectors.ts
+++ b/src/app/degree-planner/store/selectors.ts
@@ -4,8 +4,6 @@ import { createSelector } from '@ngrx/store';
 // Models
 import { GlobalState } from '@app/core/state';
 import { Year } from '@app/core/models/year';
-import { Note } from '@app/core/models/note';
-import { Course } from '@app/core/models/course';
 import { PlannedTerm } from '@app/core/models/planned-term';
 import { DegreePlannerState } from './state';
 
@@ -58,6 +56,16 @@ export const getAllVisibleTerms = createSelector(
   state => state.visibleTerms,
 );
 
+export const getDropableTerms = createSelector(
+  getDegreePlannerState,
+  (state: DegreePlannerState) => {
+    const allTerms = state.visibleTerms.map(term => term.termCode);
+    const currentTerm = state.activeTermCodes[0];
+    const indexOfActive = allTerms.indexOf(currentTerm);
+    return allTerms.slice(indexOfActive - allTerms.length);
+  },
+);
+
 export const getAllVisibleTermsByYear = createSelector(
   getDegreePlannerState,
   state => {
diff --git a/src/app/shared/pipes/get-term-description.pipe.ts b/src/app/shared/pipes/get-term-description.pipe.ts
index 164eae22b676c19eee590b0df32e51622e3a6207..83b91be7bf8f6f6498f40a9d899d117447c9e763 100644
--- a/src/app/shared/pipes/get-term-description.pipe.ts
+++ b/src/app/shared/pipes/get-term-description.pipe.ts
@@ -1,37 +1,34 @@
 import { Pipe, PipeTransform } from '@angular/core';
 
 @Pipe({
-	name: 'getTermDescription'
+  name: 'getTermDescription',
 })
-
 export class GetTermDescriptionPipe implements PipeTransform {
+  transform(termCode: string, args?: any): any {
+    let termDescription = '';
+    const splitId = termCode.split('');
+    const century = (19 + Number(splitId[0])).toString();
+    const year = Number(splitId.splice(1, 2).join(''));
+    const term = Number(splitId[1]);
 
-	transform(termCode: string, args?: any): any {
-		let termDescription = '';
-		const splitId = termCode.split('');
-		const century = (19 + Number(splitId[0])).toString();
-		const year = Number(splitId.splice(1, 2).join(''));
-		const term = Number(splitId[1]);
-
-		switch (term) {
-			case 2:
-				termDescription = 'Fall ' + century;
-				termDescription += (year - 1).toString();
-				break;
-			case 3:
-				termDescription = 'Fall ' + century;
-				termDescription += (year - 1).toString();
-				break;
-			case 4:
-				termDescription = 'Spring ' + century;
-				termDescription += (year).toString();
-				break;
-			case 6:
-				termDescription = 'Summer ' + century;
-				termDescription += (year).toString();
-				break;
-		}
-		return termDescription;
-	}
-
+    switch (term) {
+      case 2:
+        termDescription = 'Fall ' + century;
+        termDescription += (year - 1).toString();
+        break;
+      case 3:
+        termDescription = 'Fall ' + century;
+        termDescription += (year - 1).toString();
+        break;
+      case 4:
+        termDescription = 'Spring ' + century;
+        termDescription += year.toString();
+        break;
+      case 6:
+        termDescription = 'Summer ' + century;
+        termDescription += year.toString();
+        break;
+    }
+    return termDescription;
+  }
 }