private void initGUI() {
		try {
			this.setLayout(new BoxLayout(this, javax.swing.BoxLayout.X_AXIS));
			// this.setPreferredSize(new Dimension(400, 300));
			{
				this.add(tablePanel);
				tablePanel.setLayout(new BoxLayout(tablePanel, javax.swing.BoxLayout.Y_AXIS));
				tablePanel.setPreferredSize(new java.awt.Dimension(261, 175));
				{
					tablePanel.add(miscTableScrollPane);
					{
						miscTable = new JTable() {						
							public String getToolTipText(MouseEvent e) {
								java.awt.Point p = e.getPoint();
								int rowIndex = rowAtPoint(p);
								return SBStringUtils.multiLineToolTip(40, miscTableModel
										.getDescriptionAt(rowIndex));

							}
						};
						
						miscTableScrollPane.setViewportView(miscTable);
						miscTable.setModel(miscTableModel);
						
						// set preferred widths of the misc table
						TableColumnModel mtcm = miscTable.getColumnModel();
						miscTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
						TableColumn col = mtcm.getColumn(0);
						col.setPreferredWidth(200);
						miscTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
						
	
						// set up name combo
						SmartComboBox.enable(miscComboBox);
						miscComboBox.setModel(miscComboModel);
						TableColumn miscColumn = miscTable.getColumnModel().getColumn(0);
						miscColumn.setCellEditor(new SBComboBoxCellEditor(miscComboBox));
						miscComboBox.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								Misc m = (Misc) miscComboModel.getSelectedItem();
								int i = miscTable.getSelectedRow();
								if (myRecipe != null && i != -1) {
									Misc m2 = myRecipe.getMisc(i);
									m2.setStage(m.getStage());									
									m2.setDescription(m.getDescription());
									m2.setCost(m.getCostPerU());									
								}

							}
						});
						
						// set up misc amount editor
						miscColumn = miscTable.getColumnModel().getColumn(1);
						miscColumn.setCellEditor(miscAmountEditor);								
						
						// set up stage combo
						SmartComboBox.enable(stageComboBox);
						miscColumn = miscTable.getColumnModel().getColumn(4);
						miscColumn.setCellEditor(new SBComboBoxCellEditor(stageComboBox));
						
						// set up misc time editor
						miscColumn = miscTable.getColumnModel().getColumn(5);
						miscColumn.setCellEditor(miscTimeEditor);								
					}
				}
				{
					buttonPanelLayout.setAlignment(FlowLayout.LEFT);
					buttonPanel.setLayout(buttonPanelLayout);
					tablePanel.add(buttonPanel);
					{
						buttonPanel.add(addButton);
						addButton.setText("+");
						addButton.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								if (myRecipe != null) {									
									Misc m = new Misc();
									myRecipe.addMisc(m);											
									miscTable.updateUI();									
								}
								
							}
						});
					}
					{
						buttonPanel.add(delButton);
						delButton.setText("-");
						delButton.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								if (myRecipe != null) {									
									int i = miscTable.getSelectedRow();
									myRecipe.delMisc(i);
									miscTable.updateUI();					
								}

							}
						});
					}
				}
			}
			{
				commentsPanel.setLayout(new BoxLayout(commentsPanel, javax.swing.BoxLayout.Y_AXIS));
				this.add(commentsPanel);
				commentsPanel.setBorder(BorderFactory.createTitledBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false), "Comments", TitledBorder.LEADING, TitledBorder.TOP));
				commentsPanel.setPreferredSize(new java.awt.Dimension(147, 300));
				{
					commentsPanel.add(jScrollPane1);
					{
						jScrollPane1.setViewportView(miscCommentsTextArea);						
						miscCommentsTextArea.setLineWrap(true);
						miscCommentsTextArea.setWrapStyleWord(true);
						miscCommentsTextArea.setPreferredSize(new java.awt.Dimension(136, 272));

						miscCommentsTextArea.addFocusListener(new FocusAdapter() {
							public void focusLost(FocusEvent evt) {								
								if ( selectedRow > -1 && !miscCommentsTextArea.getText().equals(myRecipe.getMiscComments(selectedRow))) {
									myRecipe.setMiscComments(selectedRow, miscCommentsTextArea.getText());									
								}
							}
						});	
						miscCommentsTextArea.addFocusListener(new FocusAdapter() {
							public void focusGained(FocusEvent evt) {
								selectedRow = miscTable.getSelectedRow();
							}
						});
						
						
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}