protected function init()
    {
        try {
            $lastUpdate = $this->initFromFiles();
        } catch (ShopgateLibraryException $e) {
            // If this fails with an exception we have a most likely permanent problem.
            // In that case the lists _MUST NOT_ be fetched from the API as chances are high this would happen for
            // every request to the merchant's desktop site.
            return;
        }

        if ($this->disableUpdate || !$this->expired($lastUpdate)) {
            return;
        }

        try {
            $this->update();
        } catch (Exception $e) {
            // if fetching from API fails, try again in 5 minutes; meanwhile use the cached keywords
            $this->saveAllKeywordsToFiles($newUpdateTimestamp = (time() - ($this->cacheTimeout * 3600)) + 300);
        }
    }