public final void init() throws IOException, ZipException {
        
        boolean downloadSDK = false;
        
        logger.log(Level.INFO, "Initializing SDK Manager. Checking for SDK directories...");
        logger.log(Level.INFO, "Checking downloads dir...");
        
        if (!new File(toolkitDir.getAbsolutePath() + "/download").exists()) {
            logger.log(Level.INFO, "Downloads dir does not exist. Creating...");
            new File(toolkitDir.getAbsolutePath() + "/download").mkdirs();
        } else logger.log(Level.INFO, "Downloads dir exists. Ignoring...");
        
        logger.log(Level.INFO, "Checking SDK dir...");
        
        if (!new File(toolkitDir.getAbsolutePath() + "/sdk").exists()) {
            logger.log(Level.INFO, "SDK dir does not exist. Creating...");
            new File(toolkitDir.getAbsolutePath() + "/sdk").mkdirs();
        } else logger.log(Level.INFO, "SDK dir exists. Ignoring...");
        
        logger.log(Level.INFO, "Operating system: " + osName + ".");
        
        if (downloadSDK) {
            logger.log(Level.INFO, "Downloading Android SDK...");
            SDKDownload download = new SDKDownload(parser);
            download.setVisible(true);
            logger.log(Level.INFO, "Computing file size...");
            download.setProgressMax(computeRemoteFileSize() / 1024 / 1024);
            logger.log(Level.INFO, "Creating necessary files...");
                        
            File output = null;
            URL input = null;
            BufferedReader inputReader = null;
            BufferedWriter outputWriter = null;
            int data = 0;
            long dataTotal = 0;
            
            if (!"Linux".equals(osName))
                output = new File(toolkitDir.getAbsolutePath() + "/sdk/sdkPackage_uat.tgz");
            else
                output = new File(toolkitDir.getAbsolutePath() + "/sdk/sdkPackage_uat.zip");
            
            if ("Linux".equals(osName))
                input = new URL("http://team-m4gkbeatz.eu/UniversalAndroidToolkit/sdkDownload/android-sdk_r22.6.2-linux.tgz");
            else if (osName.contains("Windows"))
                input = new URL("http://team-m4gkbeatz.eu/UniversalAndroidToolkit/sdkDownload/android-sdk_r22.6.2-windows.zip");
            else // Assume system is Mac OS
                input = new URL("http://team-m4gkbeatz.eu/UniversalAndroidToolkit/sdkDownload/android-sdk_r22.6.2-macosx.zip");
            
            try {
                inputReader = new BufferedReader(new InputStreamReader(input.openStream()));
                outputWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output.getAbsolutePath())));
                
                while ((data = inputReader.read()) != -1) {
                    outputWriter.write(data);
                    outputWriter.flush();
                    dataTotal += data;
                    download.setProgress(dataTotal);
                }
                
            } finally {
                inputReader.close();
                outputWriter.close();
            }
            
            logger.log(Level.INFO, "SDK was downloaded successfully.\n"
                    + "\t\tTotal data downloaded: " + (dataTotal / 1024 / 1024) + "MB\n"
                    + "\t\tFile size: " + output.length());
            logger.log(Level.INFO, "Installing SDK...");
            
            ZipFile zip;
            try {
                zip = new ZipFile(output.getAbsolutePath());
                zip.extractAll(output.getParentFile().getAbsolutePath());
            } finally {
                zip = null;
            }
            
            JOptionPane.showMessageDialog(download, parser.parse("sdkManager:successMsg"), parser.parse("sdkManager:successMsgTitle"), JOptionPane.INFORMATION_MESSAGE);
            download.dispose();
            download = null;
            
            
        }
        
    }