@SuppressWarnings("unchecked")
    public T perform(T object) throws UpdateException {
        DatabaseUpdater updater = new DatabaseUpdater();

        try {
            object = (T) this.delete(updater, object);
        } catch (DBException e) {
            updater.rollback();
            throw new DBException("delete rolled back", e);
        } catch (UpdateException e) {
            updater.rollback();
            throw new UpdateException("delete is rolled back", e);
        }

        try {
            updater.commit();
        } catch (SQLException e) {
            throw new DBException("could not delete object + " + object, e);
        }

        return object;
    }