@Override
	protected void doSaveRecordAction() {
		
		@SuppressWarnings("rawtypes")
		ListView l;
		
		final ListAddress listAddress;
		// Add the other lists to the JPanel and register with the layout
		this.otherListsContainer.add(listAddress = new ListAddress(
				this.splitPane, this, this.customer, this.customer.getPkey(),
				true));
		this.otherListsCardLayout.addLayoutComponent(listAddress, "Address");
		
		final ListBilling listBilling;
		// next
		this.otherListsContainer.add(listBilling = new ListBilling(
				this.splitPane, this, this.customer, this.customer.getPkey()));
		this.otherListsCardLayout.addLayoutComponent(listBilling, "Billing");
		
		// next
		this.otherListsContainer.add(l = new SearchListItems(this.splitPane,
				this, this.customer, this.transaction));
		this.otherListsCardLayout.addLayoutComponent(l, "Items");
		
		// Add action listeners to the buttons
		this.address_select
				.addActionListener(new ListButtonListener(
						this.otherListsCardLayout, this.otherListsContainer,
						"Address"));
		listAddress.setSelectAction(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int pkey = listAddress.getSelectedPkey();
				if (pkey == -1) {
					return;
				}
				try {
					AddEditTransaction.this.transaction.setAddress(new Address(
							pkey, true));
					AddEditTransaction.this.transaction.save();
					AddEditTransaction.this.reloadAddress();
					AddEditTransaction.this.reloadBilling();
				} catch (SQLException ex) {
					ErrorLogger.error(ex, "Failed to add item to transaction.",
							true, true);
				}
			}
		});
		listBilling.setSelectAction(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int pkey = listBilling.getSelectedPkey();
				if (pkey == -1) {
					return;
				}
				try {
					AddEditTransaction.this.transaction.setBilling(new Billing(
							pkey, true));
					AddEditTransaction.this.transaction.save();
				} catch (SQLException ex) {
					ErrorLogger
							.error(ex, "Failed to add billing to transaction.",
									true, true);
				}
			}
		});
		
		if (this.transaction.getStatus() != TransactionStatus.ACTIVE) {
			TransactionStatus[] statuses = Arrays.copyOfRange(
					TransactionStatus.values(), 1,
					TransactionStatus.values().length);
			DefaultComboBoxModel<TransactionStatus> model = new DefaultComboBoxModel<>(
					statuses);
			this.status.setModel(model);
			this.status.setSelectedItem(this.transaction.getStatus());
			
			if (this.cardLayoutViewButtons.contains(this.item_select)) {
				if (this.item_select.isSelected()) {
					this.address_select.doClick();
				}
				this.cardLayoutViewButtons.remove(this.item_select);
				this.buttonHolder.remove(this.item_select);
			}
		}
		
		// next
		this.billing_select
				.addActionListener(new ListButtonListener(
						this.otherListsCardLayout, this.otherListsContainer,
						"Billing"));
		
		// next
		if (this.transaction != null
				&& this.transaction.getStatus() == TransactionStatus.ACTIVE) {
			this.item_select.addActionListener(new ListButtonListener(
					this.otherListsCardLayout, this.otherListsContainer,
					"Items"));
		}
	}