function newStorageUtils(uniqueKey) {

    //log('newStorageUtils: enter');
    //log('newStorageUtils: uniqueKey=' + uniqueKey);

    var utils = {};

    utils.storageKey = uniqueKey;

    utils.count = function count() {
        //log('newStorageUtils.utils.count: enter');
        //log('newStorageUtils.utils.count: storageKey=' + utils.storageKey);

        const ids = utils.getIds();

        const arrayLen = ids.length;

        //log('newStorageUtils.utils.count: arrayLen=' + arrayLen);
        //log('newStorageUtils.utils.count: leave');

        return arrayLen;
    };

    utils.clear = function clear() {

        //log('newStorageUtils.utils.clear: enter');
        //log('newStorageUtils.utils.clear: storageKey=' + utils.storageKey);

        var ids = [];

        const idsStr = JSON.stringify(ids);

        localStorage.setItem(utils.storageKey, idsStr);

        //log('newStorageUtils.utils.clear: leave');
    }

    utils.getIds = function getIds() {

        //log('newStorageUtils.utils.getIds: enter');
        //log('newStorageUtils.utils.getIds: storageKey=' + utils.storageKey);

        var ids = [];

        var idsStr = localStorage.getItem(utils.storageKey);

        if (idsStr !== null) {
            // if we have a string stored

            ids = JSON.parse(idsStr);
            // deserialize it
        }

        //log('newStorageUtils.utils.getIds: leave');

        return ids;
    };

    utils.isFlagSet = function isFlagSet(id) {

        //log('newStorageUtils.utils.isFlagSet: enter');
        //log('newStorageUtils.utils.isFlagSet: storageKey=' + utils.storageKey);

        var flag = false;

        const ids = utils.getIds();

        const count = ids.length;

        if (count > 0) {
            const where = ids.indexOf(id);

            flag = (where >= 0);
        }

        //log('newStorageUtils.utils.isFlagSet: flag=' + flag);
        //log('newStorageUtils.utils.isFlagSet: leave');

        return flag;
    };

    utils.addToIds = function addToIds(id) {

        log('newStorageUtils.utils.addToIds: enter');
        log('newStorageUtils.utils.addToIds: id=' + id);
        log('newStorageUtils.utils.addToIds: storageKey=' + utils.storageKey);

        const alreadyThere = utils.isFlagSet(id);
        // is the id already in the list?

        log('newStorageUtils.utils.addToIds: alreadyThere=' + alreadyThere);

        if (alreadyThere) {
            // if the id is already in the list

            log('newStorageUtils.utils.addToIds: the id is already in the list, so we will leave without adding it again');
            log('newStorageUtils.utils.addToIds: leave');

            return;
        }

        var ids = utils.getIds();

        const newCount = ids.push(id);

        const idsStr = JSON.stringify(ids);
        // serialize it

        localStorage.setItem(utils.storageKey, idsStr);

        log('newStorageUtils.utils.addToIds: leave');
    };

    utils.removeFromIds = function removeFromIds(id) {

        //log('newStorageUtils.utils.removeFromIds: enter');
        //log('newStorageUtils.utils.removeFromIds: id=' + id);
        //log('newStorageUtils.utils.removeFromIds: storageKey=' + utils.storageKey);

        var ids = utils.getIds();

        const oldCount = ids.length;

        if (oldCount > 0) {
            // if it might be in the list

            const where = ids.indexOf(id);

            if (where > -1) {
                ids.splice(where, 1);

                const serialized = JSON.stringify(ids);

                localStorage.setItem(utils.storageKey, serialized);
            }
        }

        //log('newStorageUtils.utils.removeFromIds: leave');
    };

    //log('newStorageUtils.newStorageUtils: leave');

    return utils;
}