Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/dialogs/HarbourAction.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/dialogs/HarbourAction.java	(revision 24830)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/dialogs/HarbourAction.java	(revision 24832)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import javax.swing.SwingConstants;
 
 public class HarbourAction implements PropertyChangeListener, LayerChangeListener, EditLayerChangeListener, ComponentListener {
@@ -61,5 +62,5 @@
 	private JPanel curPanel = null;
 	private PanelSearchPois panelSearchPois = null;
-	private static LayerHarbour curLayer = new LayerHarbour("Harbour");
+	private static LayerHarbour curLayer = null;
 	
 	public HarbourAction() {
@@ -90,4 +91,7 @@
 		panelSearchPois.setBounds(rect);
 		panelSearchPois.setVisible(false);
+		
+		curLayer = new LayerHarbour("Harbour", panelSearchPois);
+		panelSearchPois.setLayerHarbour(curLayer);
 	}
 	
@@ -190,4 +194,5 @@
 					relButton.setEnabled(true);
 					
+					Main.map.mapView.removeLayerChangeListener(curLayer);
 					Main.main.removeLayer(curLayer);
 					curPanel = panelGeneral;
@@ -224,4 +229,5 @@
 					relButton.setEnabled(true);
 					
+					Main.map.mapView.removeLayerChangeListener(curLayer);
 					Main.main.removeLayer(curLayer);
 					curPanel = panelLimits;
@@ -258,5 +264,5 @@
 					relButton.setEnabled(true);
 					
-					
+					Main.map.mapView.removeLayerChangeListener(curLayer);
 					Main.main.removeLayer(curLayer);
 					curPanel = panelServices;
@@ -280,4 +286,6 @@
 			envButton.addActionListener(new java.awt.event.ActionListener() {
 				public void actionPerformed(java.awt.event.ActionEvent e) {
+					String name = null;
+					
 					panelGeneral.setVisible(false);
 					panelLimits.setVisible(false);
@@ -293,5 +301,17 @@
 					relButton.setEnabled(true);
 
+					panelSearchPois.iniLayer();
+					
+					name = panelSearchPois.getActiveLayer();
+					if(name != null) curLayer.setName("Harbour - " + name);
+					else curLayer.setName("Harbour");
+
+					Layer tmp = Main.map.mapView.getActiveLayer();
+					
+					Main.map.mapView.addLayerChangeListener(curLayer);
 					Main.main.addLayer(curLayer);
+
+					Main.map.mapView.setActiveLayer(tmp);
+					
 					curPanel = panelEnv;
 				}
@@ -327,4 +347,5 @@
 					relButton.setEnabled(false);
 					
+					Main.map.mapView.removeLayerChangeListener(curLayer);
 					Main.main.removeLayer(curLayer);
 					curPanel = panelRelations;
@@ -507,6 +528,8 @@
 		if (chartButton == null) {
 			chartButton = new JToggleButton();
-			chartButton.setBounds(new Rectangle(367, 5, 28, 18));
+			chartButton.setBounds(new Rectangle(375, 4, 20, 20));
 			chartButton.setSelected(false);
+			chartButton.setIcon(new ImageIcon(getClass().getResource("/images/oseam_20x20.png")));
+			chartButton.setHorizontalTextPosition(SwingConstants.LEADING);
 			chartButton.setEnabled(false);
 			chartButton.addActionListener(new java.awt.event.ActionListener() {
@@ -519,20 +542,22 @@
 						envButton.setEnabled(false);
 						relButton.setEnabled(false);
+						panelSearchPois.setVisible(true);
 						
-						if(curPanel == panelEnv) { 
-							panelEnv.setVisible(false);
-							panelSearchPois.setVisible(true);
-						} else if(curPanel == panelRelations) panelRelations.setVisible(false);
+						if(curPanel == panelEnv) panelEnv.setVisible(false);
+						else if(curPanel == panelRelations) panelRelations.setVisible(false);
+						
 					} else {
 						comButton.setEnabled(true);
 						restButton.setEnabled(true);
 						servButton.setEnabled(true);
-						envButton.setEnabled(true);
-						relButton.setEnabled(true);
+						panelSearchPois.setVisible(false);
 						
 						if(curPanel == panelEnv) {
 							panelEnv.setVisible(true);
-							panelSearchPois.setVisible(false);
-						} else if(curPanel == panelRelations) panelRelations.setVisible(true);
+							relButton.setEnabled(true);
+						} else if(curPanel == panelRelations) { 
+							panelRelations.setVisible(true);
+							envButton.setEnabled(true);
+						}
 					}
 				}
Index: applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/layers/LayerHarbour.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/layers/LayerHarbour.java	(revision 24830)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/layers/LayerHarbour.java	(revision 24832)
@@ -1,19 +1,45 @@
 package harbour.layers;
 
+import static java.lang.Math.sin;
+import static java.lang.Math.cos;
+
+import harbour.panels.PanelSearchPois;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
 import java.awt.Graphics2D;
+import java.awt.Point;
 
 import javax.swing.Action;
 import javax.swing.Icon;
+import javax.swing.JComboBox;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 
-public class LayerHarbour extends Layer {
-
-	public LayerHarbour(String name) {
-		super(name);
+public class LayerHarbour extends OsmDataLayer implements LayerChangeListener {
+	
+	private JComboBox layerBox		= null;
+	private PanelSearchPois panel	= null;
+	private static DataSet ds		= new DataSet();
+	private double radius			= -1.0;
+	private LatLon lm				= null;
+	private boolean isChanged		= true;
+	
+	public LayerHarbour(String name,PanelSearchPois panel) {
+		super(ds, name, null);
+		
+		this.panel = panel;
+		panel.setPois(ds);
+		layerBox = panel.getLayerComboBox();
 	}
 
@@ -54,7 +80,27 @@
 
 	@Override
-	public void paint(Graphics2D arg0, MapView arg1, Bounds arg2) {
-		// TODO Auto-generated method stub
+	public void paint(Graphics2D g, MapView mv, Bounds box) {
+		isChanged = false;
 		
+		Point mp = null;
+		Point mx = null;
+				
+		if(radius > 0.0 && lm != null) {
+			LatLon lx = new LatLon(lm.lat(), lm.lon() + radius/65.0);
+			
+			mp = mv.getPoint(lm);
+			mx = mv.getPoint(lx);
+		
+			int r = mx.x - mp.x;
+
+			g.setColor(Color.RED);
+			g.setStroke(new BasicStroke(3));
+		
+			g.drawOval(mp.x-r, mp.y-r, 2*r, 2*r);
+			
+			g.setStroke(new BasicStroke(1));
+		}
+		
+		super.paint(g, mv, box);		
 	}
 
@@ -65,3 +111,54 @@
 	}
 
+	@Override
+	public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+		if(newLayer instanceof OsmDataLayer) { 
+			String n  = newLayer.getName();
+			
+			setName("Harbour - " + n);
+			layerBox.setSelectedItem(n);
+		}
+		else setName("Harbour");
+	}
+
+	@Override
+	public void layerAdded(Layer arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void layerRemoved(Layer arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void setRadius(double r) {
+		if(radius != r){
+			radius = r;
+			
+			isChanged = true;
+			Main.map.repaint();
+		}
+	}
+	
+	public boolean isChanged() { return isChanged; }
+
+	public void setCenter(LatLon coor) {
+		if(lm != coor) {
+			lm = coor;
+			
+			isChanged = true;
+			Main.map.repaint();
+		}
+	}
+
+	public boolean isNodeinCircle(Node n) {
+		if(radius < 0.0) return true;
+
+		LatLon coor = n.getCoor();
+		
+		if(coor == null) return false;
+		return coor.greatCircleDistance(lm) < radius * 1000;
+	}
 }
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 24830)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/models/SearchTableModel.java	(revision 24832)
@@ -12,5 +12,4 @@
             "Show"};
 	private Object[][] data = {
-			{"amenity","",				new Boolean(false) },
 			{"amenity","bank",			new Boolean(false) },
 			{"amenity","cafe",			new Boolean(false) },
@@ -25,5 +24,4 @@
 			{"amenity","telephone",		new Boolean(false) },
 			{"amenity","toilets",		new Boolean(false) },
-			{"information","",			new Boolean(false) },
 			{"information","board",		new Boolean(false) },
 			{"information","citymap",	new Boolean(false) },
@@ -75,3 +73,6 @@
     }
     
+    public Boolean isWanted(int i)	{ return (Boolean) data[i][2]; }
+    public String getKey(int i)		{ return (String) data[i][0]; }
+    public String getValue(int i)	{ return (String) data[i][1]; }
 }
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 24830)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelSearchPois.java	(revision 24832)
@@ -9,4 +9,15 @@
 import java.awt.Rectangle;
 import java.awt.Font;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 import javax.swing.JTextField;
 import javax.swing.JButton;
@@ -14,18 +25,35 @@
 import javax.swing.JTable;
 import javax.swing.JComboBox;
+import javax.swing.table.TableModel;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+import harbour.layers.LayerHarbour;
 import harbour.models.SearchTableModel;
 
-public class PanelSearchPois extends JPanel {
+public class PanelSearchPois extends JPanel implements PropertyChangeListener{
 
 	private static final long serialVersionUID = 1L;
-	private JLabel radLabel = null;
-	private JTextField radTextField = null;
-	private JLabel unitLabel = null;
-	private JButton jButton = null;
-	private JScrollPane jScrollPane = null;
-	private JTable jTable = null;
-	private JLabel layerLabel = null;
-	private JComboBox layerComboBox = null;
-
+	private JLabel radLabel 			= null;
+	private JTextField radTextField 	= null;
+	private JLabel unitLabel 			= null;
+	private JButton searchButton 		= null;
+	private JScrollPane jScrollPane 	= null;
+	private JTable searchTable 			= null;
+	private JLabel layerLabel 			= null;
+	private JComboBox layerComboBox 	= null;
+	private String activeLayer 			= null;
+	private LayerHarbour layerHarbour 	= null;  //  @jve:decl-index=0:
+	private List<Layer> layers 			= new ArrayList<Layer>();  //  @jve:decl-index=0:
+	private JButton setButton 			= null;
+	private DataSet pois 				= null;
+	
 	/**
 	 * This is the default constructor
@@ -49,5 +77,5 @@
 		unitLabel.setBounds(new Rectangle(130, 240, 20, 21));
 		unitLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
-		unitLabel.setText("m");
+		unitLabel.setText("km");
 		radLabel = new JLabel();
 		radLabel.setBounds(new Rectangle(5, 240, 55, 20));
@@ -60,8 +88,9 @@
 		this.add(getRadTextField(), null);
 		this.add(unitLabel, null);
-		this.add(getJButton(), null);
+		this.add(getSearchButton(), null);
 		this.add(getJScrollPane(), null);
 		this.add(layerLabel, null);
 		this.add(getLayerComboBox(), null);
+		this.add(getSetButton(), null);
 	}
 
@@ -75,4 +104,29 @@
 			radTextField = new JTextField();
 			radTextField.setBounds(new Rectangle(60, 240, 70, 20));
+			radTextField.addFocusListener(new FocusListener() {
+
+				@Override
+				public void focusGained(FocusEvent arg0) {
+					// nothing to do yet
+				}
+
+				@Override
+				public void focusLost(FocusEvent arg0) {
+					double r = Double.parseDouble(radTextField.getText());
+
+					layerHarbour.setRadius(r);
+				}
+				
+			});
+			
+			radTextField.addKeyListener(new java.awt.event.KeyAdapter() {
+				public void keyTyped(java.awt.event.KeyEvent e) {
+					if(e.getKeyChar() == KeyEvent.VK_ENTER) {
+						double r = Double.parseDouble(radTextField.getText());
+
+						layerHarbour.setRadius(r);
+					}
+				}
+			});
 		}
 		return radTextField;
@@ -80,15 +134,22 @@
 
 	/**
-	 * This method initializes jButton	
+	 * This method initializes searchButton	
 	 * 	
 	 * @return javax.swing.JButton	
 	 */
-	private JButton getJButton() {
-		if (jButton == null) {
-			jButton = new JButton();
-			jButton.setBounds(new Rectangle(240, 240, 80, 20));
-			jButton.setText("Suche");
-		}
-		return jButton;
+	private JButton getSearchButton() {
+		if (searchButton == null) {
+			searchButton = new JButton();
+			searchButton.setBounds(new Rectangle(240, 240, 80, 20));
+			searchButton.setFont(new Font("Dialog", Font.PLAIN, 12));
+			searchButton.setText("Suche");
+			searchButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					searchPois();
+				}
+			});
+		}
+
+		return searchButton;
 	}
 
@@ -102,5 +163,5 @@
 			jScrollPane = new JScrollPane();
 			jScrollPane.setBounds(new Rectangle(10, 35, 310, 195));
-			jScrollPane.setViewportView(getJTable());
+			jScrollPane.setViewportView(getSearchTable());
 		}
 		return jScrollPane;
@@ -108,14 +169,14 @@
 
 	/**
-	 * This method initializes jTable	
+	 * This method initializes searchTable	
 	 * 	
 	 * @return javax.swing.JTable	
 	 */
-	private JTable getJTable() {
-		if (jTable == null) {
-			jTable = new JTable();
-			jTable.setModel(new SearchTableModel());
-		}
-		return jTable;
+	private JTable getSearchTable() {
+		if (searchTable == null) {
+			searchTable = new JTable();
+			searchTable.setModel(new SearchTableModel());
+		}
+		return searchTable;
 	}
 
@@ -125,11 +186,118 @@
 	 * @return javax.swing.JComboBox	
 	 */
-	private JComboBox getLayerComboBox() {
+	public JComboBox getLayerComboBox() {
 		if (layerComboBox == null) {
 			layerComboBox = new JComboBox();
 			layerComboBox.setBounds(new Rectangle(70, 5, 250, 20));
+			layerComboBox.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					int i = layerComboBox.getSelectedIndex();
+					
+					if(i >= 0) { 
+						Main.map.mapView.setActiveLayer(layers.get(i));
+					}
+				}
+			});
 		}
 		return layerComboBox;
 	}
 
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		Object src = event.getSource();
+		
+		System.out.println("Hello, world");
+		
+		if (src instanceof MapView) {
+			MapView mapView = (MapView) src;
+			
+			for (Layer l: mapView.getAllLayers()) {
+				if(l instanceof OsmDataLayer) layerComboBox.addItem(l.getName());
+			}
+		}
+
+	}
+
+	public void iniLayer() {
+		Layer a = Main.map.mapView.getActiveLayer();
+		String name = null;
+		 
+		layerComboBox.removeAllItems();
+		layers.clear();
+
+		for (Layer l: Main.map.mapView.getAllLayers()) {
+			if(l instanceof OsmDataLayer) {
+				name = l.getName();
+				layers.add(l);
+				
+				layerComboBox.addItem(name);
+				if(l.equals(a)) activeLayer = name;
+			}
+		}
+	}
+
+	public String getActiveLayer() { return activeLayer; }
+	public void setLayerHarbour(LayerHarbour layer) { layerHarbour = layer; }
+
+	/**
+	 * This method initializes setButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getSetButton() {
+		if (setButton == null) {
+			setButton = new JButton();
+			setButton.setBounds(new Rectangle(160, 240, 55, 20));
+			setButton.setFont(new Font("Dialog", Font.PLAIN, 12));
+			setButton.setText("Set");
+			setButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					DataSet ds = Main.main.getCurrentDataSet();
+					Collection<Node> selection = ds.getSelectedNodes();
+					int nodes = selection.size();
+
+					if(nodes != 0) {
+						Iterator<Node> it = selection.iterator();
+						Node node = it.next();
+						
+						layerHarbour.setCenter(node.getCoor());
+					}
+				}
+			});
+		}
+		return setButton;
+	}
+
+	public void searchPois() {
+		DataSet data = Main.main.getCurrentDataSet();
+		Collection<Node> nodes = data.getNodes();
+		SearchTableModel searchModel = (SearchTableModel) searchTable.getModel();
+
+		pois.clear();
+		
+		for(Node n : nodes) {
+			if(layerHarbour.isNodeinCircle(n)) {
+				Map<String, String> keys = n.getKeys();
+				
+				for(int i = 0; i < searchTable.getRowCount(); i++){
+					if(searchModel.isWanted(i)) {
+						String key = searchModel.getKey(i);
+						
+						if(keys.containsKey(key)) {
+							String type = keys.get(key);
+							if(type.equals(searchModel.getValue(i))) {
+								Node nc = new Node(1);
+								
+								nc.cloneFrom(n);
+								pois.addPrimitive(nc);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	public void setPois(DataSet pois) { this.pois = pois; }
+	
 }
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 24830)
+++ applications/editors/josm/plugins/smed/plugs/harbour/src/harbour/panels/PanelServices.java	(revision 24832)
@@ -1,3 +1,4 @@
 package harbour.panels;
+
 
 import harbour.widgets.CraneTable;
@@ -92,4 +93,5 @@
 		DLLabel = new JLabel();
 		DLLabel.setBounds(new Rectangle(3, 165, 147, 20));
+		DLLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
 		DLLabel.setText("weitere Dienstleistungen");
 		moorLabel = new JLabel();
@@ -99,4 +101,5 @@
 		loadLabel = new JLabel();
 		loadLabel.setBounds(new Rectangle(3, 50, 97, 16));
+		loadLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
 		loadLabel.setText("Laden / Entladen");
 		airLabel = new JLabel();
@@ -614,5 +617,5 @@
 		if (craneScrollPane == null) {
 			craneScrollPane = new CraneTable();
-			craneScrollPane.setBounds(new Rectangle(3, 90, 207, 66));
+			craneScrollPane.setBounds(new Rectangle(3, 90, 207, 71));
 		}
 		return craneScrollPane;
Index: applications/editors/josm/plugins/smed/plugs/smed_about/src/smed_about/SmedAbout.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/smed_about/src/smed_about/SmedAbout.java	(revision 24830)
+++ applications/editors/josm/plugins/smed/plugs/smed_about/src/smed_about/SmedAbout.java	(revision 24832)
@@ -91,10 +91,10 @@
             aboutCopyright.setBounds(new Rectangle(125, 0, 245, 55));
             aboutCopyright.setText("<HTML><BODY>Copyright (c) 2009 / 2010<BR><center>by" +
-            				"<BR>Werner Knig & Malcolm Herring</BODY></HTML>");
+            				"<BR>Werner König & Malcolm Herring</BODY></HTML>");
 
             aboutAuthors = new JLabel();
             aboutAuthors.setBounds(new Rectangle(30, 50
             		, 340, 30));
-            aboutAuthors.setText("Authors: Werner Knig and Malcolm Herring");
+            aboutAuthors.setText("Authors: Werner König and Malcolm Herring");
 
             aboutVersion = new JLabel();
