public AbstractPreference createNew(String key) {

        String type = getProperty(key + KEY_JOIN + TYPE);
        String scopeType = getProperty(key + KEY_JOIN + SCOPE);

        if (type == null) {
            LOGGER.fatal("Unable to load preference for key:" + key);
            throw new UnsupportedOperationException("Unable to load preference for key:" + key);
        }

        Preferences scope = scopeType.equalsIgnoreCase("user") ? getUserApplicationNode() : getSystemApplicationNode();

        if (type.equals("String")) {

            String value = getProperty(key + KEY_JOIN + DEFAULT);

            return new StringPreference(value, scope,
                                        getProperty(key + KEY_JOIN + CATEGORY),
                                        key,
                                        getProperty(key + KEY_JOIN + NAME),
                                        getProperty(key + KEY_JOIN + DESCRIPTION));
        }

        else if (type.equals("Incremental")) {

            Long value = Long.parseLong(getProperty(key + KEY_JOIN + DEFAULT));

            return new IncrementalPreference(value,
                                             scope,
                                             getProperty(key + KEY_JOIN + CATEGORY),
                                             key,
                                             getProperty(key + KEY_JOIN + NAME),
                                             getProperty(key + KEY_JOIN + DESCRIPTION));
        }

        else if (type.equals("Integer")) {

            Integer value = Integer.parseInt(getProperty(key + KEY_JOIN + DEFAULT));

            return new IntegerPreference(value,
                                         scope,
                                         getProperty(key + KEY_JOIN + CATEGORY),
                                         key,
                                         getProperty(key + KEY_JOIN + NAME),
                                         getProperty(key + KEY_JOIN + DESCRIPTION));
        }
        else if (type.equals("Double")) {

            Double value = Double.parseDouble(getProperty(key + KEY_JOIN + DEFAULT));

            return new DoublePreference(value,
                                        scope,
                                        getProperty(key + KEY_JOIN + CATEGORY),
                                        key,
                                        getProperty(key + KEY_JOIN + NAME),
                                        getProperty(key + KEY_JOIN + DESCRIPTION));
        }

        else if (type.equals("List")) {

            List<String> value = ListPreference.unwrap(getProperty(key + KEY_JOIN + DEFAULT));

            return new ListPreference(value,
                                      scope,
                                      getProperty(key + KEY_JOIN + CATEGORY),
                                      key,
                                      getProperty(key + KEY_JOIN + NAME),
                                      getProperty(key + KEY_JOIN + DESCRIPTION));
        }
        else if (type.equals("File")) {

            File value = new File(getProperty(key + KEY_JOIN + DEFAULT));

            return new FilePreference(value,
                                      scope,
                                      getProperty(key + KEY_JOIN + CATEGORY),
                                      key,
                                      getProperty(key + KEY_JOIN + NAME),
                                      getProperty(key + KEY_JOIN + DESCRIPTION));
        }
        else if (type.equals("Boolean")) {

            Boolean value = Boolean.parseBoolean(getProperty(key + KEY_JOIN + DEFAULT));

            return new BooleanPreference(value,
                                         scope,
                                         getProperty(key + KEY_JOIN + CATEGORY),
                                         key,
                                         getProperty(key + KEY_JOIN + NAME),
                                         getProperty(key + KEY_JOIN + DESCRIPTION));
        }

        throw new UnsupportedOperationException("Unsupported preference type for key:" + key);
    }