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

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

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

		return object;
	}