private JPanel createRoleAssignmentPanel(Person person) {
		JPanel roleAssignmentPanel = new JPanel();
		TitledBorder titledBorder = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Zugewiesene Rollen");
		roleAssignmentPanel.setBorder(titledBorder);

		double size[][] = { { 20, TableLayout.FILL }, { TableLayout.PREFERRED } };
		TableLayout layout = new TableLayout(size);
		roleAssignmentPanel.setLayout(layout);

		if (isPersonAssignedAnyProduction(person)) {
			int rowCounter = 0;
			for (Production production : ShowGoDAO.getShowGo().getProductions()) {
				if (roleAssignedInProduction(production, person)) {
					log.debug("role assigned in: " + production);
					layout.insertRow(rowCounter, TableLayout.PREFERRED);
					roleAssignmentPanel.add(new JLabel("Inszenierung \"" + production.getName() + "\":"), "0," + rowCounter + ",1," + rowCounter);
					rowCounter++;

					for (Role role : production.getPlay().getRoles()) {
						if (role.getCast() != null) {
							if (role.getCast().contains(person)) {
								layout.insertRow(rowCounter, TableLayout.PREFERRED);
								roleAssignmentPanel.add(new JLabel("\t" + role.getName()), "1," + rowCounter);
								rowCounter++;
							}
						}
					}
					for (Role role : production.getNonActorRoles()) {
						if (role.getCast() != null) {
							if (role.getCast().contains(person)) {
								layout.insertRow(rowCounter, TableLayout.PREFERRED);
								roleAssignmentPanel.add(new JLabel("\t" + role.getName()), "1," + rowCounter);
								rowCounter++;
							}
						}
					}

				}
			}
		} else {
			log.debug("not assigned to any roles");
			roleAssignmentPanel.add(new JLabel(person.getName() + " ist derzeit keinen Rollen zugewiesen."), "0,0,1,0");
		}

		return roleAssignmentPanel;
	}