public synchronized void initComponent() {
		// Baum fuellen
		try {
			fillTree();
		} catch (Exception e) {
			e.printStackTrace(System.err);
		}

		setLayout(new GridBagLayout());

		// add split pane
		JSplitPane splitPane = new JSplitPane();
		splitPane.setContinuousLayout(false);
		splitPane.setOneTouchExpandable(true);
		GridBagConstraints gbc;
		gbc = new GridBagConstraints();
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.weightx = 1.0;
		gbc.weighty = 1.0;
		gbc.fill = GridBagConstraints.BOTH;
		add(splitPane, gbc);

		productTree.addTreeSelectionListener(new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				TreePath path = e.getPath();
				DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
				Object userObject = node.getUserObject();

				if (userObject != null) {
					if (userObject instanceof Product) {
						selectedProductNode = node;
						addNewReview((Product) userObject, reviewRahmen);
						details.loadDetailsFromProduct((Product) userObject);
					}
					else if (userObject instanceof Review) {
						fillReviewList((Review) userObject, reviewRahmen);
					}
				}
			}
		});
		productTree.addTreeWillExpandListener(new TreeWillExpandListener() {
			public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException {
				DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
				Object userObject = node.getUserObject();

				if (userObject != null && userObject instanceof Product && node.getChildCount() == 1) {
					DefaultMutableTreeNode node2 = (DefaultMutableTreeNode) node.getChildAt(0);
					Object userObject2 = node2.getUserObject();

					if (userObject2 == loadReviews) {
						Product product = (Product) userObject;

						loadAndInsertReviews(node, product);
					}
				}
			}

			public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
			}
		});

		reviewRahmen = new JPanel();
		reviewRahmen.setLayout(new BoxLayout(reviewRahmen, BoxLayout.Y_AXIS));
		reviewRahmen.setBorder(BorderFactory.createTitledBorder("Produkte"));

		this.customer = new JTextArea();
		this.summary = new JTextArea();
		this.content = new JTextArea();
		this.rating = new JTextField();
		reviewRahmen.add(new BorderPanel(customer, "Benutzer"));
		reviewRahmen.add(new BorderPanel(summary, "Zusammenfassung"));
		reviewRahmen.add(new BorderPanel(content, "Inhalt"));
		reviewRahmen.add(new BorderPanel(rating, "Bewertung", 200, 65, 1200, 65));

		saveButton = new JButton("speichern");
		reviewRahmen.add(saveButton);
		saveButton.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				logger.fine("speichere neuen Review");

				Integer rat = null;
				try {
					rat = Integer.parseInt(rating.getText());
				} catch(Exception e1) {}

				review.setUsername(customer.getText());
				review.setSummary(summary.getText());
				review.setContent(content.getText());
				review.setRating(rat);
				mdi.addNewReview(review);
				details.loadDetailsFromProduct(review.getProduct());
				if (selectedProductNode != null) {
					loadAndInsertReviews(selectedProductNode, review.getProduct());
				}
			}
		});

		splitPane.setLeftComponent(new BorderPanel(productTree, "Uebersicht", 300, 600, 300, 1000, true));
		splitPane.setRightComponent(reviewRahmen);
	}