/// <summary>
        /// Gets the specified URL, from the cache if possible
        /// </summary>
        /// <param name="URL">URL address to get data from</param>
        /// <param name="SkipCache">Skip caching and grab live data</param>
        /// <returns></returns>
        private byte[] GetWebData(string URL, bool SkipCache)
        {
            // Initialize the cache if required
            if (RequestCache == null)
            {
                RequestCache = new Dictionary <string, CachedWebRequest>();
            }

            // Hash the URL so we can refer to it later
            string URLHash = CommonFunctions.CalculateMD5Hash(URL);

            if (!SkipCache)
            {
                if (RequestCache.ContainsKey(URLHash))
                {
                    if (DateTime.Now.Subtract(RequestCache[URLHash].LastUpdated) <= CacheLifetime)
                    {
                        return(RequestCache[URLHash].Data);
                    }
                    else
                    {
                        RequestCache.Remove(URLHash);
                    }
                }
            }
            // Get the request from the web
            using (WebClient client = new WebClient())
            {
                byte[] dataReturned = client.DownloadData(URL);

                if (dataReturned.Length > 0)
                {
                    if (!SkipCache)
                    {
                        RequestCache.Add(URLHash, new CachedWebRequest(URL, dataReturned));
                    }

                    return(dataReturned);
                }
            }

            return(new byte[0]);
        }