 
 bool can_transmit() {
   float lat, lon;
-  unsigned long fix_age;
   int year, retries;
   byte month, day, hour, minute, second, hundredths;
  
   populate_gps_data();
   while (retries++ < 10) {
-    gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &fix_age);  
+    gps_data.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &fix_age);  
     if (fix_age != TinyGPS::GPS_INVALID_AGE) {
       break;
     }
+    lcd.print("Bad GPS Data"); lcd.write(13);
     delay(1000);
     populate_gps_data();
   }
   if (retries >= 10) {
     return false;
   }
-  gps.f_get_position(&lat, &lon, &fix_age);
+  gps_data.f_get_position(&lat, &lon, &fix_age);
   if (!valid_coords(lat, lon)) {
     return false;
   }

}

void setup() {
  ss.begin(9600);
  
  freq = WSPR_DEFAULT_FREQ;
  ctc = WSPR_CTC;

  loc[5] = '\0';
}

void display_gps_data(double lat, double lon) {
  lcd.write(12);
  lcd.print("Lat:"); lcd.print((int)floor(lat)); lcd.print(" Lon:"); lcd.print((int)floor(lon)); lcd.write(13);
  lcd.print("MDNHD: "); lcd.print(loc);
  delay(50);
}

void display_transmitting() {
  lcd.write(12);
  lcd.print("XMIT ... "); lcd.write(13);
  lcd.print(call); lcd.print(" "); lcd.print(loc); 
  delay(50);
}

// Loop through the string, transmitting one character at a time.
void encode()
{
