public byte[] getCoverData() throws JmdbException {
        // parse cover URI
        this.getCover();

        // no cover awaillable
        if (this.cover == null) {
            return null;
        }

        // Cover data already awaillable
        if (this.coverData != null) {
            return (byte[]) this.coverData.clone();
        }

        HTTPConnection connection = null;
        try {
            URL requestURL  = new URL(this.cover);
            String host     = requestURL.getHost();
            String file     = requestURL.getFile();
            int port        = requestURL.getPort();
            port            = (port == -1) ? 80 : port;

            log.debug("Getting HTTP response for cover image: "+requestURL.toString());
            connection = new HTTPConnection(host, port);
            connection.setTimeout(Integer.parseInt(this.criteria.get("timeout")));
            connection.setDefaultHeaders(new NVPair[] {new NVPair("User-Agent", this.criteria.get("user_agent")), new NVPair("Referer", this.criteria.get("referer"))});
            connection.setAllowUserInteraction(false);
            connection.removeModule(CookieModule.class);
            HTTPResponse resp = connection.Get(file);
            if (resp.getStatusCode() == 200) {
                this.coverData = resp.getData();
            }
        } catch (MalformedURLException ex) {
            throw new JmdbException("URL supplied for IMDB request is not valid URL", ex);
        } catch (IOException ex) {
            throw new JmdbException("Error while loading HTTP response", ex);
        } catch (ModuleException ex) {
            throw new JmdbException("Error while loading modules in HTTPClient", ex);
        } finally {
            if (connection != null) connection.stop();
        }

        byte[] toReturn = null;
        if (this.coverData != null) {
            toReturn = (byte[]) this.coverData.clone();
        }
        return toReturn;
    }