public String properCase(String value) {
        if (value == null) {
            return "";
        }
        if (value.isEmpty()) {
            return "";
        }

        String[] delimiterlist = {" ", "-", "_", "'", "."};
        boolean first = true;
        boolean afterdelimiter = false;
        String destination = "";
        try {
            // Replace illegal characters
            value = value.replaceAll(" & ", " en ");
            value = value.replaceAll("& ", "en ");
            value = value.replaceAll(" &", " en");
            value = value.replaceAll("&", " en ");
            value = value.replaceAll(" / ", " of ");
            value = value.replaceAll("/ ", "of ");
            value = value.replaceAll(" /", " of");
            value = value.replaceAll("/", " of ");
            value = value.replaceAll("\\\\", "");
            value = value.replaceAll("<", "");
            value = value.replaceAll(">", "");
            value = value.replaceAll("\\*", "");

            char[] sourcevalue = new char[value.length()];
            value = value.toLowerCase();
            value.getChars(0, value.length(), sourcevalue, 0);
            for (char c : sourcevalue) {
                // Begin with a capital
                if (first) {
                    destination = destination.concat(String.valueOf(c).toUpperCase());
                    first = false;
                } else {
                    // Capital after delimiter
                    if (afterdelimiter) {
                        destination = destination.concat(String.valueOf(c).toUpperCase());
                    } else {
                        destination = destination.concat(String.valueOf(c).toLowerCase());
                    }
                }
                // Check for delimiter, next character will be in uppercase
                afterdelimiter = false;
                for (String delimiter : delimiterlist) {
                    if (String.valueOf(c).equals(delimiter)) {
                        afterdelimiter = true;
                    }
                }
            }
            return destination.trim();
        } catch (Exception e) {
            Logger.getLogger(Address.class.getName()).log(Level.SEVERE, null, e);
            return "";
        }
    }