First prototype
diff --git a/inc/Gtfs/Agency.php b/inc/Gtfs/Agency.php
new file mode 100644
index 0000000..43f1f3c
--- /dev/null
+++ b/inc/Gtfs/Agency.php
@@ -0,0 +1,307 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Agency</code>
+ */
+class Agency extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The agency_id field is an ID that uniquely identifies a transit agency.
+     *
+     * Generated from protobuf field <code>string agency_id = 1;</code>
+     */
+    protected $agency_id = '';
+    /**
+     * The agency_name field contains the full name of the transit agency.
+     *
+     * Generated from protobuf field <code>string agency_name = 2;</code>
+     */
+    protected $agency_name = '';
+    /**
+     * The agency_url field contains the URL of the transit agency.
+     *
+     * Generated from protobuf field <code>string agency_url = 3;</code>
+     */
+    protected $agency_url = '';
+    /**
+     * The agency_timezone field contains the timezone where the transit agency is located.
+     *
+     * Generated from protobuf field <code>string agency_timezone = 4;</code>
+     */
+    protected $agency_timezone = '';
+    /**
+     * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+     *
+     * Generated from protobuf field <code>string agency_lang = 5;</code>
+     */
+    protected $agency_lang = '';
+    /**
+     * The agency_phone field contains a single voice telephone number for the specified agency.
+     *
+     * Generated from protobuf field <code>string agency_phone = 6;</code>
+     */
+    protected $agency_phone = '';
+    /**
+     * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+     *
+     * Generated from protobuf field <code>string agency_fare_url = 7;</code>
+     */
+    protected $agency_fare_url = '';
+    /**
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $agency_id
+     *           The agency_id field is an ID that uniquely identifies a transit agency.
+     *     @type string $agency_name
+     *           The agency_name field contains the full name of the transit agency.
+     *     @type string $agency_url
+     *           The agency_url field contains the URL of the transit agency.
+     *     @type string $agency_timezone
+     *           The agency_timezone field contains the timezone where the transit agency is located.
+     *     @type string $agency_lang
+     *           The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+     *     @type string $agency_phone
+     *           The agency_phone field contains a single voice telephone number for the specified agency.
+     *     @type string $agency_fare_url
+     *           The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+     *     @type \Google\Protobuf\Any $extension
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The agency_id field is an ID that uniquely identifies a transit agency.
+     *
+     * Generated from protobuf field <code>string agency_id = 1;</code>
+     * @return string
+     */
+    public function getAgencyId()
+    {
+        return $this->agency_id;
+    }
+
+    /**
+     * The agency_id field is an ID that uniquely identifies a transit agency.
+     *
+     * Generated from protobuf field <code>string agency_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_name field contains the full name of the transit agency.
+     *
+     * Generated from protobuf field <code>string agency_name = 2;</code>
+     * @return string
+     */
+    public function getAgencyName()
+    {
+        return $this->agency_name;
+    }
+
+    /**
+     * The agency_name field contains the full name of the transit agency.
+     *
+     * Generated from protobuf field <code>string agency_name = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyName($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_name = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_url field contains the URL of the transit agency.
+     *
+     * Generated from protobuf field <code>string agency_url = 3;</code>
+     * @return string
+     */
+    public function getAgencyUrl()
+    {
+        return $this->agency_url;
+    }
+
+    /**
+     * The agency_url field contains the URL of the transit agency.
+     *
+     * Generated from protobuf field <code>string agency_url = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyUrl($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_url = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_timezone field contains the timezone where the transit agency is located.
+     *
+     * Generated from protobuf field <code>string agency_timezone = 4;</code>
+     * @return string
+     */
+    public function getAgencyTimezone()
+    {
+        return $this->agency_timezone;
+    }
+
+    /**
+     * The agency_timezone field contains the timezone where the transit agency is located.
+     *
+     * Generated from protobuf field <code>string agency_timezone = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyTimezone($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_timezone = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+     *
+     * Generated from protobuf field <code>string agency_lang = 5;</code>
+     * @return string
+     */
+    public function getAgencyLang()
+    {
+        return $this->agency_lang;
+    }
+
+    /**
+     * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+     *
+     * Generated from protobuf field <code>string agency_lang = 5;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyLang($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_lang = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_phone field contains a single voice telephone number for the specified agency.
+     *
+     * Generated from protobuf field <code>string agency_phone = 6;</code>
+     * @return string
+     */
+    public function getAgencyPhone()
+    {
+        return $this->agency_phone;
+    }
+
+    /**
+     * The agency_phone field contains a single voice telephone number for the specified agency.
+     *
+     * Generated from protobuf field <code>string agency_phone = 6;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyPhone($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_phone = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+     *
+     * Generated from protobuf field <code>string agency_fare_url = 7;</code>
+     * @return string
+     */
+    public function getAgencyFareUrl()
+    {
+        return $this->agency_fare_url;
+    }
+
+    /**
+     * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+     *
+     * Generated from protobuf field <code>string agency_fare_url = 7;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyFareUrl($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_fare_url = $var;
+
+        return $this;
+    }
+
+    /**
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Calendar.php b/inc/Gtfs/Calendar.php
new file mode 100644
index 0000000..2536d81
--- /dev/null
+++ b/inc/Gtfs/Calendar.php
@@ -0,0 +1,350 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Calendar</code>
+ */
+class Calendar extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string service_id = 1;</code>
+     */
+    protected $service_id = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay monday = 2;</code>
+     */
+    protected $monday = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay tuesday = 3;</code>
+     */
+    protected $tuesday = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay wednesday = 4;</code>
+     */
+    protected $wednesday = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay thursday = 5;</code>
+     */
+    protected $thursday = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay friday = 6;</code>
+     */
+    protected $friday = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay saturday = 7;</code>
+     */
+    protected $saturday = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay sunday = 8;</code>
+     */
+    protected $sunday = 0;
+    /**
+     * Generated from protobuf field <code>string start_date = 9;</code>
+     */
+    protected $start_date = '';
+    /**
+     * Generated from protobuf field <code>string end_date = 10;</code>
+     */
+    protected $end_date = '';
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $service_id
+     *           The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *     @type int $monday
+     *     @type int $tuesday
+     *     @type int $wednesday
+     *     @type int $thursday
+     *     @type int $friday
+     *     @type int $saturday
+     *     @type int $sunday
+     *     @type string $start_date
+     *     @type string $end_date
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string service_id = 1;</code>
+     * @return string
+     */
+    public function getServiceId()
+    {
+        return $this->service_id;
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string service_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setServiceId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->service_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay monday = 2;</code>
+     * @return int
+     */
+    public function getMonday()
+    {
+        return $this->monday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay monday = 2;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setMonday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->monday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay tuesday = 3;</code>
+     * @return int
+     */
+    public function getTuesday()
+    {
+        return $this->tuesday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay tuesday = 3;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setTuesday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->tuesday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay wednesday = 4;</code>
+     * @return int
+     */
+    public function getWednesday()
+    {
+        return $this->wednesday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay wednesday = 4;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setWednesday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->wednesday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay thursday = 5;</code>
+     * @return int
+     */
+    public function getThursday()
+    {
+        return $this->thursday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay thursday = 5;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setThursday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->thursday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay friday = 6;</code>
+     * @return int
+     */
+    public function getFriday()
+    {
+        return $this->friday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay friday = 6;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setFriday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->friday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay saturday = 7;</code>
+     * @return int
+     */
+    public function getSaturday()
+    {
+        return $this->saturday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay saturday = 7;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setSaturday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->saturday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay sunday = 8;</code>
+     * @return int
+     */
+    public function getSunday()
+    {
+        return $this->sunday;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay sunday = 8;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setSunday($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+        $this->sunday = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string start_date = 9;</code>
+     * @return string
+     */
+    public function getStartDate()
+    {
+        return $this->start_date;
+    }
+
+    /**
+     * Generated from protobuf field <code>string start_date = 9;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStartDate($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->start_date = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string end_date = 10;</code>
+     * @return string
+     */
+    public function getEndDate()
+    {
+        return $this->end_date;
+    }
+
+    /**
+     * Generated from protobuf field <code>string end_date = 10;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setEndDate($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->end_date = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Calendar/CalendarDay.php b/inc/Gtfs/Calendar/CalendarDay.php
new file mode 100644
index 0000000..12b6667
--- /dev/null
+++ b/inc/Gtfs/Calendar/CalendarDay.php
@@ -0,0 +1,51 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Calendar;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Calendar.CalendarDay</code>
+ */
+class CalendarDay
+{
+    /**
+     * Generated from protobuf enum <code>NOT_AVAILABLE = 0;</code>
+     */
+    const NOT_AVAILABLE = 0;
+    /**
+     * Generated from protobuf enum <code>AVAILABLE = 1;</code>
+     */
+    const AVAILABLE = 1;
+
+    private static $valueToName = [
+        self::NOT_AVAILABLE => 'NOT_AVAILABLE',
+        self::AVAILABLE => 'AVAILABLE',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(CalendarDay::class, \Gtfs\Calendar_CalendarDay::class);
+
diff --git a/inc/Gtfs/CalendarDate.php b/inc/Gtfs/CalendarDate.php
new file mode 100644
index 0000000..a3f9240
--- /dev/null
+++ b/inc/Gtfs/CalendarDate.php
@@ -0,0 +1,161 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.CalendarDate</code>
+ */
+class CalendarDate extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string service_id = 1;</code>
+     */
+    protected $service_id = '';
+    /**
+     * Generated from protobuf field <code>string date = 2;</code>
+     */
+    protected $date = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.CalendarDate.ExceptionType exception_type = 3;</code>
+     */
+    protected $exception_type = 0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $service_id
+     *           The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *     @type string $date
+     *     @type int $exception_type
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string service_id = 1;</code>
+     * @return string
+     */
+    public function getServiceId()
+    {
+        return $this->service_id;
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string service_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setServiceId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->service_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string date = 2;</code>
+     * @return string
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+
+    /**
+     * Generated from protobuf field <code>string date = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setDate($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->date = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.CalendarDate.ExceptionType exception_type = 3;</code>
+     * @return int
+     */
+    public function getExceptionType()
+    {
+        return $this->exception_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.CalendarDate.ExceptionType exception_type = 3;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setExceptionType($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\CalendarDate_ExceptionType::class);
+        $this->exception_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/CalendarDate/ExceptionType.php b/inc/Gtfs/CalendarDate/ExceptionType.php
new file mode 100644
index 0000000..11a0024
--- /dev/null
+++ b/inc/Gtfs/CalendarDate/ExceptionType.php
@@ -0,0 +1,56 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\CalendarDate;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.CalendarDate.ExceptionType</code>
+ */
+class ExceptionType
+{
+    /**
+     * Generated from protobuf enum <code>UNUSED_UNKNOWN = 0;</code>
+     */
+    const UNUSED_UNKNOWN = 0;
+    /**
+     * Generated from protobuf enum <code>ADDED = 1;</code>
+     */
+    const ADDED = 1;
+    /**
+     * Generated from protobuf enum <code>REMOVED = 2;</code>
+     */
+    const REMOVED = 2;
+
+    private static $valueToName = [
+        self::UNUSED_UNKNOWN => 'UNUSED_UNKNOWN',
+        self::ADDED => 'ADDED',
+        self::REMOVED => 'REMOVED',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(ExceptionType::class, \Gtfs\CalendarDate_ExceptionType::class);
+
diff --git a/inc/Gtfs/CalendarDate_ExceptionType.php b/inc/Gtfs/CalendarDate_ExceptionType.php
new file mode 100644
index 0000000..46dcd0c
--- /dev/null
+++ b/inc/Gtfs/CalendarDate_ExceptionType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\CalendarDate\ExceptionType instead.
+     * @deprecated
+     */
+    class CalendarDate_ExceptionType {}
+}
+class_exists(CalendarDate\ExceptionType::class);
+@trigger_error('Gtfs\CalendarDate_ExceptionType is deprecated and will be removed in the next major release. Use Gtfs\CalendarDate\ExceptionType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Calendar_CalendarDay.php b/inc/Gtfs/Calendar_CalendarDay.php
new file mode 100644
index 0000000..00964cc
--- /dev/null
+++ b/inc/Gtfs/Calendar_CalendarDay.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Calendar\CalendarDay instead.
+     * @deprecated
+     */
+    class Calendar_CalendarDay {}
+}
+class_exists(Calendar\CalendarDay::class);
+@trigger_error('Gtfs\Calendar_CalendarDay is deprecated and will be removed in the next major release. Use Gtfs\Calendar\CalendarDay instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/FareAttribute.php b/inc/Gtfs/FareAttribute.php
new file mode 100644
index 0000000..81e62ec
--- /dev/null
+++ b/inc/Gtfs/FareAttribute.php
@@ -0,0 +1,235 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.FareAttribute</code>
+ */
+class FareAttribute extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Generated from protobuf field <code>string fare_id = 1;</code>
+     */
+    protected $fare_id = '';
+    /**
+     * Generated from protobuf field <code>float price = 2;</code>
+     */
+    protected $price = 0.0;
+    /**
+     * Generated from protobuf field <code>string currency_type = 3;</code>
+     */
+    protected $currency_type = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute.PaymentMethod payment_method = 4;</code>
+     */
+    protected $payment_method = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute.Transfers transfers = 5;</code>
+     */
+    protected $transfers = 0;
+    /**
+     * Generated from protobuf field <code>int32 transfer_duration = 6;</code>
+     */
+    protected $transfer_duration = 0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $fare_id
+     *     @type float $price
+     *     @type string $currency_type
+     *     @type int $payment_method
+     *     @type int $transfers
+     *     @type int $transfer_duration
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Generated from protobuf field <code>string fare_id = 1;</code>
+     * @return string
+     */
+    public function getFareId()
+    {
+        return $this->fare_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string fare_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFareId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->fare_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>float price = 2;</code>
+     * @return float
+     */
+    public function getPrice()
+    {
+        return $this->price;
+    }
+
+    /**
+     * Generated from protobuf field <code>float price = 2;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setPrice($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->price = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string currency_type = 3;</code>
+     * @return string
+     */
+    public function getCurrencyType()
+    {
+        return $this->currency_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>string currency_type = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setCurrencyType($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->currency_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute.PaymentMethod payment_method = 4;</code>
+     * @return int
+     */
+    public function getPaymentMethod()
+    {
+        return $this->payment_method;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute.PaymentMethod payment_method = 4;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setPaymentMethod($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\FareAttribute_PaymentMethod::class);
+        $this->payment_method = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute.Transfers transfers = 5;</code>
+     * @return int
+     */
+    public function getTransfers()
+    {
+        return $this->transfers;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute.Transfers transfers = 5;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setTransfers($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\FareAttribute_Transfers::class);
+        $this->transfers = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 transfer_duration = 6;</code>
+     * @return int
+     */
+    public function getTransferDuration()
+    {
+        return $this->transfer_duration;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 transfer_duration = 6;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setTransferDuration($var)
+    {
+        GPBUtil::checkInt32($var);
+        $this->transfer_duration = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/FareAttribute/PaymentMethod.php b/inc/Gtfs/FareAttribute/PaymentMethod.php
new file mode 100644
index 0000000..12d828f
--- /dev/null
+++ b/inc/Gtfs/FareAttribute/PaymentMethod.php
@@ -0,0 +1,51 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\FareAttribute;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.FareAttribute.PaymentMethod</code>
+ */
+class PaymentMethod
+{
+    /**
+     * Generated from protobuf enum <code>ONBOARD = 0;</code>
+     */
+    const ONBOARD = 0;
+    /**
+     * Generated from protobuf enum <code>PREBOARDING = 1;</code>
+     */
+    const PREBOARDING = 1;
+
+    private static $valueToName = [
+        self::ONBOARD => 'ONBOARD',
+        self::PREBOARDING => 'PREBOARDING',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(PaymentMethod::class, \Gtfs\FareAttribute_PaymentMethod::class);
+
diff --git a/inc/Gtfs/FareAttribute/Transfers.php b/inc/Gtfs/FareAttribute/Transfers.php
new file mode 100644
index 0000000..66d3f0e
--- /dev/null
+++ b/inc/Gtfs/FareAttribute/Transfers.php
@@ -0,0 +1,61 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\FareAttribute;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.FareAttribute.Transfers</code>
+ */
+class Transfers
+{
+    /**
+     * Generated from protobuf enum <code>NO = 0;</code>
+     */
+    const NO = 0;
+    /**
+     * Generated from protobuf enum <code>ONCE = 1;</code>
+     */
+    const ONCE = 1;
+    /**
+     * Generated from protobuf enum <code>TWICE = 2;</code>
+     */
+    const TWICE = 2;
+    /**
+     * Generated from protobuf enum <code>UNLIMITED = 3;</code>
+     */
+    const UNLIMITED = 3;
+
+    private static $valueToName = [
+        self::NO => 'NO',
+        self::ONCE => 'ONCE',
+        self::TWICE => 'TWICE',
+        self::UNLIMITED => 'UNLIMITED',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(Transfers::class, \Gtfs\FareAttribute_Transfers::class);
+
diff --git a/inc/Gtfs/FareAttribute_PaymentMethod.php b/inc/Gtfs/FareAttribute_PaymentMethod.php
new file mode 100644
index 0000000..216c76b
--- /dev/null
+++ b/inc/Gtfs/FareAttribute_PaymentMethod.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\FareAttribute\PaymentMethod instead.
+     * @deprecated
+     */
+    class FareAttribute_PaymentMethod {}
+}
+class_exists(FareAttribute\PaymentMethod::class);
+@trigger_error('Gtfs\FareAttribute_PaymentMethod is deprecated and will be removed in the next major release. Use Gtfs\FareAttribute\PaymentMethod instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/FareAttribute_Transfers.php b/inc/Gtfs/FareAttribute_Transfers.php
new file mode 100644
index 0000000..8dffd82
--- /dev/null
+++ b/inc/Gtfs/FareAttribute_Transfers.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\FareAttribute\Transfers instead.
+     * @deprecated
+     */
+    class FareAttribute_Transfers {}
+}
+class_exists(FareAttribute\Transfers::class);
+@trigger_error('Gtfs\FareAttribute_Transfers is deprecated and will be removed in the next major release. Use Gtfs\FareAttribute\Transfers instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/FareRule.php b/inc/Gtfs/FareRule.php
new file mode 100644
index 0000000..bc5f0ac
--- /dev/null
+++ b/inc/Gtfs/FareRule.php
@@ -0,0 +1,208 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.FareRule</code>
+ */
+class FareRule extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Generated from protobuf field <code>string fare_id = 1;</code>
+     */
+    protected $fare_id = '';
+    /**
+     * Generated from protobuf field <code>string route_id = 2;</code>
+     */
+    protected $route_id = '';
+    /**
+     * Generated from protobuf field <code>string origin_id = 3;</code>
+     */
+    protected $origin_id = '';
+    /**
+     * Generated from protobuf field <code>string destination_id = 4;</code>
+     */
+    protected $destination_id = '';
+    /**
+     * Generated from protobuf field <code>string contains_id = 5;</code>
+     */
+    protected $contains_id = '';
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $fare_id
+     *     @type string $route_id
+     *     @type string $origin_id
+     *     @type string $destination_id
+     *     @type string $contains_id
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Generated from protobuf field <code>string fare_id = 1;</code>
+     * @return string
+     */
+    public function getFareId()
+    {
+        return $this->fare_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string fare_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFareId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->fare_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string route_id = 2;</code>
+     * @return string
+     */
+    public function getRouteId()
+    {
+        return $this->route_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string route_id = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string origin_id = 3;</code>
+     * @return string
+     */
+    public function getOriginId()
+    {
+        return $this->origin_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string origin_id = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setOriginId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->origin_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string destination_id = 4;</code>
+     * @return string
+     */
+    public function getDestinationId()
+    {
+        return $this->destination_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string destination_id = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setDestinationId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->destination_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string contains_id = 5;</code>
+     * @return string
+     */
+    public function getContainsId()
+    {
+        return $this->contains_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string contains_id = 5;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setContainsId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->contains_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/FeedEntity.php b/inc/Gtfs/FeedEntity.php
new file mode 100644
index 0000000..b77caca
--- /dev/null
+++ b/inc/Gtfs/FeedEntity.php
@@ -0,0 +1,445 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * A definition (or update) of an entity in the transit feed.
+ *
+ * Generated from protobuf message <code>gtfs.FeedEntity</code>
+ */
+class FeedEntity extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The ids are used only to provide incrementality support. The id should be
+     * unique within a FeedMessage. Consequent FeedMessages may contain
+     * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+     * FeedEntity with some id will replace the old FeedEntity with the same id
+     * (or delete it - see is_deleted below).
+     * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+     * feed must be specified by explicit selectors (see EntitySelector below for
+     * more info).
+     *
+     * Generated from protobuf field <code>string id = 1;</code>
+     */
+    protected $id = '';
+    /**
+     * Whether this entity is to be deleted. Relevant only for incremental
+     * fetches.
+     *
+     * Generated from protobuf field <code>bool is_deleted = 2;</code>
+     */
+    protected $is_deleted = false;
+    /**
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+    protected $element;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $id
+     *           The ids are used only to provide incrementality support. The id should be
+     *           unique within a FeedMessage. Consequent FeedMessages may contain
+     *           FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+     *           FeedEntity with some id will replace the old FeedEntity with the same id
+     *           (or delete it - see is_deleted below).
+     *           The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+     *           feed must be specified by explicit selectors (see EntitySelector below for
+     *           more info).
+     *     @type bool $is_deleted
+     *           Whether this entity is to be deleted. Relevant only for incremental
+     *           fetches.
+     *     @type \Gtfs\Agency $agency
+     *     @type \Gtfs\Stop $stop
+     *     @type \Gtfs\Route $route
+     *     @type \Gtfs\Trip $trip
+     *     @type \Gtfs\StopTime $stop_time
+     *     @type \Gtfs\Calendar $calendar
+     *     @type \Gtfs\CalendarDate $calendar_date
+     *     @type \Gtfs\FareAttribute $fare_attribute
+     *     @type \Gtfs\FareRule $fare_rule
+     *     @type \Gtfs\Shape $shape
+     *     @type \Gtfs\Frequency $frequency
+     *     @type \Gtfs\Transfer $transfer
+     *     @type \Google\Protobuf\Any $extension
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The ids are used only to provide incrementality support. The id should be
+     * unique within a FeedMessage. Consequent FeedMessages may contain
+     * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+     * FeedEntity with some id will replace the old FeedEntity with the same id
+     * (or delete it - see is_deleted below).
+     * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+     * feed must be specified by explicit selectors (see EntitySelector below for
+     * more info).
+     *
+     * Generated from protobuf field <code>string id = 1;</code>
+     * @return string
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * The ids are used only to provide incrementality support. The id should be
+     * unique within a FeedMessage. Consequent FeedMessages may contain
+     * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+     * FeedEntity with some id will replace the old FeedEntity with the same id
+     * (or delete it - see is_deleted below).
+     * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+     * feed must be specified by explicit selectors (see EntitySelector below for
+     * more info).
+     *
+     * Generated from protobuf field <code>string id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Whether this entity is to be deleted. Relevant only for incremental
+     * fetches.
+     *
+     * Generated from protobuf field <code>bool is_deleted = 2;</code>
+     * @return bool
+     */
+    public function getIsDeleted()
+    {
+        return $this->is_deleted;
+    }
+
+    /**
+     * Whether this entity is to be deleted. Relevant only for incremental
+     * fetches.
+     *
+     * Generated from protobuf field <code>bool is_deleted = 2;</code>
+     * @param bool $var
+     * @return $this
+     */
+    public function setIsDeleted($var)
+    {
+        GPBUtil::checkBool($var);
+        $this->is_deleted = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Agency agency = 3;</code>
+     * @return \Gtfs\Agency
+     */
+    public function getAgency()
+    {
+        return $this->readOneof(3);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Agency agency = 3;</code>
+     * @param \Gtfs\Agency $var
+     * @return $this
+     */
+    public function setAgency($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Agency::class);
+        $this->writeOneof(3, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Stop stop = 4;</code>
+     * @return \Gtfs\Stop
+     */
+    public function getStop()
+    {
+        return $this->readOneof(4);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Stop stop = 4;</code>
+     * @param \Gtfs\Stop $var
+     * @return $this
+     */
+    public function setStop($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Stop::class);
+        $this->writeOneof(4, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Route route = 5;</code>
+     * @return \Gtfs\Route
+     */
+    public function getRoute()
+    {
+        return $this->readOneof(5);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Route route = 5;</code>
+     * @param \Gtfs\Route $var
+     * @return $this
+     */
+    public function setRoute($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Route::class);
+        $this->writeOneof(5, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Trip trip = 6;</code>
+     * @return \Gtfs\Trip
+     */
+    public function getTrip()
+    {
+        return $this->readOneof(6);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Trip trip = 6;</code>
+     * @param \Gtfs\Trip $var
+     * @return $this
+     */
+    public function setTrip($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Trip::class);
+        $this->writeOneof(6, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime stop_time = 7;</code>
+     * @return \Gtfs\StopTime
+     */
+    public function getStopTime()
+    {
+        return $this->readOneof(7);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime stop_time = 7;</code>
+     * @param \Gtfs\StopTime $var
+     * @return $this
+     */
+    public function setStopTime($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\StopTime::class);
+        $this->writeOneof(7, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar calendar = 8;</code>
+     * @return \Gtfs\Calendar
+     */
+    public function getCalendar()
+    {
+        return $this->readOneof(8);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Calendar calendar = 8;</code>
+     * @param \Gtfs\Calendar $var
+     * @return $this
+     */
+    public function setCalendar($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Calendar::class);
+        $this->writeOneof(8, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.CalendarDate calendar_date = 9;</code>
+     * @return \Gtfs\CalendarDate
+     */
+    public function getCalendarDate()
+    {
+        return $this->readOneof(9);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.CalendarDate calendar_date = 9;</code>
+     * @param \Gtfs\CalendarDate $var
+     * @return $this
+     */
+    public function setCalendarDate($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\CalendarDate::class);
+        $this->writeOneof(9, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute fare_attribute = 10;</code>
+     * @return \Gtfs\FareAttribute
+     */
+    public function getFareAttribute()
+    {
+        return $this->readOneof(10);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareAttribute fare_attribute = 10;</code>
+     * @param \Gtfs\FareAttribute $var
+     * @return $this
+     */
+    public function setFareAttribute($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\FareAttribute::class);
+        $this->writeOneof(10, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareRule fare_rule = 11;</code>
+     * @return \Gtfs\FareRule
+     */
+    public function getFareRule()
+    {
+        return $this->readOneof(11);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.FareRule fare_rule = 11;</code>
+     * @param \Gtfs\FareRule $var
+     * @return $this
+     */
+    public function setFareRule($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\FareRule::class);
+        $this->writeOneof(11, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Shape shape = 12;</code>
+     * @return \Gtfs\Shape
+     */
+    public function getShape()
+    {
+        return $this->readOneof(12);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Shape shape = 12;</code>
+     * @param \Gtfs\Shape $var
+     * @return $this
+     */
+    public function setShape($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Shape::class);
+        $this->writeOneof(12, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Frequency frequency = 13;</code>
+     * @return \Gtfs\Frequency
+     */
+    public function getFrequency()
+    {
+        return $this->readOneof(13);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Frequency frequency = 13;</code>
+     * @param \Gtfs\Frequency $var
+     * @return $this
+     */
+    public function setFrequency($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Frequency::class);
+        $this->writeOneof(13, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Transfer transfer = 14;</code>
+     * @return \Gtfs\Transfer
+     */
+    public function getTransfer()
+    {
+        return $this->readOneof(14);
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Transfer transfer = 14;</code>
+     * @param \Gtfs\Transfer $var
+     * @return $this
+     */
+    public function setTransfer($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\Transfer::class);
+        $this->writeOneof(14, $var);
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getElement()
+    {
+        return $this->whichOneof("element");
+    }
+
+}
+
diff --git a/inc/Gtfs/FeedHeader.php b/inc/Gtfs/FeedHeader.php
new file mode 100644
index 0000000..88ae19e
--- /dev/null
+++ b/inc/Gtfs/FeedHeader.php
@@ -0,0 +1,314 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Metadata about a feed, included in feed messages.
+ *
+ * Generated from protobuf message <code>gtfs.FeedHeader</code>
+ */
+class FeedHeader extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Version of the feed specification.
+     * The current version is 1.0.
+     *
+     * Generated from protobuf field <code>string gtfs_version = 1;</code>
+     */
+    protected $gtfs_version = '';
+    /**
+     * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+     *
+     * Generated from protobuf field <code>string feed_publisher_name = 2;</code>
+     */
+    protected $feed_publisher_name = '';
+    /**
+     * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+     *
+     * Generated from protobuf field <code>string feed_publisher_url = 3;</code>
+     */
+    protected $feed_publisher_url = '';
+    /**
+     * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+     *
+     * Generated from protobuf field <code>string feed_lang = 4;</code>
+     */
+    protected $feed_lang = '';
+    /**
+     * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+     * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+     *
+     * Generated from protobuf field <code>string feed_start_date = 5;</code>
+     */
+    protected $feed_start_date = '';
+    /**
+     * Generated from protobuf field <code>string feed_end_date = 6;</code>
+     */
+    protected $feed_end_date = '';
+    /**
+     * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+     *
+     * Generated from protobuf field <code>string feed_version = 7;</code>
+     */
+    protected $feed_version = '';
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $gtfs_version
+     *           Version of the feed specification.
+     *           The current version is 1.0.
+     *     @type string $feed_publisher_name
+     *           The feed_publisher_name field contains the full name of the organization that publishes the feed.
+     *     @type string $feed_publisher_url
+     *           The feed_publisher_url field contains the URL of the feed publishing organization's website.
+     *     @type string $feed_lang
+     *           The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+     *     @type string $feed_start_date
+     *           The feed provides complete and reliable schedule information for service in the period from the beginning of the
+     *           feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+     *     @type string $feed_end_date
+     *     @type string $feed_version
+     *           The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Version of the feed specification.
+     * The current version is 1.0.
+     *
+     * Generated from protobuf field <code>string gtfs_version = 1;</code>
+     * @return string
+     */
+    public function getGtfsVersion()
+    {
+        return $this->gtfs_version;
+    }
+
+    /**
+     * Version of the feed specification.
+     * The current version is 1.0.
+     *
+     * Generated from protobuf field <code>string gtfs_version = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setGtfsVersion($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->gtfs_version = $var;
+
+        return $this;
+    }
+
+    /**
+     * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+     *
+     * Generated from protobuf field <code>string feed_publisher_name = 2;</code>
+     * @return string
+     */
+    public function getFeedPublisherName()
+    {
+        return $this->feed_publisher_name;
+    }
+
+    /**
+     * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+     *
+     * Generated from protobuf field <code>string feed_publisher_name = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFeedPublisherName($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->feed_publisher_name = $var;
+
+        return $this;
+    }
+
+    /**
+     * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+     *
+     * Generated from protobuf field <code>string feed_publisher_url = 3;</code>
+     * @return string
+     */
+    public function getFeedPublisherUrl()
+    {
+        return $this->feed_publisher_url;
+    }
+
+    /**
+     * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+     *
+     * Generated from protobuf field <code>string feed_publisher_url = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFeedPublisherUrl($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->feed_publisher_url = $var;
+
+        return $this;
+    }
+
+    /**
+     * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+     *
+     * Generated from protobuf field <code>string feed_lang = 4;</code>
+     * @return string
+     */
+    public function getFeedLang()
+    {
+        return $this->feed_lang;
+    }
+
+    /**
+     * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+     *
+     * Generated from protobuf field <code>string feed_lang = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFeedLang($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->feed_lang = $var;
+
+        return $this;
+    }
+
+    /**
+     * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+     * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+     *
+     * Generated from protobuf field <code>string feed_start_date = 5;</code>
+     * @return string
+     */
+    public function getFeedStartDate()
+    {
+        return $this->feed_start_date;
+    }
+
+    /**
+     * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+     * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+     *
+     * Generated from protobuf field <code>string feed_start_date = 5;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFeedStartDate($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->feed_start_date = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string feed_end_date = 6;</code>
+     * @return string
+     */
+    public function getFeedEndDate()
+    {
+        return $this->feed_end_date;
+    }
+
+    /**
+     * Generated from protobuf field <code>string feed_end_date = 6;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFeedEndDate($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->feed_end_date = $var;
+
+        return $this;
+    }
+
+    /**
+     * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+     *
+     * Generated from protobuf field <code>string feed_version = 7;</code>
+     * @return string
+     */
+    public function getFeedVersion()
+    {
+        return $this->feed_version;
+    }
+
+    /**
+     * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+     *
+     * Generated from protobuf field <code>string feed_version = 7;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFeedVersion($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->feed_version = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/FeedMessage.php b/inc/Gtfs/FeedMessage.php
new file mode 100644
index 0000000..26ace5f
--- /dev/null
+++ b/inc/Gtfs/FeedMessage.php
@@ -0,0 +1,99 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.FeedMessage</code>
+ */
+class FeedMessage extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Metadata about this feed and feed message.
+     *
+     * Generated from protobuf field <code>.gtfs.FeedHeader header = 1;</code>
+     */
+    protected $header = null;
+    /**
+     * Contents of the feed.
+     *
+     * Generated from protobuf field <code>repeated .gtfs.FeedEntity entity = 2;</code>
+     */
+    private $entity;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type \Gtfs\FeedHeader $header
+     *           Metadata about this feed and feed message.
+     *     @type \Gtfs\FeedEntity[]|\Google\Protobuf\Internal\RepeatedField $entity
+     *           Contents of the feed.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Metadata about this feed and feed message.
+     *
+     * Generated from protobuf field <code>.gtfs.FeedHeader header = 1;</code>
+     * @return \Gtfs\FeedHeader
+     */
+    public function getHeader()
+    {
+        return $this->header;
+    }
+
+    /**
+     * Metadata about this feed and feed message.
+     *
+     * Generated from protobuf field <code>.gtfs.FeedHeader header = 1;</code>
+     * @param \Gtfs\FeedHeader $var
+     * @return $this
+     */
+    public function setHeader($var)
+    {
+        GPBUtil::checkMessage($var, \Gtfs\FeedHeader::class);
+        $this->header = $var;
+
+        return $this;
+    }
+
+    /**
+     * Contents of the feed.
+     *
+     * Generated from protobuf field <code>repeated .gtfs.FeedEntity entity = 2;</code>
+     * @return \Google\Protobuf\Internal\RepeatedField
+     */
+    public function getEntity()
+    {
+        return $this->entity;
+    }
+
+    /**
+     * Contents of the feed.
+     *
+     * Generated from protobuf field <code>repeated .gtfs.FeedEntity entity = 2;</code>
+     * @param \Gtfs\FeedEntity[]|\Google\Protobuf\Internal\RepeatedField $var
+     * @return $this
+     */
+    public function setEntity($var)
+    {
+        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Gtfs\FeedEntity::class);
+        $this->entity = $arr;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Frequency.php b/inc/Gtfs/Frequency.php
new file mode 100644
index 0000000..6d53d50
--- /dev/null
+++ b/inc/Gtfs/Frequency.php
@@ -0,0 +1,208 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Frequency</code>
+ */
+class Frequency extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Generated from protobuf field <code>string trip_id = 1;</code>
+     */
+    protected $trip_id = '';
+    /**
+     * Generated from protobuf field <code>string start_time = 2;</code>
+     */
+    protected $start_time = '';
+    /**
+     * Generated from protobuf field <code>string end_time = 3;</code>
+     */
+    protected $end_time = '';
+    /**
+     * Generated from protobuf field <code>int32 headway_secs = 4;</code>
+     */
+    protected $headway_secs = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.Frequency.ScheduleType exact_times = 5;</code>
+     */
+    protected $exact_times = 0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $trip_id
+     *     @type string $start_time
+     *     @type string $end_time
+     *     @type int $headway_secs
+     *     @type int $exact_times
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Generated from protobuf field <code>string trip_id = 1;</code>
+     * @return string
+     */
+    public function getTripId()
+    {
+        return $this->trip_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string trip_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setTripId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->trip_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string start_time = 2;</code>
+     * @return string
+     */
+    public function getStartTime()
+    {
+        return $this->start_time;
+    }
+
+    /**
+     * Generated from protobuf field <code>string start_time = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStartTime($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->start_time = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string end_time = 3;</code>
+     * @return string
+     */
+    public function getEndTime()
+    {
+        return $this->end_time;
+    }
+
+    /**
+     * Generated from protobuf field <code>string end_time = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setEndTime($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->end_time = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 headway_secs = 4;</code>
+     * @return int
+     */
+    public function getHeadwaySecs()
+    {
+        return $this->headway_secs;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 headway_secs = 4;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setHeadwaySecs($var)
+    {
+        GPBUtil::checkInt32($var);
+        $this->headway_secs = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Frequency.ScheduleType exact_times = 5;</code>
+     * @return int
+     */
+    public function getExactTimes()
+    {
+        return $this->exact_times;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Frequency.ScheduleType exact_times = 5;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setExactTimes($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Frequency_ScheduleType::class);
+        $this->exact_times = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Frequency/ScheduleType.php b/inc/Gtfs/Frequency/ScheduleType.php
new file mode 100644
index 0000000..2fa70da
--- /dev/null
+++ b/inc/Gtfs/Frequency/ScheduleType.php
@@ -0,0 +1,51 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Frequency;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Frequency.ScheduleType</code>
+ */
+class ScheduleType
+{
+    /**
+     * Generated from protobuf enum <code>NOT_EXACTLY = 0;</code>
+     */
+    const NOT_EXACTLY = 0;
+    /**
+     * Generated from protobuf enum <code>EXACTLY = 1;</code>
+     */
+    const EXACTLY = 1;
+
+    private static $valueToName = [
+        self::NOT_EXACTLY => 'NOT_EXACTLY',
+        self::EXACTLY => 'EXACTLY',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(ScheduleType::class, \Gtfs\Frequency_ScheduleType::class);
+
diff --git a/inc/Gtfs/Frequency_ScheduleType.php b/inc/Gtfs/Frequency_ScheduleType.php
new file mode 100644
index 0000000..679bb8c
--- /dev/null
+++ b/inc/Gtfs/Frequency_ScheduleType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Frequency\ScheduleType instead.
+     * @deprecated
+     */
+    class Frequency_ScheduleType {}
+}
+class_exists(Frequency\ScheduleType::class);
+@trigger_error('Gtfs\Frequency_ScheduleType is deprecated and will be removed in the next major release. Use Gtfs\Frequency\ScheduleType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Route.php b/inc/Gtfs/Route.php
new file mode 100644
index 0000000..091ae1e
--- /dev/null
+++ b/inc/Gtfs/Route.php
@@ -0,0 +1,380 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Route</code>
+ */
+class Route extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The route_id field contains an ID that uniquely identifies a route.
+     * The route_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string route_id = 1;</code>
+     */
+    protected $route_id = '';
+    /**
+     * The agency_id field defines an agency for the specified route.
+     *
+     * Generated from protobuf field <code>string agency_id = 2;</code>
+     */
+    protected $agency_id = '';
+    /**
+     * The route_short_name contains the short name of a route.
+     *
+     * Generated from protobuf field <code>string route_short_name = 3;</code>
+     */
+    protected $route_short_name = '';
+    /**
+     * The route_long_name contains the full name of a route.
+     *
+     * Generated from protobuf field <code>string route_long_name = 4;</code>
+     */
+    protected $route_long_name = '';
+    /**
+     * The route_desc field contains a description of a route.
+     *
+     * Generated from protobuf field <code>string route_desc = 5;</code>
+     */
+    protected $route_desc = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.Route.RouteType route_type = 6;</code>
+     */
+    protected $route_type = 0;
+    /**
+     * The route_url field contains the URL of a web page about that particular route.
+     *
+     * Generated from protobuf field <code>string route_url = 7;</code>
+     */
+    protected $route_url = '';
+    /**
+     * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+     * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+     *
+     * Generated from protobuf field <code>string route_color = 8;</code>
+     */
+    protected $route_color = '';
+    /**
+     * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+     *
+     * Generated from protobuf field <code>string route_text_color = 9;</code>
+     */
+    protected $route_text_color = '';
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $route_id
+     *           The route_id field contains an ID that uniquely identifies a route.
+     *           The route_id is dataset unique.
+     *     @type string $agency_id
+     *           The agency_id field defines an agency for the specified route.
+     *     @type string $route_short_name
+     *           The route_short_name contains the short name of a route.
+     *     @type string $route_long_name
+     *           The route_long_name contains the full name of a route.
+     *     @type string $route_desc
+     *           The route_desc field contains a description of a route.
+     *     @type int $route_type
+     *     @type string $route_url
+     *           The route_url field contains the URL of a web page about that particular route.
+     *     @type string $route_color
+     *           In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+     *           The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+     *     @type string $route_text_color
+     *           The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The route_id field contains an ID that uniquely identifies a route.
+     * The route_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string route_id = 1;</code>
+     * @return string
+     */
+    public function getRouteId()
+    {
+        return $this->route_id;
+    }
+
+    /**
+     * The route_id field contains an ID that uniquely identifies a route.
+     * The route_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string route_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The agency_id field defines an agency for the specified route.
+     *
+     * Generated from protobuf field <code>string agency_id = 2;</code>
+     * @return string
+     */
+    public function getAgencyId()
+    {
+        return $this->agency_id;
+    }
+
+    /**
+     * The agency_id field defines an agency for the specified route.
+     *
+     * Generated from protobuf field <code>string agency_id = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The route_short_name contains the short name of a route.
+     *
+     * Generated from protobuf field <code>string route_short_name = 3;</code>
+     * @return string
+     */
+    public function getRouteShortName()
+    {
+        return $this->route_short_name;
+    }
+
+    /**
+     * The route_short_name contains the short name of a route.
+     *
+     * Generated from protobuf field <code>string route_short_name = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteShortName($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_short_name = $var;
+
+        return $this;
+    }
+
+    /**
+     * The route_long_name contains the full name of a route.
+     *
+     * Generated from protobuf field <code>string route_long_name = 4;</code>
+     * @return string
+     */
+    public function getRouteLongName()
+    {
+        return $this->route_long_name;
+    }
+
+    /**
+     * The route_long_name contains the full name of a route.
+     *
+     * Generated from protobuf field <code>string route_long_name = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteLongName($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_long_name = $var;
+
+        return $this;
+    }
+
+    /**
+     * The route_desc field contains a description of a route.
+     *
+     * Generated from protobuf field <code>string route_desc = 5;</code>
+     * @return string
+     */
+    public function getRouteDesc()
+    {
+        return $this->route_desc;
+    }
+
+    /**
+     * The route_desc field contains a description of a route.
+     *
+     * Generated from protobuf field <code>string route_desc = 5;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteDesc($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_desc = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Route.RouteType route_type = 6;</code>
+     * @return int
+     */
+    public function getRouteType()
+    {
+        return $this->route_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Route.RouteType route_type = 6;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setRouteType($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Route_RouteType::class);
+        $this->route_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * The route_url field contains the URL of a web page about that particular route.
+     *
+     * Generated from protobuf field <code>string route_url = 7;</code>
+     * @return string
+     */
+    public function getRouteUrl()
+    {
+        return $this->route_url;
+    }
+
+    /**
+     * The route_url field contains the URL of a web page about that particular route.
+     *
+     * Generated from protobuf field <code>string route_url = 7;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteUrl($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_url = $var;
+
+        return $this;
+    }
+
+    /**
+     * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+     * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+     *
+     * Generated from protobuf field <code>string route_color = 8;</code>
+     * @return string
+     */
+    public function getRouteColor()
+    {
+        return $this->route_color;
+    }
+
+    /**
+     * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+     * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+     *
+     * Generated from protobuf field <code>string route_color = 8;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteColor($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_color = $var;
+
+        return $this;
+    }
+
+    /**
+     * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+     *
+     * Generated from protobuf field <code>string route_text_color = 9;</code>
+     * @return string
+     */
+    public function getRouteTextColor()
+    {
+        return $this->route_text_color;
+    }
+
+    /**
+     * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+     *
+     * Generated from protobuf field <code>string route_text_color = 9;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteTextColor($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_text_color = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Route/RouteType.php b/inc/Gtfs/Route/RouteType.php
new file mode 100644
index 0000000..9e9f6cc
--- /dev/null
+++ b/inc/Gtfs/Route/RouteType.php
@@ -0,0 +1,99 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Route;
+
+use UnexpectedValueException;
+
+/**
+ * The route_type field describes the type of transportation used on a route.
+ *
+ * Protobuf type <code>gtfs.Route.RouteType</code>
+ */
+class RouteType
+{
+    /**
+     * Tram, Streetcar, Light rail. Any light rail or street level system within a metropolitan area.
+     *
+     * Generated from protobuf enum <code>TRAM = 0;</code>
+     */
+    const TRAM = 0;
+    /**
+     * Subway, Metro. Any underground rail system within a metropolitan area.
+     *
+     * Generated from protobuf enum <code>SUBWAY = 1;</code>
+     */
+    const SUBWAY = 1;
+    /**
+     * Rail. Used for intercity or long-distance travel.
+     *
+     * Generated from protobuf enum <code>RAIL = 2;</code>
+     */
+    const RAIL = 2;
+    /**
+     * Bus. Used for short- and long-distance bus routes.
+     *
+     * Generated from protobuf enum <code>BUS = 3;</code>
+     */
+    const BUS = 3;
+    /**
+     * Ferry. Used for short- and long-distance boat service.
+     *
+     * Generated from protobuf enum <code>FERRY = 4;</code>
+     */
+    const FERRY = 4;
+    /**
+     * Cable car. Used for street-level cable cars where the cable runs beneath the car.
+     *
+     * Generated from protobuf enum <code>CABLECAR = 5;</code>
+     */
+    const CABLECAR = 5;
+    /**
+     * Gondola, Suspended cable car. Typically used for aerial cable cars where the car is suspended from the cable.
+     *
+     * Generated from protobuf enum <code>GONDOLA = 6;</code>
+     */
+    const GONDOLA = 6;
+    /**
+     * Funicular. Any rail system designed for steep inclines.
+     *
+     * Generated from protobuf enum <code>FUNICULAR = 7;</code>
+     */
+    const FUNICULAR = 7;
+
+    private static $valueToName = [
+        self::TRAM => 'TRAM',
+        self::SUBWAY => 'SUBWAY',
+        self::RAIL => 'RAIL',
+        self::BUS => 'BUS',
+        self::FERRY => 'FERRY',
+        self::CABLECAR => 'CABLECAR',
+        self::GONDOLA => 'GONDOLA',
+        self::FUNICULAR => 'FUNICULAR',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(RouteType::class, \Gtfs\Route_RouteType::class);
+
diff --git a/inc/Gtfs/Route_RouteType.php b/inc/Gtfs/Route_RouteType.php
new file mode 100644
index 0000000..3b8a42c
--- /dev/null
+++ b/inc/Gtfs/Route_RouteType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Route\RouteType instead.
+     * @deprecated
+     */
+    class Route_RouteType {}
+}
+class_exists(Route\RouteType::class);
+@trigger_error('Gtfs\Route_RouteType is deprecated and will be removed in the next major release. Use Gtfs\Route\RouteType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Shape.php b/inc/Gtfs/Shape.php
new file mode 100644
index 0000000..5396c4f
--- /dev/null
+++ b/inc/Gtfs/Shape.php
@@ -0,0 +1,208 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Shape</code>
+ */
+class Shape extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Generated from protobuf field <code>string shape_id = 1;</code>
+     */
+    protected $shape_id = '';
+    /**
+     * Generated from protobuf field <code>float shape_pt_lat = 2;</code>
+     */
+    protected $shape_pt_lat = 0.0;
+    /**
+     * Generated from protobuf field <code>float shape_pt_lon = 3;</code>
+     */
+    protected $shape_pt_lon = 0.0;
+    /**
+     * Generated from protobuf field <code>int32 shape_pt_sequence = 4;</code>
+     */
+    protected $shape_pt_sequence = 0;
+    /**
+     * Generated from protobuf field <code>float shape_dist_traveled = 5;</code>
+     */
+    protected $shape_dist_traveled = 0.0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $shape_id
+     *     @type float $shape_pt_lat
+     *     @type float $shape_pt_lon
+     *     @type int $shape_pt_sequence
+     *     @type float $shape_dist_traveled
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Generated from protobuf field <code>string shape_id = 1;</code>
+     * @return string
+     */
+    public function getShapeId()
+    {
+        return $this->shape_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string shape_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setShapeId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->shape_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_pt_lat = 2;</code>
+     * @return float
+     */
+    public function getShapePtLat()
+    {
+        return $this->shape_pt_lat;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_pt_lat = 2;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setShapePtLat($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->shape_pt_lat = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_pt_lon = 3;</code>
+     * @return float
+     */
+    public function getShapePtLon()
+    {
+        return $this->shape_pt_lon;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_pt_lon = 3;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setShapePtLon($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->shape_pt_lon = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 shape_pt_sequence = 4;</code>
+     * @return int
+     */
+    public function getShapePtSequence()
+    {
+        return $this->shape_pt_sequence;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 shape_pt_sequence = 4;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setShapePtSequence($var)
+    {
+        GPBUtil::checkInt32($var);
+        $this->shape_pt_sequence = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_dist_traveled = 5;</code>
+     * @return float
+     */
+    public function getShapeDistTraveled()
+    {
+        return $this->shape_dist_traveled;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_dist_traveled = 5;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setShapeDistTraveled($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->shape_dist_traveled = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Stop.php b/inc/Gtfs/Stop.php
new file mode 100644
index 0000000..ae0170b
--- /dev/null
+++ b/inc/Gtfs/Stop.php
@@ -0,0 +1,454 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Stop</code>
+ */
+class Stop extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The stop_id field contains an ID that uniquely identifies a stop or station.
+     * Multiple routes may use the same stop. stop_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string stop_id = 1;</code>
+     */
+    protected $stop_id = '';
+    /**
+     * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+     *
+     * Generated from protobuf field <code>string stop_code = 2;</code>
+     */
+    protected $stop_code = '';
+    /**
+     * The stop_name field contains the name of a stop or station.
+     *
+     * Generated from protobuf field <code>string stop_name = 3;</code>
+     */
+    protected $stop_name = '';
+    /**
+     * The stop_desc field contains a description of a stop.
+     *
+     * Generated from protobuf field <code>string stop_desc = 4;</code>
+     */
+    protected $stop_desc = '';
+    /**
+     * Degrees North, in the WGS-84 coordinate system.
+     *
+     * Generated from protobuf field <code>float latitude = 5;</code>
+     */
+    protected $latitude = 0.0;
+    /**
+     * Degrees East, in the WGS-84 coordinate system.
+     *
+     * Generated from protobuf field <code>float longitude = 6;</code>
+     */
+    protected $longitude = 0.0;
+    /**
+     * Generated from protobuf field <code>string zone_id = 7;</code>
+     */
+    protected $zone_id = '';
+    /**
+     * Generated from protobuf field <code>string stop_url = 8;</code>
+     */
+    protected $stop_url = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.Stop.LocationType location_type = 9;</code>
+     */
+    protected $location_type = 0;
+    /**
+     * Generated from protobuf field <code>string parent_station = 10;</code>
+     */
+    protected $parent_station = '';
+    /**
+     * Generated from protobuf field <code>string agency_timezone = 11;</code>
+     */
+    protected $agency_timezone = '';
+    /**
+     * The exact status of the vehicle with respect to the current stop.
+     * Ignored if current_stop_sequence is missing.
+     *
+     * Generated from protobuf field <code>.gtfs.Stop.WheelchairBoarding wheelchair_boarding = 12;</code>
+     */
+    protected $wheelchair_boarding = 0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $stop_id
+     *           The stop_id field contains an ID that uniquely identifies a stop or station.
+     *           Multiple routes may use the same stop. stop_id is dataset unique.
+     *     @type string $stop_code
+     *           The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+     *     @type string $stop_name
+     *           The stop_name field contains the name of a stop or station.
+     *     @type string $stop_desc
+     *           The stop_desc field contains a description of a stop.
+     *     @type float $latitude
+     *           Degrees North, in the WGS-84 coordinate system.
+     *     @type float $longitude
+     *           Degrees East, in the WGS-84 coordinate system.
+     *     @type string $zone_id
+     *     @type string $stop_url
+     *     @type int $location_type
+     *     @type string $parent_station
+     *     @type string $agency_timezone
+     *     @type int $wheelchair_boarding
+     *           The exact status of the vehicle with respect to the current stop.
+     *           Ignored if current_stop_sequence is missing.
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The stop_id field contains an ID that uniquely identifies a stop or station.
+     * Multiple routes may use the same stop. stop_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string stop_id = 1;</code>
+     * @return string
+     */
+    public function getStopId()
+    {
+        return $this->stop_id;
+    }
+
+    /**
+     * The stop_id field contains an ID that uniquely identifies a stop or station.
+     * Multiple routes may use the same stop. stop_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string stop_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+     *
+     * Generated from protobuf field <code>string stop_code = 2;</code>
+     * @return string
+     */
+    public function getStopCode()
+    {
+        return $this->stop_code;
+    }
+
+    /**
+     * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+     *
+     * Generated from protobuf field <code>string stop_code = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopCode($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_code = $var;
+
+        return $this;
+    }
+
+    /**
+     * The stop_name field contains the name of a stop or station.
+     *
+     * Generated from protobuf field <code>string stop_name = 3;</code>
+     * @return string
+     */
+    public function getStopName()
+    {
+        return $this->stop_name;
+    }
+
+    /**
+     * The stop_name field contains the name of a stop or station.
+     *
+     * Generated from protobuf field <code>string stop_name = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopName($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_name = $var;
+
+        return $this;
+    }
+
+    /**
+     * The stop_desc field contains a description of a stop.
+     *
+     * Generated from protobuf field <code>string stop_desc = 4;</code>
+     * @return string
+     */
+    public function getStopDesc()
+    {
+        return $this->stop_desc;
+    }
+
+    /**
+     * The stop_desc field contains a description of a stop.
+     *
+     * Generated from protobuf field <code>string stop_desc = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopDesc($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_desc = $var;
+
+        return $this;
+    }
+
+    /**
+     * Degrees North, in the WGS-84 coordinate system.
+     *
+     * Generated from protobuf field <code>float latitude = 5;</code>
+     * @return float
+     */
+    public function getLatitude()
+    {
+        return $this->latitude;
+    }
+
+    /**
+     * Degrees North, in the WGS-84 coordinate system.
+     *
+     * Generated from protobuf field <code>float latitude = 5;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setLatitude($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->latitude = $var;
+
+        return $this;
+    }
+
+    /**
+     * Degrees East, in the WGS-84 coordinate system.
+     *
+     * Generated from protobuf field <code>float longitude = 6;</code>
+     * @return float
+     */
+    public function getLongitude()
+    {
+        return $this->longitude;
+    }
+
+    /**
+     * Degrees East, in the WGS-84 coordinate system.
+     *
+     * Generated from protobuf field <code>float longitude = 6;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setLongitude($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->longitude = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string zone_id = 7;</code>
+     * @return string
+     */
+    public function getZoneId()
+    {
+        return $this->zone_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string zone_id = 7;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setZoneId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->zone_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_url = 8;</code>
+     * @return string
+     */
+    public function getStopUrl()
+    {
+        return $this->stop_url;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_url = 8;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopUrl($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_url = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Stop.LocationType location_type = 9;</code>
+     * @return int
+     */
+    public function getLocationType()
+    {
+        return $this->location_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Stop.LocationType location_type = 9;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setLocationType($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Stop_LocationType::class);
+        $this->location_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string parent_station = 10;</code>
+     * @return string
+     */
+    public function getParentStation()
+    {
+        return $this->parent_station;
+    }
+
+    /**
+     * Generated from protobuf field <code>string parent_station = 10;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setParentStation($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->parent_station = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string agency_timezone = 11;</code>
+     * @return string
+     */
+    public function getAgencyTimezone()
+    {
+        return $this->agency_timezone;
+    }
+
+    /**
+     * Generated from protobuf field <code>string agency_timezone = 11;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setAgencyTimezone($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->agency_timezone = $var;
+
+        return $this;
+    }
+
+    /**
+     * The exact status of the vehicle with respect to the current stop.
+     * Ignored if current_stop_sequence is missing.
+     *
+     * Generated from protobuf field <code>.gtfs.Stop.WheelchairBoarding wheelchair_boarding = 12;</code>
+     * @return int
+     */
+    public function getWheelchairBoarding()
+    {
+        return $this->wheelchair_boarding;
+    }
+
+    /**
+     * The exact status of the vehicle with respect to the current stop.
+     * Ignored if current_stop_sequence is missing.
+     *
+     * Generated from protobuf field <code>.gtfs.Stop.WheelchairBoarding wheelchair_boarding = 12;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setWheelchairBoarding($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Stop_WheelchairBoarding::class);
+        $this->wheelchair_boarding = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Stop/LocationType.php b/inc/Gtfs/Stop/LocationType.php
new file mode 100644
index 0000000..204d537
--- /dev/null
+++ b/inc/Gtfs/Stop/LocationType.php
@@ -0,0 +1,76 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Stop;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Stop.LocationType</code>
+ */
+class LocationType
+{
+    /**
+     * Stop (or Platform). A location where passengers board or disembark from a transit vehicle. Is called a platform when defined within a parent_station.
+     *
+     * Generated from protobuf enum <code>STOP = 0;</code>
+     */
+    const STOP = 0;
+    /**
+     * Station. A physical structure or area that contains one or more platform.
+     *
+     * Generated from protobuf enum <code>STATION = 1;</code>
+     */
+    const STATION = 1;
+    /**
+     * Entrance/Exit. A location where passengers can enter or exit a station from the street. If an entrance/exit belongs to multiple stations, it can be linked by pathways to both, but the data provider must pick one of them as parent.
+     *
+     * Generated from protobuf enum <code>ENTRANCE = 2;</code>
+     */
+    const ENTRANCE = 2;
+    /**
+     * Generic Node. A location within a station, not matching any other location_type, which can be used to link together pathways define in pathways.txt.
+     *
+     * Generated from protobuf enum <code>GENERIC_NODE = 3;</code>
+     */
+    const GENERIC_NODE = 3;
+    /**
+     * Boarding Area. A specific location on a platform, where passengers can board and/or alight vehicles.
+     *
+     * Generated from protobuf enum <code>BOARDING_AREA = 4;</code>
+     */
+    const BOARDING_AREA = 4;
+
+    private static $valueToName = [
+        self::STOP => 'STOP',
+        self::STATION => 'STATION',
+        self::ENTRANCE => 'ENTRANCE',
+        self::GENERIC_NODE => 'GENERIC_NODE',
+        self::BOARDING_AREA => 'BOARDING_AREA',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(LocationType::class, \Gtfs\Stop_LocationType::class);
+
diff --git a/inc/Gtfs/Stop/WheelchairBoarding.php b/inc/Gtfs/Stop/WheelchairBoarding.php
new file mode 100644
index 0000000..460a6dc
--- /dev/null
+++ b/inc/Gtfs/Stop/WheelchairBoarding.php
@@ -0,0 +1,62 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Stop;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Stop.WheelchairBoarding</code>
+ */
+class WheelchairBoarding
+{
+    /**
+     * no accessibility information for the stop
+     *
+     * Generated from protobuf enum <code>UNKNOWN = 0;</code>
+     */
+    const UNKNOWN = 0;
+    /**
+     * some vehicles at this stop can be boarded by a rider in a wheelchair
+     *
+     * Generated from protobuf enum <code>ACCESSIBLE = 1;</code>
+     */
+    const ACCESSIBLE = 1;
+    /**
+     * wheelchair boarding is not possible at this stop
+     *
+     * Generated from protobuf enum <code>NOT_ACCESSIBLE = 2;</code>
+     */
+    const NOT_ACCESSIBLE = 2;
+
+    private static $valueToName = [
+        self::UNKNOWN => 'UNKNOWN',
+        self::ACCESSIBLE => 'ACCESSIBLE',
+        self::NOT_ACCESSIBLE => 'NOT_ACCESSIBLE',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(WheelchairBoarding::class, \Gtfs\Stop_WheelchairBoarding::class);
+
diff --git a/inc/Gtfs/StopTime.php b/inc/Gtfs/StopTime.php
new file mode 100644
index 0000000..c1605c9
--- /dev/null
+++ b/inc/Gtfs/StopTime.php
@@ -0,0 +1,323 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.StopTime</code>
+ */
+class StopTime extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string trip_id = 1;</code>
+     */
+    protected $trip_id = '';
+    /**
+     * Generated from protobuf field <code>string arrival_time = 2;</code>
+     */
+    protected $arrival_time = '';
+    /**
+     * Generated from protobuf field <code>string departure_time = 3;</code>
+     */
+    protected $departure_time = '';
+    /**
+     * Generated from protobuf field <code>string stop_id = 4;</code>
+     */
+    protected $stop_id = '';
+    /**
+     * Generated from protobuf field <code>string stop_sequence = 5;</code>
+     */
+    protected $stop_sequence = '';
+    /**
+     * Generated from protobuf field <code>string stop_headsign = 6;</code>
+     */
+    protected $stop_headsign = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
+     */
+    protected $pickup_type = 0;
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
+     */
+    protected $drop_off_type = 0;
+    /**
+     * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
+     */
+    protected $shape_dist_traveled = 0.0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $trip_id
+     *           The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *     @type string $arrival_time
+     *     @type string $departure_time
+     *     @type string $stop_id
+     *     @type string $stop_sequence
+     *     @type string $stop_headsign
+     *     @type int $pickup_type
+     *     @type int $drop_off_type
+     *     @type float $shape_dist_traveled
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string trip_id = 1;</code>
+     * @return string
+     */
+    public function getTripId()
+    {
+        return $this->trip_id;
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string trip_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setTripId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->trip_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string arrival_time = 2;</code>
+     * @return string
+     */
+    public function getArrivalTime()
+    {
+        return $this->arrival_time;
+    }
+
+    /**
+     * Generated from protobuf field <code>string arrival_time = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setArrivalTime($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->arrival_time = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string departure_time = 3;</code>
+     * @return string
+     */
+    public function getDepartureTime()
+    {
+        return $this->departure_time;
+    }
+
+    /**
+     * Generated from protobuf field <code>string departure_time = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setDepartureTime($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->departure_time = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_id = 4;</code>
+     * @return string
+     */
+    public function getStopId()
+    {
+        return $this->stop_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_id = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_sequence = 5;</code>
+     * @return string
+     */
+    public function getStopSequence()
+    {
+        return $this->stop_sequence;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_sequence = 5;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopSequence($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_sequence = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_headsign = 6;</code>
+     * @return string
+     */
+    public function getStopHeadsign()
+    {
+        return $this->stop_headsign;
+    }
+
+    /**
+     * Generated from protobuf field <code>string stop_headsign = 6;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setStopHeadsign($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->stop_headsign = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
+     * @return int
+     */
+    public function getPickupType()
+    {
+        return $this->pickup_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setPickupType($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\StopTime_AvailabilityType::class);
+        $this->pickup_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
+     * @return int
+     */
+    public function getDropOffType()
+    {
+        return $this->drop_off_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setDropOffType($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\StopTime_AvailabilityType::class);
+        $this->drop_off_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
+     * @return float
+     */
+    public function getShapeDistTraveled()
+    {
+        return $this->shape_dist_traveled;
+    }
+
+    /**
+     * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
+     * @param float $var
+     * @return $this
+     */
+    public function setShapeDistTraveled($var)
+    {
+        GPBUtil::checkFloat($var);
+        $this->shape_dist_traveled = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/StopTime/AvailabilityType.php b/inc/Gtfs/StopTime/AvailabilityType.php
new file mode 100644
index 0000000..6f876cc
--- /dev/null
+++ b/inc/Gtfs/StopTime/AvailabilityType.php
@@ -0,0 +1,69 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\StopTime;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.StopTime.AvailabilityType</code>
+ */
+class AvailabilityType
+{
+    /**
+     * Tram, Streetcar, Light rail. Any light rail or street level system within a metropolitan area.
+     *
+     * Generated from protobuf enum <code>REGULAR = 0;</code>
+     */
+    const REGULAR = 0;
+    /**
+     * Subway, Metro. Any underground rail system within a metropolitan area.
+     *
+     * Generated from protobuf enum <code>NOT_AVAILABLE = 1;</code>
+     */
+    const NOT_AVAILABLE = 1;
+    /**
+     * Rail. Used for intercity or long-distance travel.
+     *
+     * Generated from protobuf enum <code>PHONE = 2;</code>
+     */
+    const PHONE = 2;
+    /**
+     * Bus. Used for short- and long-distance bus routes.
+     *
+     * Generated from protobuf enum <code>DRIVER = 3;</code>
+     */
+    const DRIVER = 3;
+
+    private static $valueToName = [
+        self::REGULAR => 'REGULAR',
+        self::NOT_AVAILABLE => 'NOT_AVAILABLE',
+        self::PHONE => 'PHONE',
+        self::DRIVER => 'DRIVER',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(AvailabilityType::class, \Gtfs\StopTime_AvailabilityType::class);
+
diff --git a/inc/Gtfs/StopTime_AvailabilityType.php b/inc/Gtfs/StopTime_AvailabilityType.php
new file mode 100644
index 0000000..73c70ed
--- /dev/null
+++ b/inc/Gtfs/StopTime_AvailabilityType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\StopTime\AvailabilityType instead.
+     * @deprecated
+     */
+    class StopTime_AvailabilityType {}
+}
+class_exists(StopTime\AvailabilityType::class);
+@trigger_error('Gtfs\StopTime_AvailabilityType is deprecated and will be removed in the next major release. Use Gtfs\StopTime\AvailabilityType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Stop_LocationType.php b/inc/Gtfs/Stop_LocationType.php
new file mode 100644
index 0000000..18cfb9e
--- /dev/null
+++ b/inc/Gtfs/Stop_LocationType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Stop\LocationType instead.
+     * @deprecated
+     */
+    class Stop_LocationType {}
+}
+class_exists(Stop\LocationType::class);
+@trigger_error('Gtfs\Stop_LocationType is deprecated and will be removed in the next major release. Use Gtfs\Stop\LocationType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Stop_WheelchairBoarding.php b/inc/Gtfs/Stop_WheelchairBoarding.php
new file mode 100644
index 0000000..1fbb1a9
--- /dev/null
+++ b/inc/Gtfs/Stop_WheelchairBoarding.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Stop\WheelchairBoarding instead.
+     * @deprecated
+     */
+    class Stop_WheelchairBoarding {}
+}
+class_exists(Stop\WheelchairBoarding::class);
+@trigger_error('Gtfs\Stop_WheelchairBoarding is deprecated and will be removed in the next major release. Use Gtfs\Stop\WheelchairBoarding instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Transfer.php b/inc/Gtfs/Transfer.php
new file mode 100644
index 0000000..c3ee43b
--- /dev/null
+++ b/inc/Gtfs/Transfer.php
@@ -0,0 +1,181 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Transfer</code>
+ */
+class Transfer extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * Generated from protobuf field <code>string from_stop_id = 1;</code>
+     */
+    protected $from_stop_id = '';
+    /**
+     * Generated from protobuf field <code>string to_stop_id = 2;</code>
+     */
+    protected $to_stop_id = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.Transfer.TransferType transfer_type = 3;</code>
+     */
+    protected $transfer_type = 0;
+    /**
+     * Generated from protobuf field <code>int32 min_transfer_time = 4;</code>
+     */
+    protected $min_transfer_time = 0;
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $from_stop_id
+     *     @type string $to_stop_id
+     *     @type int $transfer_type
+     *     @type int $min_transfer_time
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * Generated from protobuf field <code>string from_stop_id = 1;</code>
+     * @return string
+     */
+    public function getFromStopId()
+    {
+        return $this->from_stop_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string from_stop_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setFromStopId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->from_stop_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>string to_stop_id = 2;</code>
+     * @return string
+     */
+    public function getToStopId()
+    {
+        return $this->to_stop_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>string to_stop_id = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setToStopId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->to_stop_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Transfer.TransferType transfer_type = 3;</code>
+     * @return int
+     */
+    public function getTransferType()
+    {
+        return $this->transfer_type;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Transfer.TransferType transfer_type = 3;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setTransferType($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Transfer_TransferType::class);
+        $this->transfer_type = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 min_transfer_time = 4;</code>
+     * @return int
+     */
+    public function getMinTransferTime()
+    {
+        return $this->min_transfer_time;
+    }
+
+    /**
+     * Generated from protobuf field <code>int32 min_transfer_time = 4;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setMinTransferTime($var)
+    {
+        GPBUtil::checkInt32($var);
+        $this->min_transfer_time = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Transfer/TransferType.php b/inc/Gtfs/Transfer/TransferType.php
new file mode 100644
index 0000000..f78300f
--- /dev/null
+++ b/inc/Gtfs/Transfer/TransferType.php
@@ -0,0 +1,61 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Transfer;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Transfer.TransferType</code>
+ */
+class TransferType
+{
+    /**
+     * Generated from protobuf enum <code>RECOMMENDED = 0;</code>
+     */
+    const RECOMMENDED = 0;
+    /**
+     * Generated from protobuf enum <code>TIMED = 1;</code>
+     */
+    const TIMED = 1;
+    /**
+     * Generated from protobuf enum <code>MINIMUM = 2;</code>
+     */
+    const MINIMUM = 2;
+    /**
+     * Generated from protobuf enum <code>NOT_POSSIBLE = 3;</code>
+     */
+    const NOT_POSSIBLE = 3;
+
+    private static $valueToName = [
+        self::RECOMMENDED => 'RECOMMENDED',
+        self::TIMED => 'TIMED',
+        self::MINIMUM => 'MINIMUM',
+        self::NOT_POSSIBLE => 'NOT_POSSIBLE',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(TransferType::class, \Gtfs\Transfer_TransferType::class);
+
diff --git a/inc/Gtfs/Transfer_TransferType.php b/inc/Gtfs/Transfer_TransferType.php
new file mode 100644
index 0000000..8efb526
--- /dev/null
+++ b/inc/Gtfs/Transfer_TransferType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Transfer\TransferType instead.
+     * @deprecated
+     */
+    class Transfer_TransferType {}
+}
+class_exists(Transfer\TransferType::class);
+@trigger_error('Gtfs\Transfer_TransferType is deprecated and will be removed in the next major release. Use Gtfs\Transfer\TransferType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Trip.php b/inc/Gtfs/Trip.php
new file mode 100644
index 0000000..0452c4f
--- /dev/null
+++ b/inc/Gtfs/Trip.php
@@ -0,0 +1,346 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Trip</code>
+ */
+class Trip extends \Google\Protobuf\Internal\Message
+{
+    /**
+     * The route_id field contains an ID that uniquely identifies a route.
+     *
+     * Generated from protobuf field <code>string route_id = 1;</code>
+     */
+    protected $route_id = '';
+    /**
+     * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+     *
+     * Generated from protobuf field <code>string service_id = 2;</code>
+     */
+    protected $service_id = '';
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string trip_id = 3;</code>
+     */
+    protected $trip_id = '';
+    /**
+     * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+     *
+     * Generated from protobuf field <code>string trip_headsign = 4;</code>
+     */
+    protected $trip_headsign = '';
+    /**
+     * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+     *
+     * Generated from protobuf field <code>string trip_short_name = 5;</code>
+     */
+    protected $trip_short_name = '';
+    /**
+     * Generated from protobuf field <code>.gtfs.Trip.Direction direction_id = 6;</code>
+     */
+    protected $direction_id = 0;
+    /**
+     * The block_id field identifies the block to which the trip belongs.
+     * A block consists of two or more sequential trips made using the same vehicle,
+     * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+     *
+     * Generated from protobuf field <code>string block_id = 7;</code>
+     */
+    protected $block_id = '';
+    /**
+     * The shape_id field contains an ID that defines a shape for the trip.
+     *
+     * Generated from protobuf field <code>string shape_id = 8;</code>
+     */
+    protected $shape_id = '';
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     */
+    protected $extension = null;
+
+    /**
+     * Constructor.
+     *
+     * @param array $data {
+     *     Optional. Data for populating the Message object.
+     *
+     *     @type string $route_id
+     *           The route_id field contains an ID that uniquely identifies a route.
+     *     @type string $service_id
+     *           The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+     *     @type string $trip_id
+     *           The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *     @type string $trip_headsign
+     *           The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+     *     @type string $trip_short_name
+     *           The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+     *     @type int $direction_id
+     *     @type string $block_id
+     *           The block_id field identifies the block to which the trip belongs.
+     *           A block consists of two or more sequential trips made using the same vehicle,
+     *           where a passenger can transfer from one trip to the next just by staying in the vehicle.
+     *     @type string $shape_id
+     *           The shape_id field contains an ID that defines a shape for the trip.
+     *     @type \Google\Protobuf\Any $extension
+     *           The extensions namespace allows 3rd-party developers to extend the
+     *           GTFS specification in order to add and evaluate new features and
+     *           modifications to the spec.
+     * }
+     */
+    public function __construct($data = NULL) {
+        \GPBMetadata\Proto\Gtfs::initOnce();
+        parent::__construct($data);
+    }
+
+    /**
+     * The route_id field contains an ID that uniquely identifies a route.
+     *
+     * Generated from protobuf field <code>string route_id = 1;</code>
+     * @return string
+     */
+    public function getRouteId()
+    {
+        return $this->route_id;
+    }
+
+    /**
+     * The route_id field contains an ID that uniquely identifies a route.
+     *
+     * Generated from protobuf field <code>string route_id = 1;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setRouteId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->route_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+     *
+     * Generated from protobuf field <code>string service_id = 2;</code>
+     * @return string
+     */
+    public function getServiceId()
+    {
+        return $this->service_id;
+    }
+
+    /**
+     * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+     *
+     * Generated from protobuf field <code>string service_id = 2;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setServiceId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->service_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string trip_id = 3;</code>
+     * @return string
+     */
+    public function getTripId()
+    {
+        return $this->trip_id;
+    }
+
+    /**
+     * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+     *
+     * Generated from protobuf field <code>string trip_id = 3;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setTripId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->trip_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+     *
+     * Generated from protobuf field <code>string trip_headsign = 4;</code>
+     * @return string
+     */
+    public function getTripHeadsign()
+    {
+        return $this->trip_headsign;
+    }
+
+    /**
+     * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+     *
+     * Generated from protobuf field <code>string trip_headsign = 4;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setTripHeadsign($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->trip_headsign = $var;
+
+        return $this;
+    }
+
+    /**
+     * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+     *
+     * Generated from protobuf field <code>string trip_short_name = 5;</code>
+     * @return string
+     */
+    public function getTripShortName()
+    {
+        return $this->trip_short_name;
+    }
+
+    /**
+     * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+     *
+     * Generated from protobuf field <code>string trip_short_name = 5;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setTripShortName($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->trip_short_name = $var;
+
+        return $this;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Trip.Direction direction_id = 6;</code>
+     * @return int
+     */
+    public function getDirectionId()
+    {
+        return $this->direction_id;
+    }
+
+    /**
+     * Generated from protobuf field <code>.gtfs.Trip.Direction direction_id = 6;</code>
+     * @param int $var
+     * @return $this
+     */
+    public function setDirectionId($var)
+    {
+        GPBUtil::checkEnum($var, \Gtfs\Trip_Direction::class);
+        $this->direction_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The block_id field identifies the block to which the trip belongs.
+     * A block consists of two or more sequential trips made using the same vehicle,
+     * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+     *
+     * Generated from protobuf field <code>string block_id = 7;</code>
+     * @return string
+     */
+    public function getBlockId()
+    {
+        return $this->block_id;
+    }
+
+    /**
+     * The block_id field identifies the block to which the trip belongs.
+     * A block consists of two or more sequential trips made using the same vehicle,
+     * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+     *
+     * Generated from protobuf field <code>string block_id = 7;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setBlockId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->block_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The shape_id field contains an ID that defines a shape for the trip.
+     *
+     * Generated from protobuf field <code>string shape_id = 8;</code>
+     * @return string
+     */
+    public function getShapeId()
+    {
+        return $this->shape_id;
+    }
+
+    /**
+     * The shape_id field contains an ID that defines a shape for the trip.
+     *
+     * Generated from protobuf field <code>string shape_id = 8;</code>
+     * @param string $var
+     * @return $this
+     */
+    public function setShapeId($var)
+    {
+        GPBUtil::checkString($var, True);
+        $this->shape_id = $var;
+
+        return $this;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @return \Google\Protobuf\Any
+     */
+    public function getExtension()
+    {
+        return $this->extension;
+    }
+
+    /**
+     * The extensions namespace allows 3rd-party developers to extend the
+     * GTFS specification in order to add and evaluate new features and
+     * modifications to the spec.
+     *
+     * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+     * @param \Google\Protobuf\Any $var
+     * @return $this
+     */
+    public function setExtension($var)
+    {
+        GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+        $this->extension = $var;
+
+        return $this;
+    }
+
+}
+
diff --git a/inc/Gtfs/Trip/Direction.php b/inc/Gtfs/Trip/Direction.php
new file mode 100644
index 0000000..d446b74
--- /dev/null
+++ b/inc/Gtfs/Trip/Direction.php
@@ -0,0 +1,53 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Trip;
+
+use UnexpectedValueException;
+
+/**
+ * The direction_id field contains a binary value that indicates the direction of travel for a trip.
+ *
+ * Protobuf type <code>gtfs.Trip.Direction</code>
+ */
+class Direction
+{
+    /**
+     * Generated from protobuf enum <code>OUTBOUND = 0;</code>
+     */
+    const OUTBOUND = 0;
+    /**
+     * Generated from protobuf enum <code>INBOUND = 1;</code>
+     */
+    const INBOUND = 1;
+
+    private static $valueToName = [
+        self::OUTBOUND => 'OUTBOUND',
+        self::INBOUND => 'INBOUND',
+    ];
+
+    public static function name($value)
+    {
+        if (!isset(self::$valueToName[$value])) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no name defined for value %s', __CLASS__, $value));
+        }
+        return self::$valueToName[$value];
+    }
+
+
+    public static function value($name)
+    {
+        $const = __CLASS__ . '::' . strtoupper($name);
+        if (!defined($const)) {
+            throw new UnexpectedValueException(sprintf(
+                    'Enum %s has no value defined for name %s', __CLASS__, $name));
+        }
+        return constant($const);
+    }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(Direction::class, \Gtfs\Trip_Direction::class);
+
diff --git a/inc/Gtfs/Trip_Direction.php b/inc/Gtfs/Trip_Direction.php
new file mode 100644
index 0000000..b626b3c
--- /dev/null
+++ b/inc/Gtfs/Trip_Direction.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+    /**
+     * This class is deprecated. Use Gtfs\Trip\Direction instead.
+     * @deprecated
+     */
+    class Trip_Direction {}
+}
+class_exists(Trip\Direction::class);
+@trigger_error('Gtfs\Trip_Direction is deprecated and will be removed in the next major release. Use Gtfs\Trip\Direction instead', E_USER_DEPRECATED);
+