public function sidereal($mode = 'a', Angle $lon = null)
    {
        // Get UT1 time
        $ut  = $this->copy()->toUT1();
        $uta = $ut->jd;
        $utb = $ut->dayFrac;
        $ut  = null;

        // Get TT time
        $tt  = $this->copy()->toTT();
        $tta = $tt->jd;
        $ttb = $tt->dayFrac;
        $tt  = null;

        // Compute either GMST or GAST
        $st;
        if ($mode == 'a') {
            $strad = IAU::Gst06a($uta, $utb, $tta, $ttb);
        } else {
            $strad = IAU::Gmst06($uta, $utb, $tta, $ttb);
        }

        // Add longitude if relevant
        if ($lon) {
            $st = Angle::rad($strad)->add($lon)->norm()->toTime();
        } else {
            $st = Angle::rad($strad)->toTime();
        }

        // Return as hours
        return $st;
    }