void calcNewPen() {
		// new penalties
		assert (home != null && away != null);
		// calc new penalties
		// (remove penalties is done at goal calc and at every second)
		Tactics.Effort effort = home.getTactics().getEffort();
		int homeEff;
		if (effort == Tactics.Effort.FULL) {
			homeEff = 0;
		} else if (effort == Tactics.Effort.EASY) {
			homeEff = 2;
		} else {
			assert (effort == Tactics.Effort.NORMAL_EFF);
			homeEff = 1;
		}
		effort = away.getTactics().getEffort();
		int awayEff;
		if (effort == Tactics.Effort.FULL) {
			awayEff = 0;
		} else if (effort == Tactics.Effort.EASY) {
			awayEff = 2;
		} else {
			assert (effort == Tactics.Effort.NORMAL_EFF);
			awayEff = 1;
		}
		if (Util.random(3 + homeEff + awayEff) == 2) {
			boolean home = false;
			boolean away = false;
			// every 5 min a penalty
			if (Util.random(8) == 5) {
				// both teams
				home = true;
				away = true;
			} else if (Util.random(2) > 0) {
				home = true;
			} else {
				away = true;
			}
			if (home && onIce.homePlayer.GetNofPlayers() > 1) {
				// home team
				// if nofplayers<=3, the team has too less players in lineup
				int i = Util.random(onIce.homePlayer.GetNofPlayers() - 1) + 1;
				Player player = onIce.homePlayer.GetPlayer(i);
				Player goalie = null;
				if (Util.random(50) == 5) {
					// goalie gets penalty
					goalie = onIce.homePlayer.GetPlayer(0);
				}
				if (goalie != null
						&& goalie.getCharacter().getCharID() != PlayerCharacter.CharID.AGGRESSOR
						|| goalie == null
						&& player.getCharacter().getCharID() != PlayerCharacter.CharID.AGGRESSOR) {
					// assure Agressors get more penalties than others
					i = Util.random(onIce.homePlayer.GetNofPlayers() - 1) + 1;
					player = onIce.homePlayer.GetPlayer(i);
					goalie = null;
					if (Util.random(50) == 5) {
						// goalie gets penalty
						goalie = onIce.homePlayer.GetPlayer(0);
					}
				}
				penBox.homePlayer.InsertPlayer(player);
				if (away && Util.random(4) == 2) {
					// five minutes
					getEvent().bitSet.set(MAJOR_PENALTY_HOME);
					this.report
							.setPenHome(this.report.getPenHome() + 5);
					player.setPenMin(5);
					if (goalie != null) {
						player = goalie;
					}
					player.incPenalty(5);
				} else {
					// two minutes
					getEvent().bitSet.set(MINOR_PENALTY_HOME);
					this.report
							.setPenHome(this.report.getPenHome() + 2);
					player.setPenMin(2);
					if (goalie != null) {
						player = goalie;
					}
					player.incPenalty(2);
				}
			}
			if (away && onIce.awayPlayer.GetNofPlayers() > 1) {
				// away team
				// if nofplayers<=3, the team has too less players in lineup
				int i = Util.random(onIce.awayPlayer.GetNofPlayers() - 1) + 1;
				Player player = onIce.awayPlayer.GetPlayer(i);
				Player goalie = null;
				if (Util.random(50) == 5) {
					// goalie gets penalty
					goalie = onIce.awayPlayer.GetPlayer(0);
				}
				if (goalie != null
						&& goalie.getCharacter().getCharID() != PlayerCharacter.CharID.AGGRESSOR
						|| goalie == null
						&& player.getCharacter().getCharID() != PlayerCharacter.CharID.AGGRESSOR) {
					// assure Agressors get more penalties than others
					i = Util.random(onIce.awayPlayer.GetNofPlayers() - 1) + 1;
					player = onIce.awayPlayer.GetPlayer(i);
					goalie = null;
					if (Util.random(50) == 5) {
						// goalie gets penalty
						goalie = onIce.awayPlayer.GetPlayer(0);
					}
				}
				penBox.awayPlayer.InsertPlayer(player);
				if (home && Util.random(4) == 2) {
					// five minutes
					getEvent().bitSet.set(MAJOR_PENALTY_AWAY);
					this.report
							.setPenAway(this.report.getPenAway() + 5);
					player.setPenMin(5);
					if (goalie != null) {
						player = goalie;
					}
					player.incPenalty(5);
				} else {
					// two minutes
					getEvent().bitSet.set(MINOR_PENALTY_AWAY);
					this.report
							.setPenAway(this.report.getPenAway() + 2);
					player.setPenMin(2);
					if (goalie != null) {
						player = goalie;
					}
					player.incPenalty(2);
				}
			}
		}
	}