diff --git a/lib/components/viewers/stop-schedule-table.js b/lib/components/viewers/stop-schedule-table.js
index <HASH>..<HASH> 100644
--- a/lib/components/viewers/stop-schedule-table.js
+++ b/lib/components/viewers/stop-schedule-table.js
@@ -6,6 +6,7 @@ import styled from 'styled-components'
 import { isBlank } from '../../util/ui'
 import {
   excludeLastStop,
+  getRouteIdForPattern,
   getSecondsUntilDeparture,
   getStopTimesByPattern,
   stopTimeComparator
@@ -75,6 +76,16 @@ class StopScheduleTable extends Component {
     // Merge stop times, so that we can sort them across all route patterns.
     let mergedStopTimes = []
     Object.values(stopTimesByPattern).forEach(({ pattern, route, times }) => {
+      // TODO: refactor the IF block below (copied fromn StopViewer).
+      // Only add pattern if route is found.
+      // FIXME: there is currently a bug with the alernative transit index
+      // where routes are not associated with the stop if the only stoptimes
+      // for the stop are drop off only. See https://github.com/ibi-group/trimet-mod-otp/issues/217
+      if (!route) {
+        console.warn(`Cannot render stop times for missing route ID: ${getRouteIdForPattern(pattern)}`)
+        return
+      }
+
       const filteredTimes = times
         .filter(excludeLastStop)
         .map(stopTime => {
refactor(StopScheduleTable): Do not render times for pattern without route object.