module.exports = function(data) {
    var paths = Array.prototype.slice.call(arguments, 1),
        basePath = new data.Path();

    paths.forEach(function(path) {
        basePath = basePath.append(path);
    })

    return {
        Path: data.Path,

        get: function(name, path) {
            return data.get(name, basePath.append(path));
        },

        set: function(name, value, path, notify) {
            if (typeof name == 'object' && (! (name instanceof String))) {
                return data.set(name, basePath.append(path), notify);
            }
            else {
                return data.set(name, value, basePath.append(path), notify);
            }
        },

        bind: function(path, handler) {
            return data.bind(basePath.append(path), handler);
        },

        debind: function(path, handler) {
            if (typeof path == 'function') {
                return data.debind(path);
            }
            else {
                return data.debind(basePath.append(path), handler);
            }
        }
    }
};