Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/CraneTableModel.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/CraneTableModel.java	(revision 24751)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/CraneTableModel.java	(revision 24751)
@@ -0,0 +1,68 @@
+package harbour.models;
+
+import harbour.widgets.TristateCheckBox;
+import harbour.widgets.TristateCheckBox.State;
+
+import javax.swing.ImageIcon;
+import javax.swing.table.AbstractTableModel;
+
+public class CraneTableModel extends AbstractTableModel {
+
+	private String[] columnNames = {
+			"Kran",
+			">100t",
+            "50-100t",
+            "25-50t",
+            "<25t"};
+	private Object[][] data = {
+			{new ImageIcon(getClass().getResource("/images/fest.png")),  TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE},
+			{new ImageIcon(getClass().getResource("/images/mobil.png")), TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE},
+			{new ImageIcon(getClass().getResource("/images/Wasser.png")),TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE,TristateCheckBox.DONT_CARE}
+	};
+
+	@Override
+	public int getColumnCount() {
+		return columnNames.length;
+	}
+
+	@Override
+	public int getRowCount() {
+		return data.length;
+	}
+	
+	public String getColumnName(int col) {
+        return columnNames[col];
+    }
+
+
+	@Override
+	public Object getValueAt(int row, int col) {
+		return data[row][col];
+	}
+	
+    /*
+     * JTable uses this method to determine the default renderer/
+     * editor for each cell.  If we didn't implement this method,
+     * then the last column would contain text ("true"/"false"),
+     * rather than a check box.
+     */
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+	public Class getColumnClass(int c) {
+        return getValueAt(0, c).getClass();
+    }
+
+    
+    public boolean isCellEditable(int row, int col) {
+        //Note that the data/cell address is constant,
+        //no matter where the cell appears onscreen.
+    	return true;
+    }
+
+
+    public void setValueAt(Object value, int row, int col) {
+        data[row][col] = value;
+        fireTableCellUpdated(row, col);
+    }
+
+
+}
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/SearchTableModel.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/SearchTableModel.java	(revision 24751)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/SearchTableModel.java	(revision 24751)
@@ -0,0 +1,77 @@
+package harbour.models;
+
+import harbour.widgets.TristateCheckBox;
+
+import javax.swing.table.AbstractTableModel;
+
+public class SearchTableModel extends AbstractTableModel {
+	
+	private String[] columnNames = {
+			"Key",
+            "Value",
+            "Show"};
+	private Object[][] data = {
+			{"amenity","",				new Boolean(false) },
+			{"amenity","bank",			new Boolean(false) },
+			{"amenity","cafe",			new Boolean(false) },
+			{"amenity","hospital",		new Boolean(false) },
+			{"amenity","parking",		new Boolean(false) },
+			{"amenity","bank",			new Boolean(false) },
+			{"amenity","pharmacy",		new Boolean(false) },
+			{"amenity","police",		new Boolean(false) },
+			{"amenity","post_box",		new Boolean(false) },
+			{"amenity","post_office",	new Boolean(false) },
+			{"amenity","restaurant",	new Boolean(false) },
+			{"amenity","telephone",		new Boolean(false) },
+			{"amenity","toilets",		new Boolean(false) },
+			{"information","",			new Boolean(false) },
+			{"information","board",		new Boolean(false) },
+			{"information","citymap",	new Boolean(false) },
+			{"information","office",	new Boolean(false) },
+	};
+
+	@Override
+	public int getColumnCount() {
+		return columnNames.length;
+	}
+
+	@Override
+	public int getRowCount() {
+		return data.length;
+	}
+
+	public String getColumnName(int col) {
+        return columnNames[col];
+    }
+	
+	@Override
+	public Object getValueAt(int row, int col) {
+		return data[row][col];
+	}
+	
+    /*
+     * JTable uses this method to determine the default renderer/
+     * editor for each cell.  If we didn't implement this method,
+     * then the last column would contain text ("true"/"false"),
+     * rather than a check box.
+     */
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+	public Class getColumnClass(int c) {
+        return getValueAt(0, c).getClass();
+    }
+
+
+    public boolean isCellEditable(int row, int col) {
+        //Note that the data/cell address is constant,
+        //no matter where the cell appears onscreen.
+        if (col == 2) 	return true;
+        else 			return false;
+    }
+
+
+    public void setValueAt(Object value, int row, int col) {
+        data[row][col] = value;
+        fireTableCellUpdated(row, col);
+    }
+    
+}
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelEnv.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelEnv.java	(revision 24742)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelEnv.java	(revision 24751)
@@ -1,10 +1,9 @@
 package harbour.panels;
-
-import java.awt.Color;
-import java.awt.GridBagLayout;
 
 import javax.swing.BorderFactory;
 import javax.swing.JPanel;
 import javax.swing.JLabel;
+
+import java.awt.Color;
 import java.awt.Rectangle;
 
@@ -13,4 +12,5 @@
 	private static final long serialVersionUID = 1L;
 	private JLabel envLabel = null;
+	
 
 	/**
@@ -37,4 +37,3 @@
 		this.add(envLabel, null);
 	}
-
 }
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelRelations.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelRelations.java	(revision 24742)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelRelations.java	(revision 24751)
@@ -3,9 +3,10 @@
 import java.awt.Color;
 import java.awt.GridBagLayout;
+import java.awt.Rectangle;
 
 import javax.swing.BorderFactory;
 import javax.swing.JPanel;
 import javax.swing.JLabel;
-import java.awt.Rectangle;
+import java.awt.Dimension;
 
 public class PanelRelations extends JPanel {
@@ -31,4 +32,5 @@
 		relLabel.setBounds(new Rectangle(101, 18, 120, 36));
 		relLabel.setText("Relationen");
+		
 		this.setSize(330, 270);
 		this.setLayout(null);
@@ -36,4 +38,3 @@
 		this.add(relLabel, null);
 	}
-
 }
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelSearchPois.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelSearchPois.java	(revision 24742)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelSearchPois.java	(revision 24751)
@@ -14,4 +14,5 @@
 import javax.swing.JTable;
 import javax.swing.JComboBox;
+import harbour.models.SearchTableModel;
 
 public class PanelSearchPois extends JPanel {
@@ -25,5 +26,5 @@
 	private JTable jTable = null;
 	private JLabel layerLabel = null;
-	private JComboBox jComboBox = null;
+	private JComboBox layerComboBox = null;
 
 	/**
@@ -62,5 +63,5 @@
 		this.add(getJScrollPane(), null);
 		this.add(layerLabel, null);
-		this.add(getJComboBox(), null);
+		this.add(getLayerComboBox(), null);
 	}
 
@@ -114,4 +115,5 @@
 		if (jTable == null) {
 			jTable = new JTable();
+			jTable.setModel(new SearchTableModel());
 		}
 		return jTable;
@@ -119,14 +121,14 @@
 
 	/**
-	 * This method initializes jComboBox	
+	 * This method initializes layerComboBox	
 	 * 	
 	 * @return javax.swing.JComboBox	
 	 */
-	private JComboBox getJComboBox() {
-		if (jComboBox == null) {
-			jComboBox = new JComboBox();
-			jComboBox.setBounds(new Rectangle(70, 5, 250, 20));
+	private JComboBox getLayerComboBox() {
+		if (layerComboBox == null) {
+			layerComboBox = new JComboBox();
+			layerComboBox.setBounds(new Rectangle(70, 5, 250, 20));
 		}
-		return jComboBox;
+		return layerComboBox;
 	}
 
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelServices.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelServices.java	(revision 24742)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelServices.java	(revision 24751)
@@ -1,8 +1,8 @@
 package harbour.panels;
 
+import harbour.widgets.CraneTable;
 import harbour.widgets.TristateCheckBox;
 
 import java.awt.Color;
-import java.awt.GridBagLayout;
 
 import javax.swing.BorderFactory;
@@ -12,6 +12,6 @@
 import javax.swing.JCheckBox;
 import java.awt.Font;
-import javax.swing.JComboBox;
 import javax.swing.ImageIcon;
+import javax.swing.JScrollPane;
 
 public class PanelServices extends JPanel {
@@ -32,26 +32,6 @@
 	private TristateCheckBox ancCheckBox = null;
 	private JLabel moorLabel = null;
-	private JLabel craneLabel = null;
-	private JLabel hLabel = null;
-	private JLabel fLabel = null;
-	private JLabel zLabel = null;
-	private JLabel nLabel = null;
 	private TristateCheckBox slipCheckBox = null;
-	private JLabel fixLabel = null;
-	private TristateCheckBox hfCheckBox = null;
-	private TristateCheckBox ffCheckBox = null;
-	private TristateCheckBox zfCheckBox = null;
-	private TristateCheckBox nfCheckBox = null;
 	private TristateCheckBox dockCheckBox = null;
-	private JLabel mobLabel = null;
-	private TristateCheckBox hmCheckBox = null;
-	private TristateCheckBox fmCheckBox = null;
-	private TristateCheckBox zmCheckBox = null;
-	private TristateCheckBox nmCheckBox = null;
-	private JLabel schwLabel = null;
-	private TristateCheckBox hsCheckBox = null;
-	private TristateCheckBox fsCheckBox = null;
-	private TristateCheckBox zsCheckBox = null;
-	private TristateCheckBox nsCheckBox = null;
 	private JLabel DLLabel = null;
 	private TristateCheckBox anbCheckBox = null;
@@ -78,4 +58,5 @@
 	private TristateCheckBox imCheckBox = null;
 	private TristateCheckBox bmCheckBox = null;
+	private CraneTable craneScrollPane = null;
 	/**
 	 * This is the default constructor
@@ -104,5 +85,5 @@
 		recLabel.setBounds(new Rectangle(187, 165, 90, 20));
 		recLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		recLabel.setText("Entsorgungen:");
+		recLabel.setText("Entsorgung:");
 		servLabel = new JLabel();
 		servLabel.setBounds(new Rectangle(1, 185, 45, 20));
@@ -112,37 +93,6 @@
 		DLLabel.setBounds(new Rectangle(3, 165, 147, 20));
 		DLLabel.setText("weitere Dienstleistungen");
-		schwLabel = new JLabel();
-		schwLabel.setBounds(new Rectangle(5, 142, 40, 16));
-		schwLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		schwLabel.setText("  schw.");
-		mobLabel = new JLabel();
-		mobLabel.setBounds(new Rectangle(5, 126, 40, 16));
-		mobLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		mobLabel.setText("  mobil");
-		fixLabel = new JLabel();
-		fixLabel.setBounds(new Rectangle(5, 110, 40, 16));
-		fixLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		fixLabel.setText("     fest");
-		nLabel = new JLabel();
-		nLabel.setBounds(new Rectangle(200, 90, 38, 20));
-		nLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		nLabel.setText("  0-25t");
-		zLabel = new JLabel();
-		zLabel.setBounds(new Rectangle(150, 90, 45, 20));
-		zLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		zLabel.setText(" 25-50t");
-		fLabel = new JLabel();
-		fLabel.setBounds(new Rectangle(100, 90, 45, 20));
-		fLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		fLabel.setText("50-100t");
-		hLabel = new JLabel();
-		hLabel.setBounds(new Rectangle(50, 90, 45, 20));
-		hLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		hLabel.setText("  >100t");
-		craneLabel = new JLabel();
-		craneLabel.setBounds(new Rectangle(5, 90, 42, 20));
-		craneLabel.setText("    Kran");
 		moorLabel = new JLabel();
-		moorLabel.setBounds(new Rectangle(145, 50, 65, 16));
+		moorLabel.setBounds(new Rectangle(145, 50, 70, 16));
 		moorLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
 		moorLabel.setText("Ankerplatz:");
@@ -176,26 +126,6 @@
 		this.add(getAncCheckBox(), null);
 		this.add(moorLabel, null);
-		this.add(craneLabel, null);
-		this.add(hLabel, null);
-		this.add(fLabel, null);
-		this.add(zLabel, null);
-		this.add(nLabel, null);
 		this.add(getSlipCheckBox(), null);
-		this.add(fixLabel, null);
-		this.add(getHfCheckBox(), null);
-		this.add(getFfCheckBox(), null);
-		this.add(getZfCheckBox(), null);
-		this.add(getNfCheckBox(), null);
 		this.add(getDockCheckBox(), null);
-		this.add(mobLabel, null);
-		this.add(getHmCheckBox(), null);
-		this.add(getFmCheckBox(), null);
-		this.add(getZmCheckBox(), null);
-		this.add(getNmCheckBox(), null);
-		this.add(schwLabel, null);
-		this.add(getHsCheckBox(), null);
-		this.add(getFsCheckBox(), null);
-		this.add(getZsCheckBox(), null);
-		this.add(getNsCheckBox(), null);
 		this.add(DLLabel, null);
 		this.add(getAnbCheckBox(), null);
@@ -222,4 +152,5 @@
 		this.add(getImCheckBox(), null);
 		this.add(getBmCheckBox(), null);
+		this.add(getCraneScrollPane(), null);
 	}
 
@@ -307,5 +238,5 @@
 		if (railCheckBox == null) {
 			railCheckBox = new TristateCheckBox();
-			railCheckBox.setBounds(new Rectangle(98, 26, 72, 20));
+			railCheckBox.setBounds(new Rectangle(98, 26, 80, 20));
 			railCheckBox.setFont(new Font("Dialog", Font.PLAIN, 12));
 			railCheckBox.setText("Bahnhof");
@@ -375,56 +306,4 @@
 
 	/**
-	 * This method initializes hfCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private JCheckBox getHfCheckBox() {
-		if (hfCheckBox == null) {
-			hfCheckBox = new TristateCheckBox();
-			hfCheckBox.setBounds(new Rectangle(60, 108, 20, 20));
-		}
-		return hfCheckBox;
-	}
-
-	/**
-	 * This method initializes ffCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getFfCheckBox() {
-		if (ffCheckBox == null) {
-			ffCheckBox = new TristateCheckBox();
-			ffCheckBox.setBounds(new Rectangle(110, 108, 20, 20));
-		}
-		return ffCheckBox;
-	}
-
-	/**
-	 * This method initializes zfCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getZfCheckBox() {
-		if (zfCheckBox == null) {
-			zfCheckBox = new TristateCheckBox();
-			zfCheckBox.setBounds(new Rectangle(160, 108, 20, 20));
-		}
-		return zfCheckBox;
-	}
-
-	/**
-	 * This method initializes nfCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getNfCheckBox() {
-		if (nfCheckBox == null) {
-			nfCheckBox = new TristateCheckBox();
-			nfCheckBox.setBounds(new Rectangle(210, 108, 20, 20));
-		}
-		return nfCheckBox;
-	}
-
-	/**
 	 * This method initializes dockCheckBox	
 	 * 	
@@ -439,108 +318,4 @@
 		}
 		return dockCheckBox;
-	}
-
-	/**
-	 * This method initializes hmCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getHmCheckBox() {
-		if (hmCheckBox == null) {
-			hmCheckBox = new TristateCheckBox();
-			hmCheckBox.setBounds(new Rectangle(60, 124, 20, 20));
-		}
-		return hmCheckBox;
-	}
-
-	/**
-	 * This method initializes fmCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getFmCheckBox() {
-		if (fmCheckBox == null) {
-			fmCheckBox = new TristateCheckBox();
-			fmCheckBox.setBounds(new Rectangle(110, 124, 20, 20));
-		}
-		return fmCheckBox;
-	}
-
-	/**
-	 * This method initializes zmCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getZmCheckBox() {
-		if (zmCheckBox == null) {
-			zmCheckBox = new TristateCheckBox();
-			zmCheckBox.setBounds(new Rectangle(160, 124, 20, 20));
-		}
-		return zmCheckBox;
-	}
-
-	/**
-	 * This method initializes nmCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getNmCheckBox() {
-		if (nmCheckBox == null) {
-			nmCheckBox = new TristateCheckBox();
-			nmCheckBox.setBounds(new Rectangle(210, 124, 20, 20));
-		}
-		return nmCheckBox;
-	}
-
-	/**
-	 * This method initializes hsCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getHsCheckBox() {
-		if (hsCheckBox == null) {
-			hsCheckBox = new TristateCheckBox();
-			hsCheckBox.setBounds(new Rectangle(60, 140, 20, 20));
-		}
-		return hsCheckBox;
-	}
-
-	/**
-	 * This method initializes fsCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getFsCheckBox() {
-		if (fsCheckBox == null) {
-			fsCheckBox = new TristateCheckBox();
-			fsCheckBox.setBounds(new Rectangle(110, 140, 20, 20));
-		}
-		return fsCheckBox;
-	}
-
-	/**
-	 * This method initializes zsCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getZsCheckBox() {
-		if (zsCheckBox == null) {
-			zsCheckBox = new TristateCheckBox();
-			zsCheckBox.setBounds(new Rectangle(160, 140, 21, 21));
-		}
-		return zsCheckBox;
-	}
-
-	/**
-	 * This method initializes nsCheckBox	
-	 * 	
-	 * @return javax.swing.JCheckBox	
-	 */
-	private TristateCheckBox getNsCheckBox() {
-		if (nsCheckBox == null) {
-			nsCheckBox = new TristateCheckBox();
-			nsCheckBox.setBounds(new Rectangle(210, 140, 21, 21));
-		}
-		return nsCheckBox;
 	}
 
@@ -831,3 +606,16 @@
 	}
 
+	/**
+	 * This method initializes craneScrollPane	
+	 * 	
+	 * @return javax.swing.JScrollPane	
+	 */
+	private CraneTable getCraneScrollPane() {
+		if (craneScrollPane == null) {
+			craneScrollPane = new CraneTable();
+			craneScrollPane.setBounds(new Rectangle(3, 90, 207, 66));
+		}
+		return craneScrollPane;
+	}
+
 }
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/table_utils/StateRenderer.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/table_utils/StateRenderer.java	(revision 24751)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/table_utils/StateRenderer.java	(revision 24751)
@@ -0,0 +1,29 @@
+package harbour.table_utils;
+
+import java.awt.Component;
+
+import harbour.widgets.TristateCheckBox;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+public class StateRenderer extends TristateCheckBox implements
+		TableCellRenderer {
+
+	public StateRenderer() {
+		super();
+		setHorizontalAlignment(JLabel.CENTER);
+	}
+
+	
+	@Override
+	public Component getTableCellRendererComponent(JTable table, Object value,
+			boolean isSelected, boolean hasFocus, int row, int col) {
+		// setState((State) table.getValueAt(row, col));
+		
+		setState((State) value);
+		return this;
+	}
+
+}
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/table_utils/TristateCBEditor.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/table_utils/TristateCBEditor.java	(revision 24751)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/table_utils/TristateCBEditor.java	(revision 24751)
@@ -0,0 +1,50 @@
+package harbour.table_utils;
+
+import harbour.widgets.TristateCheckBox;
+import harbour.widgets.TristateCheckBox.State;
+
+import java.awt.Component;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+public class TristateCBEditor extends AbstractCellEditor implements
+		ItemListener, TableCellEditor {
+	
+	private TristateCheckBox box;
+	private State curState;
+	
+	public TristateCBEditor() {
+		box = new TristateCheckBox("",null,TristateCheckBox.NOT_SELECTED);
+		box.setHorizontalAlignment(JLabel.CENTER);
+		box.addItemListener(this);
+		// curState = TristateCheckBox.NOT_SELECTED;
+	}
+
+
+	@Override
+	public Object getCellEditorValue() {
+		return curState;
+	}
+
+	@Override
+	public Component getTableCellEditorComponent(JTable table, Object value,
+			boolean isSelected, int row, int col) {
+
+		curState	= (State) value;
+		
+		box.setState(curState);
+		
+		return box;
+	}
+
+	@Override
+	public void itemStateChanged(ItemEvent arg0) {
+		curState = box.getState();
+	}
+
+}
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/widgets/CraneTable.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/widgets/CraneTable.java	(revision 24751)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/widgets/CraneTable.java	(revision 24751)
@@ -0,0 +1,66 @@
+package harbour.widgets;
+
+import java.awt.GridLayout;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.TableColumn;
+
+import harbour.models.CraneTableModel;
+import harbour.table_utils.StateRenderer;
+import harbour.table_utils.TristateCBEditor;
+import harbour.widgets.TristateCheckBox.State;
+
+public class CraneTable extends JScrollPane {
+
+	private static final long serialVersionUID = 1L;
+	private JTable craneTable = null;
+
+	/**
+	 * This is the default constructor
+	 */
+	public CraneTable() {
+		super();
+		// setLayout(new GridLayout(1,0));
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		this.setSize(207, 66);
+
+		this.setViewportView(getCraneTable());
+	}
+
+	/**
+	 * This method initializes craneTable	
+	 * 	
+	 * @return javax.swing.JTable	
+	 */
+	private JTable getCraneTable() {
+		if (craneTable == null) {
+			craneTable = new JTable();
+			craneTable.setModel(new CraneTableModel());
+			craneTable.setDefaultRenderer(State.class,new StateRenderer());
+			craneTable.setDefaultEditor(State.class,new TristateCBEditor());
+			
+			 TableColumn column = null;
+			 for (int i = 0; i < 4; i++) {
+			     column = craneTable.getColumnModel().getColumn(i);
+			     if (i == 0) 
+			         column.setPreferredWidth(45); //first / last column is smaller
+			     else if(i == 2) column.setPreferredWidth(90);
+			     else if(i == 4) column.setPreferredWidth(35);
+			     else column.setPreferredWidth(75);
+
+			 }
+		}
+
+		return craneTable;
+	}
+
+}
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/widgets/TristateCheckBox.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/widgets/TristateCheckBox.java	(revision 24742)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/widgets/TristateCheckBox.java	(revision 24751)
@@ -3,4 +3,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.MouseAdapter;
@@ -32,4 +33,5 @@
 	
 	private TristateDecorator model;
+	private TristateCheckBox box;
 	
 	Icon d = new ImageIcon(getClass().getResource("/images/qm_12x12.png"));
@@ -40,4 +42,6 @@
 	public TristateCheckBox(String text, Icon icon, State initial) {
 		super(text,icon);
+		
+		box = this;
 		
 		// add a listener for when the mouse is pressed
@@ -46,4 +50,10 @@
 				grabFocus();
 				model.nextState();
+				
+				fireItemStateChanged(new ItemEvent(box,
+						ItemEvent.ITEM_STATE_CHANGED,
+						box,
+						box.isSelected() ?  ItemEvent.SELECTED : ItemEvent.DESELECTED));
+				
 				if(model.getState() == NOT_SELECTED) setIcon(n);
 				if(model.getState() == DONT_CARE) setIcon(d);
@@ -70,6 +80,5 @@
 		model = new TristateDecorator(getModel());
 		setModel(model);
-		setState(DONT_CARE);
-		setIcon(d);
+		setState(initial);
 	}
 	
@@ -93,5 +102,16 @@
 	 * DONT_CARE. If state == null, it is treated as DONT_CARE
 	 */
-	public void setState(State state) { model.setState(state); }
+	public void setState(State state) {
+		if(state == NOT_SELECTED)	setIcon(n);
+		if(state == DONT_CARE) 	setIcon(d);
+		if(state == SELECTED) 	setIcon(s);
+		
+		fireItemStateChanged(new ItemEvent(this,
+				ItemEvent.ITEM_STATE_CHANGED,
+				this,
+				this.isSelected() ?  ItemEvent.SELECTED : ItemEvent.DESELECTED));
+		
+		model.setState(state);
+		}
 	
 	/**
@@ -113,5 +133,5 @@
 	 */
 	private class TristateDecorator implements ButtonModel {
-		
+
 		private final ButtonModel other;
 		
