private void Initialize()
        {
            bool errors = false;

            // Init config
            List <string> configErrors = config.ReadConfig();

            // Init GUI
            if (config.renderText)
            {
                gui = new TextGUI();
            }
            else
            {
                gui = new NoGUI();
            }

            // Show config errors if there are any
            int i = 0;

            foreach (string configError in configErrors)
            {
                if (configError == "")
                {
                    continue;
                }
                i++;
                errors = true;
                //Notification.Show(i.ToString() + ": " + configError);
                gui.AddStartupMessage(1, i.ToString() + ": " + configError);
            }

            allWeapons       = Weapons.getWeaponHashes();
            allWeaponTints   = Enum.GetValues(typeof(WeaponTint)).Cast <WeaponTint>().ToArray();
            allVehicleColors = Enum.GetValues(typeof(VehicleColor)).Cast <VehicleColor>().ToArray();

            FindAllAvailableVehicles();

            if (config.customVehicleList || config.debugMode)
            {
                gui.AddStartupMessage(1, "Cars: " + availableVehicles.Count);
                gui.AddStartupMessage(1, "Boats: " + availableBoats.Count);
                gui.AddStartupMessage(1, "Planes: " + availablePlanes.Count);
                gui.AddStartupMessage(1, "Helicopters: " + availableHelis.Count);
            }

            if (config.customVehicleList)
            {
                bool hasErrors = false;
                if (availableVehicles.Count == 0)
                {
                    gui.ShowNotification("[LAND VEHICLES] section has no valid entries!");
                    hasErrors = true;
                }

                if (config.specialClasses)
                {
                    if (availableBoats.Count == 0)
                    {
                        gui.ShowNotification("[BOATS] section has no valid entries!");
                        hasErrors = true;
                    }
                    if (availablePlanes.Count == 0)
                    {
                        gui.ShowNotification("[PLANES] section has no valid entries!");
                        hasErrors = true;
                    }
                    if (availableHelis.Count == 0)
                    {
                        gui.ShowNotification("[HELICOPTERS] section has no valid entries!");
                        hasErrors = true;
                    }
                }

                if (hasErrors)
                {
                    gui.ShowNotification("Loading custom vehicle list failed. Using the built-in list instead.");
                    config.customVehicleList = false;
                    FindAllAvailableVehicles();
                }
            }

            //GTA.UI.Screen.ShowSubtitle("RandomVehicles.dll initiated " + (errors ? "with errors" : "sucessfully"), 5000);
            gui.AddStartupMessage(0, "RandomVehicles.dll initiated " + (errors ? "with errors" : "sucessfully"));
        }