public static ArrayList<Template> loadTemplates() throws TemplateException {
        ArrayList<Template> results = new ArrayList<Template>();
        String baseURL = "http://radreport.org/json/";
        try {
            System.setProperty("java.net.useSystemProxies", "true");
            // get JSON
            ObjectMapper mapper = new ObjectMapper();
            TypeReference<Map<String, Object>> typeRef = new TypeReference<Map<String, Object>>() {
            };
            Map<String, Object> templateCall = mapper.readValue(new URL(baseURL), typeRef);
            if (templateCall != null) {
                @SuppressWarnings("unchecked")
                LinkedHashMap<String, Object> templateResponse = (LinkedHashMap<String, Object>) templateCall.get("response");
                @SuppressWarnings("unchecked")
                ArrayList<Map<String, Object>> templates = (ArrayList<Map<String, Object>>) templateResponse.get("template");
                for (Map<String, Object> child : templates) {
                    Template thisTemplate = new Template();
                    thisTemplate.setId((String) child.get("id"));
                    thisTemplate.setTitle((String) child.get("title"));
                    thisTemplate.setAuthor((String) child.get("author"));
                    thisTemplate.setLanguage((String) child.get("lang"));
                    thisTemplate.setCreated((String) child.get("created"));
                    thisTemplate.setModified((String) child.get("modified"));
                    thisTemplate.setType((String) child.get("type"));
                    thisTemplate.setUrl(new URL((String) child.get("url")));
                    results.add(thisTemplate);
                }
            }
        }
        catch (JsonParseException e) {
            throw new TemplateException("JsonParseException", e);
        }
        catch (JsonMappingException e) {
            throw new TemplateException("JsonMappingException", e);
        }
        catch (MalformedURLException e) {
            throw new TemplateException("MalformedURLException", e);
        }
        catch (IOException e) {
            throw new TemplateException("IOException", e);
        }

        return results;
    }