@Override
	public void sell(String title, double price) {
		if (removed_dvds.contains(title))
			throw new IllegalArgumentException(
					SessionErrors.TRANSACTIONS_NOT_ALLOWED);
		if (!dvd_collection.containsKey(title))
			throw new IllegalArgumentException(SessionErrors.DVD_NOT_FOUND);
		if (price <= 0)
			throw new IllegalArgumentException(SessionErrors.INVALID_DVD_PRICE);
		if (price > DVD_PRICE_LIMIT)
			throw new IllegalArgumentException(
					SessionErrors.EXCEEDING_DVD_PRICE.replaceAll("\\{1\\}", ""
							+ DVD_PRICE_LIMIT));

		CurrentDVD dvdInfo = dvd_collection.get(title);
		if (dvdInfo.getStatus() == DVDStatus.SALE)
			throw new IllegalArgumentException(
					SessionErrors.DVD_ALREADY_ON_SALE);
		try {
			dvdInfo.setPrice(price);
		} catch (DVDFormatException e) {
			throw new IllegalArgumentException(e.getMessage());
		}
		dvdInfo.setStatus(DVDStatus.SALE);

		if (created_dvds.contains(title))
			created_dvds.remove(title);
		if (added_dvds.containsKey(title))
			added_dvds.remove(title);

		/* add to transaction history */
		try {
			transactions.add(new DVDTransaction(TransactionID.SELL, title,
					0, DVDStatus.SALE, dvdInfo.getPrice()));
		} catch (TransactionFormatException e) {
			throw new IllegalArgumentException(e.getMessage());
		}
	}