     }
   }
   www.close();
-  Serial.println(F("-------------------------------------"));
+  if (wehaveadate) {
+    // please fucking refactor this shit
+    // this is the fucking worst way to parse shit
+    // TODO: refactor this into an union or something less fucking terrible
+    line[10] = 0; // null after dow
+    line[13] = 0; // null after dom
+    line[17] = 0; // null after month
+    line[22] = 0; // null after year
+    line[25] = 0; // null after hour
+    line[28] = 0; // null after minute
+    line[31] = 0; // null after second
+    char *s_year = line+18;
+    char *s_month = line+14;
+    char *s_day = line+11;
+    char *s_hour = line+23;
+    char *s_minute = line+26;
+    char *s_second = line+29;
+    return DateTime(atoi(s_year), parseMonth(s_month), atoi(s_day), atoi(s_hour), atoi(s_minute), atoi(s_second));    
+  } else {
+    return NULL;
+  }
   
 }
 

    return NULL;
  }

  /* Read data until either the connection is closed, or the idle timeout is reached. */ 
  char line[256];
  size_t pos = 0;
  unsigned long lastRead = millis();
  while (www.connected() && (millis() - lastRead < IDLE_TIMEOUT_MS)) {
    while (www.available()) {

            line[1] == 'a' &&
            line[2] == 't' &&
            line[3] == 'e' &&
            line[4] == ':') { // seriously? TODO: fix this shit
          wehaveadate = 1;
        }
      } else if (!wehaveadate) { // if we haven't reached a newline, put it in the buffer
        line[pos] = c;
        line[pos + 1] = 0;
        pos++;
