Index: trunk/src/atmsdriver/trafficeventseditor/TrafficEventsEditor.java
===================================================================
--- trunk/src/atmsdriver/trafficeventseditor/TrafficEventsEditor.java	(revision 257)
+++ trunk/src/atmsdriver/trafficeventseditor/TrafficEventsEditor.java	(revision 343)
@@ -90,5 +90,5 @@
                 TrafficLaneEvent currEvent = currFrame.events.get(i);
                 data[i][0] = Integer.toString(currEvent.routeNum);
-                data[i][1] = Integer.toString(currEvent.station.ldsID);
+                data[i][1] = Integer.toString(currEvent.station.vdsID);
                 data[i][2] = Double.toString(currEvent.station.postmile);
                 data[i][3] = Integer.toString(currEvent.loopDetector.loopID);
@@ -285,5 +285,5 @@
             for(int i = 0; i < rows; i++)
             {
-                data[i][0] = Integer.toString(hwy.stations.get(i).ldsID);
+                data[i][0] = Integer.toString(hwy.stations.get(i).vdsID);
                 data[i][1] = hwy.stations.get(i).direction.getLetter();
                 data[i][2] = Double.toString(hwy.stations.get(i).postmile);
Index: trunk/src/atmsdriver/model/Highway.java
===================================================================
--- trunk/src/atmsdriver/model/Highway.java	(revision 237)
+++ trunk/src/atmsdriver/model/Highway.java	(revision 343)
@@ -3,5 +3,9 @@
 import atmsdriver.model.Station.DIRECTION;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 /**
@@ -18,5 +22,7 @@
     /** The ordered list of stations (lane detector stations) on this highway */
     public final List<Station> stations;
-        
+    /** The directions for this highway, either N/S or E/W */
+    public final Set<DIRECTION> availDirs = new TreeSet<DIRECTION>();
+    
     /** Construct a highway 
      * 
@@ -28,21 +34,12 @@
         this.routeNumber = routeNumber;
         this.stations = stations;
-    }
-    
-    /**
-     * 
-     */
-    public List<DIRECTION> getDirections()
-    {
-                    // Get available directions for route
-            ArrayList<DIRECTION> availDirs = new ArrayList<>();
+        // Get available directions for route
+        if (stations != null)
+        {
             for(Station stn : stations)
             {
-                if(!availDirs.contains(stn.direction))
-                {
-                    availDirs.add(stn.direction);
-                }
+                availDirs.add(stn.direction);
             }
-            return availDirs;
+        }
     }
     
Index: trunk/src/atmsdriver/model/Station.java
===================================================================
--- trunk/src/atmsdriver/model/Station.java	(revision 285)
+++ trunk/src/atmsdriver/model/Station.java	(revision 343)
@@ -8,21 +8,21 @@
 
 /**
- * A Station (LDS or Loop Detector Station) represents a group of lane detectors
- * across all lanes at a particular point on a highway. A station is identified
+ * A Station (VDS or Vehicle Detector Station) represents a group of lane detectors
+ * across all lanes in one direction at a particular point on a highway. A station is identified
  * by its highway number and postmile. A station has an associated direction
  * used to establish which direction is Main and which is Opposite. The MLTotVol
  * and OppTotVol for a station can be dynamically updated. A station has other
- * attributes: lineNum, ldsID, drop, and location which are used by the FEP. A
+ * attributes: lineNum, vdsID, drop, and location which are used by the FEP. A
  * station can be compared to other stations by its postmile.
  *
- * @author John A. Torres
- * @version 9/10/2017
+ * @author John A. Torres, jdalbey
+ * @version 9/10/2017, 3/22/2019
  */
-public class Station implements Comparable
+public final class Station implements Comparable
 {
 
     /* Static Station meta data */
     final public int lineID;
-    final public int ldsID; // double check
+    final public int vdsID; // double check
     final public int drop;
     final public String location;
@@ -37,10 +37,10 @@
 
     /* Constructor */
-    public Station(int lineID, int ldsID, int drop,
+    public Station(int lineID, int vdsID, int drop,
             String location, List<LoopDetector> loops, int hwy,
             DIRECTION direction, double postmile)
     {
         this.lineID = lineID;
-        this.ldsID = ldsID;
+        this.vdsID = vdsID;
         this.drop = drop;
         this.loops = loops;
@@ -109,5 +109,5 @@
     {
         StringBuilder build = new StringBuilder();
-        build.append(Integer.toString(this.ldsID));
+        build.append(Integer.toString(this.vdsID));
         build.append(" ");
         build.append(Integer.toString(this.drop));
@@ -170,4 +170,15 @@
 
     /**
+     * See if this station matches the specified attributes.
+     * @param dir
+     * @param postmile
+     * @return true if this station's attributes match the given ones.
+     */
+    public boolean matches(DIRECTION dir, double postmile)
+    {
+        double val = this.postmile - postmile;
+        return (Math.abs(val) < 0.01) && this.direction.equals(dir);
+    }
+    /**
      * Determine which lane fields to update based on given direction and update
      * all the loop detectors with the given color.
@@ -178,26 +189,24 @@
     public void updateByDirection(DIRECTION direction, DOTCOLOR dotColor)
     {
-        String laneDir = "OS";
+        // Is this station going in the desired direction?
         if (direction.equals(this.direction))
         {
-            laneDir = "ML";
-        }
-        outputUpdateMessage(dotColor, laneDir);
-
-        for (LoopDetector loop : loops)
-        {
-            // THIS DECISION ISN'T NEEDED after JD's BuildHighwayFile pgm
-            // creates a highway map based on VDS instead of Controller (LDS).
-//            if (loop.loopLocation.startsWith(laneDir))
-//            {
-                // UPDATE LOOP WITH VALUES
-                loop.updateLoop(dotColor.volume(), dotColor.occupancy());
-//            }
-        }
-
-        this.MLTotVol = getMLTotVol();
-        this.OppTotVol = getOPPTotVol();
-    }
-    
+            outputUpdateMessage(dotColor, direction.toString());
+
+            for (LoopDetector loop : loops)
+            {
+                // THIS DECISION ISN'T NEEDED after JD's BuildHighwayFile pgm
+                // creates a highway map based on VDS instead of Controller (LDS).
+    //            if (loop.loopLocation.startsWith(laneDir))
+    //            {
+                    // UPDATE LOOP WITH VALUES
+                    loop.updateLoop(dotColor.volume(), dotColor.occupancy());
+    //            }
+            }
+
+            this.MLTotVol = getMLTotVol();
+            this.OppTotVol = getOPPTotVol();
+        }
+    }
     /**
      * Return the color for the lanes in a given direction.
@@ -316,5 +325,5 @@
 
         Element ldsIDElement = theDoc.createElement(XML_TAGS.LDS_ID.tag);
-        ldsIDElement.appendChild(theDoc.createTextNode(String.valueOf(this.ldsID)));
+        ldsIDElement.appendChild(theDoc.createTextNode(String.valueOf(this.vdsID)));
         stationElement.appendChild(ldsIDElement);
 
@@ -422,5 +431,5 @@
     public String toString()
     {
-        return Integer.toString(this.ldsID);
+        return Integer.toString(this.vdsID)+this.getColor();
     }
 }
Index: trunk/src/atmsdriver/model/Highways.java
===================================================================
--- trunk/src/atmsdriver/model/Highways.java	(revision 306)
+++ trunk/src/atmsdriver/model/Highways.java	(revision 343)
@@ -43,8 +43,4 @@
  * FEP Simulator.
  *
- * Currently, there is no driving logic within the highways class. It is only
- * done through an instance of the ConsoleDriver.java class. Eventually, it will
- * receive incident data (from exchange.xml or better yet, directly from the
- * TMCSimulator itself) and drive the highways using resident logic.
  *
  * @author John A. Torres
@@ -124,4 +120,32 @@
     }
 
+    /** Search for a station with the given attributes 
+     * 
+     * @param routeNumber
+     * @param direction
+     * @param postmile
+     * @return the desired station, or null if not found.
+     */
+    public Station findStation(Integer routeNumber, Station.DIRECTION direction,
+            Double postmile)
+    {
+        // Get the highway by route number
+        Highway highway = getHighwayByRouteNumber(routeNumber);
+        if (highway == null)
+        {
+            Logger.getLogger(Highways.class.getName()).log(Level.SEVERE,  
+                    "Highway "+routeNumber+" not found in findStation()", "");
+            return null;
+        }
+        //Search the stations on this highway for a match
+        for (Station station : highway.stations)
+        {
+            if (station.matches(direction, postmile))
+            {
+                return station;
+            }
+        }
+        return null;
+    }
     /**
      * Applies specified color to the specified highway stretch. Route number
@@ -158,5 +182,5 @@
         // postmiles increase from s to n and w to e
         // if the direction is south or west
-        if (direction.equals(Station.DIRECTION.SOUTH) || direction.equals(Station.DIRECTION.WEST))
+        if (direction.equals(Station.DIRECTION.NORTH) || direction.equals(Station.DIRECTION.EAST))
         {
             // add range value to startPost to get
@@ -440,5 +464,5 @@
     /**
      * Returns the Highways model data in XML format.
-     * 
+     * Probably obsolete, since we aren't using exchange.xml any longer.
      * @return highways data in XML format
      */
@@ -507,5 +531,5 @@
         {
             // Consider each route direction
-            for (DIRECTION dir: DIRECTION.values())
+            for (DIRECTION dir: hwy.availDirs)
             {
                 String rowLabel = ""+String.format("%3s ",hwy.routeNumber)+dir.getLetter()+' ';
@@ -514,7 +538,14 @@
                 for (Station stat: hwy.stations)
                 {
+                    if (stat.direction.equals(dir))
+                    {
                     //lineout.append("" + dir.getLetter() + stat.postmile);
                     lineout.append(stat.getColor());
                     //lineout.append("  ");
+                    }
+                    else 
+                    {
+                        lineout.append(".");
+                    }
                 }
                 // See if there were stations for this direction
Index: trunk/src/atmsdriver/model/LoopDetector.java
===================================================================
--- trunk/src/atmsdriver/model/LoopDetector.java	(revision 242)
+++ trunk/src/atmsdriver/model/LoopDetector.java	(revision 343)
@@ -94,4 +94,5 @@
         {
             build.append(this.loopLocationID);
+            build.append(" ");
         }
         build.append(this.loopLocation);
