private function performUpdate()
    {
        // Check if everything is ok locally
        if ($this->filesExist()) {
            if ($this->hoursSinceUpdate() < static::UPDATE_INTVL_H) {
                return false;
            }
        }

        $filesUpdated = [];

        // Log FTP diff procedure
        $ftp = $this->ftp();
        foreach (static::FILES as $file) {
            // Local file path
            $lFile = $this->storage($file);

            // Remote and local file sizes
            $rSize = ftp_size($ftp, $file);
            $lSize = file_exists($lFile) ? filesize($lFile) : 0;

            // Check if file sizes differ
            if ($lSize != $rSize) {
                // Download files if the sizes differ
                ftp_get($ftp, $lFile, $file, FTP_ASCII);
                $filesUpdated[] = $file;
            }
        }

        // Flag current last update time to now
        $this->setUpdatedNow();

        return $filesUpdated;
    }