def __init__(self, version_store, symbol, user, log, modify_timeseries=None, audit=True,
                 *args, **kwargs):
        """
        Parameters
        ----------
        version_store: `VersionStore` Arctic Library
            Needs to support write, read, list_versions, _delete_version this is the underlying store that we'll
            be securing for write

        symbol: `str`
            symbol name for the item that's being modified

        user: `str`
            user making the change

        log: `str`
            Log message for the change

        modify_timeseries:
            if given, it will check the assumption that this is the latest data available for symbol in version_store
            Should not this be the case, a ConcurrentModificationException will be raised. Use this if you're
            interacting with code that read in the data already and for some reason you cannot refactor the read-write
            operation to be contained within this context manager

        audit: `bool`
            should we 'audit' the transaction. An audited write transaction is equivalent to a snapshot
            before and after the data change - i.e. we won't prune versions of the data involved in an
            audited transaction.  This can be used to ensure that the history of certain data changes is
            preserved indefinitely.

        all other args:
            Will be passed into the initial read
        """
        self._version_store = version_store
        self._symbol = symbol
        self._user = user
        self._log = log
        self._audit = audit
        logger.info("MT: {}@{}: [{}] {}: {}".format(_get_host(version_store).get('l'),
                                                    _get_host(version_store).get('mhost'),
                                                    user, log, symbol))
        try:
            self.base_ts = self._version_store.read(self._symbol, *args, **kwargs)
        except NoDataFoundException:
            versions = [x['version'] for x in self._version_store.list_versions(self._symbol, latest_only=True)]
            versions.append(0)
            self.base_ts = VersionedItem(symbol=self._symbol, library=None,
                                         version=versions[0], metadata=None, data=None, host=None)
        except OperationFailure:
            # TODO: Current errors in mongo "Incorrect Number of Segments Returned"
            # This workaround should be removed once underlying problem is resolved.
            self.base_ts = self._version_store.read_metadata(symbol=self._symbol)

        if modify_timeseries is not None and not are_equals(modify_timeseries, self.base_ts.data):
            raise ConcurrentModificationException()
        self._do_write = False