public void getIMDBData(ExecutorService executor, final Gui gui) {
        Runnable imdbData = new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < NUMBER_OF_TRIES; i++) {
                    try {
                        InputStream input = new URL("http://www.omdbapi.com/?i=" + URLEncoder.encode(imdbID, "UTF-8") + "&plot=short&r=json").openStream();
                        Map<String, String> map = new Gson().fromJson(new InputStreamReader(input, "UTF-8"), new TypeToken<Map<String, String>>() {
                        }.getType());

                        if ("False".equals(map.get("Response"))) {
                            throw new Exception();
                        }

                        imdbName = map.get("Title");
                        imdbRating = Double.parseDouble(map.get("imdbRating"));
                        imdbVotesCount = Long.parseLong(map.get("imdbVotes").replace(",", ""));
                        imdbGenre = Arrays.asList(map.get("Genre").split(", "));
                        imdbCountries = Arrays.asList(map.get("Country").split(", "));
                        imdbYear = Integer.parseInt(map.get("Year").replaceAll("[^\\d.]", ""));

                        changes = !Objects.equals(localRating, imdbRating)
                                || !Objects.equals(localVotesCount, imdbVotesCount)
                                || !Objects.equals(localGenres, imdbGenre)
                                || !Objects.equals(localCountries, imdbCountries)
                                || !Objects.equals(localYear, imdbYear);

                        gui.updateMovieTable();

                        break;
                    } catch (Exception ex) {
                        if (i + 1 == NUMBER_OF_TRIES) {
                            System.out.println(localName + ": Error while getting IMDB data!");
                        }
                    }
                }
            }
        };

        executor.execute(imdbData);
    }