public void onReceive(Object msg) {

			if (msg.equals("start")) {
				// start by depositing enough money in the account to cover the
				// txfrs
				accountA.tell(new BankAccount.Deposit(taskCount * 100),
						getSelf());
				probe.tell("started", getSelf());

			} else if (msg.equals(BankAccount.TransactionStatus.DONE)) {
				// once the initial deposit is done, fire off a transfer in each
				// direction for all the tasks for this teller
				log.info("deposit done");
				probe.tell("deposited", getSelf());
				for (int i = 0; i < tellerTxfrs; i++) {
					ActorRef txfr = getContext().actorOf(
							Props.create(BankTransfer.class), "aToBtxfr" + i);

					ActorRef txfr2 = getContext().actorOf(
							Props.create(BankTransfer.class), "bToAtxfr" + i);
					txfrs.add(txfr);
					txfrs.add(txfr2);
					txfr.tell(new BankTransfer.Transfer(accountA, accountB, 2),
							getSelf());
					txfr2.tell(
							new BankTransfer.Transfer(accountB, accountA, 2),
							getSelf());
				}
			} else if (msg.equals(BankTransfer.TransferStatus.DONE)) {
				// every time a txfr finishes, remove it from the list and increment the count
				log.debug("txfr done");
				txfrs.remove(sender());
				txfrCount++;
				if (txfrCount % 1000 == 0)
					log.info("Processed " + txfrCount + " txfrs");
				// when all txfrs are done, end the test
				if (txfrCount == tellerTxfrs * 2) {
					log.info("Processed all txfrs");
					probe.tell("done", getSelf());
				}
			} else if (msg.equals(BankTransfer.TransferStatus.FAILED)) {
				log.error("txfr failed");
			} else if (msg instanceof ActorRef) {
				probe = (ActorRef) msg;
			} else {
				log.error("unknown msg");
				throw new RuntimeException("unknown msg");
			}
		}