Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/MapdustLayer.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/MapdustLayer.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/MapdustLayer.java	(revision 25591)
@@ -60,21 +60,21 @@
 /**
  * Defines the MapDust JOSM layer main functionality.
- * 
+ *
  * @author Bea
  */
 public class MapdustLayer extends Layer {
-    
+
     /** The <code>MapdustGUI</code> object */
     private MapdustGUI mapdustGUI;
-    
+
     /** The list of <code>MapdustBugList</code> objects */
     private List<MapdustBug> mapdustBugList;
-    
+
     /** The selected <code>MapdustBug</code> object */
     private MapdustBug bugSelected;
-    
+
     /**
      * Builds a <code>MapdustLayer</code> object based on the given parameters.
-     * 
+     *
      * @param name The name of the layer
      * @param mapdustGUI The <code>MapdustGUI</code> object
@@ -88,8 +88,8 @@
         this.bugSelected = null;
     }
-    
+
     /**
      * Returns the icon of the MapDust layer.
-     * 
+     *
      * @return icon
      */
@@ -99,8 +99,8 @@
         return layerIcon;
     }
-    
+
     /**
      * Returns the info components of the MapDust layer.
-     * 
+     *
      * @return object
      */
@@ -110,8 +110,8 @@
         return tr(infoComponent);
     }
-    
+
     /**
      * Returns the menu entries of the MapDust layer.
-     * 
+     *
      * @return an array of <code>Action</code> objects.
      */
@@ -129,8 +129,8 @@
         return menuEntries;
     }
-    
+
     /**
      * Returns the text of the tool tip of the MapDust layer.
-     * 
+     *
      * @return the tooltip text
      */
@@ -140,8 +140,8 @@
         return tr(toolTipText);
     }
-    
+
     /**
      * Returns the image icon based on the given status and type.
-     * 
+     *
      * @param iconType The type of the bug
      * @param status The status of the bug
@@ -158,9 +158,9 @@
         return icon;
     }
-    
+
     /**
      * Draw the objects to the given map view. Also draws the MapDust bugs to
      * the map, and the tooltip for the selected MapDust bug.
-     * 
+     *
      * @param g The <code>Graphics2D</code> object
      * @param mv The <code>MapView</code> object
@@ -181,9 +181,12 @@
                 int width = icon.getIconWidth();
                 int height = icon.getIconHeight();
-                /* need to do drawing 2 times, because in some areas the bug 
-                 * image is invisible */
+                /*
+                 * need to do drawing 2 times, because in some areas the bug
+                 * image is invisible
+                 */
                 for (int i = 0; i < 2; i++) {
                     g.drawImage(icon.getImage(), p.x - (width / 2), p.y
                             - (height / 2), new ImageObserver() {
+
                         @Override
                         public boolean imageUpdate(Image img, int infoflags,
@@ -194,11 +197,10 @@
                 }
             }
-            
+
             /* draw the selected bug description */
             /* selected by clicking */
             MapdustBug bug1 = getBugSelected();
             /* selected from the list */
-            MapdustBug bugSelected =
-                    getMapdustGUI().getPanel().getSelectedBug();
+            MapdustBug bugSelected = getMapdustGUI().getSelectedBug();
             if (bugSelected == null) {
                 if (Main.map.mapView.getActiveLayer() == this) {
@@ -206,4 +208,5 @@
                 }
             }
+            setBugSelected(bugSelected);
             if (bugSelected != null) {
                 LatLon ll = bugSelected.getLatLon();
@@ -217,4 +220,5 @@
                 g.drawImage(icon.getImage(), p.x - (width / 2), p.y
                         - (height / 2), new ImageObserver() {
+
                     @Override
                     public boolean imageUpdate(Image img, int infoflags, int x,
@@ -242,5 +246,5 @@
         }
     }
-    
+
     /**
      * No need to implement this.
@@ -250,5 +254,5 @@
         return false;
     }
-    
+
     /**
      * No need to implement this.
@@ -256,9 +260,9 @@
     @Override
     public void mergeFrom(Layer layer) {}
-    
+
     /**
      * Builds the text of the tooltip containing a short description of the
      * given <code>MapdustBug</code> object.
-     * 
+     *
      * @param bug The <code>MapdustBug</code> object
      * @return A string containing the description text
@@ -279,5 +283,5 @@
         return text;
     }
-    
+
     /**
      * No need to implement this.
@@ -285,8 +289,8 @@
     @Override
     public void visitBoundingBox(BoundingXYVisitor arg0) {}
-    
+
     /**
      * Returns the <code>MapdustGUI</code> object
-     * 
+     *
      * @return the mapdustGUI
      */
@@ -294,8 +298,8 @@
         return mapdustGUI;
     }
-    
+
     /**
      * Sets the <code>MapdustGUI</code> object
-     * 
+     *
      * @param mapdustGUI the mapdustGUI to set
      */
@@ -303,8 +307,8 @@
         this.mapdustGUI = mapdustGUI;
     }
-    
+
     /**
      * Returns the list of <code>MapdustBug</code> objects
-     * 
+     *
      * @return the mapdustBugList
      */
@@ -312,8 +316,8 @@
         return mapdustBugList;
     }
-    
+
     /**
      * Returns the selected bug
-     * 
+     *
      * @return the bugSelected
      */
@@ -321,8 +325,8 @@
         return bugSelected;
     }
-    
+
     /**
      * Sets the selected bug
-     * 
+     *
      * @param bugSelected the bugSelected to set
      */
@@ -330,8 +334,8 @@
         this.bugSelected = bugSelected;
     }
-    
+
     /**
      * Sets the list of <code>MapdustBug</code> objects
-     * 
+     *
      * @param mapdustBugList the mapdustBugList to set
      */
@@ -339,4 +343,4 @@
         this.mapdustBugList = mapdustBugList;
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/MapdustPlugin.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/MapdustPlugin.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/MapdustPlugin.java	(revision 25591)
@@ -37,4 +37,5 @@
 import java.util.List;
 import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
@@ -48,5 +49,4 @@
 import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
@@ -54,10 +54,11 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.CreateIssueDialog;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObserver;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustInitialUpdateObserver;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustPluginState;
 import org.openstreetmap.josm.plugins.mapdust.service.MapdustServiceHandler;
 import org.openstreetmap.josm.plugins.mapdust.service.MapdustServiceHandlerException;
+import org.openstreetmap.josm.plugins.mapdust.service.value.BoundingBox;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -66,56 +67,64 @@
  * This is the main class of the MapDust plug-in. Defines the MapDust plug-in
  * main functionality.
- * 
+ *
  * @author Bea
- * 
  */
 public class MapdustPlugin extends Plugin implements LayerChangeListener,
         ZoomChangeListener, PreferenceChangedListener, MouseListener,
-        MapdustRefreshObserver, MapdustBugObserver,
-        MapdustInitialUpdateObserver {
-    
+        MapdustUpdateObserver, MapdustBugObserver {
+
     /** The graphical user interface of the plug-in */
     private MapdustGUI mapdustGUI;
-    
+
     /** The layer of the MapDust plug-in */
     private MapdustLayer mapdustLayer;
-    
+
+    /** The <code>CreateIssueDialog</code> object */
+    private CreateIssueDialog dialog;
+
+    /** The JOSM user identity manager, it is used for obtaining the username */
+    private final JosmUserIdentityManager userIdentityManager;
+
     /** The list of <code>MapdustBug</code> objects */
     private List<MapdustBug> mapdustBugList;
-    
-    /** The <code>CreateIssueDialog</code> object */
-    private CreateIssueDialog dialog;
-    
+
+    /** The bounding box from where the MapDust bugs are downloaded */
+    private BoundingBox bBox;
+
+    /**
+     * The <code>MapdustBugFilter</code> object representing the selected
+     * filters
+     */
+    private MapdustBugFilter filter;
+
     /** Specifies if there was or not an error downloading the data */
     private boolean wasError = false;
-    
-    /** The JOSM user identity manager, it is used for obtaining the username */
-    private final JosmUserIdentityManager userIdentityManager;
-    
+
     /**
      * Builds a new <code>MapDustPlugin</code> object based on the given
      * arguments.
-     * 
+     *
      * @param info The <code>MapDustPlugin</code> object
      */
     public MapdustPlugin(PluginInformation info) {
         super(info);
-        /* create instance for JOSM user identity manager */
-        userIdentityManager = JosmUserIdentityManager.getInstance();
-        /* initialize the plugin */
+        this.userIdentityManager = JosmUserIdentityManager.getInstance();
+        this.filter = null;
+        this.bBox = null;
         initializePlugin();
     }
-    
+
     /**
      * Initialize the <code>MapdustPlugin</code> object. Creates the
      * <code>MapdustGUI</code> and initializes the following variables with
      * default values: 'mapdust.pluginState', 'mapdust.nickname',
-     * 'mapdust.showError'.
+     * 'mapdust.showError', 'mapdust.version' and 'mapdust.localVersion'.
      */
     private void initializePlugin() {
         /* create MapDust GUI */
-        Shortcut shortcut = Shortcut.registerShortcut("mapdust", tr("Toggle: {0}", 
-                tr("Open MapDust")), KeyEvent.VK_0, Shortcut.GROUP_MENU, 
-                Shortcut.SHIFT_DEFAULT);
+        String shortTxt = "MapDust";
+        String longTxt = tr("Toggle: {0}", tr("Open MapDust"));
+        Shortcut shortcut = Shortcut.registerShortcut(shortTxt, longTxt,
+                KeyEvent.VK_0, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT);
         String name = "MapDust bug reports";
         String tooltip = "Activates the MapDust bug reporter plugin";
@@ -123,6 +132,5 @@
                 shortcut, 150, this);
         /* add default values for static variables */
-        Main.pref.put("mapdust.pluginState",
-                MapdustPluginState.ONLINE.getValue());
+        Main.pref.put("mapdust.pluginState", MapdustPluginState.ONLINE.getValue());
         Main.pref.put("mapdust.nickname", "");
         Main.pref.put("mapdust.showError", true);
@@ -131,10 +139,10 @@
                 getPluginInformation().localversion);
     }
-    
+
     /**
      * Initializes the new <code>MapFrame</code>. Adds the
      * <code>MapdustGUI</code> to the new <code>MapFrame</code> and sets the
      * observers/listeners.
-     * 
+     *
      * @param oldMapFrame The old <code>MapFrame</code> object
      * @param newMapFrame The new <code>MapFrame</code> object
@@ -149,210 +157,20 @@
             /* add MapDust dialog window */
             if (Main.map != null && Main.map.mapView != null) {
-                /* set bounds for MapdustGUI */
+                /* add MapdustGUI */
                 mapdustGUI.setBounds(newMapFrame.getBounds());
-                /* add observer */
                 mapdustGUI.addObserver(this);
-                /* add dialog to new MapFrame */
                 newMapFrame.addToggleDialog(mapdustGUI);
-                /* add ZoomChangeListener */
+                /* add Listeners */
                 NavigatableComponent.addZoomChangeListener(this);
-                /* add LayerChangeListener */
                 MapView.addLayerChangeListener(this);
-                /* add MouseListener */
                 Main.map.mapView.addMouseListener(this);
                 Main.pref.addPreferenceChangeListener(this);
                 /* put username to preferences */
-                Main.pref.put("mapdust.josmUserName", 
+                Main.pref.put("mapdust.josmUserName",
                         userIdentityManager.getUserName());
             }
         }
     }
-    
-    /**
-     * Refreshes the MapDust data. Downloads the data from the given area and
-     * updates the map and the MapDust list with this new data. This method is
-     * called whenever the 'Refresh' button is pressed by the user.
-     */
-    @Override
-    public void refreshData() {
-        if (containsOsmDataLayer() && mapdustGUI.isShowing()) {
-            updatePluginData();
-        }
-    }
-    
-    /**
-     * Downloads the MapDust bugs from the current map view, and updates the
-     * plugin data with the new downloaded data. This method is called only
-     * once, before first showing the MapDust bugs.
-     */
-    @Override
-    public void initialUpdate() {
-        if (containsOsmDataLayer()) {
-            updatePluginData();
-        }
-    }
-    
-    /**
-     * Updates the given <code>MapdustBug</code> object from the map and from
-     * the MapDust bugs list.
-     * 
-     * @param mapdustBug The <code>MapdustBug</code> object
-     */
-    @Override
-    public synchronized void changedData(MapdustBug mapdustBug) {
-        if (mapdustBugList == null) {
-            mapdustBugList = new ArrayList<MapdustBug>();
-        }
-        if (getMapdustGUI().isDialogShowing()) {
-            if (Main.map != null && Main.map.mapView != null) {
-                /* if the layer was active , should be active after the update */
-                boolean wasActive = false;
-                if (Main.map.mapView.getActiveLayer() == getMapdustLayer()) {
-                    wasActive = true;
-                }
-                /* update the list with the modified MapDust bug */
-                updateMapdustBugList(mapdustBug);
-                /* destroy the layer */
-                mapdustLayer.destroy();
-                Main.main.removeLayer(mapdustLayer);
-                mapdustLayer = null;
-                /* update the view, and activate the layer */
-                updateView();
-                if (wasActive) {
-                    Main.map.mapView.setActiveLayer(getMapdustLayer());
-                }
-            }
-        }
-    }
-    
-    /**
-     * If the zoom was changed, download the bugs from the current map view.
-     * This method is called whenever the zoom was changed.
-     */
-    @Override
-    public void zoomChanged() {
-        if (containsOsmDataLayer() && this.mapdustGUI.isShowing() && !wasError) {
-            updatePluginData();
-        }
-    }
-    
-    /**
-     * No need to implement this.
-     */
-    @Override
-    public void activeLayerChange(Layer arg0, Layer arg1) {}
-    
-    /**
-     * Adds the <code>MapdustLayer</code> to the JOSM editor. If the list of
-     * <code>MapdustBug</code>s is null then downloads the data from the MapDust
-     * Service and updates the editor with this new data.
-     * 
-     * @param layer The <code>Layer</code> which will be added to the JOSM
-     * editor
-     */
-    @Override
-    public void layerAdded(Layer layer) {
-        if (layer instanceof MapdustLayer) {
-            /* download the MapDust bugs and update the plugin */
-            if (mapdustBugList == null) {
-                updateMapdustData();
-            }
-        }
-    }
-    
-    /**
-     * Removes the <code>MapdustLayer</code> from the JOSM editor. Also closes
-     * the MapDust plugin window.
-     * 
-     * @param layer The <code>Layer</code> which will be removed from the JOSM
-     * editor
-     */
-    @Override
-    public void layerRemoved(Layer layer) {
-        if (layer instanceof MapdustLayer) {
-            /* remove the layer */
-            MapView.removeLayerChangeListener(this);
-            NavigatableComponent.removeZoomChangeListener(this);
-            Main.map.mapView.removeLayer(layer);
-            Main.map.remove(mapdustGUI);
-            if (mapdustGUI != null) {
-                mapdustGUI.update(new ArrayList<MapdustBug>(), this);
-                mapdustGUI.setVisible(false);
-            }
-            mapdustLayer = null;
-        }
-    }
-    
-    /**
-     * No need to implement this.
-     */
-    @Override
-    public void mouseEntered(MouseEvent event) {}
-    
-    /**
-     * No need to implement this.
-     */
-    @Override
-    public void mouseExited(MouseEvent arg0) {}
-    
-    /**
-     * No need to implement this.
-     */
-    @Override
-    public void mousePressed(MouseEvent event) {}
-    
-    /**
-     * No need to implement this.
-     */
-    @Override
-    public void mouseReleased(MouseEvent arg0) {}
-    
-    /**
-     * At mouse click the following two actions can be done: adding a new bug,
-     * and selecting a bug from the map. A bug can be added if the plugin is the
-     * only active plugin and you double click on the map. You can select a bug
-     * from the map by clicking on it.
-     * 
-     * @event The <code>MouseEvent</code> object
-     */
-    @Override
-    public void mouseClicked(MouseEvent event) {
-        if (mapdustLayer != null && mapdustLayer.isVisible()) {
-            if (event.getButton() == MouseEvent.BUTTON1) {
-                if (event.getClickCount() == 2 && !event.isConsumed()) {
-                    if (Main.map.mapView.getActiveLayer() == getMapdustLayer()) {
-                        /* show add bug dialog */
-                        MapdustBug bug = mapdustGUI.getPanel().getSelectedBug();
-                        if (bug != null) {
-                            Main.pref.put("selectedBug.status", bug.getStatus()
-                                    .getValue());
-                        } else {
-                            Main.pref.put("selectedBug.status", "create");
-                        }
-                        /* disable MapdustButtonPanel */
-                        mapdustGUI.disableBtnPanel();
-                        /* create and show dialog */
-                        dialog = new CreateIssueDialog(event.getPoint(), this);
-                        dialog.showDialog();
-                        event.consume();
-                        return;
-                    }
-                }
-                if (event.getClickCount() == 1 && !event.isConsumed()) {
-                    /* allow click on the bug icon on the map */
-                    Point p = event.getPoint();
-                    MapdustBug nearestBug = getNearestBug(p);
-                    if (nearestBug != null) {
-                        mapdustLayer.setBugSelected(nearestBug);
-                        /* set also in the list of bugs the element */
-                        mapdustGUI.getPanel().setSelectedBug(nearestBug);
-                        Main.map.mapView.repaint();
-                    }
-                    return;
-                }
-            }
-        }
-    }
-    
+
     /**
      * Listens for the events of type <code>PreferenceChangeEvent</code> . If
@@ -362,10 +180,10 @@
      * MapDust , re-set the 'mapdust.josmUserName' and 'mapdust.nickname'
      * properties.
-     * 
+     *
      * @param event The <code>PreferenceChangeEvent</code> obejct
      */
     @Override
     public void preferenceChanged(PreferenceChangeEvent event) {
-        if (this.mapdustGUI.isShowing() && !wasError && mapdustLayer != null
+        if (mapdustGUI.isShowing() && !wasError && mapdustLayer != null
                 && mapdustLayer.isVisible()) {
             if (event.getKey().equals("osm-server.username")) {
@@ -390,116 +208,175 @@
         }
     }
-    
-    /**
-     * Updates the <code>MapdustPlugin</code> data. Downloads the
-     * <code>MapdustBug</code> objects from the current view, and updates the
-     * <code>MapdustGUI</code> and the map with the new data.
-     */
-    private void updatePluginData() {
-        Main.worker.execute(new Runnable() {
-            @Override
-            public void run() {
-                updateMapdustData();
-            }
-        });
-    }
-    
-    /**
-     * Returns the bounds of the current <code>MapView</code>.
-     * 
-     * @return bounds
-     */
-    private Bounds getBounds() {
-        MapView mapView = Main.map.mapView;
-        Bounds bounds = new Bounds(mapView.getLatLon(0, mapView.getHeight()),
-                mapView.getLatLon(mapView.getWidth(), 0));
-        return bounds;
-    }
-    
-    /**
-     * Updates the MapDust plugin data. Downloads the list of
-     * <code>MapdustBug</code> objects for the given area, and updates the map
-     * and the MapDust layer with the new data.
-     */
-    private synchronized void updateMapdustData() {
-        if (Main.map != null && Main.map.mapView != null) {
-            /* download the MapDust data */
-            try {
-                Bounds bounds = getBounds();
-                MapdustServiceHandler handler = new MapdustServiceHandler();
-                mapdustBugList = handler.getBugs(bounds.getMin().lon(), 
-                        bounds.getMin().lat(), bounds.getMax().lon(), 
-                        bounds.getMax().lat());
-                wasError = false;
-            } catch (MapdustServiceHandlerException e) {
-                wasError = true;
-                mapdustBugList = new ArrayList<MapdustBug>();
-                updateView();
-                handleError();
-            }
-            /* update the view */
-            if (!wasError) {
-                updateView();
-            }
-        }
-    }
-    
-    /**
-     * Updates the current view ( map and MapDust bug list), with the given list
-     * of <code>MapdustBug</code> objects.
-     */
-    private void updateView() {
-        /* update the dialog with the new data */
-        mapdustGUI.update(mapdustBugList, this);
-        mapdustGUI.setVisible(true);
-        mapdustGUI.revalidate();
-        /* update the MapdustLayer */
-        if (mapdustLayer == null) {
-            /* create and add the layer */
-            mapdustLayer = new MapdustLayer("MapDust", mapdustGUI, mapdustBugList);
-            Main.main.addLayer(this.mapdustLayer);
-            Main.map.mapView.moveLayer(this.mapdustLayer, 0);
-            Main.map.mapView.addMouseListener(this);
-            MapView.addLayerChangeListener(this);
-            NavigatableComponent.addZoomChangeListener(this);
-        } else {
-            /* re-set the properties */
-            mapdustLayer.destroy();
-            mapdustLayer.setMapdustGUI(mapdustGUI);
-            mapdustLayer.setMapdustBugList(mapdustBugList);
-            mapdustLayer.setBugSelected(null);
-        }
-        /* repaint */
-        Main.map.mapView.revalidate();
-        Main.map.repaint();
-    }
-    
-    /**
-     * Updates the MapDust bugs list with the given <code>MapdustBug</code>
-     * object.
-     * 
+
+    /**
+     * Updates the map and the MapDust bugs list with the given
+     * <code>MapdustBug</code> object. If the bug is already contained in the
+     * list and map, then this object will be updated with the new properties.
+     * If the filter settings does not allow this new bug to be shown in the map
+     * and list, then it will be removed from the map and list.
+     *
      * @param mapdustBug The <code>MapdustBug</code> object
      */
-    private void updateMapdustBugList(MapdustBug mapdustBug) {
-        MapdustBug oldBug = null;
-        for (MapdustBug bug : this.mapdustBugList) {
-            if (bug.getId().equals(mapdustBug.getId())) {
-                oldBug = bug;
-            }
-        }
-        if (oldBug != null) {
-            /* remove, add */
-            this.mapdustBugList.remove(oldBug);
-            this.mapdustBugList.add(0, mapdustBug);
-        } else {
-            /* new add */
-            this.mapdustBugList.add(0, mapdustBug);
-        }
-    }
-    
+    @Override
+    public synchronized void changedData(MapdustBug mapdustBug) {
+        if (mapdustBugList == null) {
+            mapdustBugList = new ArrayList<MapdustBug>();
+        }
+        if (getMapdustGUI().isDialogShowing()) {
+            if (Main.map != null && Main.map.mapView != null) {
+                MapdustBug oldBug = null;
+                for (MapdustBug bug : mapdustBugList) {
+                    if (bug.getId().equals(mapdustBug.getId())) {
+                        oldBug = bug;
+                    }
+                }
+                boolean showBug = shouldDisplay(mapdustBug);
+                if (oldBug != null) {
+                    /* remove, add */
+                    if (showBug) {
+                        mapdustBugList.remove(oldBug);
+                        mapdustBugList.add(0, mapdustBug);
+                    } else {
+                        mapdustBugList.remove(oldBug);
+                    }
+                } else {
+                    /* new add */
+                    if (showBug) {
+                        mapdustBugList.add(0, mapdustBug);
+                    }
+                }
+                mapdustGUI.update(mapdustBugList, this);
+                mapdustLayer.setMapdustGUI(mapdustGUI);
+                if (showBug) {
+                    mapdustGUI.setSelectedBug(mapdustBugList.get(0));
+                } else {
+                    mapdustLayer.setBugSelected(null);
+                    mapdustGUI.enableBtnPanel(true);
+                    Main.map.mapView.repaint();
+                    String title = "MapDust";
+                    String message = "The operation was successful.";
+                    JOptionPane.showMessageDialog(Main.parent, message, title,
+                            JOptionPane.INFORMATION_MESSAGE);
+                }
+            }
+        }
+    }
+
+    /**
+     * Verifies if the given <code>MapdustBug</code> object should be displayed
+     * on the map and on the bugs list. A <code>MapdustBug</code> will be
+     * displayed on the map only if it is permitted by the selected filter
+     * settings.
+     *
+     * @param mapdustBug The <code>MapdustBug</code> object
+     * @return true if the given bug should be displayed false otherwise
+     */
+    private boolean shouldDisplay(MapdustBug mapdustBug) {
+        boolean result = true;
+        if (filter != null) {
+            boolean containsStatus = false;
+            if (filter.getStatuses() != null && !filter.getStatuses().isEmpty()) {
+                Integer statusKey = mapdustBug.getStatus().getKey();
+                if (filter.getStatuses().contains(statusKey)) {
+                    containsStatus = true;
+                }
+            } else {
+                containsStatus = true;
+            }
+            boolean containsType = false;
+            if (filter.getTypes() != null && !filter.getTypes().isEmpty()) {
+                String typeKey = mapdustBug.getType().getKey();
+                if (filter.getTypes().contains(typeKey)) {
+                    containsType = true;
+                }
+            } else {
+                containsType = true;
+            }
+            if (filter.getDescr() != null && filter.getDescr()) {
+                if (!mapdustBug.getIsDefaultDescription()) {
+                    result = false;
+                }
+            } else {
+                result = containsStatus && containsType;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * No need to implement this.
+     */
+    @Override
+    public void mouseEntered(MouseEvent event) {}
+
+    /**
+     * No need to implement this.
+     */
+    @Override
+    public void mouseExited(MouseEvent arg0) {}
+
+    /**
+     * No need to implement this.
+     */
+    @Override
+    public void mousePressed(MouseEvent event) {}
+
+    /**
+     * No need to implement this.
+     */
+    @Override
+    public void mouseReleased(MouseEvent arg0) {}
+
+    /**
+     * At mouse click the following two actions can be done: adding a new bug,
+     * and selecting a bug from the map. A bug can be added if the plugin is the
+     * only active plugin and you double click on the map. You can select a bug
+     * from the map by clicking on it.
+     *
+     * @param event The <code>MouseEvent</code> object
+     */
+    @Override
+    public void mouseClicked(MouseEvent event) {
+        if (mapdustLayer != null && mapdustLayer.isVisible()) {
+            if (event.getButton() == MouseEvent.BUTTON1) {
+                if (event.getClickCount() == 2 && !event.isConsumed()) {
+                    if (Main.map.mapView.getActiveLayer() == getMapdustLayer()) {
+                        /* show add bug dialog */
+                        MapdustBug bug = mapdustGUI.getSelectedBug();
+                        if (bug != null) {
+                            Main.pref.put("selectedBug.status", bug.getStatus()
+                                    .getValue());
+                        } else {
+                            Main.pref.put("selectedBug.status", "create");
+                        }
+                        /* disable MapdustButtonPanel */
+                        mapdustGUI.getPanel().disableBtnPanel();
+                        /* create and show dialog */
+                        dialog = new CreateIssueDialog(event.getPoint(), this);
+                        dialog.showDialog();
+                        event.consume();
+                        return;
+                    }
+                }
+                if (event.getClickCount() == 1 && !event.isConsumed()) {
+                    /* allow click on the bug icon on the map */
+                    Point p = event.getPoint();
+                    MapdustBug nearestBug = getNearestBug(p);
+                    if (nearestBug != null) {
+                        mapdustLayer.setBugSelected(nearestBug);
+                        /* set also in the list of bugs the element */
+                        mapdustGUI.setSelectedBug(nearestBug);
+                        Main.map.mapView.repaint();
+                    }
+                    return;
+                }
+            }
+        }
+    }
+
     /**
      * Returns the nearest <code>MapdustBug</code> object to the given point on
      * the map.
-     * 
+     *
      * @param p A <code>Point</code> object
      * @return A <code>MapdustBug</code> object
@@ -521,26 +398,200 @@
         return nearestBug;
     }
-    
-    /**
-     * Verifies if the <code>OsmDataLayer</code> layer has been added to the
-     * list of layers.
-     * 
-     * @return true if the <code>OsmDataLayer</code> layer has been added false
-     * otherwise
-     */
-    private boolean containsOsmDataLayer() {
-        boolean contains = false;
-        List<Layer> l = Main.map.mapView.getAllLayersAsList();
-        for (Layer ll : l) {
-            if (ll instanceof OsmDataLayer) {
-                contains = true;
-            }
-        }
-        return contains;
-    }
-    
+
+    /**
+     * No need to implement this.
+     */
+    @Override
+    public void activeLayerChange(Layer arg0, Layer arg1) {}
+
+    /**
+     * Adds the <code>MapdustLayer</code> to the JOSM editor. If the list of
+     * <code>MapdustBug</code>s is null then downloads the data from the MapDust
+     * Service and updates the editor with this new data.
+     *
+     * @param layer The <code>Layer</code> which will be added to the JOSM
+     * editor
+     */
+    @Override
+    public void layerAdded(Layer layer) {
+        if (layer instanceof MapdustLayer) {
+            /* download the MapDust bugs and update the plugin */
+            if (mapdustBugList == null) {
+                updatePluginData();
+            }
+        }
+    }
+
+    /**
+     * Removes the <code>MapdustLayer</code> from the JOSM editor. Also closes
+     * the MapDust plugin window.
+     *
+     * @param layer The <code>Layer</code> which will be removed from the JOSM
+     * editor
+     */
+    @Override
+    public void layerRemoved(Layer layer) {
+        if (layer instanceof MapdustLayer) {
+            /* remove the layer */
+            Main.pref.put("mapdust.pluginState",
+                    MapdustPluginState.ONLINE.getValue());
+            MapView.removeLayerChangeListener(this);
+            NavigatableComponent.removeZoomChangeListener(this);
+            Main.map.mapView.removeLayer(layer);
+            Main.map.remove(mapdustGUI);
+            if (mapdustGUI != null) {
+                mapdustGUI.update(new ArrayList<MapdustBug>(), this);
+                mapdustGUI.setVisible(false);
+                mapdustGUI.destroy();
+            }
+            mapdustLayer = null;
+            filter = null;
+            mapdustBugList = null;
+        }
+    }
+
+    /**
+     * Listens for the zoom change event. If the zoom was changed, then it will
+     * download the MapDust bugs data from the current view. The new data will
+     * be downloaded only if the current bounding box is different from the
+     * previous one.
+     */
+    @Override
+    public void zoomChanged() {
+        if (mapdustGUI.isShowing() && !wasError) {
+            boolean download = true;
+            BoundingBox curentBBox = getBBox();
+            if (bBox != null) {
+                if (bBox.equals(curentBBox)) {
+                    download = false;
+                }
+            }
+            bBox = curentBBox;
+            if (download) {
+                updatePluginData();
+            }
+        }
+    }
+
+    /**
+     * Updates the plugin with a new MapDust bugs data. If the filters are set
+     * then the MapDust data will be filtered. If initialUpdate flag is true
+     * then the plugin is updated for the first time with the MapDust data. By
+     * default the first time there is no filter applied to the MapDust data.
+     *
+     * @param filter The <code>MapdustBugFilter</code> containing the filter
+     * settings
+     * @param initialUpdate If true then there will be no filter applied.
+     */
+    @Override
+    public void update(MapdustBugFilter filter, boolean initialUpdate) {
+        bBox = getBBox();
+        if (initialUpdate) {
+            updatePluginData();
+        } else {
+            if (filter != null) {
+                this.filter = filter;
+            }
+            if (mapdustGUI.isShowing() && !wasError) {
+                updatePluginData();
+            }
+        }
+    }
+
+    /**
+     * Returns the current bounding box. If the bounding box values are not in
+     * the limits, then it will normalized.
+     *
+     * @return A <code>BoundingBox</code>
+     */
+    private BoundingBox getBBox() {
+        MapView mapView = Main.map.mapView;
+        Bounds bounds =
+                new Bounds(mapView.getLatLon(0, mapView.getHeight()),
+                        mapView.getLatLon(mapView.getWidth(), 0));
+        return new BoundingBox(bounds.getMin().lon(), bounds.getMin().lat(),
+                bounds.getMax().lon(), bounds.getMax().lat());
+    }
+
+    /**
+     * Updates the <code>MapdustPlugin</code> data. Downloads the
+     * <code>MapdustBug</code> objects from the current view, and updates the
+     * <code>MapdustGUI</code> and the map with the new data.
+     */
+    private void updatePluginData() {
+        Main.worker.execute(new Runnable() {
+
+            @Override
+            public void run() {
+                updateMapdustData();
+            }
+        });
+
+    }
+
+    /**
+     * Updates the MapDust plugin data. Downloads the list of
+     * <code>MapdustBug</code> objects for the given area, and updates the map
+     * and the MapDust layer with the new data.
+     */
+    protected synchronized void updateMapdustData() {
+        if (Main.map != null && Main.map.mapView != null) {
+            /* download the MapDust data */
+            try {
+                MapdustServiceHandler handler = new MapdustServiceHandler();
+                mapdustBugList = handler.getBugs(bBox, filter);
+                wasError = false;
+            } catch (MapdustServiceHandlerException e) {
+                wasError = true;
+                mapdustBugList = new ArrayList<MapdustBug>();
+            }
+            /* update the view */
+            SwingUtilities.invokeLater(new Runnable() {
+
+                @Override
+                public void run() {
+                    updateView();
+                    if (wasError) {
+                        handleError();
+                    }
+                }
+            });
+
+        }
+    }
+
+    /**
+     * Updates the current view ( map and MapDust bug list), with the given list
+     * of <code>MapdustBug</code> objects.
+     */
+    protected void updateView() {
+        /* update the dialog with the new data */
+        mapdustGUI.update(mapdustBugList, this);
+        /* update the MapdustLayer */
+        if (mapdustLayer == null) {
+            /* create and add the layer */
+            mapdustLayer =
+                    new MapdustLayer("MapDust", mapdustGUI, mapdustBugList);
+            Main.main.addLayer(this.mapdustLayer);
+            Main.map.mapView.moveLayer(this.mapdustLayer, 0);
+            Main.map.mapView.addMouseListener(this);
+            MapView.addLayerChangeListener(this);
+            NavigatableComponent.addZoomChangeListener(this);
+        } else {
+            /* re-set the properties */
+            mapdustLayer.destroy();
+            mapdustLayer.setMapdustGUI(mapdustGUI);
+            mapdustLayer.setMapdustBugList(mapdustBugList);
+            mapdustLayer.setBugSelected(null);
+        }
+        /* repaint */
+        mapdustGUI.revalidate();
+        Main.map.mapView.revalidate();
+        Main.map.repaint();
+    }
+
     /**
      * Handles the <code>MapdustServiceHandlerException</code> error.
-     * 
+     *
      */
     private void handleError() {
@@ -555,8 +606,8 @@
         }
     }
-    
+
     /**
      * Returns the <code>MapdustGUI</code> object
-     * 
+     *
      * @return the mapdustGUI
      */
@@ -564,8 +615,8 @@
         return mapdustGUI;
     }
-    
+
     /**
      * Sets the <code>MapdustGUI</code> object.
-     * 
+     *
      * @param mapdustGUI the mapdustGUI to set
      */
@@ -573,8 +624,8 @@
         this.mapdustGUI = mapdustGUI;
     }
-    
+
     /**
      * Returns the <code>MapdustLayer</code> object.
-     * 
+     *
      * @return the mapdustLayer
      */
@@ -582,8 +633,8 @@
         return mapdustLayer;
     }
-    
+
     /**
      * Sets the <code>MapdustLayer</code> object.
-     * 
+     *
      * @param mapdustLayer the mapdustLayer to set
      */
@@ -591,8 +642,8 @@
         this.mapdustLayer = mapdustLayer;
     }
-    
+
     /**
      * Returns the list of <code>MapdustBug</code> objects
-     * 
+     *
      * @return the mapdustBugList
      */
@@ -600,13 +651,13 @@
         return mapdustBugList;
     }
-    
-    /**
-     * Sets the list of <code>MapdustBug</code> objects
-     * 
-     * @param mapdustBugList the mapdustBugList to set
-     */
-    public void setMapdustBugList(List<MapdustBug> mapdustBugList) {
-        this.mapdustBugList = mapdustBugList;
-    }
-    
+
+    /**
+     * Returns the MapDust bug filter
+     *
+     * @return the filter
+     */
+    public MapdustBugFilter getFilter() {
+        return filter;
+    }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/MapdustActionUploaderException.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/MapdustActionUploaderException.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/MapdustActionUploaderException.java	(revision 25591)
@@ -31,13 +31,13 @@
 /**
  * Specific exception for the <code>MapdustActionUploader</code> object
- * 
+ *
  * @author Bea
  * @version $Revision$
  */
 public class MapdustActionUploaderException extends Exception {
-    
+
     /** Serial version UID */
-    private static final long serialVersionUID = 1L;
-    
+    private static final long serialVersionUID = -6128820229665805478L;
+
     /**
      * Builds an empty <code>MapdustActionUploaderException</code> object.
@@ -46,9 +46,9 @@
         super();
     }
-    
+
     /**
      * Builds a <code>MapdustActionUploaderException</code> object based on the
      * given argument.
-     * 
+     *
      * @param message The message of the exception.
      */
@@ -56,9 +56,9 @@
         super(message);
     }
-    
+
     /**
      * Builds a <code>MapdustActionUploaderException</code> object based on the
      * given argument.
-     * 
+     *
      * @param cause The cause of the exception.
      */
@@ -66,9 +66,9 @@
         super(cause);
     }
-    
+
     /**
      * Builds a <code>MapdustActionUploaderException</code> object based on the
      * given arguments.
-     * 
+     *
      * @param message The message of the exception.
      * @param cause The cause of the exception.
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/MapdustGUI.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/MapdustGUI.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/MapdustGUI.java	(revision 25591)
@@ -40,14 +40,17 @@
 import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.panel.MapdustActionPanel;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.panel.MapdustBugListPanel;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.panel.MapdustBugPropertiesPanel;
-import org.openstreetmap.josm.plugins.mapdust.gui.component.panel.MapdustPanel;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugDetailsObservable;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugDetailsObserver;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustInitialUpdateObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustInitialUpdateObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustAction;
 import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustPluginState;
+import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustServiceCommand;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
+import org.openstreetmap.josm.plugins.mapdust.service.value.Status;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -55,46 +58,45 @@
 /**
  * This class is the main graphical user interface class.
- * 
+ *
  * @author Bea
  */
-public class MapdustGUI extends ToggleDialog implements
-        MapdustActionListObserver, MapdustBugDetailsObservable,
-        MapdustInitialUpdateObservable {
-    
+public class MapdustGUI extends ToggleDialog implements MapdustActionObserver,
+        MapdustBugDetailsObservable, MapdustUpdateObservable {
+
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-    
+    private static final long serialVersionUID = -1194197412364335190L;
+
     /** The list of MapDust bug details observers */
     private final ArrayList<MapdustBugDetailsObserver> bugDetailsObservers =
             new ArrayList<MapdustBugDetailsObserver>();
-    
+
     /** The list of MapDust initial update observers */
-    private final ArrayList<MapdustInitialUpdateObserver> initialUpdateObservers =
-            new ArrayList<MapdustInitialUpdateObserver>();
-    
-    /** The <code>MapdustPanel</code> object */
-    private MapdustPanel panel;
-    
+    private final ArrayList<MapdustUpdateObserver> initialUpdateObservers =
+            new ArrayList<MapdustUpdateObserver>();
+
+    /** The <code>MapdustPlugin</code> plugin */
+    private MapdustPlugin mapdustPlugin;
+
+    /** The <code>MapdustBugPropertiesPanel</code> */
+    private MapdustBugPropertiesPanel detailsPanel;
+
+    /** The <code>MapdustBugListPanel</code> object */
+    private MapdustBugListPanel panel;
+
     /** The <code>MapdustActionPanel</code> object */
-    private MapdustActionPanel queuePanel;
-    
+    private MapdustActionPanel actionPanel;
+
     /** The <code>JTabbedPanel</code> object */
     private JTabbedPane tabbedPane;
-    
-    /** The <code>MapdustPlugin</code> plugin */
-    private MapdustPlugin mapdustPlugin;
-    
-    /** The <code>MapdustBugPropertiesPanel</code> */
-    private MapdustBugPropertiesPanel detailsPanel;
-    
+
     /** The <code>JPanel</code> */
     private JPanel mainPanel;
-    
+
     /** Specifies if the MapDust data was or not downloaded */
     private boolean downloaded = false;
-    
+
     /**
      * Builds a <code>MapdustGUi</code> based on the given parameters.
-     * 
+     *
      * @param name The name of the GUI
      * @param iconName The name of the icon
@@ -109,9 +111,77 @@
         this.mapdustPlugin = mapdustPlugin;
     }
-    
+
+    /**
+     * Displays the <code>MapdustGUI</code> dialog window in the JOSM editor. If
+     * the MapDust data was not downloaded yet, it will donwload the data and
+     * also update the MapDust plugin with the data. If the MapDust data was
+     * already downloaded, then the <code>MapdustGUI</code> will be displayed.
+     */
+    @Override
+    public void showDialog() {
+        if (!downloaded) {
+            notifyObservers(null, true);
+            downloaded = true;
+        }
+        super.showDialog();
+    }
+
+    /**
+     * Adds the given <code>MapdustAction</code> object to the list of actions.
+     *
+     * @param action The <code>MapdustAction</code> object
+     */
+    @Override
+    public synchronized void addAction(MapdustAction action) {
+        /* add the action */
+        List<MapdustAction> actionList = actionPanel.getActionList();
+        actionList.add(action);
+        List<MapdustBug> mapdustBugs = panel.getMapdustBugsList();
+        boolean showBug = shouldDisplay(action.getMapdustBug(),
+                mapdustPlugin.getFilter());
+        mapdustBugs = modifyBug(mapdustBugs, action.getMapdustBug(), showBug);
+
+        /* update panels */
+        updateMapdustPanel(mapdustBugs);
+        updateMapdustActionPanel(actionList);
+        if (showBug &&
+                !action.getCommand().equals(MapdustServiceCommand.ADD_BUG)) {
+            panel.resetSelectedBug(0);
+        } else {
+            mapdustPlugin.getMapdustLayer().setBugSelected(null);
+        }
+        revalidate();
+        Main.map.mapView.revalidate();
+        Main.map.repaint();
+    }
+
+    /**
+     * Verifies if the given <code>MapdustBug</code> should be shown on the
+     * MapDust bug list/ map. Any <code>MapdustBug</code> should be shown on the
+     * MapDust bug list / map only if it is permitted by the selected filters.
+     *
+     * @param modifiedBug The <code>MapdustBug</code> object
+     * @param filter The <code>MapdustBugFilter</code> object
+     * @return true if the given MapDust bug should be shown in the list/map
+     * false otherwise
+     */
+    private boolean shouldDisplay(MapdustBug modifiedBug,
+            MapdustBugFilter filter) {
+        boolean result = false;
+        if (filter != null && filter.getStatuses() != null
+                && !filter.getStatuses().isEmpty()) {
+            if (filter.getStatuses().contains(modifiedBug.getStatus().getKey())) {
+                result = true;
+            }
+        } else {
+            result = true;
+        }
+        return result;
+    }
+
     /**
      * Updates the MapDust GUI with the given list of <code>MapdustBug</code>
      * objects.
-     * 
+     *
      * @param mapdustBugs The list of <code>MapdustBug</code> objects
      * @param mapdustPlugin The <code>MapdustPlugin</code> object
@@ -119,134 +189,152 @@
     public synchronized void update(List<MapdustBug> mapdustBugs,
             MapdustPlugin mapdustPlugin) {
-        this.mapdustPlugin = mapdustPlugin;
+        setMapdustPlugin(mapdustPlugin);
         String pluginState = Main.pref.get("mapdust.pluginState");
         if (pluginState.equals(MapdustPluginState.ONLINE.getValue())) {
-            /* remove the panels */
             if (tabbedPane != null) {
-                /* offline to online */
+                /* from offline to online */
                 remove(mainPanel);
-                queuePanel = null;
-            } else {
-                /* online to online */
-                if (mainPanel != null) {
-                    remove(mainPanel);
-                }
-            }
-            /* add panels with updated data */
-            panel = new MapdustPanel(mapdustBugs, "Bug reports", mapdustPlugin);
-            MapdustBug selectedBug = (mapdustBugs != null && mapdustBugs.size() 
-                    > 0) ? mapdustBugs.get(0) : null;
-            if (detailsPanel == null) {
-                detailsPanel = new MapdustBugPropertiesPanel(selectedBug);
-                panel.addObserver(detailsPanel);
-                addObserver(detailsPanel);
-            }
-            notifyObservers(selectedBug);
-            panel.addObserver(detailsPanel);
-            mainPanel = new JPanel();
-            mainPanel.setAutoscrolls(true);
-            mainPanel.setLayout(new BorderLayout());
-            if (mapdustBugs != null) {
-                mainPanel.add(detailsPanel, BorderLayout.NORTH);
-            }
-            mainPanel.add(panel, BorderLayout.CENTER);
-            add(mainPanel, BorderLayout.CENTER);
+                tabbedPane = null;
+                actionPanel = null;
+                mainPanel = null;
+                panel = null;
+            }
+            updateMapdustPanel(mapdustBugs);
+            if (mainPanel == null) {
+                createMainPanel();
+            }
         } else {
-            List<MapdustAction> list = new ArrayList<MapdustAction>();
-            /* remove panels */
-            if (queuePanel == null) {
+            if (tabbedPane == null) {
                 /* from online to offline */
                 remove(mainPanel);
-            } else {
-                list = queuePanel.getActionList();
-                remove(mainPanel);
-            }
-            /* add panels with updated data */
-            tabbedPane = new JTabbedPane();
-            queuePanel = new MapdustActionPanel(list, "Offline Contribution",
+                mainPanel = null;
+                panel = null;
+            }
+            List<MapdustAction> actionList =
+                    actionPanel != null ? actionPanel.getActionList()
+                            : new ArrayList<MapdustAction>();
+
+            /* update panels */
+            List<MapdustBug> bugs =
+                    filterMapdustBugList(mapdustBugs, actionList,
+                            mapdustPlugin.getFilter());
+            updateMapdustPanel(bugs);
+            updateMapdustActionPanel(actionList);
+            if (mainPanel == null) {
+                createMainPanel();
+            }
+        }
+    }
+
+
+    /**
+     * Updates the MapDust bugs panel with the new list of data.
+     *
+     * @param mapdustBugs The list of <code>MapdustBug</code> objects
+     */
+    private void updateMapdustPanel(List<MapdustBug> mapdustBugs) {
+        MapdustBug selectedBug =
+                (mapdustBugs != null && mapdustBugs.size() > 0) ? mapdustBugs
+                        .get(0) : null;
+        if (detailsPanel == null) {
+            detailsPanel = new MapdustBugPropertiesPanel(selectedBug);
+            addObserver(detailsPanel);
+        }
+        if (panel == null) {
+            panel = new MapdustBugListPanel(mapdustBugs, "Bug reports",
                     mapdustPlugin);
-            panel = new MapdustPanel(mapdustBugs, "Bug reports (offline)",
-                    mapdustPlugin);
-            MapdustBug selectedBug = (mapdustBugs != null && mapdustBugs.size() 
-                    > 0) ? mapdustBugs.get(0) : null;
-            if (detailsPanel == null) {
-                detailsPanel = new MapdustBugPropertiesPanel(selectedBug);
-                panel.addObserver(detailsPanel);
-                addObserver(detailsPanel);
-            }
+            panel.addObserver(detailsPanel);
+        } else {
+            panel.updateComponents(mapdustBugs);
             notifyObservers(selectedBug);
-            panel.addObserver(detailsPanel);
-            mainPanel = new JPanel();
-            mainPanel.setAutoscrolls(true);
-            mainPanel.setLayout(new BorderLayout());
-            if (mapdustBugs != null) {
-                mainPanel.add(detailsPanel, BorderLayout.NORTH);
-            }
-            tabbedPane.add(panel, 0);
-            tabbedPane.add(queuePanel);
-            mainPanel.add(tabbedPane, BorderLayout.CENTER);
-            add(mainPanel, BorderLayout.CENTER);
-        }
-    }
-    
-    /**
-     * Adds the given <code>MapdustAction</code> object to the list of actions.
-     * 
-     * @param action The <code>MapdustAction</code> object
-     */
-    @Override
-    public synchronized void addAction(MapdustAction action) {
-        /* add the action */
-        List<MapdustAction> list = queuePanel.getActionList();
-        List<MapdustBug> mapdustBugs = panel.getMapdustBugsList();
-        mapdustBugs = modifyBug(mapdustBugs, action.getMapdustBug());
-        
-        /* remove panels */
-        if (mainPanel != null) {
-            remove(mainPanel);
-        }
-        /* create new tabbed pane */
-        tabbedPane = new JTabbedPane();
-        list.add(action);
-        queuePanel = new MapdustActionPanel(list, "Offline Contribution",
-                mapdustPlugin);
-        panel = new MapdustPanel(mapdustBugs, "Bug reports (offline)",
-                mapdustPlugin);
+        }
+    }
+
+    /**
+     * Updates the MapDust action panel with the new list of data.
+     *
+     * @param actionList The list of <code>MapdustAction</code> objects
+     */
+    private void updateMapdustActionPanel(List<MapdustAction> actionList) {
+        if (actionPanel == null) {
+            actionPanel = new MapdustActionPanel(actionList,
+                    "Offline Contribution", mapdustPlugin);
+        } else {
+            actionPanel.updateComponents(actionList);
+        }
+    }
+
+    /**
+     * Creates the main panel of the plugin and adds to the content pane.
+     */
+    private void createMainPanel() {
         mainPanel = new JPanel();
         mainPanel.setAutoscrolls(true);
         mainPanel.setLayout(new BorderLayout());
         mainPanel.add(detailsPanel, BorderLayout.NORTH);
-        tabbedPane.add(panel, 0);
-        tabbedPane.add(queuePanel);
-        mainPanel.add(tabbedPane, BorderLayout.CENTER);
+        if (actionPanel == null) {
+            mainPanel.add(panel, BorderLayout.CENTER);
+        } else {
+            tabbedPane = new JTabbedPane();
+            tabbedPane.add(panel, 0);
+            tabbedPane.add(actionPanel);
+            mainPanel.add(tabbedPane, BorderLayout.CENTER);
+        }
         add(mainPanel, BorderLayout.CENTER);
-        revalidate();
-    }
-    
-    /**
-     * Disables the buttons from the <code>MapdustButtonPanel</code> buttons.
-     * 
-     */
-    public void disableBtnPanel() {
-        panel.getBtnPanel().getBtnWorkOffline().setEnabled(false);
-        panel.getBtnPanel().getBtnRefresh().setEnabled(false);
-        panel.getBtnPanel().getBtnAddComment().setEnabled(false);
-        panel.getBtnPanel().getBtnFixBugReport().setEnabled(false);
-        panel.getBtnPanel().getBtnInvalidateBugReport().setEnabled(false);
-        panel.getBtnPanel().getBtnReOpenBugReport().setEnabled(false);
-    }
-    
-    
+    }
+
+
+    /**
+     * Filters the given list of <code>MapdustBug</code>s based on the given
+     * list of <code>MapdustAction</code>s. The filtering is done in order to
+     * show the modified bugs ( but not already committed operations) if they
+     * also appears in the new list of bugs, according to the latest
+     * modifications.
+     *
+     * @param bugList The list of <code>MapdustBug</code> objects
+     * @param actionList The list of <code>MapdustAction</code> objects
+     * @param filter The <code>MapdustBugFilter</code> object
+     * @return A filtered list of <code>MapdustBug</code>s
+     */
+    private List<MapdustBug> filterMapdustBugList(List<MapdustBug> bugList,
+            List<MapdustAction> actionList, MapdustBugFilter filter) {
+        if (bugList != null && actionList != null) {
+            for (MapdustAction action : actionList) {
+                int index = bugList.indexOf(action.getMapdustBug());
+                if (index >= 0) {
+                    if (action.getNewStatus() != null) {
+                        Status newStatus =
+                                Status.getStatus(action.getNewStatus());
+                        if (filter != null && filter.getStatuses() != null
+                                && !filter.getStatuses().isEmpty()) {
+                            if (filter.getStatuses().contains(
+                                    newStatus.getKey())) {
+                                bugList.get(index).setStatus(newStatus);
+                            } else {
+                                bugList.remove(index);
+                            }
+                        } else {
+                            bugList.get(index).setStatus(newStatus);
+                        }
+                    }
+                }
+            }
+        }
+        return bugList;
+    }
+
     /**
      * Modifies the given <code>MapdustBug</code> in the given list of
      * <code>MapdustBug</code> objects. Returns the list of bugs containing the
      * modified bug.
-     * 
+     *
      * @param mapdustBugs The list of <code>MapdustBug</code> objects
      * @param modifiedBug The <code>MapdustBug</code> object
+     * @param showBug A flag indicating if the given modified bug should be
+     * displayed on the map and on the list of bugs
      * @return the modified list
      */
     private List<MapdustBug> modifyBug(List<MapdustBug> mapdustBugs,
-            MapdustBug modifiedBug) {
+            MapdustBug modifiedBug, boolean showBug) {
         int index = -1;
         for (int i = 0; i < mapdustBugs.size(); i++) {
@@ -260,27 +348,73 @@
             /* remove, and add to the top of the list */
             mapdustBugs.remove(index);
-            mapdustBugs.add(0, modifiedBug);
+            if (showBug) {
+                mapdustBugs.add(0, modifiedBug);
+            }
         }
         return mapdustBugs;
     }
-    
-    /**
-     * Displays the <code>MapdustGUI</code> dialog window in the JOSM editor. If
-     * the MapDust data was not downloaded yet, it will donwload the data and
-     * also update the MapDust plugin with the data. If the MapDust data was
-     * already downloaded, then the <code>MapdustGUI</code> will be displayed.
-     */
-    @Override
-    public void showDialog() {
-        if (!downloaded) {
-            notifyObservers();
-            downloaded = true;
-        }
-        super.showDialog();
-    }
-    
+
+    /**
+     * Returns the selected bug from the list of bugs. If there is no bug
+     * selected then the returned result is null.
+     *
+     * @return The selected bug
+     */
+    public MapdustBug getSelectedBug() {
+        MapdustBug selectedBug = null;
+        if (panel != null) {
+            selectedBug = panel.getSelectedBug();
+        }
+        return selectedBug;
+    }
+
+    /**
+     * Sets the given <code>MapdustBug</code> to be selected from the list of
+     * bugs.
+     *
+     * @param mapdustBug The <code>MapdustBug</code> object
+     */
+    public void setSelectedBug(MapdustBug mapdustBug) {
+        if (panel != null) {
+            panel.setSelectedBug(mapdustBug);
+        }
+    }
+
+    /**
+     * Disables the buttons from the <code>MapdustPanel</code>.
+     *
+     */
+    public void disableBtnPanel() {
+        if (panel != null) {
+            panel.disableBtnPanel();
+        }
+    }
+
+    /**
+     * Enables the basic components from the <code>MapdustButtonPanel</code>.
+     * Basic components are considered the following buttons: work offline,
+     * filter bug report, and refresh.If the onlyBasic flag is true then the
+     * other buttons will be disabled.
+     *
+     * @param onlyBasic If true then the not basic buttons will be disabled
+     */
+    public void enableBtnPanel(boolean onlyBasic) {
+        if (panel != null) {
+            panel.enableBtnPanel(onlyBasic);
+        }
+    }
+
+    /**
+     * Returns the list of <code>MapdustAction</code> objects.
+     *
+     * @return list of <code>MapdustAction</code>
+     */
+    public List<MapdustAction> getMapdustActionList() {
+        return getActionPanel().getActionList();
+    }
+
     /**
      * Adds a new MapDust bug details observer to the list of observers.
-     * 
+     *
      * @param observer The <code>MapdustBugDetailsObserver</code> object
      */
@@ -291,21 +425,21 @@
         }
     }
-    
-    /**
-     * Adds a new MapDust initial update observer to the list of observers.
-     * 
-     * @param observer The <code>MapdustInitialUpdateObserver</code> object
-     */
-    @Override
-    public void addObserver(MapdustInitialUpdateObserver observer) {
+
+    /**
+     * Adds a new MapDust update observer to the list of observers.
+     *
+     * @param observer The <code>MapdustUpdateObserver</code> object
+     */
+    @Override
+    public void addObserver(MapdustUpdateObserver observer) {
         if (!this.initialUpdateObservers.contains(observer)) {
             this.initialUpdateObservers.add(observer);
         }
     }
-    
+
     /**
      * Removes the given MapDust bug details observer from the list of
      * observers.
-     * 
+     *
      * @param observer The <code>MapdustBugDetailsObserver</code> object
      */
@@ -313,19 +447,19 @@
     public void removeObserver(MapdustBugDetailsObserver observer) {
         this.bugDetailsObservers.remove(observer);
-        
-    }
-    
+
+    }
+
     /**
      * Removes the given MapDust initial update observer from the list of
      * observers.
-     * 
+     *
      * @param observer The <code>MapdustInitialUpdateObserver</code> object
      */
     @Override
-    public void removeObserver(MapdustInitialUpdateObserver observer) {
+    public void removeObserver(MapdustUpdateObserver observer) {
         this.initialUpdateObservers.remove(observer);
-        
-    }
-    
+
+    }
+
     /**
      * Notifies the <code>MapdustBugDetailsObserver</code> objects observing the
@@ -340,5 +474,5 @@
         }
     }
-    
+
     /**
      * Notifies the <code>MapdustInitialUpdateObserver</code> objects waiting
@@ -346,29 +480,43 @@
      */
     @Override
-    public void notifyObservers() {
-        Iterator<MapdustInitialUpdateObserver> elements =
+    public void notifyObservers(MapdustBugFilter filter, boolean first) {
+        Iterator<MapdustUpdateObserver> elements =
                 this.initialUpdateObservers.iterator();
         while (elements.hasNext()) {
-            (elements.next()).initialUpdate();
-        }
-    }
-    
+            (elements.next()).update(null, true);
+        }
+    }
+
     /**
      * Returns the <code>MapdustPanel</code> object
-     * 
+     *
      * @return the panel
      */
-    public MapdustPanel getPanel() {
+    public MapdustBugListPanel getPanel() {
         return panel;
     }
-    
+
     /**
      * Returns the <code>MapdustActionPanel</code> object
-     * 
+     *
      * @return the queuePanel
      */
-    public MapdustActionPanel getQueuePanel() {
-        return queuePanel;
-    }
-    
+    public MapdustActionPanel getActionPanel() {
+        return actionPanel;
+    }
+
+    /**
+     * @return the mapdustPlugin
+     */
+    public MapdustPlugin getMapdustPlugin() {
+        return mapdustPlugin;
+    }
+
+    /**
+     * @param mapdustPlugin the mapdustPlugin to set
+     */
+    public void setMapdustPlugin(MapdustPlugin mapdustPlugin) {
+        this.mapdustPlugin = mapdustPlugin;
+    }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/adapter/DisplayMenu.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/adapter/DisplayMenu.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/adapter/DisplayMenu.java	(revision 25591)
@@ -92,5 +92,4 @@
     private void showMenu(MouseEvent event) {
         if (event.isPopupTrigger()) {
-            JList c = (JList) event.getComponent();
             int x = event.getX();
             int y = event.getY();
@@ -99,11 +98,9 @@
             if (!listBugs.isSelectionEmpty()
                     && locationToIndex == selectedIndex) {
-                int count = c.getModel().getSize();
-                int cal = count * 18;
-                if (y <= cal) {
-                    menu.show(listBugs, x, y);
-                }
+                menu.show(listBugs, x, y);
+
             }
         }
     }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/adapter/WindowClose.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/adapter/WindowClose.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/adapter/WindowClose.java	(revision 25591)
@@ -31,5 +31,4 @@
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
-import javax.swing.JToggleButton;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.AbstractDialog;
@@ -48,5 +47,4 @@
 
     /** Serial version UID */
-    private static final long serialVersionUID = 1L;
 
     /** A <code>AbstractDialog</code> object */
@@ -55,7 +53,4 @@
     /** The <code>MapdustButtonPanel</code> object */
     private MapdustButtonPanel btnPanel;
-
-    /** The <code>JToggleButton</code> which had fired the dialog */
-    private JToggleButton btnFired;
 
     /**
@@ -69,11 +64,8 @@
      * @param dialog The dialog which will be closed
      * @param btnPanel The button panel
-     * @param btnFired The button which fired the display dialog action
      */
-    public WindowClose(AbstractDialog dialog, MapdustButtonPanel btnPanel,
-            JToggleButton btnFired) {
+    public WindowClose(AbstractDialog dialog, MapdustButtonPanel btnPanel ) {
         this.dialog = dialog;
         this.btnPanel = btnPanel;
-        this.btnFired = btnFired;
     }
 
@@ -86,47 +78,42 @@
             btnPanel.getBtnWorkOffline().setEnabled(true);
             btnPanel.getBtnWorkOffline().setSelected(false);
+            btnPanel.getBtnWorkOffline().setFocusable(false);
+            btnPanel.getBtnFilter().setEnabled(true);
+            btnPanel.getBtnFilter().setSelected(false);
+            btnPanel.getBtnFilter().setFocusable(false);
             if (pluginState.equals(MapdustPluginState.OFFLINE.getValue())) {
                 btnPanel.getBtnRefresh().setEnabled(false);
             } else {
                 btnPanel.getBtnRefresh().setEnabled(true);
+                btnPanel.getBtnRefresh().setSelected(false);
+                btnPanel.getBtnRefresh().setFocusable(false);
             }
             if (status.equals(Status.OPEN.getValue())) {
                 btnPanel.getBtnFixBugReport().setEnabled(true);
                 btnPanel.getBtnInvalidateBugReport().setEnabled(true);
-                btnPanel.getBtnReOpenBugReport().setEnabled(false);
                 btnPanel.getBtnAddComment().setEnabled(true);
             } else {
                 if (status.equals(Status.FIXED.getValue())) {
-                    btnPanel.getBtnFixBugReport().setEnabled(false);
-                    btnPanel.getBtnInvalidateBugReport().setEnabled(false);
                     btnPanel.getBtnReOpenBugReport().setEnabled(true);
                     btnPanel.getBtnAddComment().setEnabled(true);
                 } else {
                     if (status.equals(Status.INVALID.getValue())) {
-                        btnPanel.getBtnFixBugReport().setEnabled(false);
-                        btnPanel.getBtnInvalidateBugReport().setEnabled(false);
                         btnPanel.getBtnReOpenBugReport().setEnabled(true);
                         btnPanel.getBtnAddComment().setEnabled(true);
-                    } else {
-                        btnPanel.getBtnFixBugReport().setEnabled(false);
-                        btnPanel.getBtnInvalidateBugReport().setEnabled(false);
-                        btnPanel.getBtnReOpenBugReport().setEnabled(false);
-                        btnPanel.getBtnAddComment().setEnabled(false);
                     }
                 }
             }
-            btnPanel.getBtnRefresh().setSelected(false);
-            btnPanel.getBtnAddComment().setSelected(false);
-            btnPanel.getBtnFixBugReport().setSelected(false);
-            btnPanel.getBtnInvalidateBugReport().setSelected(false);
-            btnPanel.getBtnReOpenBugReport().setSelected(false);
         }
-        /* enable fired button */
-        if (btnFired != null) {
-            btnFired.setEnabled(true);
-            btnFired.setSelected(false);
-        }
+
+        btnPanel.getBtnAddComment().setSelected(false);
+        btnPanel.getBtnAddComment().setFocusable(false);
+        btnPanel.getBtnFixBugReport().setSelected(false);
+        btnPanel.getBtnFixBugReport().setFocusable(false);
+        btnPanel.getBtnInvalidateBugReport().setSelected(false);
+        btnPanel.getBtnInvalidateBugReport().setFocusable(false);
+        btnPanel.getBtnReOpenBugReport().setSelected(false);
+        btnPanel.getBtnReOpenBugReport().setFocusable(false);
+
         /* dispose dialog */
-        dialog.setVisible(false);
         dialog.dispose();
     }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteActionList.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteActionList.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteActionList.java	(revision 25591)
@@ -39,7 +39,8 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustActionUploaderException;
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustPluginState;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
 
 
@@ -53,12 +54,12 @@
  */
 public class ExecuteActionList extends MapdustExecuteAction implements
-        MapdustRefreshObservable {
+        MapdustUpdateObservable {
 
     /** Serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -7487830542214611774L;
 
     /** List of MapdustRefreshObserver objects */
-    private final ArrayList<MapdustRefreshObserver> observers =
-            new ArrayList<MapdustRefreshObserver>();
+    private final ArrayList<MapdustUpdateObserver> observers =
+            new ArrayList<MapdustUpdateObserver>();
 
     /**
@@ -72,6 +73,6 @@
 
     /**
-     * Uploads the content of the action list to the MapDust service. 
-     * 
+     * Uploads the content of the action list to the MapDust service.
+     *
      * @param event The event which fires this action
      */
@@ -81,5 +82,5 @@
             try {
                 MapdustActionUploader.getInstance().uploadData(
-                        getMapdustGUI().getQueuePanel().getActionList());
+                        getMapdustGUI().getMapdustActionList());
             } catch (MapdustActionUploaderException e) {
                 String errorMessage = "There was an error uploading the ";
@@ -88,7 +89,7 @@
                         tr("Error"), JOptionPane.ERROR_MESSAGE);
             }
-            Main.pref.put("mapdust.pluginState", MapdustPluginState.ONLINE.getValue());
-            getMapdustGUI().getPanel().getBtnPanel().getBtnRefresh().setEnabled(true);
-            notifyObservers();
+            Main.pref.put("mapdust.pluginState",
+                    MapdustPluginState.ONLINE.getValue());
+            notifyObservers(null, false);
         }
     }
@@ -100,5 +101,5 @@
      */
     @Override
-    public void addObserver(MapdustRefreshObserver observer) {
+    public void addObserver(MapdustUpdateObserver observer) {
         if (!this.observers.contains(observer)) {
             this.observers.add(observer);
@@ -112,5 +113,5 @@
      */
     @Override
-    public void removeObserver(MapdustRefreshObserver observer) {
+    public void removeObserver(MapdustUpdateObserver observer) {
         this.observers.remove(observer);
     }
@@ -120,8 +121,8 @@
      */
     @Override
-    public void notifyObservers() {
-        Iterator<MapdustRefreshObserver> elements = this.observers.iterator();
+    public void notifyObservers(MapdustBugFilter filter, boolean first) {
+        Iterator<MapdustUpdateObserver> elements = this.observers.iterator();
         while (elements.hasNext()) {
-            (elements.next()).refreshData();
+            (elements.next()).update(filter, false);
         }
     }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteAddBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteAddBug.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteAddBug.java	(revision 25591)
@@ -39,6 +39,6 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.CreateIssueDialog;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObservable;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObserver;
@@ -64,16 +64,16 @@
  */
 public class ExecuteAddBug extends MapdustExecuteAction implements
-        MapdustBugObservable, MapdustActionListObservable {
+        MapdustBugObservable, MapdustActionObservable {
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-
-    /** The list of Mapdust bug observers */
+    private static final long serialVersionUID = 8023875766573474513L;
+
+    /** The list of MapDust bug observers */
     private final ArrayList<MapdustBugObserver> bugObservers =
             new ArrayList<MapdustBugObserver>();
 
-    /** The list of Mapdust action observers */
-    private final ArrayList<MapdustActionListObserver> actionObservers =
-            new ArrayList<MapdustActionListObserver>();
+    /** The list of MapDust action observers */
+    private final ArrayList<MapdustActionObserver> actionObservers =
+            new ArrayList<MapdustActionObserver>();
 
     /**
@@ -97,5 +97,5 @@
      * are valid. Otherwise a corresponding warning message will be shown to the
      * user.
-     * 
+     *
      * @param event The action event which fires this action
      */
@@ -122,17 +122,19 @@
                 latlon = Main.map.mapView.getLatLon(p.x, p.y);
             }
-            MapdustBug bug = new MapdustBug(latlon, type, commentText, nickname);
+            MapdustBug bug = new MapdustBug(latlon, type, commentText,
+                    nickname);
             String pluginState = Main.pref.get("mapdust.pluginState");
             if (pluginState.equals(MapdustPluginState.OFFLINE.getValue())) {
                 /* offline state */
-                int index = getSelectedBugIndex();
                 bug.setStatus(Status.OPEN);
                 String iconPath = getIconPath(bug);
                 MapdustAction mapdustAction = new MapdustAction(
                         MapdustServiceCommand.ADD_BUG, iconPath, bug);
-                if (getMapdustGUI().getQueuePanel() != null) {
+                /* destroy dialog */
+                getDialog().dispose();
+                mapdustGUI.enableBtnPanel(false);
+                if (getMapdustGUI().getActionPanel() != null) {
                     notifyObservers(mapdustAction);
                 }
-                resetSelectedBug(index);
             } else {
                 /* online state */
@@ -143,5 +145,5 @@
                 } catch (MapdustServiceHandlerException e) {
                     errorMessage = "There was a Mapdust service error.";
-                    JOptionPane.showMessageDialog(Main.parent, tr(errorMessage), 
+                    JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
                             tr("Error"), JOptionPane.ERROR_MESSAGE);
                 }
@@ -153,16 +155,16 @@
                     } catch (MapdustServiceHandlerException e) {
                         errorMessage = "There was a Mapdust service error.";
-                        JOptionPane.showMessageDialog(Main.parent, tr(errorMessage), 
-                                tr("Error"), JOptionPane.ERROR_MESSAGE);
+                        JOptionPane.showMessageDialog(Main.parent,
+                                tr(errorMessage), tr("Error"),
+                                JOptionPane.ERROR_MESSAGE);
                     }
+                    /* destroy dialog */
+                    getDialog().dispose();
+                    mapdustGUI.enableBtnPanel(false);
                     if (newMapdustBug != null) {
                         notifyObservers(newMapdustBug);
                     }
                 }
-                resetSelectedBug(0);
             }
-            /* destroy dialog */
-            getDialog().dispose();
-            return;
         }
     }
@@ -209,5 +211,5 @@
      */
     @Override
-    public void addObserver(MapdustActionListObserver observer) {
+    public void addObserver(MapdustActionObserver observer) {
         if (!this.actionObservers.contains(observer)) {
             this.actionObservers.add(observer);
@@ -222,5 +224,5 @@
      */
     @Override
-    public void removeObserver(MapdustActionListObserver observer) {
+    public void removeObserver(MapdustActionObserver observer) {
         this.actionObservers.remove(observer);
 
@@ -234,5 +236,5 @@
     @Override
     public void notifyObservers(MapdustAction mapdustAction) {
-        Iterator<MapdustActionListObserver> elements =
+        Iterator<MapdustActionObserver> elements =
                 this.actionObservers.iterator();
         while (elements.hasNext()) {
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCancel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCancel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCancel.java	(revision 25591)
@@ -47,5 +47,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 5357125707042485489L;
 
     /**
@@ -67,5 +67,5 @@
     /**
      * Cancels the executed action, and closes the visible dialog window.
-     * 
+     *
      * @param event The action event which fires this action
      */
@@ -76,7 +76,9 @@
             String status = Main.pref.get("selectedBug.status");
             /* enable buttons */
-            MapdustButtonPanel btnPanel = getMapdustGUI().getPanel().getBtnPanel();
+            MapdustButtonPanel btnPanel =
+                    getMapdustGUI().getPanel().getBtnPanel();
             if (btnPanel != null) {
                 btnPanel.getBtnWorkOffline().setEnabled(true);
+                btnPanel.getBtnWorkOffline().setFocusable(false);
                 btnPanel.getBtnWorkOffline().setSelected(false);
                 if (pluginState.equals(MapdustPluginState.OFFLINE.getValue())) {
@@ -102,21 +104,28 @@
                                     false);
                             btnPanel.getBtnReOpenBugReport().setEnabled(true);
-
                             btnPanel.getBtnAddComment().setEnabled(true);
                         } else {
-                            // created bug, then close dialog
-                            btnPanel.getBtnFixBugReport().setEnabled(false);
-                            btnPanel.getBtnInvalidateBugReport().setEnabled(
-                                    false);
-                            btnPanel.getBtnReOpenBugReport().setEnabled(false);
-                            btnPanel.getBtnAddComment().setEnabled(false);
+                            if (!status.isEmpty()) {
+                                btnPanel.getBtnFixBugReport().setEnabled(false);
+                                btnPanel.getBtnInvalidateBugReport()
+                                        .setEnabled(false);
+                                btnPanel.getBtnReOpenBugReport().setEnabled(
+                                        false);
+                                btnPanel.getBtnAddComment().setEnabled(false);
+                            }
                         }
                     }
                 }
-                btnPanel.getBtnRefresh().setSelected(false);
+                btnPanel.getBtnFilter().setEnabled(true);
+                btnPanel.getBtnFilter().setSelected(false);
+                btnPanel.getBtnFilter().setFocusable(false);
                 btnPanel.getBtnAddComment().setSelected(false);
+                btnPanel.getBtnAddComment().setFocusable(false);
                 btnPanel.getBtnFixBugReport().setSelected(false);
+                btnPanel.getBtnFixBugReport().setFocusable(false);
                 btnPanel.getBtnInvalidateBugReport().setSelected(false);
+                btnPanel.getBtnInvalidateBugReport().setFocusable(false);
                 btnPanel.getBtnReOpenBugReport().setSelected(false);
+                btnPanel.getBtnReOpenBugReport().setFocusable(false);
             }
         }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCloseBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCloseBug.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCloseBug.java	(revision 25591)
@@ -38,6 +38,6 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.ChangeIssueStatusDialog;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObservable;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObserver;
@@ -63,8 +63,8 @@
  */
 public class ExecuteCloseBug extends MapdustExecuteAction implements
-        MapdustBugObservable, MapdustActionListObservable {
+        MapdustBugObservable, MapdustActionObservable {
 
     /** Serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 3468827127588061014L;
 
     /** The list of Mapdust bug observers */
@@ -73,6 +73,6 @@
 
     /** The list of Mapdust action observers */
-    private final ArrayList<MapdustActionListObserver> actionObservers =
-            new ArrayList<MapdustActionListObserver>();
+    private final ArrayList<MapdustActionObserver> actionObservers =
+            new ArrayList<MapdustActionObserver>();
 
     /**
@@ -95,5 +95,5 @@
      * Closes the given MapDust bug. If the entered informations are invalid a
      * corresponding warning message will be displayed.
-     * 
+     *
      * @param event The action event which fires this action
      */
@@ -118,5 +118,5 @@
                 /* valid input data */
                 Main.pref.put("mapdust.nickname", nickname);
-                MapdustBug selectedBug = getSelectedBug();
+                MapdustBug selectedBug = mapdustGUI.getSelectedBug();
                 MapdustComment comment = new MapdustComment(selectedBug.getId(),
                         commentText, nickname);
@@ -129,5 +129,9 @@
                             MapdustServiceCommand.CHANGE_BUG_STATUS, iconPath,
                             selectedBug, comment, 2);
-                    if (getMapdustGUI().getQueuePanel() != null) {
+                    /* destroy dialog */
+                    enableFiredButton(issueDialog.getFiredButton());
+                    mapdustGUI.enableBtnPanel(false);
+                    issueDialog.dispose();
+                    if (getMapdustGUI().getActionPanel()!= null) {
                         notifyObservers(mapdustAction);
                     }
@@ -140,6 +144,7 @@
                     } catch (MapdustServiceHandlerException e) {
                         errorMessage = "There was a Mapdust service error.";
-                        JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
-                                tr("Error"), JOptionPane.ERROR_MESSAGE);
+                        JOptionPane.showMessageDialog(Main.parent,
+                                tr(errorMessage), tr("Error"),
+                                JOptionPane.ERROR_MESSAGE);
                     }
                     if (id != null) {
@@ -147,10 +152,16 @@
                         MapdustBug newMapdustBug = null;
                         try {
-                            newMapdustBug = handler.getBug(selectedBug.getId(), null);
+                            newMapdustBug = handler.getBug(selectedBug.getId(),
+                                    null);
                         } catch (MapdustServiceHandlerException e) {
                             errorMessage = "There was a Mapdust service error.";
-                            JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
-                                    tr("Error"), JOptionPane.ERROR_MESSAGE);
+                            JOptionPane.showMessageDialog(Main.parent,
+                                    tr(errorMessage), tr("Error"),
+                                    JOptionPane.ERROR_MESSAGE);
                         }
+                        /* destroy dialog */
+                        enableFiredButton(issueDialog.getFiredButton());
+                        mapdustGUI.enableBtnPanel(false);
+                        issueDialog.dispose();
                         if (newMapdustBug != null) {
                             notifyObservers(newMapdustBug);
@@ -158,9 +169,4 @@
                     }
                 }
-                /* enable buttons */
-                enableFiredButton(issueDialog.getFiredButton());
-                resetSelectedBug(0);
-                /* destroy dialog */
-                issueDialog.dispose();
             }
         }
@@ -185,5 +191,5 @@
      */
     @Override
-    public void addObserver(MapdustActionListObserver observer) {
+    public void addObserver(MapdustActionObserver observer) {
         if (!this.actionObservers.contains(observer)) {
             this.actionObservers.add(observer);
@@ -201,11 +207,13 @@
 
     }
-    /**
-     * Removes the MapDust action list observer object from the list of observers.
+
+    /**
+     * Removes the MapDust action list observer object from the list of
+     * observers.
      *
      * @param observer The <code>MapdustActionListObserver</code> object
      */
     @Override
-    public void removeObserver(MapdustActionListObserver observer) {
+    public void removeObserver(MapdustActionObserver observer) {
         this.actionObservers.remove(observer);
 
@@ -228,5 +236,5 @@
     @Override
     public void notifyObservers(MapdustAction mapdustAction) {
-        Iterator<MapdustActionListObserver> elements =
+        Iterator<MapdustActionObserver> elements =
                 this.actionObservers.iterator();
         while (elements.hasNext()) {
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCommentBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCommentBug.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteCommentBug.java	(revision 25591)
@@ -38,6 +38,6 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.CommentIssueDialog;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObservable;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObserver;
@@ -54,5 +54,5 @@
  * Comments the given <code>MapdustBug</code> object. Validates the input data,
  * and based on the plugin state executes the corresponding action. If the
- * plugin is in the "ONLINE" state then executes the Mapdust Service
+ * plugin is in the "ONLINE" state then executes the MapDust Service
  * 'commentBug' method with the given input parameters. If the plugin is in the
  * "OFFLINE" state then the given action is added to the actions list.
@@ -62,16 +62,16 @@
  */
 public class ExecuteCommentBug extends MapdustExecuteAction implements
-        MapdustBugObservable, MapdustActionListObservable {
+        MapdustBugObservable, MapdustActionObservable {
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-
-    /** The list of Mapdust bug observers */
+    private static final long serialVersionUID = 4391634740784919337L;
+
+    /** The list of MapDust bug observers */
     private final ArrayList<MapdustBugObserver> bugObservers =
             new ArrayList<MapdustBugObserver>();
 
     /** The list of mapdust action observers */
-    private final ArrayList<MapdustActionListObserver> actionObservers =
-            new ArrayList<MapdustActionListObserver>();
+    private final ArrayList<MapdustActionObserver> actionObservers =
+            new ArrayList<MapdustActionObserver>();
 
     /**
@@ -94,5 +94,5 @@
      * Creates a comment for the given MapDust bug. If the entered informations
      * are invalid a corresponding warning message will be displayed.
-     * 
+     *
      * @param event The action event which fires this action
      */
@@ -117,5 +117,5 @@
                 /* valid */
                 Main.pref.put("mapdust.nickname", nickname);
-                MapdustBug selectedBug = getSelectedBug();
+                MapdustBug selectedBug = mapdustGUI.getSelectedBug();
                 MapdustComment comment = new MapdustComment(selectedBug.getId(),
                         commentText, nickname);
@@ -127,5 +127,6 @@
                             MapdustServiceCommand.COMMENT_BUG, iconPath,
                             selectedBug, comment);
-                    if (getMapdustGUI().getQueuePanel() != null) {
+                    if (getMapdustGUI().getActionPanel() != null) {
+                        issueDialog.dispose();
                         notifyObservers(mapdustAction);
                     }
@@ -138,6 +139,7 @@
                     } catch (MapdustServiceHandlerException e) {
                         errorMessage = "There was a Mapdust service error.";
-                        JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
-                                tr("Error"), JOptionPane.ERROR_MESSAGE);
+                        JOptionPane.showMessageDialog(Main.parent,
+                                tr(errorMessage), tr("Error"),
+                                JOptionPane.ERROR_MESSAGE);
                     }
                     if (id != null) {
@@ -145,5 +147,6 @@
                         MapdustBug newMapdustBug = null;
                         try {
-                            newMapdustBug = handler.getBug(selectedBug.getId(), null);
+                            newMapdustBug = handler.getBug(selectedBug.getId(),
+                                    null);
                         } catch (MapdustServiceHandlerException e) {
                             errorMessage = "There was a Mapdust service error.";
@@ -159,5 +162,6 @@
                 /* enable buttons */
                 enableFiredButton(issueDialog.getFiredButton());
-                resetSelectedBug(0);
+                mapdustGUI.enableBtnPanel(false);
+                mapdustGUI.getPanel().resetSelectedBug(0);
                 /* destroy dialog */
                 issueDialog.dispose();
@@ -184,5 +188,5 @@
      */
     @Override
-    public void addObserver(MapdustActionListObserver observer) {
+    public void addObserver(MapdustActionObserver observer) {
         if (!this.actionObservers.contains(observer)) {
             this.actionObservers.add(observer);
@@ -202,10 +206,11 @@
 
     /**
-     * Removes the MapDust action list observer object from the list of observers.
+     * Removes the MapDust action list observer object from the list of
+     * observers.
      *
      * @param observer The <code>MapdustActionListObserver</code> object
      */
     @Override
-    public void removeObserver(MapdustActionListObserver observer) {
+    public void removeObserver(MapdustActionObserver observer) {
         this.actionObservers.remove(observer);
     }
@@ -227,5 +232,5 @@
     @Override
     public void notifyObservers(MapdustAction mapdustAction) {
-        Iterator<MapdustActionListObserver> elements =
+        Iterator<MapdustActionObserver> elements =
                 this.actionObservers.iterator();
         while (elements.hasNext()) {
@@ -233,4 +238,4 @@
         }
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteFilterBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteFilterBug.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteFilterBug.java	(revision 25591)
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 10, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.action.execute;
+
+
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.JButton;
+import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.FilterBugDialog;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObserver;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
+
+
+/**
+ * Filters the MapDust bugs from the given area based on the selected filters.
+ * The filters can be based on the status, type or description of the bugs.
+ *
+ * @author Bea
+ */
+public class ExecuteFilterBug extends MapdustExecuteAction implements
+        MapdustUpdateObservable {
+
+    /** The serial version UID */
+    private static final long serialVersionUID = -2724396161610512502L;
+
+    /** The list MapDustBug filter observers */
+    private final ArrayList<MapdustUpdateObserver> observers =
+            new ArrayList<MapdustUpdateObserver>();
+
+    /**
+     * Builds a <code>ExecuteFilterBug</code> object.
+     */
+    public ExecuteFilterBug() {}
+
+    /**
+     * Builds a <code>ExecuteFilterBug</code> object based on the given
+     * arguments.
+     *
+     * @param dialog The MapDust filter bug dialog window
+     * @param mapdustGUI The <code>MapdustGUI</code> object
+     */
+    public ExecuteFilterBug(FilterBugDialog dialog, MapdustGUI mapdustGUI) {
+        setDialog(dialog);
+        setMapdustGUI(mapdustGUI);
+    }
+
+    /**
+     * Applies the selected filters for the MapDust bugs from the current view.
+     *
+     * @param event The action event which fires this action
+     */
+    @Override
+    public void actionPerformed(ActionEvent event) {
+        if (event.getSource() instanceof JButton) {
+            JButton btn = (JButton) event.getSource();
+            if (btn.getText().equals("Apply")) {
+                /* pressed apply */
+                FilterBugDialog dialog = (FilterBugDialog) getDialog();
+                /* get the selected type filters */
+                List<String> types = dialog.getCheckedTypes();
+                /* get the selected status filters */
+                List<Integer> statuses = dialog.getCheckedStatuses();
+                /* get the selected description filter */
+                boolean descr = dialog.isDescrFilterChecked();
+                /* notifies the observers about the filters */
+                notifyObservers(new MapdustBugFilter(statuses, types, descr),
+                        false);
+                enableFiredButton(dialog.getFiredButton());
+                mapdustGUI.enableBtnPanel(false);
+                /* destroy dialog */
+                dialog.dispose();
+            }
+        }
+    }
+
+    /**
+     * Adds a new MapDust bug filter observer to the list of observers.
+     *
+     * @param observer The <code>MapdustBugFilterObserver</code> object
+     */
+    @Override
+    public void addObserver(MapdustUpdateObserver observer) {
+        if (!this.observers.contains(observer)) {
+            this.observers.add(observer);
+        }
+    }
+
+    /**
+     * Removes the MapDust bug filter observer object from the list of
+     * observers.
+     *
+     * @param observer The <code>MapdustBugFilterObserver</code> object
+     */
+    @Override
+    public void removeObserver(MapdustUpdateObserver observer) {
+        this.observers.remove(observer);
+    }
+
+    /**
+     * Notifies the observers observing this action.
+     *
+     * @param filter The <code>MapdustBugFilter</code> object
+     */
+    @Override
+    public void notifyObservers(MapdustBugFilter filter, boolean first) {
+        Iterator<MapdustUpdateObserver> elements = this.observers.iterator();
+        while (elements.hasNext()) {
+            (elements.next()).update(filter, false);
+        }
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteInvalidateBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteInvalidateBug.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteInvalidateBug.java	(revision 25591)
@@ -38,6 +38,6 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.ChangeIssueStatusDialog;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObservable;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObserver;
@@ -64,8 +64,8 @@
  */
 public class ExecuteInvalidateBug extends MapdustExecuteAction implements
-        MapdustBugObservable, MapdustActionListObservable {
+        MapdustBugObservable, MapdustActionObservable {
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 542699469544481797L;
 
     /** The list of mapdust bug observers */
@@ -74,6 +74,6 @@
 
     /** The list of mapdust action observers */
-    private final ArrayList<MapdustActionListObserver> actionObservers =
-            new ArrayList<MapdustActionListObserver>();
+    private final ArrayList<MapdustActionObserver> actionObservers =
+            new ArrayList<MapdustActionObserver>();
 
     /**
@@ -98,5 +98,5 @@
      * Invalidates the given MapDust bug. If the entered informations are
      * invalid a corresponding warning message will be displayed.
-     * 
+     *
      * @param event The action event which fires this action
      */
@@ -115,5 +115,5 @@
                 if (errorMessage != null) {
                     /* invalid input */
-                    JOptionPane.showMessageDialog(Main.parent, tr(errorMessage), 
+                    JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
                             tr("Missing input data"), JOptionPane.WARNING_MESSAGE);
                     return;
@@ -121,6 +121,6 @@
                 /* valid input */
                 Main.pref.put("mapdust.nickname", nickname);
-                MapdustBug selectedBug = getSelectedBug();
-                MapdustComment comment = new MapdustComment(selectedBug.getId(), 
+                MapdustBug selectedBug = mapdustGUI.getSelectedBug();
+                MapdustComment comment = new MapdustComment(selectedBug.getId(),
                         commentText, nickname);
                 String pluginState = Main.pref.get("mapdust.pluginState");
@@ -130,7 +130,13 @@
                     String iconPath = getIconPath(selectedBug);
                     MapdustAction mapdustAction = new MapdustAction(
-                            MapdustServiceCommand.CHANGE_BUG_STATUS, iconPath, 
+                            MapdustServiceCommand.CHANGE_BUG_STATUS, iconPath,
                             selectedBug, comment, 3);
-                    if (getMapdustGUI().getQueuePanel() != null) {
+                    /* destroy dialog */
+
+                    /* enable buttons */
+                    mapdustGUI.enableBtnPanel(false);
+                    enableFiredButton(issueDialog.getFiredButton());
+                    issueDialog.dispose();
+                    if (getMapdustGUI().getActionPanel() != null) {
                         notifyObservers(mapdustAction);
                     }
@@ -143,5 +149,5 @@
                     } catch (MapdustServiceHandlerException e) {
                         errorMessage = "There was a Mapdust service error.";
-                        JOptionPane.showMessageDialog(Main.parent, 
+                        JOptionPane.showMessageDialog(Main.parent,
                                 tr(errorMessage), tr("Error"),
                                 JOptionPane.ERROR_MESSAGE);
@@ -151,13 +157,20 @@
                         MapdustBug newMapdustBug = null;
                         try {
-                            newMapdustBug = handler.getBug(selectedBug.getId(), 
+                            newMapdustBug = handler.getBug(selectedBug.getId(),
                                     null);
                         } catch (MapdustServiceHandlerException e) {
                             errorMessage = "There was a Mapdust service error.";
                             errorMessage += "Mapdust bug report.";
-                            JOptionPane.showMessageDialog(Main.parent, 
+                            JOptionPane.showMessageDialog(Main.parent,
                                     tr(errorMessage), tr("Error"),
                                     JOptionPane.ERROR_MESSAGE);
                         }
+                        /* destroy dialog */
+
+                        /* enable buttons */
+                        enableFiredButton(issueDialog.getFiredButton());
+                        mapdustGUI.enableBtnPanel(false);
+                        issueDialog.dispose();
+
                         if (newMapdustBug != null) {
                             notifyObservers(newMapdustBug);
@@ -165,9 +178,5 @@
                     }
                 }
-                /* enable buttons */
-                enableFiredButton(issueDialog.getFiredButton());
-                resetSelectedBug(0);
-                /* destroy dialog */
-                issueDialog.dispose();
+
             }
         }
@@ -192,5 +201,5 @@
      */
     @Override
-    public void addObserver(MapdustActionListObserver observer) {
+    public void addObserver(MapdustActionObserver observer) {
         if (!this.actionObservers.contains(observer)) {
             this.actionObservers.add(observer);
@@ -215,5 +224,5 @@
      */
     @Override
-    public void removeObserver(MapdustActionListObserver observer) {
+    public void removeObserver(MapdustActionObserver observer) {
         this.actionObservers.remove(observer);
 
@@ -236,5 +245,5 @@
     @Override
     public void notifyObservers(MapdustAction mapdustAction) {
-        Iterator<MapdustActionListObserver> elements =
+        Iterator<MapdustActionObserver> elements =
                 this.actionObservers.iterator();
         while (elements.hasNext()) {
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteReOpenBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteReOpenBug.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteReOpenBug.java	(revision 25591)
@@ -38,6 +38,6 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.ChangeIssueStatusDialog;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionListObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustActionObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObservable;
 import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugObserver;
@@ -64,16 +64,16 @@
  */
 public class ExecuteReOpenBug extends MapdustExecuteAction implements
-        MapdustBugObservable, MapdustActionListObservable {
+        MapdustBugObservable, MapdustActionObservable {
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-
-    /** The list of mapdust bug observers */
+    private static final long serialVersionUID = 8275121997644127251L;
+
+    /** The list of MapDust bug observers */
     private final ArrayList<MapdustBugObserver> bugObservers =
             new ArrayList<MapdustBugObserver>();
 
-    /** The list of mapdust action observers */
-    private final ArrayList<MapdustActionListObserver> actionObservers =
-            new ArrayList<MapdustActionListObserver>();
+    /** The list of MapDust action observers */
+    private final ArrayList<MapdustActionObserver> actionObservers =
+            new ArrayList<MapdustActionObserver>();
 
     /**
@@ -95,5 +95,5 @@
 
     /**
-     * 
+     *
      * @param event The event which fires this action
      */
@@ -112,15 +112,13 @@
                 if (errorMessage != null) {
                     /* invalid data */
-                    JOptionPane.showMessageDialog(Main.parent,
-                            tr(errorMessage), tr("Missing input data"),
-                            JOptionPane.WARNING_MESSAGE);
+                    JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
+                            tr("Missing input data"), JOptionPane.WARNING_MESSAGE);
                     return;
                 }
                 /* valid */
                 Main.pref.put("mapdust.nickname", nickname);
-                MapdustBug selectedBug = getSelectedBug();
-                MapdustComment comment =
-                        new MapdustComment(selectedBug.getId(), commentText,
-                                nickname);
+                MapdustBug selectedBug = mapdustGUI.getSelectedBug();
+                MapdustComment comment = new MapdustComment(selectedBug.getId(),
+                        commentText, nickname);
                 String pluginState = Main.pref.get("mapdust.pluginState");
                 if (pluginState.equals(MapdustPluginState.OFFLINE.getValue())) {
@@ -128,13 +126,16 @@
                     selectedBug.setStatus(Status.OPEN);
                     String iconPath = getIconPath(selectedBug);
-                    MapdustAction mapdustAction =
-                            new MapdustAction(
-                                    MapdustServiceCommand.CHANGE_BUG_STATUS,
-                                    iconPath, selectedBug, comment, 1);
-                    if (getMapdustGUI().getQueuePanel() != null) {
+                    MapdustAction mapdustAction = new MapdustAction(
+                            MapdustServiceCommand.CHANGE_BUG_STATUS, iconPath,
+                            selectedBug, comment, 1);
+                    /* destroy dialog */
+                    mapdustGUI.enableBtnPanel(false);
+                    enableFiredButton(issueDialog.getFiredButton());
+                    issueDialog.dispose();
+                    if (getMapdustGUI().getActionPanel() != null) {
                         notifyObservers(mapdustAction);
                     }
                 } else {
-                    /* online, call Mapdust service method */
+                    /* online, call MapDust service method */
                     MapdustServiceHandler handler = new MapdustServiceHandler();
                     Long id = null;
@@ -149,9 +150,8 @@
                     }
                     if (id != null) {
-                        // success
                         MapdustBug newMapdustBug = null;
                         try {
-                            newMapdustBug =
-                                    handler.getBug(selectedBug.getId(), null);
+                            newMapdustBug = handler.getBug(selectedBug.getId(),
+                                    null);
                         } catch (MapdustServiceHandlerException e) {
                             errorMessage = "There was a Mapdust service error.";
@@ -161,4 +161,7 @@
                                     JOptionPane.ERROR_MESSAGE);
                         }
+                        mapdustGUI.enableBtnPanel(false);
+                        enableFiredButton(issueDialog.getFiredButton());
+                        issueDialog.dispose();
                         if (newMapdustBug != null) {
                             notifyObservers(newMapdustBug);
@@ -166,9 +169,4 @@
                     }
                 }
-                /* enable buttons */
-                enableFiredButton(issueDialog.getFiredButton());
-                resetSelectedBug(0);
-                /* destroy dialog */
-                issueDialog.dispose();
             }
         }
@@ -193,5 +191,5 @@
      */
     @Override
-    public void addObserver(MapdustActionListObserver observer) {
+    public void addObserver(MapdustActionObserver observer) {
         if (!this.actionObservers.contains(observer)) {
             this.actionObservers.add(observer);
@@ -211,10 +209,11 @@
 
     /**
-     * Removes the MapDust action list observer object from the list of observers.
+     * Removes the MapDust action list observer object from the list of
+     * observers.
      *
      * @param observer The <code>MapdustActionListObserver</code> object
      */
     @Override
-    public void removeObserver(MapdustActionListObserver observer) {
+    public void removeObserver(MapdustActionObserver observer) {
         this.actionObservers.remove(observer);
 
@@ -237,5 +236,5 @@
     @Override
     public void notifyObservers(MapdustAction mapdustAction) {
-        Iterator<MapdustActionListObserver> elements =
+        Iterator<MapdustActionObserver> elements =
                 this.actionObservers.iterator();
         while (elements.hasNext()) {
@@ -243,4 +242,4 @@
         }
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteRefresh.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteRefresh.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteRefresh.java	(revision 25591)
@@ -35,6 +35,7 @@
 import javax.swing.JToggleButton;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObserver;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
 
 
@@ -47,12 +48,12 @@
  */
 public class ExecuteRefresh extends AbstractAction implements
-        MapdustRefreshObservable {
+        MapdustUpdateObservable {
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1507634893685333278L;
 
     /** The list of MapDust refresh observers */
-    private final ArrayList<MapdustRefreshObserver> observers =
-            new ArrayList<MapdustRefreshObserver>();
+    private final ArrayList<MapdustUpdateObserver> observers =
+            new ArrayList<MapdustUpdateObserver>();
 
     /**
@@ -62,6 +63,6 @@
 
     /**
-     * Updates the Mapdust data.
-     * 
+     * Updates the MapDust data.
+     *
      * @param event The event which fires this action
      */
@@ -72,6 +73,7 @@
             /* update the bugs */
             Main.pref.put("mapdust.showError", true);
-            notifyObservers();
+            notifyObservers(null, false);
             btn.setSelected(false);
+            btn.setFocusable(false);
         }
     }
@@ -83,5 +85,5 @@
      */
     @Override
-    public void addObserver(MapdustRefreshObserver observer) {
+    public void addObserver(MapdustUpdateObserver observer) {
         if (!this.observers.contains(observer)) {
             this.observers.add(observer);
@@ -95,5 +97,5 @@
      */
     @Override
-    public void removeObserver(MapdustRefreshObserver observer) {
+    public void removeObserver(MapdustUpdateObserver observer) {
         this.observers.remove(observer);
     }
@@ -103,10 +105,10 @@
      */
     @Override
-    public void notifyObservers() {
-        Iterator<MapdustRefreshObserver> elements = this.observers.iterator();
+    public void notifyObservers(MapdustBugFilter filter, boolean first) {
+        Iterator<MapdustUpdateObserver> elements = this.observers.iterator();
         while (elements.hasNext()) {
-            (elements.next()).refreshData();
+            (elements.next()).update(filter, false);
         }
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteWorkOffline.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteWorkOffline.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/ExecuteWorkOffline.java	(revision 25591)
@@ -39,11 +39,12 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustActionUploaderException;
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObservable;
-import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustRefreshObserver;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustUpdateObserver;
 import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustPluginState;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
 
 
 /**
- * Executes the work offline action. In the offline mode the user actions will
+ * Executes the "work offline" action. In the offline mode the user actions will
  * not be uploaded immediately to the MapDust service. The user can perform the
  * following actions in offline mode: add bug, comment bug and change bug
@@ -55,12 +56,12 @@
  */
 public class ExecuteWorkOffline extends MapdustExecuteAction implements
-        MapdustRefreshObservable {
+        MapdustUpdateObservable {
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 8792828131813689548L;
 
-    /** The list of mapdust refresh observers */
-    private final ArrayList<MapdustRefreshObserver> observers =
-            new ArrayList<MapdustRefreshObserver>();
+    /** The list of MapDust refresh observers */
+    private final ArrayList<MapdustUpdateObserver> observers =
+            new ArrayList<MapdustUpdateObserver>();
 
     /**
@@ -81,5 +82,5 @@
     /**
      * Sets the 'offline' mode for the plugin.
-     * 
+     *
      * @param event The event which fires this action
      */
@@ -102,10 +103,10 @@
                             tr(message), tr(title), JOptionPane.YES_NO_OPTION);
                     if (result == JOptionPane.YES_OPTION) {
-                        // process data
                         try {
                             MapdustActionUploader.getInstance().uploadData(
-                                    getMapdustGUI().getQueuePanel().getActionList());
+                                    getMapdustGUI().getMapdustActionList());
                         } catch (MapdustActionUploaderException e) {
-                            String errorMessage = "There was a Mapdust service error.";
+                            String errorMessage = "There was a Mapdust service";
+                            errorMessage+=" error.";
                             JOptionPane.showMessageDialog(Main.parent,
                                     tr(errorMessage), tr("Error"),
@@ -117,5 +118,5 @@
                     btn.setSelected(false);
                 }
-                notifyObservers();
+                notifyObservers(null, false);
             }
         }
@@ -128,5 +129,5 @@
      */
     @Override
-    public void addObserver(MapdustRefreshObserver observer) {
+    public void addObserver(MapdustUpdateObserver observer) {
         if (!this.observers.contains(observer)) {
             this.observers.add(observer);
@@ -140,5 +141,5 @@
      */
     @Override
-    public void removeObserver(MapdustRefreshObserver observer) {
+    public void removeObserver(MapdustUpdateObserver observer) {
         this.observers.remove(observer);
     }
@@ -148,10 +149,10 @@
      */
     @Override
-    public void notifyObservers() {
-        Iterator<MapdustRefreshObserver> elements = this.observers.iterator();
+    public void notifyObservers(MapdustBugFilter filter, boolean first) {
+        Iterator<MapdustUpdateObserver> elements = this.observers.iterator();
         while (elements.hasNext()) {
-            (elements.next()).refreshData();
+            (elements.next()).update(filter, false);
         }
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/MapdustExecuteAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/MapdustExecuteAction.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/MapdustExecuteAction.java	(revision 25591)
@@ -30,5 +30,4 @@
 
 import javax.swing.AbstractAction;
-import javax.swing.JList;
 import javax.swing.JToggleButton;
 import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
@@ -47,5 +46,5 @@
 
     /** Serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 4318259806647818543L;
 
     /** The abstract dialog object */
@@ -113,36 +112,4 @@
 
     /**
-     * Returns the selected MapDust bug from the MapDust bugs list.
-     *
-     * @return A <code>MapdustBug</code> object
-     */
-    protected MapdustBug getSelectedBug() {
-        JList listBugs = this.mapdustGUI.getPanel().getListBugs();
-        MapdustBug selectedBug = (MapdustBug) listBugs.getSelectedValue();
-        return selectedBug;
-    }
-
-    /**
-     * Returns the index of the MapDust bug selected from the MapDust bugs list.
-     *
-     * @return index
-     */
-    protected int getSelectedBugIndex() {
-        JList listBugs = this.mapdustGUI.getPanel().getListBugs();
-        int index = listBugs.getSelectedIndex();
-        return index;
-    }
-
-    /**
-     * Sets the given object from the given index to be selected.
-     *
-     * @param index The index of the element from the list of bugs
-     */
-    protected void resetSelectedBug(int index) {
-        JList listBugs = this.mapdustGUI.getPanel().getListBugs();
-        listBugs.setSelectedIndex(index);
-    }
-
-    /**
      * Enables the given button. This button had fired a corresponding action,
      * and after the action finishes, the button need to become enabled.
@@ -152,6 +119,6 @@
     protected void enableFiredButton(JToggleButton button) {
         if (button != null) {
-            button.setEnabled(true);
             button.setSelected(false);
+            button.setFocusable(false);
         }
     }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/execute/package-info.java	(revision 25591)
@@ -1,4 +1,6 @@
 /**
- * Contains the Action classes which handles the user actions.
+ * Contains the action classes which handles the user actions.
+ * Each of these class extends the <code>MapdustExecuteAction</code> abstract
+ * class.
  */
 package org.openstreetmap.josm.plugins.mapdust.gui.action.execute;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/package-info.java	(revision 25591)
@@ -1,4 +1,5 @@
 /**
- * Contains the GUI action classes. 
+ * Contains the MapDust GUI action classes. The action classes are divided
+ * in three main categories: adapter, execute and show.
  */
 package org.openstreetmap.josm.plugins.mapdust.gui.action;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/MapdustShowAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/MapdustShowAction.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/MapdustShowAction.java	(revision 25591)
@@ -44,5 +44,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -4894445690647156702L;
 
     /** The title of the dialog window */
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowCloseBugAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowCloseBugAction.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowCloseBugAction.java	(revision 25591)
@@ -30,4 +30,5 @@
 
 import java.awt.event.ActionEvent;
+import javax.swing.JMenuItem;
 import javax.swing.JToggleButton;
 import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
@@ -37,5 +38,8 @@
 
 /**
- * Displays the close bug action dialog window.
+ * Displays the <code>ChangeIssueStatusDialog</code> dialog window of type
+ * 'close'. This action is executed whenever the user clicks on the
+ * "Close bug report" button or selects the "Close bug" option from the pop-up
+ * menu.
  *
  * @author Bea
@@ -45,5 +49,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 6459224244170352152L;
 
     /**
@@ -53,5 +57,6 @@
 
     /**
-     * Builds a <code>ShowCloseBugAction</code> object
+     * Builds a <code>ShowCloseBugAction</code> object based on the given
+     * argument.
      *
      * @param mapdustPlugin The <code>MapdustPlugin</code> object
@@ -66,4 +71,10 @@
     }
 
+    /**
+     * Builds a <code>ChangeIssueStatusDialog</code> dialog window of type
+     * "close" and displays on the screen.
+     *
+     * @param event The <code>ActionEvent</code> object
+     */
     @Override
     public void actionPerformed(ActionEvent event) {
@@ -72,5 +83,8 @@
             if (event.getSource() instanceof JToggleButton) {
                 btn = (JToggleButton) event.getSource();
-                btn.setEnabled(false);
+            } else {
+                if (event.getSource() instanceof JMenuItem) {
+                    getButtonPanel().getBtnFixBugReport().setSelected(true);
+                }
             }
             disableButtons(getButtonPanel());
@@ -85,12 +99,31 @@
     }
 
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code> according
+     * to the executed action type. The only enabled button will be close bug
+     * report button.
+     *
+     * @param buttonPanel The <code>MapdustButtonPanel</code> object
+     */
     @Override
     void disableButtons(MapdustButtonPanel buttonPanel) {
         buttonPanel.getBtnWorkOffline().setEnabled(false);
+        buttonPanel.getBtnWorkOffline().setSelected(false);
+        buttonPanel.getBtnWorkOffline().setFocusable(false);
         buttonPanel.getBtnRefresh().setEnabled(false);
+        buttonPanel.getBtnRefresh().setSelected(false);
+        buttonPanel.getBtnRefresh().setFocusable(false);
+        buttonPanel.getBtnFilter().setEnabled(false);
+        buttonPanel.getBtnFilter().setSelected(false);
+        buttonPanel.getBtnFilter().setFocusable(false);
         buttonPanel.getBtnAddComment().setEnabled(false);
+        buttonPanel.getBtnAddComment().setSelected(false);
+        buttonPanel.getBtnAddComment().setFocusable(false);
         buttonPanel.getBtnInvalidateBugReport().setEnabled(false);
+        buttonPanel.getBtnInvalidateBugReport().setSelected(false);
+        buttonPanel.getBtnInvalidateBugReport().setFocusable(false);
         buttonPanel.getBtnReOpenBugReport().setEnabled(false);
-
+        buttonPanel.getBtnReOpenBugReport().setSelected(false);
+        buttonPanel.getBtnReOpenBugReport().setFocusable(false);
     }
 
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowCommentBugAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowCommentBugAction.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowCommentBugAction.java	(revision 25591)
@@ -30,4 +30,5 @@
 
 import java.awt.event.ActionEvent;
+import javax.swing.JMenuItem;
 import javax.swing.JToggleButton;
 import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
@@ -37,5 +38,7 @@
 
 /**
- * Displays the comment bug dialog.
+ * Displays the <code>CommentIssueDialog</code> dialog window. This action is
+ * executed whenever the user clicks on the "Create bug report comment" button
+ * or selects the "Add comment" option from the pop-up menu.
  *
  * @author Bea
@@ -45,5 +48,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -8174561825477499474L;
 
     /**
@@ -67,4 +70,10 @@
     }
 
+    /**
+     * Builds a <code>CommentIssueDialog</code> dialog window and displays
+     * on the screen.
+     *
+     * @param event The <code>ActionEvent</code> object
+     */
     @Override
     public void actionPerformed(ActionEvent event) {
@@ -73,5 +82,8 @@
             if (event.getSource() instanceof JToggleButton) {
                 btn = (JToggleButton) event.getSource();
-                btn.setEnabled(false);
+            } else {
+                if (event.getSource() instanceof JMenuItem) {
+                    getButtonPanel().getBtnAddComment().setSelected(true);
+                }
             }
             disableButtons(getButtonPanel());
@@ -85,11 +97,31 @@
     }
 
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code> according
+     * to the executed action type. The only enabled button will be the "Create
+     * bug report comment" button.
+     *
+     * @param buttonPanel The <code>MapdustButtonPanel</code> object
+     */
     @Override
     void disableButtons(MapdustButtonPanel buttonPanel) {
         buttonPanel.getBtnWorkOffline().setEnabled(false);
+        buttonPanel.getBtnWorkOffline().setSelected(false);
+        buttonPanel.getBtnWorkOffline().setFocusable(false);
         buttonPanel.getBtnRefresh().setEnabled(false);
+        buttonPanel.getBtnRefresh().setSelected(false);
+        buttonPanel.getBtnRefresh().setFocusable(false);
+        buttonPanel.getBtnFilter().setEnabled(false);
+        buttonPanel.getBtnFilter().setSelected(false);
+        buttonPanel.getBtnFilter().setFocusable(false);
+        buttonPanel.getBtnInvalidateBugReport().setEnabled(false);
+        buttonPanel.getBtnInvalidateBugReport().setSelected(false);
+        buttonPanel.getBtnInvalidateBugReport().setFocusable(false);
+        buttonPanel.getBtnReOpenBugReport().setEnabled(false);
+        buttonPanel.getBtnReOpenBugReport().setSelected(false);
+        buttonPanel.getBtnReOpenBugReport().setFocusable(false);
         buttonPanel.getBtnFixBugReport().setEnabled(false);
-        buttonPanel.getBtnInvalidateBugReport().setEnabled(false);
-        buttonPanel.getBtnReOpenBugReport().setEnabled(false);
+        buttonPanel.getBtnFixBugReport().setSelected(false);
+        buttonPanel.getBtnFixBugReport().setFocusable(false);
     }
 
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowFilterBugAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowFilterBugAction.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowFilterBugAction.java	(revision 25591)
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 10, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.action.show;
+
+
+import java.awt.event.ActionEvent;
+import javax.swing.JMenuItem;
+import javax.swing.JToggleButton;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.dialog.FilterBugDialog;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.panel.MapdustButtonPanel;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
+
+
+/**
+ * Displays the <code>FilterBugDialog</code> dialog window. This action is
+ * executed whenever the user clicks on the "Filter bug reports" button.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public class ShowFilterBugAction extends MapdustShowAction {
+
+    /** The serial version UID */
+    private static final long serialVersionUID = -5627314630613341777L;
+
+    /**
+     * Builds a <code>ShowFilterBugAction</code> object
+     */
+    public ShowFilterBugAction() {}
+
+    /**
+     * Builds a <code>ShowFilterBugAction</code> object based on the given
+     * arguments.
+     *
+     * @param mapdustPlugin The <code>MapdustPlugin</code> object
+     */
+    public ShowFilterBugAction(MapdustPlugin mapdustPlugin) {
+        setMapdustPlugin(mapdustPlugin);
+        setTitle("Filter bug reports");
+        setIconName("dialogs/mapdust_bug_filter.png");
+    }
+
+    /**
+     * Builds a <code>FilterBugDialog</code> dialog window and displays on the
+     * screen.
+     *
+     * @param event The <code>ActionEvent</code> object
+     */
+    @Override
+    public void actionPerformed(ActionEvent event) {
+        if (event != null) {
+            JToggleButton btn = null;
+            if (event.getSource() instanceof JToggleButton) {
+                btn = (JToggleButton) event.getSource();
+                btn.setSelected(true);
+            } else {
+                if (event.getSource() instanceof JMenuItem) {
+                    getButtonPanel().getBtnFilter().setSelected(true);
+                }
+            }
+            MapdustBug selectedBug =
+                    mapdustPlugin.getMapdustGUI().getSelectedBug();
+            if (selectedBug != null) {
+                Main.pref.put("selectedBug.status", selectedBug.getStatus()
+                        .getValue());
+            } else {
+                Main.pref.put("selectedBug.status", "");
+            }
+            disableButtons(getButtonPanel());
+            FilterBugDialog dialog = new FilterBugDialog(getTitle(),
+                    getIconName(), btn, getMapdustPlugin());
+            dialog.setLocationRelativeTo(null);
+            dialog.getContentPane().setPreferredSize(dialog.getSize());
+            dialog.pack();
+            dialog.setVisible(true);
+        }
+
+    }
+
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code> according
+     * to the executed action type. The only enabled button will be the "Filter
+     * bug reports" button.
+     *
+     * @param buttonPanel The <code>MapdustButtonPanel</code> object
+     */
+    @Override
+    void disableButtons(MapdustButtonPanel buttonPanel) {
+        if (buttonPanel != null) {
+            buttonPanel.getBtnWorkOffline().setEnabled(false);
+            buttonPanel.getBtnWorkOffline().setSelected(false);
+            buttonPanel.getBtnWorkOffline().setFocusable(false);
+            buttonPanel.getBtnRefresh().setEnabled(false);
+            buttonPanel.getBtnRefresh().setSelected(false);
+            buttonPanel.getBtnRefresh().setFocusable(false);
+            buttonPanel.getBtnReOpenBugReport().setEnabled(false);
+            buttonPanel.getBtnReOpenBugReport().setSelected(false);
+            buttonPanel.getBtnReOpenBugReport().setFocusable(false);
+            buttonPanel.getBtnAddComment().setEnabled(false);
+            buttonPanel.getBtnAddComment().setSelected(false);
+            buttonPanel.getBtnAddComment().setFocusable(false);
+            buttonPanel.getBtnInvalidateBugReport().setEnabled(false);
+            buttonPanel.getBtnInvalidateBugReport().setSelected(false);
+            buttonPanel.getBtnInvalidateBugReport().setFocusable(false);
+            buttonPanel.getBtnFixBugReport().setEnabled(false);
+            buttonPanel.getBtnFixBugReport().setSelected(false);
+            buttonPanel.getBtnFixBugReport().setFocusable(false);
+        }
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowInvalidateBugAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowInvalidateBugAction.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowInvalidateBugAction.java	(revision 25591)
@@ -30,4 +30,5 @@
 
 import java.awt.event.ActionEvent;
+import javax.swing.JMenuItem;
 import javax.swing.JToggleButton;
 import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
@@ -37,5 +38,8 @@
 
 /**
- * Displays the invalidate bug dialog.
+ * Displays the <code>ChangeIssueStatusDialog</code> dialog window of type
+ * 'invalidate'. This action is executed whenever the user clicks on the
+ * "Invalidate bug report" button or selects the "Invalidate bug" option from
+ * the pop-up menu.
  *
  * @author Bea
@@ -67,4 +71,10 @@
     }
 
+    /**
+     * Builds a <code>ChangeIssueStatusDialog</code> dialog window of type
+     * "invalidate" and displays on the screen.
+     *
+     * @param event The <code>ActionEvent</code> object
+     */
     @Override
     public void actionPerformed(ActionEvent event) {
@@ -73,5 +83,9 @@
             if (event.getSource() instanceof JToggleButton) {
                 btn = (JToggleButton) event.getSource();
-                btn.setEnabled(false);
+            } else {
+                if (event.getSource() instanceof JMenuItem) {
+                    getButtonPanel().getBtnInvalidateBugReport().setSelected(
+                            true);
+                }
             }
             disableButtons(getButtonPanel());
@@ -86,11 +100,31 @@
     }
 
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code> according
+     * to the executed action type. The only enabled button will be the
+     * "Invalidate bug report" button.
+     *
+     * @param buttonPanel The <code>MapdustButtonPanel</code> object
+     */
     @Override
     void disableButtons(MapdustButtonPanel buttonPanel) {
         buttonPanel.getBtnWorkOffline().setEnabled(false);
+        buttonPanel.getBtnWorkOffline().setSelected(false);
+        buttonPanel.getBtnWorkOffline().setFocusable(false);
         buttonPanel.getBtnRefresh().setEnabled(false);
+        buttonPanel.getBtnRefresh().setSelected(false);
+        buttonPanel.getBtnRefresh().setFocusable(false);
+        buttonPanel.getBtnFilter().setEnabled(false);
+        buttonPanel.getBtnFilter().setSelected(false);
+        buttonPanel.getBtnFilter().setFocusable(false);
         buttonPanel.getBtnAddComment().setEnabled(false);
+        buttonPanel.getBtnAddComment().setSelected(false);
+        buttonPanel.getBtnAddComment().setFocusable(false);
+        buttonPanel.getBtnReOpenBugReport().setEnabled(false);
+        buttonPanel.getBtnReOpenBugReport().setSelected(false);
+        buttonPanel.getBtnReOpenBugReport().setFocusable(false);
         buttonPanel.getBtnFixBugReport().setEnabled(false);
-        buttonPanel.getBtnReOpenBugReport().setEnabled(false);
+        buttonPanel.getBtnFixBugReport().setSelected(false);
+        buttonPanel.getBtnFixBugReport().setFocusable(false);
     }
 
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowReOpenBugAction.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowReOpenBugAction.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/ShowReOpenBugAction.java	(revision 25591)
@@ -30,4 +30,5 @@
 
 import java.awt.event.ActionEvent;
+import javax.swing.JMenuItem;
 import javax.swing.JToggleButton;
 import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
@@ -37,5 +38,8 @@
 
 /**
- * Displays the re-open bug dialog window.
+ * Displays the <code>ChangeIssueStatusDialog</code> dialog window of type
+ * 'reopen'. This action is executed whenever the user clicks on the
+ * "Re-open bug report" button or selects the "Re-open bug" option from
+ * the pop-up menu.
  *
  * @author Bea
@@ -66,4 +70,10 @@
     }
 
+    /**
+     * Builds a <code>ChangeIssueStatusDialog</code> dialog window of type
+     * "re-open" and displays on the screen.
+     *
+     * @param event The <code>ActionEvent</code> object
+     */
     @Override
     public void actionPerformed(ActionEvent event) {
@@ -72,5 +82,7 @@
             if (event.getSource() instanceof JToggleButton) {
                 btn = (JToggleButton) event.getSource();
-                btn.setEnabled(false);
+                btn.setSelected(true);
+            } if (event.getSource() instanceof JMenuItem){
+                getButtonPanel().getBtnReOpenBugReport().setSelected(true);
             }
             disableButtons(getButtonPanel());
@@ -85,12 +97,32 @@
     }
 
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code> according
+     * to the executed action type. The only enabled button will be the
+     * "Re-open bug report" button.
+     *
+     * @param buttonPanel The <code>MapdustButtonPanel</code> object
+     */
     @Override
     void disableButtons(MapdustButtonPanel buttonPanel) {
         if (buttonPanel != null) {
             buttonPanel.getBtnWorkOffline().setEnabled(false);
+            buttonPanel.getBtnWorkOffline().setSelected(false);
+            buttonPanel.getBtnWorkOffline().setFocusable(false);
             buttonPanel.getBtnRefresh().setEnabled(false);
+            buttonPanel.getBtnRefresh().setSelected(false);
+            buttonPanel.getBtnRefresh().setFocusable(false);
+            buttonPanel.getBtnFilter().setEnabled(false);
+            buttonPanel.getBtnFilter().setSelected(false);
+            buttonPanel.getBtnFilter().setFocusable(false);
             buttonPanel.getBtnAddComment().setEnabled(false);
+            buttonPanel.getBtnAddComment().setSelected(false);
+            buttonPanel.getBtnAddComment().setFocusable(false);
+            buttonPanel.getBtnInvalidateBugReport().setEnabled(false);
+            buttonPanel.getBtnInvalidateBugReport().setSelected(false);
+            buttonPanel.getBtnInvalidateBugReport().setFocusable(false);
             buttonPanel.getBtnFixBugReport().setEnabled(false);
-            buttonPanel.getBtnInvalidateBugReport().setEnabled(false);
+            buttonPanel.getBtnFixBugReport().setSelected(false);
+            buttonPanel.getBtnFixBugReport().setFocusable(false);
         }
     }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/action/show/package-info.java	(revision 25591)
@@ -1,4 +1,7 @@
 /**
- * Contains the classes, which are used in order to display the dialogs of the plugin.
+ * Contains the classes, which are used in order to display the dialogs of the
+ * plugin.
+ * Each of these classes extends the <code>MapdustShowAction</code> abstract
+ * class.
  */
 package org.openstreetmap.josm.plugins.mapdust.gui.action.show;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/AbstractDialog.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/AbstractDialog.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/AbstractDialog.java	(revision 25591)
@@ -42,5 +42,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 7543537884312236858L;
 
     /** The button which opened the dialog window */
@@ -71,3 +71,4 @@
         this.firedButton = firedButton;
     }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/ChangeIssueStatusDialog.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/ChangeIssueStatusDialog.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/ChangeIssueStatusDialog.java	(revision 25591)
@@ -58,46 +58,46 @@
  * related actions: close bug report, invalidate bug report and re-open bug
  * report.
- * 
+ *
  * @author Bea
  */
 public class ChangeIssueStatusDialog extends AbstractDialog {
-    
+
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-    
+    private static final long serialVersionUID = -4106150600118847229L;
+
     /** The message test */
     private final String messageText;
-    
+
     /** Custom text */
     private JScrollPane cmpMessage;
-    
+
     /** Nickname label */
     private JLabel lblNickname;
-    
+
     /** Nickname text field */
     private JTextField txtNickname;
-    
+
     /** Comment label */
     private JLabel lblComment;
-    
+
     /** Description text area */
     private JScrollPane cmpDescription;
-    
+
     /** The description text */
     private JTextArea txtDescription;
-    
+
     /** Cancel button */
     private JButton btnCancel;
-    
+
     /** OK button */
     private JButton btnOk;
-    
+
     /** The type */
     private final String type;
-    
+
     /**
      * Builds a new <code>ChangeStatusDialog</code> object with the given
      * parameters.
-     * 
+     *
      * @param title The title of the dialog
      * @param iconName The name of the icon
@@ -126,11 +126,12 @@
         setLayout(null);
         addComponents(mapdustPlugin);
-        MapdustButtonPanel btnPanel = mapdustPlugin.getMapdustGUI().getPanel().getBtnPanel();
-        addWindowListener(new WindowClose(this, btnPanel, getFiredButton()));
-    }
-    
-    /**
-     * Adds the components to the panel.
-     * 
+        MapdustButtonPanel btnPanel =
+                mapdustPlugin.getMapdustGUI().getPanel().getBtnPanel();
+        addWindowListener(new WindowClose(this, btnPanel));
+    }
+
+    /**
+     * Adds the components to the dialog window.
+     *
      * @param mapdustPlugin The <code>MapdustPlugin</code> object
      */
@@ -142,5 +143,5 @@
         /* create the message cmp */
         if (cmpMessage == null) {
-            JTextPane txtPane = ComponentUtil.createJTextPane(messageText, 
+            JTextPane txtPane = ComponentUtil.createJTextPane(messageText,
                     backgroundColor);
             Rectangle bounds = new Rectangle(10, 10, 330, 50);
@@ -176,9 +177,9 @@
             txtDescription.setLineWrap(true);
             txtDescription.setFont(new Font("Times New Roman", Font.PLAIN, 12));
-            cmpDescription = ComponentUtil.createJScrollPane(txtDescription, 
+            cmpDescription = ComponentUtil.createJScrollPane(txtDescription,
                     bounds, backgroundColor, false, true);
         }
         /* creates the cancel action */
-        ExecuteCancel cancelAction = new ExecuteCancel(this, 
+        ExecuteCancel cancelAction = new ExecuteCancel(this,
                 mapdustPlugin.getMapdustGUI());
         AbstractAction okAction;
@@ -191,5 +192,6 @@
             if (type.equals("invalidate")) {
                 /* create the invalidate bug action */
-                okAction = new ExecuteInvalidateBug(this, mapdustPlugin.getMapdustGUI());
+                okAction = new ExecuteInvalidateBug(this,
+                        mapdustPlugin.getMapdustGUI());
                 ((ExecuteInvalidateBug) okAction).addObserver(mapdustPlugin);
                 ((ExecuteInvalidateBug) okAction).addObserver(mapdustPlugin
@@ -197,7 +199,8 @@
             } else {
                 /* executes the re-open bug action */
-                okAction = new ExecuteReOpenBug(this, mapdustPlugin.getMapdustGUI());
+                okAction = new ExecuteReOpenBug(this,mapdustPlugin.getMapdustGUI());
                 ((ExecuteReOpenBug) okAction).addObserver(mapdustPlugin);
-                ((ExecuteReOpenBug) okAction).addObserver(mapdustPlugin.getMapdustGUI());
+                ((ExecuteReOpenBug) okAction).addObserver(mapdustPlugin
+                        .getMapdustGUI());
             }
         }
@@ -205,5 +208,6 @@
         if (btnCancel == null) {
             Rectangle bounds = new Rectangle(240, 170, 90, 25);
-            btnCancel = ComponentUtil.createJButton("Cancel", bounds, cancelAction);
+            btnCancel = ComponentUtil.createJButton("Cancel", bounds,
+                    cancelAction);
         }
         /* creates the ok button */
@@ -222,8 +226,8 @@
         setSize(340, 210);
     }
-    
+
     /**
      * Returns the <code>JScrollPane</code> of the info message.
-     * 
+     *
      * @return the cmpMessage
      */
@@ -231,8 +235,8 @@
         return this.cmpMessage;
     }
-    
+
     /**
      * Returns the <code>JLabel</code> of the nickname
-     * 
+     *
      * @return the lblNickname
      */
@@ -240,8 +244,8 @@
         return this.lblNickname;
     }
-    
+
     /**
      * Returns the <code>JTextField</code> of the nickname
-     * 
+     *
      * @return the txtNickname
      */
@@ -249,8 +253,8 @@
         return this.txtNickname;
     }
-    
+
     /**
      * Returns the <code>JLabel</code> of the comment
-     * 
+     *
      * @return the lblComment
      */
@@ -258,8 +262,8 @@
         return this.lblComment;
     }
-    
+
     /**
      * Returns the <code>JScrollPane</code> of the description
-     * 
+     *
      * @return the cmpDescription
      */
@@ -267,8 +271,8 @@
         return this.cmpDescription;
     }
-    
+
     /**
      * Returns the <code>JTextArea</code> of the description
-     * 
+     *
      * @return the txtDescription
      */
@@ -276,8 +280,8 @@
         return this.txtDescription;
     }
-    
+
     /**
      * Returns the cancel button
-     * 
+     *
      * @return the btnCancel
      */
@@ -285,8 +289,8 @@
         return this.btnCancel;
     }
-    
+
     /**
      * Returns the ok buttons
-     * 
+     *
      * @return the btnOk
      */
@@ -294,8 +298,8 @@
         return this.btnOk;
     }
-    
+
     /**
      * Retruns the message text
-     * 
+     *
      * @return the messageText
      */
@@ -303,8 +307,8 @@
         return this.messageText;
     }
-    
-    /**
-     * Returns the type
-     * 
+
+    /**
+     * Returns the type of the dialog window
+     *
      * @return the type
      */
@@ -312,4 +316,4 @@
         return this.type;
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/CommentIssueDialog.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/CommentIssueDialog.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/CommentIssueDialog.java	(revision 25591)
@@ -61,5 +61,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 7788698281871951326L;
 
     /** The message text */
@@ -118,17 +118,19 @@
         setLayout(null);
         addComponents(mapdustPlugin);
-        MapdustButtonPanel btnPanel = mapdustPlugin.getMapdustGUI().getPanel().getBtnPanel();
-        addWindowListener(new WindowClose(this, btnPanel, getFiredButton()));
-    }
-
-    /**
-     * Add the components to the panel
+        MapdustButtonPanel btnPanel =
+                mapdustPlugin.getMapdustGUI().getPanel().getBtnPanel();
+        addWindowListener(new WindowClose(this, btnPanel));
+    }
+
+    /**
+     * Add the components to the dialog window.
+     *
+     * @param mapdustPlugin The <code>MapdustPlugin</code> object
      */
     @Override
     public void addComponents(MapdustPlugin mapdustPlugin) {
-        /* initialize components of the JDialog */
         Color backgroundColor = getContentPane().getBackground();
         Font font = new Font("Times New Roman", Font.BOLD, 14);
-        /* create the message cmp */
+        /* message text */
         if (cmpMessage == null) {
             JTextPane txtPane = ComponentUtil.createJTextPane(messageText,
@@ -138,5 +140,5 @@
                     backgroundColor, true, true);
         }
-        /* create the nickname label and text field */
+        /* nickaname */
         if (lblNickname == null) {
             Rectangle bounds = new Rectangle(10, 70, 91, 25);
@@ -156,5 +158,5 @@
             }
         }
-        /* creates the comment label and text area */
+        /* comment */
         if (lblComment == null) {
             Rectangle bounds = new Rectangle(10, 110, 79, 25);
@@ -169,12 +171,13 @@
                     backgroundColor, false, true);
         }
-        /* creates the cancel button */
+        /* cancel button */
         if (btnCancel == null) {
             Rectangle bounds = new Rectangle(240, 170, 90, 25);
             ExecuteCancel cancelAction = new ExecuteCancel(this,
                     mapdustPlugin.getMapdustGUI());
-            btnCancel = ComponentUtil.createJButton("Cancel", bounds, cancelAction);
-        }
-        /* creates the ok button */
+            btnCancel = ComponentUtil.createJButton("Cancel", bounds,
+                    cancelAction);
+        }
+        /* ok button */
         if (btnOk == null) {
             Rectangle bounds = new Rectangle(170, 170, 60, 25);
@@ -185,5 +188,5 @@
             btnOk = ComponentUtil.createJButton("OK", bounds, okAction);
         }
-        /* add components to the frame */
+        /* add components */
         add(cmpMessage);
         add(lblNickname);
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/CreateIssueDialog.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/CreateIssueDialog.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/CreateIssueDialog.java	(revision 25591)
@@ -54,5 +54,5 @@
 
 /**
- * This class is used for creating a dialog window for the new issue Mapdust Bug
+ * This class is used for creating a dialog window for the new issue MapDust Bug
  * action.
  *
@@ -63,5 +63,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1912577313684808253L;
 
     /** The create issue text */
@@ -71,17 +71,17 @@
     private JScrollPane cmpMessage;
 
-    /** Type */
+    /** The label of the bug type */
     private JLabel lblType;
 
-    /** The type combo box */
+    /** The combo box for the bug types */
     private JComboBox cbbType;
 
-    /** Nickname */
+    /** The nickname label */
     private JLabel lblNickname;
 
-    /** The txt nickname */
+    /** The nickname text field */
     private JTextField txtNickname;
 
-    /** Description */
+    /** The description label */
     private JLabel lblDescription;
 
@@ -105,7 +105,4 @@
      * parameters.
      *
-     * @param title The title of the dialog
-     * @param iconName The name of the icon
-     * @param messageText The text of the message component.
      * @param point The position where the bug was created
      * @param mapdustPlugin The <code>MapdustPlugin</code> object
@@ -120,8 +117,8 @@
         /* add components to the dialog */
         addComponents(mapdustPlugin);
-        /* add window listenet */
+        /* add window listener */
         MapdustButtonPanel btnPanel =
                 mapdustPlugin.getMapdustGUI().getPanel().getBtnPanel();
-        addWindowListener(new WindowClose(this, btnPanel, null));
+        addWindowListener(new WindowClose(this, btnPanel));
     }
 
@@ -144,5 +141,5 @@
 
     /**
-     * Displays the dialog.
+     * Displays the dialog window on the screen.
      */
     public void showDialog() {
@@ -153,33 +150,40 @@
     }
 
+    /**
+     * Adds the components to the dialog window.
+     *
+     * @param mapdustPlugin The <code>MapdustPlugin</code> object
+     */
     @Override
     public void addComponents(MapdustPlugin mapdustPlugin) {
         Color backgroundColor = getContentPane().getBackground();
         Font font = new Font("Times New Roman", Font.BOLD, 14);
-        /* create the message cmp */
+        /* text message */
         if (cmpMessage == null) {
             JTextPane txtPane = ComponentUtil.createJTextPane(createIssueText,
                     backgroundColor);
-            cmpMessage = ComponentUtil.createJScrollPane(txtPane,
-                    new Rectangle(10,10, 330, 50), backgroundColor, true, true);
-        }
-        /* the type label and combo box */
+            Rectangle bounds = new Rectangle(10, 10, 330, 50);
+            cmpMessage = ComponentUtil.createJScrollPane(txtPane, bounds,
+                    backgroundColor, true, true);
+        }
+        /* type */
         if (lblType == null) {
-            lblType = ComponentUtil.createJLabel("Type", font,
-                    new Rectangle(10, 70, 91, 25));
+            Rectangle bounds = new Rectangle(10, 70, 91, 25);
+            lblType = ComponentUtil.createJLabel("Type", font, bounds);
         }
         if (cbbType == null) {
             ComboBoxRenderer renderer = new ComboBoxRenderer();
-            cbbType = ComponentUtil.createJComboBox(new Rectangle(110, 70, 230,
-                    25), renderer, backgroundColor);
-        }
-        /* create the nickname label and text field */
+            Rectangle bounds = new Rectangle(110, 70, 230, 25);
+            cbbType = ComponentUtil.createJComboBox(bounds, renderer,
+                    backgroundColor);
+        }
+        /* nickname */
         if (lblNickname == null) {
-            lblNickname = ComponentUtil.createJLabel("Nickname", font,
-                    new Rectangle(10, 110, 79, 25));
+            Rectangle bounds = new Rectangle(10, 110, 79, 25);
+            lblNickname = ComponentUtil.createJLabel("Nickname", font, bounds);
         }
         if (txtNickname == null) {
-            txtNickname = ComponentUtil.createJTextField(new Rectangle(110, 110,
-                    230,25));
+            Rectangle bounds = new Rectangle(110, 110, 230,25);
+            txtNickname = ComponentUtil.createJTextField(bounds);
             /* get the nickname */
             String nickname = Main.pref.get("mapdust.nickname");
@@ -192,18 +196,19 @@
             }
         }
-        /* creates the description label and text area */
+        /* description */
         if (lblDescription == null) {
+            Rectangle bounds = new Rectangle(10, 150, 95, 25);
             lblDescription = ComponentUtil.createJLabel("Description", font,
-                    new Rectangle(10, 150, 95, 25));
+                    bounds);
         }
         if (cmpDescription == null) {
+            Rectangle bounds = new Rectangle(110, 150, 230, 50);
             txtDescription = new JTextArea();
             txtDescription.setFont(new Font("Times New Roman", Font.PLAIN, 12));
             txtDescription.setLineWrap(true);
             cmpDescription = ComponentUtil.createJScrollPane(txtDescription,
-                    new Rectangle(110, 150, 230, 50), backgroundColor, false,
-                    true);
-        }
-        /* creates the cancel button */
+                    bounds, backgroundColor, false, true);
+        }
+        /* cancel button */
         if (btnCancel == null) {
             Rectangle bounds = new Rectangle(250, 210, 90, 25);
@@ -213,9 +218,9 @@
                     cancelAction);
         }
-        /* creates the ok button */
+        /* ok button */
         if (btnOk == null) {
             Rectangle bounds = new Rectangle(180, 210, 60, 25);
-            ExecuteAddBug okAction = new ExecuteAddBug(this,
-                    mapdustPlugin.getMapdustGUI());
+            ExecuteAddBug okAction =
+                    new ExecuteAddBug(this, mapdustPlugin.getMapdustGUI());
             okAction.addObserver(mapdustPlugin);
             okAction.addObserver(mapdustPlugin.getMapdustGUI());
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/FilterBugDialog.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/FilterBugDialog.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/FilterBugDialog.java	(revision 25591)
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 10, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.component.dialog;
+
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Image;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JToggleButton;
+import javax.swing.WindowConstants;
+import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.adapter.WindowClose;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.execute.ExecuteCancel;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.execute.ExecuteFilterBug;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.panel.MapdustButtonPanel;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.util.ComponentUtil;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.util.FilterCheckBox;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
+import org.openstreetmap.josm.plugins.mapdust.service.value.Status;
+import org.openstreetmap.josm.plugins.mapdust.service.value.Type;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+
+/**
+ * This class it is used for creating a dialog window for the MapDust bug
+ * filtering feature.
+ *
+ * @author Bea
+ */
+public class FilterBugDialog extends AbstractDialog {
+
+    /** The serial version UID */
+    private static final long serialVersionUID = -3333642616656969760L;
+
+    /** The <code>JLabel</code> for the status filter */
+    private JLabel lblStatus;
+
+    /** The array of <code>FilterCheckBox</cod> containing the status filters */
+    private FilterCheckBox[] filterStatuses;
+
+    /** The <ode>JLabel</code> for the type filter */
+    private JLabel lblType;
+
+    /** The array of <code>FilterCheckBox</cod> containing the type filters */
+    private FilterCheckBox[] filterTypes;
+
+    /** The <code>JLabel</code> for the description filter */
+    private JLabel lblDescription;
+
+    /** The <code>FilterCheckBox</code> containing the description filter */
+    private FilterCheckBox filterDescr;
+
+    /** The apply button */
+    private JButton btnApply;
+
+    /** The cancel button */
+    private JButton btnCancel;
+
+    /** Builds a <code>FilterBugDialog</code> object */
+    public FilterBugDialog() {}
+
+    /**
+     * Builds a <code>FilterBugDialog</code> object with the given parameters.
+     *
+     * @param title The title of the dialog
+     * @param iconName The name of the icon
+     * @param firedButton The button which fired this action
+     * @param mapdustPlugin The <code>MapdustPlugin</code> object
+     */
+    public FilterBugDialog(String title, String iconName,
+            JToggleButton firedButton, MapdustPlugin mapdustPlugin) {
+        if (firedButton != null) {
+            setFiredButton(firedButton);
+        }
+        setTitle(title);
+        setModal(true);
+        Image image = ImageProvider.get(iconName).getImage();
+        setIconImage(image);
+        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+        getContentPane().setFont(new Font("Times New Roman", Font.BOLD, 14));
+        setBackground(Color.white);
+        setResizable(false);
+        setForeground(Color.black);
+        setLayout(null);
+        addComponents(mapdustPlugin);
+        MapdustButtonPanel btnPanel =
+                mapdustPlugin.getMapdustGUI().getPanel().getBtnPanel();
+        addWindowListener(new WindowClose(this, btnPanel));
+    }
+
+    @Override
+    public void addComponents(MapdustPlugin mapdustPlugin) {
+        Font font = new Font("Times New Roman", Font.BOLD, 14);
+        MapdustBugFilter prevFilter = mapdustPlugin.getFilter();
+
+        /* status filter */
+        if (lblStatus == null) {
+            Rectangle bounds = new Rectangle(10, 10, 95, 25);
+            lblStatus = ComponentUtil.createJLabel("Status", font, bounds);
+        }
+        if (filterStatuses == null) {
+            createStatusFilters(prevFilter);
+        }
+
+        /* type filters */
+        if (filterTypes == null) {
+            createTypeFilters(prevFilter);
+        }
+        if (lblType == null) {
+            Rectangle bounds = new Rectangle(10, 90, 95, 25);
+            lblType = ComponentUtil.createJLabel("Type", font, bounds);
+        }
+
+        /* description filter */
+        if (lblDescription == null) {
+            Rectangle bounds = new Rectangle(10, 230, 95, 25);
+            lblDescription = ComponentUtil.createJLabel("Description", font,
+                    bounds);
+        }
+        if (filterDescr == null) {
+            Rectangle chbBounds = new Rectangle(110, 230, 20, 25);
+            Rectangle lblBounds = new Rectangle(130, 230, 300, 25);
+            String text = "Hide bugs with default description";
+            String iconName = "dialogs/default_description.png";
+            filterDescr = new FilterCheckBox("descr", chbBounds, iconName, text,
+                    lblBounds);
+            if (prevFilter != null && prevFilter.getDescr() != null
+                    && prevFilter.getDescr()) {
+                filterDescr.getChbFilter().setSelected(true);
+            }
+        }
+
+        /* creates the cancel button */
+        if (btnCancel == null) {
+            Rectangle bounds = new Rectangle(360, 265, 90, 25);
+            ExecuteCancel cancelAction = new ExecuteCancel(this,
+                    mapdustPlugin.getMapdustGUI());
+            btnCancel = ComponentUtil.createJButton("Cancel", bounds,
+                    cancelAction);
+        }
+        /* creates the ok button */
+        if (btnApply == null) {
+            Rectangle bounds = new Rectangle(260, 265, 90, 25);
+            ExecuteFilterBug applyAction = new ExecuteFilterBug(this,
+                    mapdustPlugin.getMapdustGUI());
+            applyAction.addObserver(mapdustPlugin);
+            btnApply = ComponentUtil.createJButton("Apply", bounds, applyAction);
+        }
+
+        /* add components */
+        add(lblStatus);
+        add(filterStatuses);
+        add(lblType);
+        add(filterTypes);
+        add(lblDescription);
+        add(filterDescr);
+        add(btnCancel);
+        add(btnApply);
+        setSize(460, 300);
+    }
+
+    /**
+     * Creates the MapDust bug status filters. If there was any previous status
+     * filter selected then this status filter will be selected by default.
+     *
+     * @param prevFilter The <code>MapdustBugFilter</code> object
+     */
+    private void createStatusFilters(MapdustBugFilter prevFilter) {
+        filterStatuses = new FilterCheckBox[3];
+
+        /* open status */
+        filterStatuses[0] = new FilterCheckBox(Status.OPEN.getKey(),
+                new Rectangle(110, 10, 20, 25), "dialogs/open_bug.png",
+                Status.OPEN.getValue(), new Rectangle(130, 10, 150, 25));
+
+        /* closed status */
+        filterStatuses[1] = new FilterCheckBox(Status.INVALID.getKey(),
+                new Rectangle(270, 10, 20, 25), "dialogs/invalid_bug.png",
+                Status.INVALID.getValue(), new Rectangle(290, 10, 180, 25));
+
+        /* invalid status */
+        filterStatuses[2] = new FilterCheckBox(Status.FIXED.getKey(),
+                new Rectangle(110, 45, 20, 25), "dialogs/fixed_bug.png",
+                Status.FIXED.getValue(), new Rectangle(130, 45, 150, 25));
+
+        if (prevFilter != null && prevFilter.getStatuses() != null) {
+            for (FilterCheckBox filter : filterStatuses) {
+                if (prevFilter.getStatuses().contains(filter.getId())) {
+                    filter.getChbFilter().setSelected(true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Creates the MapDust bug type filters. If there was any previous type
+     * filter selected, then this type filter will be selected by default.
+     *
+     * @param prevFilter The <code>MapdustBugFilter</code> object
+     */
+    private void createTypeFilters(MapdustBugFilter prevFilter) {
+        filterTypes = new FilterCheckBox[8];
+
+        /* wrong_turn type */
+        filterTypes[0] = new FilterCheckBox(Type.WRONG_TURN.getKey(),
+                new Rectangle(110,90, 20, 25), "dialogs/wrong_turn.png",
+                Type.WRONG_TURN.getValue(), new Rectangle(130, 90, 120,25));
+        /* bad_routing type */
+        filterTypes[1] = new FilterCheckBox(Type.WRONG_ROUNDABOUT.getKey(),
+                new Rectangle(270, 90, 20, 25), "dialogs/wrong_roundabout.png",
+                Type.WRONG_ROUNDABOUT.getValue(),
+                new Rectangle(290, 90, 180, 25));
+        /* oneway_road type */
+        filterTypes[2] = new FilterCheckBox(Type.MISSING_STREET.getKey(),
+                new Rectangle(110, 125, 20, 25), "dialogs/missing_street.png",
+                Type.MISSING_STREET.getValue(),
+                new Rectangle(130, 125, 150, 25));
+        /* blocked_street type */
+        filterTypes[3] = new FilterCheckBox(Type.BLOCKED_STREET.getKey(),
+                new Rectangle(270, 125, 20, 25), "dialogs/blocked_street.png",
+                Type.BLOCKED_STREET.getValue(),
+                new Rectangle(290, 125, 180, 25));
+        /* missing_street type */
+        filterTypes[4] = new FilterCheckBox(Type.BAD_ROUTING.getKey(),
+                new Rectangle(110, 160, 20, 25), "dialogs/bad_routing.png",
+                Type.BAD_ROUTING.getValue(), new Rectangle(130, 160, 150, 25));
+        /* wrong_roundabout type */
+        filterTypes[5] = new FilterCheckBox(Type.MISSING_SPEEDLIMIT.getKey(),
+                new Rectangle(270, 160, 20, 25), "dialogs/missing_speedlimit.png",
+                Type.MISSING_SPEEDLIMIT.getValue(),
+                new Rectangle(290, 160, 180, 25));
+        /* missing_speedlimit type */
+        filterTypes[6] = new FilterCheckBox(Type.OTHER.getKey(),
+                new Rectangle(110, 195, 20, 25), "dialogs/other.png",
+                Type.OTHER.getValue(), new Rectangle(130, 195, 150, 25));
+        /* other type */
+        filterTypes[7] = new FilterCheckBox(Type.ONEWAY_ROAD.getKey(),
+                new Rectangle(270, 195, 20, 25), "dialogs/oneway_road.png",
+                Type.ONEWAY_ROAD.getValue(), new Rectangle(290, 195, 180, 25));
+
+        if (prevFilter != null && prevFilter.getTypes() != null) {
+            for (FilterCheckBox filter : filterTypes) {
+                if (prevFilter.getTypes().contains(filter.getId())) {
+                    filter.getChbFilter().setSelected(true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns the list of selected status filter values.
+     *
+     * @return a list of <code>Integer</code> values, representing the selected
+     * status filter IDs
+     */
+    public List<Integer> getCheckedStatuses() {
+        List<Integer> statusList = new ArrayList<Integer>();
+        for (FilterCheckBox filter : filterStatuses) {
+            if (filter.getChbFilter().isSelected()) {
+                statusList.add((Integer) filter.getId());
+            }
+        }
+        return statusList;
+    }
+
+    /**
+     * Returns the list of selected type filter values.
+     *
+     * @return a list of <code>String</code> values, representing the selected
+     * type filter values
+     */
+    public List<String> getCheckedTypes() {
+        List<String> typeList = new ArrayList<String>();
+        for (FilterCheckBox filter : filterTypes) {
+            if (filter.getChbFilter().isSelected()) {
+                typeList.add((String) filter.getId());
+            }
+        }
+        return typeList;
+    }
+
+    /**
+     * Verifies if the description filter is selected or not.
+     *
+     * @return true if the description filter is selected false if the
+     * description filter is not selected
+     */
+    public boolean isDescrFilterChecked() {
+        if (filterDescr.getChbFilter().isSelected()) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Add the given filter to the current dialog window.
+     *
+     * @param filter The <code>FilterCheckBox</code> object
+     */
+    private void add(FilterCheckBox filter) {
+        add(filter.getChbFilter());
+        add(filter.getLblFilter());
+    }
+
+    /**
+     * Add the given array of filters to the current dialog window.
+     *
+     * @param filters The array of <code>FilterCheckBox</code> objects
+     */
+    private void add(FilterCheckBox[] filters) {
+        for (FilterCheckBox filter : filters) {
+            add(filter.getChbFilter());
+            add(filter.getLblFilter());
+        }
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/dialog/package-info.java	(revision 25591)
@@ -1,4 +1,5 @@
 /**
- * Contains the dialog classes.
+ * Contains the MapDust GUI dialog classes. The dialog classes extends the
+ * <code>AbstractDialog</code> abstract class.
  */
 package org.openstreetmap.josm.plugins.mapdust.gui.component.dialog;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/ActionListModel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/ActionListModel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/ActionListModel.java	(revision 25591)
@@ -43,5 +43,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -4919264544683489112L;
 
     /**
@@ -51,5 +51,5 @@
 
     /**
-     * Builds a <code>MapdustAction</code> object
+     * Builds an empty <code>MapdustAction</code> object
      */
     public ActionListModel() {
@@ -58,5 +58,6 @@
 
     /**
-     * Builds a <code>MapdustAction</code> object
+     * Builds a <code>MapdustAction</code> object based on the given argument
+     *
      * @param list A list of <code>MapdustAction</code> objects
      */
@@ -65,12 +66,26 @@
     }
 
+    /**
+     * Returns the <code>MapdustAction</code> from the given position.
+     *
+     * @param index The position of the element
+     * @return <code>MapdustAction</code> from the given position
+     */
     @Override
     public Object getElementAt(int index) {
-        return list.get(index);
+        if (index >= 0 && index < list.size()) {
+            return list.get(index);
+        }
+        return null;
     }
 
+    /**
+     * Returns the size of the list of objects.
+     *
+     * @return size
+     */
     @Override
     public int getSize() {
-        return list.size();
+        return (list != null ? list.size() : 0);
     }
 
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/BugsListModel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/BugsListModel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/BugsListModel.java	(revision 25591)
@@ -30,6 +30,5 @@
 
 import java.util.List;
-import javax.swing.ListModel;
-import javax.swing.event.ListDataListener;
+import javax.swing.AbstractListModel;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
 
@@ -41,5 +40,8 @@
  *
  */
-public class BugsListModel implements ListModel {
+public class BugsListModel extends AbstractListModel {
+
+    /** The serial version UID */
+    private static final long serialVersionUID = 3451277352571392219L;
 
     /** The list of <code>MapdustBug</code> objects */
@@ -62,12 +64,23 @@
     }
 
-    @Override
-    public void addListDataListener(ListDataListener l) {}
-
+    /**
+     * Returns the <code>MapdustBug</code> from the given position.
+     *
+     * @param index The position of the element
+     * @return <code>MapdustBug</code> from the given position
+     */
     @Override
     public Object getElementAt(int index) {
-        return bugs.get(index);
+        if (index >= 0 && index < bugs.size()) {
+            return bugs.get(index);
+        }
+        return null;
     }
 
+    /**
+     * Returns the size of the list of objects.
+     *
+     * @return size
+     */
     @Override
     public int getSize() {
@@ -75,6 +88,10 @@
     }
 
-    @Override
-    public void removeListDataListener(ListDataListener l) {}
+    /**
+     * Updates the bugs list model.
+     */
+    public void update() {
+        this.fireContentsChanged(this, 0, bugs.size() - 1);
+    }
 
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/CommentListModel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/CommentListModel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/CommentListModel.java	(revision 25591)
@@ -35,5 +35,5 @@
 
 /**
- * List model for <code>MapdustComment</code> objects
+ * List model for <code>MapdustComment</code> objects.
  *
  * @author Bea
@@ -61,15 +61,26 @@
     }
 
-    @Override
-    public void addListDataListener(ListDataListener l) {}
-
+    /**
+     * Returns the <code>MapdustComment</code> from the given position.
+     *
+     * @param index The position of the element
+     * @return <code>MapdustComment</code> from the given position
+     */
     @Override
     public Object getElementAt(int index) {
-        return comments[index];
+        if (index > 0 && index < comments.length) {
+            return comments[index];
+        }
+        return null;
     }
 
+    /**
+     * Returns the size of the list of objects.
+     *
+     * @return size
+     */
     @Override
     public int getSize() {
-        return comments.length;
+        return (comments != null ? comments.length : 0);
     }
 
@@ -77,3 +88,6 @@
     public void removeListDataListener(ListDataListener l) {}
 
+    @Override
+    public void addListDataListener(ListDataListener l) {}
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/TypesListModel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/TypesListModel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/TypesListModel.java	(revision 25591)
@@ -43,5 +43,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 4005728061902494996L;
 
     /** The array of types */
@@ -58,4 +58,10 @@
     }
 
+    /**
+     * Returns the <code>Type</code> from the given position.
+     *
+     * @param index The position of the element
+     * @return <code>Type</code> from the given position
+     */
     @Override
     public Object getElementAt(int index) {
@@ -63,4 +69,9 @@
     }
 
+    /**
+     * Returns the size of the list of objects.
+     *
+     * @return size
+     */
     @Override
     public int getSize() {
@@ -68,4 +79,9 @@
     }
 
+    /**
+     * Returns the selected <code>Type</code> object.
+     *
+     * @return selected item
+     */
     @Override
     public Object getSelectedItem() {
@@ -73,4 +89,9 @@
     }
 
+    /**
+     * Sets the selected <code>Type</code> object.
+     *
+     * @param anItem The selected item
+     */
     @Override
     public void setSelectedItem(Object anItem) {
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/model/package-info.java	(revision 25591)
@@ -1,2 +1,5 @@
-
+/**
+ * Contains the <code>ListModel</code> classes used for building customized
+ * list and combo box GUI elements for the MapDust plugin.
+ */
 package org.openstreetmap.josm.plugins.mapdust.gui.component.model;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustActionPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustActionPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustActionPanel.java	(revision 25591)
@@ -39,4 +39,5 @@
 import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
 import org.openstreetmap.josm.plugins.mapdust.gui.action.execute.ExecuteActionList;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.model.ActionListModel;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.util.ComponentUtil;
 import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustAction;
@@ -52,5 +53,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -6648507056357610823L;
 
     /** The scroll pane */
@@ -58,8 +59,8 @@
 
     /** The JList containing the MapDust action objects */
-    private JList queueList;
+    private JList actionJList;
 
     /** The list of <code>MapdustAction</code> objects */
-    private final List<MapdustAction> actionList;
+    private List<MapdustAction> actionList;
 
     /**
@@ -88,11 +89,12 @@
             MapdustPlugin mapdustPlugin) {
         /* create components */
-        AbstractAction action = new ExecuteActionList(mapdustPlugin.getMapdustGUI());
+        AbstractAction action = new ExecuteActionList
+        (mapdustPlugin.getMapdustGUI());
         JToggleButton btnUpload = ComponentUtil.createJButton("Upload list data",
                 null, null, action);
         ((ExecuteActionList) action).addObserver(mapdustPlugin);
         if (cmpActionList == null) {
-            queueList = ComponentUtil.createJList(list);
-            cmpActionList = ComponentUtil.createJScrollPane(queueList);
+            actionJList = ComponentUtil.createJList(list);
+            cmpActionList = ComponentUtil.createJScrollPane(actionJList);
         }
         add(cmpActionList, BorderLayout.CENTER);
@@ -101,5 +103,19 @@
 
     /**
-     * Returns the list of <code>MapdustAction</code> object
+     * Updates the <code>MapdustActionPanel</code> with the given list of
+     * <code>MapdustAction</code>s.
+     *
+     * @param actionList The list of <code>MapdustAction</code> objects
+     */
+    public void updateComponents(List<MapdustAction> actionList) {
+        setActionList(actionList);
+        actionJList.setModel(new ActionListModel(actionList));
+        cmpActionList.getViewport().setView(actionJList);
+        cmpActionList.invalidate();
+
+    }
+
+    /**
+     * Returns the list of <code>MapdustAction</code>s
      *
      * @return the actionList
@@ -110,19 +126,10 @@
 
     /**
-     * Returns the action list <code>JScrollPane</code> object
+     * Sets the list of <code>MapdustAction</code>s
      *
-     * @return the cmpActionList
+     * @param actionList the actionList to set
      */
-    public JScrollPane getCmpActionList() {
-        return cmpActionList;
-    }
-
-    /**
-     * Returns the action list <code>JList</code> object
-     *
-     * @return the queueList
-     */
-    public JList getQueueList() {
-        return queueList;
+    public void setActionList(List<MapdustAction> actionList) {
+        this.actionList = actionList;
     }
 
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustAddressPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustAddressPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustAddressPanel.java	(revision 25591)
@@ -48,5 +48,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 8388870946800544374L;
 
     /**
@@ -63,4 +63,16 @@
 
     /**
+     * Updates the components of the <code>MapdustAddressPanel</code> based
+     * on the given parameters.
+     *
+     * @param address The <code>Address</code> of a MapDust bug
+     * @param coordinates The <code>LatLon</code> of a MapDust bug
+     */
+    public void updateComponents(Address address,LatLon coordinates){
+    	removeAll();
+    	addComponents(address, coordinates);
+    }
+
+    /**
      * Creates the components of the panel, and adds to the parent panel.
      *
@@ -73,40 +85,40 @@
         Font fontLabelVal = new Font("Times New Roman", Font.PLAIN, 12);
 
-        /* add country */
+        /* country */
         add(ComponentUtil.createJLabel("Country: ", fontLabel, null));
         String country = address != null ? address.getCountryCode() : "";
         add(ComponentUtil.createJLabel(country, fontLabelVal, null));
 
-        /* add label */
+        /* label */
         add(ComponentUtil.createJLabel("City: ", fontLabel, null));
         String city = address != null ? address.getCity() : "";
         add(ComponentUtil.createJLabel(city, fontLabelVal, null));
 
-        /* add statecode */
+        /* statecode */
         add(ComponentUtil.createJLabel("State code: ", fontLabel, null));
         String state = address != null ? address.getStateCode() : "";
         add(ComponentUtil.createJLabel(state, fontLabelVal, null));
 
-        /* add label */
+        /* label */
         add(ComponentUtil.createJLabel("Zip code: ", fontLabel, null));
         String zip = address != null ? address.getZipCode() : "";
         add(ComponentUtil.createJLabel(zip, fontLabelVal, null));
 
-        /* add street name */
+        /* street name */
         add(ComponentUtil.createJLabel("Street: ", fontLabel, null));
         String street = address != null ? address.getStreetName() : "";
         add(ComponentUtil.createJLabel(street, fontLabelVal, null));
 
-        /* add house number */
+        /* house number */
         add(ComponentUtil.createJLabel("House number: ", fontLabel, null));
         String houseNr = address != null ? address.getHouseNumber() : "";
         add(ComponentUtil.createJLabel(houseNr, fontLabelVal, null));
 
-        /* add lat */
+        /* lat */
         add(ComponentUtil.createJLabel("Latitude: ", fontLabel, null));
         String lat = coordinates != null ? ("" + coordinates.lat()) : "";
         add(ComponentUtil.createJLabel(lat, fontLabelVal, null));
 
-        /* add lon */
+        /*  lon */
         add(ComponentUtil.createJLabel("Longitude: ", fontLabel, null));
         String lon = coordinates != null ? ("" + coordinates.lon()) : "";
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugDetailsPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugDetailsPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugDetailsPanel.java	(revision 25591)
@@ -58,8 +58,8 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 65974543949362926L;
 
     /** The <code>MapdustBug</code> object */
-    private final MapdustBug bug;
+    private MapdustBug bug;
 
     /**
@@ -76,4 +76,16 @@
 
     /**
+     * Updates the components of the <code>MapdustBugDetailsPanel</code> based
+     * on the given parameter.
+     *
+     * @param bug The <code>MapdustBug</code>
+     */
+    public void updateComponents(MapdustBug bug) {
+        this.bug = bug;
+        removeAll();
+        addComponents();
+    }
+
+    /**
      * Add the components to the panel.
      */
@@ -81,10 +93,10 @@
         /* the font of the label and label value */
         Font fontLabel = new Font("Times New Roman", Font.BOLD, 12);
-        Font fontLabelVal = new Font("Times New Roman", Font.PLAIN,12);
+        Font fontLabelVal = new Font("Times New Roman", Font.PLAIN, 12);
         /* date formatter */
-        DateFormat df = DateFormat.getDateInstance( DateFormat.DEFAULT,
+        DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT,
                 Locale.getDefault());
 
-        /* add the id */
+        /* the id */
         add(ComponentUtil.createJLabel("Id: ", fontLabel, null));
         String idStr = bug != null ? bug.getId().toString() : "";
@@ -101,25 +113,25 @@
         add(txtId);
 
-        /* add the type */
+        /* the type */
         add(ComponentUtil.createJLabel("Type: ", fontLabel, null));
         String typeStr = bug != null ? bug.getType().getValue() : "";
         add(ComponentUtil.createJLabel(typeStr, fontLabelVal, null));
 
-        /* add the status */
+        /* the status */
         add(ComponentUtil.createJLabel("Status: ", fontLabel, null));
         String statusStr = bug != null ? bug.getStatus().getValue() : "";
         add(ComponentUtil.createJLabel(statusStr, fontLabelVal, null));
 
-        /* add the source */
+        /* the source */
         add(ComponentUtil.createJLabel("Source: ", fontLabel, null));
         String sourceStr = bug != null ? bug.getSource() : "";
         add(ComponentUtil.createJLabel(sourceStr, fontLabelVal, null));
 
-        /* add the nickname */
+        /* the nickname */
         add(ComponentUtil.createJLabel("Created by: ", fontLabel, null));
         String nicknameStr = bug != null ? bug.getNickname() : "";
         add(ComponentUtil.createJLabel(nicknameStr, fontLabelVal, null));
 
-        /* add the date created */
+        /* the date created */
         add(ComponentUtil.createJLabel("Date created: ", fontLabel, null));
         String dateCreatedStr =
@@ -127,10 +139,9 @@
         add(ComponentUtil.createJLabel(dateCreatedStr, fontLabelVal, null));
 
-        /* add the date updated */
+        /* the date updated */
         add(ComponentUtil.createJLabel("Date updated: ", fontLabel, null));
         String dateUpdatedStr =
                 bug != null ? df.format(bug.getDateUpdated()) : "";
         add(ComponentUtil.createJLabel(dateUpdatedStr, fontLabelVal, null));
-
     }
 
@@ -141,5 +152,5 @@
             if (bug != null) {
                 String mapdustSite =
-                        Configuration.getInstance().getMapdustBugDetailsUrl();
+                    Configuration.getInstance().getMapdustBugDetailsUrl();
                 bugDetailsUrl = mapdustSite + bug.getId().toString();
             }
@@ -150,7 +161,6 @@
                     String errorMessage = "Error opening the MapDust bug ";
                     errorMessage += "details page";
-                    JOptionPane.showMessageDialog(Main.parent,
-                            tr(errorMessage), tr("Error"),
-                            JOptionPane.ERROR_MESSAGE);
+                    JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
+                            tr("Error"), JOptionPane.ERROR_MESSAGE);
                 }
             }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugListPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugListPanel.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugListPanel.java	(revision 25591)
@@ -0,0 +1,446 @@
+/* Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.component.panel;
+
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.JList;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.border.LineBorder;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.plugins.mapdust.MapdustPlugin;
+import org.openstreetmap.josm.plugins.mapdust.gui.MapdustGUI;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.adapter.DisplayMenu;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.show.MapdustShowAction;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowCloseBugAction;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowCommentBugAction;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowInvalidateBugAction;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowReOpenBugAction;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.model.BugsListModel;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.renderer.BugListCellRenderer;
+import org.openstreetmap.josm.plugins.mapdust.gui.component.util.ComponentUtil;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugDetailsObservable;
+import org.openstreetmap.josm.plugins.mapdust.gui.observer.MapdustBugDetailsObserver;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
+
+
+/**
+ * Defines the components of the MapDust bug list panel.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public class MapdustBugListPanel extends JPanel implements ListSelectionListener,
+        MapdustBugDetailsObservable {
+
+    /** The serial version UID */
+    private static final long serialVersionUID = -675120506597637085L;
+
+    /** The list of observers */
+    private final ArrayList<MapdustBugDetailsObserver> observers =
+            new ArrayList<MapdustBugDetailsObserver>();
+
+    /** The list of <code>MapdustBug</code> objects */
+    private List<MapdustBug> mapdustBugsList;
+
+    /** The list of bugs */
+    private JList mapdustBugsJList;
+
+    /** The scroll pane for the <code>MapdustBug</code>s */
+    private JScrollPane cmpMapdustBugs;
+
+    /** The button panel */
+    private MapdustButtonPanel btnPanel;
+
+    /** The <code>MapdustGUI</code> */
+    private MapdustGUI mapdustGUI;
+
+    /** The pop-up menu */
+    private JPopupMenu menu;
+
+    /** The add comment menu item */
+    private JMenuItem menuAddComment;
+
+    /** The fixed menu item */
+    private JMenuItem menuFixed;
+
+    /** The invalidate menu item */
+    private JMenuItem menuInvalidate;
+
+    /** The re-open menu item */
+    private JMenuItem menuReopen;
+
+    /**
+     * Builds a <code>MapdustPlugin</code> object
+     */
+    public MapdustBugListPanel() {}
+
+    /**
+     * Builds a <code>MapdustPlugin</code> object with the given parameters.
+     *
+     * @param mapdustBugsList The list of <code>MapdustBug</code> objects
+     * @param name The name of the panel
+     * @param mapdustPlugin The <code>MapdustPlugin</code> object
+     */
+    public MapdustBugListPanel(List<MapdustBug> mapdustBugsList, String name,
+            MapdustPlugin mapdustPlugin) {
+        this.mapdustGUI = mapdustPlugin.getMapdustGUI();
+        this.mapdustBugsList = mapdustBugsList;
+        setLayout(new BorderLayout(5, 10));
+        addComponents(mapdustPlugin);
+        setName(name);
+    }
+
+    /**
+     * Adds the components to the MapDust panel.
+     *
+     * @param mapdustPlugin The <code>MapdustPlugin</code> object
+     */
+    private void addComponents(MapdustPlugin mapdustPlugin) {
+        /* create components */
+        if (btnPanel == null) {
+            btnPanel = new MapdustButtonPanel(mapdustPlugin);
+        }
+        if (menu == null) {
+            menu = new JPopupMenu();
+            /* add comment item */
+            MapdustShowAction action = new ShowCommentBugAction(mapdustPlugin);
+            menuAddComment = ComponentUtil.createJMenuItem(action, "Add comment",
+                    "dialogs/comment.png");
+            menu.add(menuAddComment);
+            /* fix bug item */
+            action = new ShowCloseBugAction(mapdustPlugin);
+            menuFixed = ComponentUtil.createJMenuItem(action, "Close bug",
+                    "dialogs/fixed.png");
+            menu.add(menuFixed);
+            /* invalidate bug item */
+            action = new ShowInvalidateBugAction(mapdustPlugin);
+            menuInvalidate = ComponentUtil.createJMenuItem(action,
+                    "Invalidate bug", "dialogs/invalid.png");
+            menu.add(menuInvalidate);
+            /* re-open bug item */
+            action = new ShowReOpenBugAction(mapdustPlugin);
+            menuReopen = ComponentUtil.createJMenuItem(action, "Re-open bug",
+                    "dialogs/reopen.png");
+            menu.add(menuReopen);
+        }
+        /* create bugs list */
+        if (mapdustBugsList == null || mapdustBugsList.isEmpty()) {
+            String text = " No bugs in the current view for the selected";
+            text += " filters!";
+            JList textJList = new JList(new String[] { text });
+            textJList.setBorder(new LineBorder(Color.black, 1, false));
+            textJList.setCellRenderer(new BugListCellRenderer());
+            cmpMapdustBugs = ComponentUtil.createJScrollPane(textJList);
+            add(cmpMapdustBugs, BorderLayout.CENTER);
+        } else {
+            mapdustBugsJList = ComponentUtil.createJList(mapdustBugsList, menu);
+            mapdustBugsJList.addListSelectionListener(this);
+            DisplayMenu adapter = new DisplayMenu(mapdustBugsJList, menu);
+            mapdustBugsJList.addMouseListener(adapter);
+            cmpMapdustBugs = ComponentUtil.createJScrollPane(mapdustBugsJList);
+            add(cmpMapdustBugs, BorderLayout.CENTER);
+        }
+        /* add button panel */
+        add(btnPanel, BorderLayout.SOUTH);
+    }
+
+    /**
+     * Updates the <code>MapdustPanel</code> with the new list of
+     * <code>MapdustBug</code>s. If the list is null or empty an appropriate
+     * message will be displayed on the list.
+     *
+     * @param mapdustBugsList The list of <code>MapdustBug</code>s
+     */
+    public void updateComponents(List<MapdustBug> mapdustBugsList) {
+        this.mapdustBugsList = mapdustBugsList;
+        if (mapdustBugsList == null || mapdustBugsList.isEmpty()) {
+            String text = " No bugs in the current view for the selected";
+            text += " filters!";
+            JList textJList = new JList(new String[] { text });
+            textJList.setBorder(new LineBorder(Color.black, 1, false));
+            textJList.setCellRenderer(new BugListCellRenderer());
+            cmpMapdustBugs.getViewport().setView(textJList);
+        } else {
+            if (mapdustBugsJList == null) {
+                mapdustBugsJList = ComponentUtil.createJList(mapdustBugsList,
+                        menu);
+                mapdustBugsJList.addListSelectionListener(this);
+                DisplayMenu adapter = new DisplayMenu(mapdustBugsJList, menu);
+                mapdustBugsJList.addMouseListener(adapter);
+            } else {
+                mapdustBugsJList.setModel(new BugsListModel(mapdustBugsList));
+            }
+            cmpMapdustBugs.getViewport().setView(mapdustBugsJList);
+        }
+    }
+
+    /**
+     *
+     */
+    @Override
+    public void valueChanged(ListSelectionEvent event) {
+        if (!event.getValueIsAdjusting()) {
+            MapdustBug selectedBug = (MapdustBug) mapdustBugsJList.getSelectedValue();
+            if (selectedBug != null) {
+                Main.pref.put("selectedBug.status", selectedBug.getStatus()
+                        .getValue());
+                if (selectedBug.getStatus().getKey().equals(1)) {
+                    /* status open */
+                    btnPanel.getBtnAddComment().setEnabled(true);
+                    btnPanel.getBtnReOpenBugReport().setEnabled(false);
+                    btnPanel.getBtnInvalidateBugReport().setEnabled(true);
+                    btnPanel.getBtnFixBugReport().setEnabled(true);
+                    getMenuReopen().setEnabled(false);
+                    getMenuInvalidate().setEnabled(true);
+                    getMenuFixed().setEnabled(true);
+                }
+                if (selectedBug.getStatus().getKey().equals(2)) {
+                    /* status fixed */
+                    btnPanel.getBtnAddComment().setEnabled(true);
+                    btnPanel.getBtnReOpenBugReport().setEnabled(true);
+                    btnPanel.getBtnInvalidateBugReport().setEnabled(false);
+                    btnPanel.getBtnFixBugReport().setEnabled(false);
+                    getMenuReopen().setEnabled(true);
+                    getMenuInvalidate().setEnabled(false);
+                    getMenuFixed().setEnabled(false);
+                }
+                if (selectedBug.getStatus().getKey().equals(3)) {
+                    /* status invalid */
+                    btnPanel.getBtnAddComment().setEnabled(true);
+                    btnPanel.getBtnReOpenBugReport().setEnabled(true);
+                    btnPanel.getBtnInvalidateBugReport().setEnabled(false);
+                    btnPanel.getBtnFixBugReport().setEnabled(false);
+                    getMenuReopen().setEnabled(true);
+                    getMenuInvalidate().setEnabled(false);
+                    getMenuFixed().setEnabled(false);
+                }
+                notifyObservers(selectedBug);
+            } else {
+                btnPanel.getBtnWorkOffline().setSelected(false);
+                btnPanel.getBtnWorkOffline().setFocusable(false);
+                btnPanel.getBtnRefresh().setSelected(false);
+                btnPanel.getBtnRefresh().setFocusable(false);
+                btnPanel.getBtnFilter().setSelected(false);
+                btnPanel.getBtnFilter().setFocusable(false);
+                btnPanel.getBtnAddComment().setEnabled(false);
+                btnPanel.getBtnFixBugReport().setEnabled(false);
+                btnPanel.getBtnInvalidateBugReport().setEnabled(false);
+                btnPanel.getBtnReOpenBugReport().setEnabled(false);
+            }
+            /* re-paint */
+            Main.map.mapView.repaint();
+            mapdustGUI.repaint();
+        }
+    }
+
+    /**
+     * Returns the selected bug from the list of MapDust bugs.
+     *
+     * @return a <code>MapdustBug</code> object
+     */
+    public MapdustBug getSelectedBug() {
+        MapdustBug selectedBug = null;
+        if (getMapdustBugsJList() != null) {
+            selectedBug = (MapdustBug) getMapdustBugsJList().getSelectedValue();
+        }
+        return selectedBug;
+    }
+
+    /**
+     * Sets the <code>MapdustBug</code> which will be selected from the list of
+     * MapDust bug.
+     *
+     * @param mapdustBug The <code>MapdustBug</code> object
+     */
+    public void setSelectedBug(MapdustBug mapdustBug) {
+        mapdustBugsJList.setSelectedValue(mapdustBug, false);
+        int index = mapdustBugsJList.getSelectedIndex();
+        mapdustBugsJList.ensureIndexIsVisible(index);
+    }
+
+    /**
+     * Selects the <code>MapdustBug</code> at the given index.
+     *
+     * @param index The index of the <code>MapdustBug</code>
+     */
+    public void resetSelectedBug(int index) {
+        if (mapdustBugsJList != null) {
+            mapdustBugsJList.setSelectedIndex(index);
+        }
+    }
+
+    /**
+     * Returns the selected <code>MapdustBug</code> object index.
+     *
+     * @return index
+     */
+    public int getSelectedBugIndex() {
+        return mapdustBugsJList.getSelectedIndex();
+    }
+
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code>.
+     */
+    public void disableBtnPanel() {
+        btnPanel.disableComponents();
+    }
+
+    /**
+     * Enables the basic components from the <code>MapdustButtonPanel</code>.
+     * Basic components are considered the following buttons: work offline,
+     * filter bug report, and refresh.If the onlyBasic flag is true then the
+     * other buttons will be disabled.
+     *
+     * @param onlyBasic If true then the not basic buttons will be disabled
+     */
+    public void enableBtnPanel(boolean onlyBasic) {
+        btnPanel.enableBasicComponents(onlyBasic);
+    }
+
+    /**
+     * Returns the list of bugs
+     *
+     * @return the listBugs
+     */
+    public JList getMapdustBugsJList() {
+        return mapdustBugsJList;
+    }
+
+    /**
+     * Return the menu
+     *
+     * @return the menu
+     */
+    public JPopupMenu getMenu() {
+        return menu;
+    }
+
+    /**
+     * Returns the button panel
+     *
+     * @return the btnPanel
+     */
+    public MapdustButtonPanel getBtnPanel() {
+        return btnPanel;
+    }
+
+    /**
+     * Returns the 'add comment' menu item
+     *
+     * @return the menuAddComment
+     */
+    public JMenuItem getMenuAddComment() {
+        return menuAddComment;
+    }
+
+    /**
+     * Returns the 'fixed' menu item
+     *
+     * @return the menuFixed
+     */
+    public JMenuItem getMenuFixed() {
+        return menuFixed;
+    }
+
+    /**
+     * Returns the 'invalidate' menu item
+     *
+     * @return the menuInvalidate
+     */
+    public JMenuItem getMenuInvalidate() {
+        return menuInvalidate;
+    }
+
+    /**
+     * Returns the 're-open' menu item
+     *
+     * @return the menuReopen
+     */
+    public JMenuItem getMenuReopen() {
+        return menuReopen;
+    }
+
+    /**
+     * Returns the list of <code>MapdustBug</code> objects
+     *
+     * @return the mapdustBugsList
+     */
+    public List<MapdustBug> getMapdustBugsList() {
+        return mapdustBugsList;
+    }
+
+    /**
+     * Adds a new MapDust bug details observer to the list of observers.
+     *
+     * @param observer The <code>MapdustBugDetailsObserver</code> object
+     */
+    @Override
+    public void addObserver(MapdustBugDetailsObserver observer) {
+        if (!this.observers.contains(observer)) {
+            this.observers.add(observer);
+        }
+    }
+
+    /**
+     * Removes the given MapDust bug details observer from the list of
+     * observers.
+     *
+     * @param observer The <code>MapdustBugDetailsObserver</code> object
+     */
+    @Override
+    public void removeObserver(MapdustBugDetailsObserver observer) {
+        this.observers.remove(observer);
+
+    }
+
+    /**
+     * Notifies the MapDust bug details observers observing the given
+     * <code>MapdustBug</code> object.
+     *
+     * @param mapdustBug The <code>MapdustBug</code> object
+     */
+    @Override
+    public void notifyObservers(MapdustBug mapdustBug) {
+        Iterator<MapdustBugDetailsObserver> elements =
+                this.observers.iterator();
+        while (elements.hasNext()) {
+            (elements.next()).showDetails(mapdustBug);
+        }
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugPropertiesPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugPropertiesPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustBugPropertiesPanel.java	(revision 25591)
@@ -49,4 +49,9 @@
 /**
  * Defines the JPanel for the <code>MapdustBug</code> object properties.
+ * The MapDust bug properties panel displays detailed information about a
+ * given <code>MapdustBug</code> and it is composed by the following panels:
+ * <code>MapdustBugDetailsPanel</code>, <code>MapdustAddressPanel</code>,
+ * <code>MapdustDescriptionPanel</code>, <code>MapdustCommentsPanel</code> and
+ * <code>MapdustHelpPanel</code>.
  *
  * @author Bea
@@ -56,18 +61,18 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 5320232823004570279L;
+
+    /** The <code>MapdustBugDetailsPanel</code> object */
+    private MapdustBugDetailsPanel detailsPanel;
+
+    /** The <code>MapdustAddressPanel</code> object */
+    private MapdustAddressPanel addressPanel;
+
+    /** The <code>MapdustDescriptionPanel</code> object */
+    private MapdustDescriptionPanel descriptionPanel;
 
     /** The <code>MapdustCommentsPanel</code> object */
     private MapdustCommentsPanel commentsPanel;
 
-    /** The <code>MapdustBugDetailsPanel</code> object */
-    private MapdustBugDetailsPanel detailsPanel;
-
-    /** The <code>MapdustAddressPanel</code> object */
-    private MapdustAddressPanel addressPanel;
-
-    /** The <code>MapdustDescriptionPanel</code> object */
-    private MapdustDescriptionPanel descriptionPanel;
-
     /** The <code>MapdustHelpPanel</code> object */
     private MapdustHelpPanel helpPanel;
@@ -83,5 +88,6 @@
 
     /**
-     * Builds a <code>MapdustBugPropertiesPanel</code> object.
+     * Builds a <code>MapdustBugPropertiesPanel</code> object based on the given
+     * argument.
      *
      * @param mapdustBug The <code>MapdustBug</code> object
@@ -96,5 +102,5 @@
     /**
      * Displays the details of the given MapDust bug.
-     * 
+     *
      * @param mapdustBug The <code>MapdustBug</code> object
      */
@@ -112,13 +118,6 @@
         if (mainPanel != null) {
             index = mainPanel.getSelectedIndex();
-            if (mainPanel.getComponentCount() > 0) {
-                mainPanel.remove(cmpDetails);
-                mainPanel.remove(cmpAddress);
-                mainPanel.remove(descriptionPanel);
-                mainPanel.remove(commentsPanel);
-                mainPanel.remove(helpPanel);
-            }
-            remove(mainPanel);
-        }
+        }
+
         /* create the panels */
         createPanels(selectedBug);
@@ -134,5 +133,5 @@
      */
     private void addComponents(MapdustBug mapdustBug) {
-        MapdustBug selectedBug=mapdustBug;
+        MapdustBug selectedBug = mapdustBug;
         if (mapdustBug != null) {
             if (mapdustBug.getNumberOfComments() > 0) {
@@ -140,6 +139,6 @@
                 selectedBug = getBug(id);
             }
-            createPanels(selectedBug);
-        }
+        }
+        createPanels(selectedBug);
     }
 
@@ -150,41 +149,64 @@
      */
     private void createPanels(MapdustBug mapdustBug) {
-        /* create details panel */
-        detailsPanel = new MapdustBugDetailsPanel(mapdustBug);
-        cmpDetails = ComponentUtil.createJScrollPane(detailsPanel, getBounds(),
-                getBackground(), true, true);
-        cmpDetails.setPreferredSize(new Dimension(100, 100));
-        cmpDetails.setName("Bug Details");
-
-        /* create address panel */
+        /* details panel */
+        if (cmpDetails == null) {
+            detailsPanel = new MapdustBugDetailsPanel(mapdustBug);
+            cmpDetails = ComponentUtil.createJScrollPane(detailsPanel,
+                    getBounds(), getBackground(), true, true);
+            cmpDetails.setPreferredSize(new Dimension(100, 100));
+            cmpDetails.setName("Bug Details");
+        } else {
+            detailsPanel.updateComponents(mapdustBug);
+        }
+
+        /* address panel */
         Address address = mapdustBug != null ? mapdustBug.getAddress() : null;
         LatLon coordinates = mapdustBug != null ? mapdustBug.getLatLon() : null;
-        addressPanel = new MapdustAddressPanel(address, coordinates);
-        cmpAddress = ComponentUtil.createJScrollPane(addressPanel, getBounds(),
-                getBackground(), true, true);
-        cmpAddress.setName("Address");
-        cmpAddress.setPreferredSize(new Dimension(100, 100));
-
-        /* create description panel */
+        if (cmpAddress == null) {
+            addressPanel = new MapdustAddressPanel(address, coordinates);
+            cmpAddress = ComponentUtil.createJScrollPane(addressPanel,
+                    getBounds(), getBackground(), true, true);
+            cmpAddress.setName("Address");
+            cmpAddress.setPreferredSize(new Dimension(100, 100));
+        } else {
+            addressPanel.updateComponents(address, coordinates);
+        }
+
+        /* description panel */
         String description = mapdustBug != null ? mapdustBug.getDescription() : "";
-        descriptionPanel = new MapdustDescriptionPanel(description);
-
-        /* create comments panel */
+        if (descriptionPanel == null) {
+            descriptionPanel = new MapdustDescriptionPanel(description);
+        } else {
+            descriptionPanel.updateComponents(description);
+        }
+
+        /* comments panel */
         MapdustComment[] comments = mapdustBug != null ? mapdustBug.getComments()
                 : new MapdustComment[0];
-        commentsPanel = new MapdustCommentsPanel(comments);
-
-        /* create the help panel */
-        helpPanel = new MapdustHelpPanel();
+        if (commentsPanel == null) {
+            commentsPanel = new MapdustCommentsPanel(comments);
+        } else {
+           commentsPanel.updateComponents(comments);
+           mainPanel.setTitleAt(3, commentsPanel.getName());
+        }
+
+        /* the help panel */
+        if (helpPanel == null) {
+            helpPanel = new MapdustHelpPanel();
+        }
 
         /* creates the main panel */
-        mainPanel = new JTabbedPane();
-        mainPanel.setIgnoreRepaint(true);
-        mainPanel.add(cmpDetails, 0);
-        mainPanel.add(cmpAddress, 1);
-        mainPanel.add(descriptionPanel, 2);
-        mainPanel.add(commentsPanel, 3);
-        mainPanel.add(helpPanel);
-        add(mainPanel, BorderLayout.CENTER);
+        if (mainPanel == null) {
+            mainPanel = new JTabbedPane();
+            mainPanel.setIgnoreRepaint(true);
+            mainPanel.add(cmpDetails, 0);
+            mainPanel.add(cmpAddress, 1);
+            mainPanel.add(descriptionPanel, 2);
+            mainPanel.add(commentsPanel, 3);
+            mainPanel.add(helpPanel);
+            add(mainPanel, BorderLayout.CENTER);
+        } else {
+            mainPanel.revalidate();
+        }
     }
 
@@ -201,5 +223,5 @@
         } catch (MapdustServiceHandlerException e) {
             String errorMessage = "There was a MapDust service error durring ";
-            errorMessage+=" the MapDust bug retrieve process.";
+            errorMessage += " the MapDust bug retrieve process.";
             JOptionPane.showMessageDialog(Main.parent, tr(errorMessage),
                     tr("Error"), JOptionPane.ERROR_MESSAGE);
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustButtonPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustButtonPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustButtonPanel.java	(revision 25591)
@@ -39,4 +39,5 @@
 import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowCloseBugAction;
 import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowCommentBugAction;
+import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowFilterBugAction;
 import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowInvalidateBugAction;
 import org.openstreetmap.josm.plugins.mapdust.gui.action.show.ShowReOpenBugAction;
@@ -46,5 +47,5 @@
 
 /**
- * Defines the panel of the Mapdust bug list action buttons.
+ * Defines the panel of buttons for the MapDust bugs list.
  *
  * @author Bea
@@ -54,23 +55,26 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -4234650664854226973L;
 
     /** The work offline button */
     private JToggleButton btnWorkOffline;
 
+    /** The filter button */
+    private JToggleButton btnFilter;
+
+    /** The add comment button */
+    private JToggleButton btnAddComment;
+
+    /** The fix bug report button */
+    private JToggleButton btnFixBugReport;
+
+    /** The invalidate bug report button */
+    private JToggleButton btnInvalidateBugReport;
+
+    /** The re-open bug report button */
+    private JToggleButton btnReOpenBugReport;
+
     /** The refresh button */
     private JToggleButton btnRefresh;
-
-    /** The add comment button */
-    private JToggleButton btnAddComment;
-
-    /** The fix bug report button */
-    private JToggleButton btnFixBugReport;
-
-    /** The invalidate bug report button */
-    private JToggleButton btnInvalidateBugReport;
-
-    /** The re-open bug report button */
-    private JToggleButton btnReOpenBugReport;
 
     /**
@@ -91,10 +95,9 @@
 
     /**
-     * Add the components to the button panel
+     * Add the components to the button panel.
      *
      * @param mapdustPlugin The <code>MapdustPlugin</code> object
      */
     private void addComponents(MapdustPlugin mapdustPlugin) {
-        /* create components */
         /* 'Work offline' button */
         if (btnWorkOffline == null) {
@@ -109,8 +112,61 @@
                 imagePath = "dialogs/online.png";
             }
-            AbstractAction action = new ExecuteWorkOffline(mapdustPlugin.getMapdustGUI());
+            AbstractAction action =
+                    new ExecuteWorkOffline(mapdustPlugin.getMapdustGUI());
             ((ExecuteWorkOffline) action).addObserver(mapdustPlugin);
-            btnWorkOffline = ComponentUtil.createJButton("Work offline",
-                    tooltipText, imagePath, action);
+            btnWorkOffline =
+                    ComponentUtil.createJButton("Work offline", tooltipText,
+                            imagePath, action);
+            btnWorkOffline.setSelected(false);
+            btnWorkOffline.setFocusTraversalKeysEnabled(false);
+        }
+        /* 'Filter' button */
+        if (btnFilter == null) {
+            AbstractAction action = new ShowFilterBugAction(mapdustPlugin);
+            btnFilter =
+                    ComponentUtil.createJButton("Filter bug reports",
+                            "Filter bug reports",
+                            "dialogs/mapdust_bug_filter.png", action);
+            btnFilter.setEnabled(true);
+            btnFilter.setFocusTraversalKeysEnabled(false);
+        }
+        /* 'Add Comment' button */
+        if (btnAddComment == null) {
+            AbstractAction action = new ShowCommentBugAction(mapdustPlugin);
+            btnAddComment =
+                    ComponentUtil
+                            .createJButton("Comment bug report",
+                                    "Comment bug report",
+                                    "dialogs/comment.png", action);
+            btnAddComment.setEnabled(false);
+            btnAddComment.setFocusTraversalKeysEnabled(false);
+        }
+        /* 'Fix bug report' button */
+        if (btnFixBugReport == null) {
+            AbstractAction action = new ShowCloseBugAction(mapdustPlugin);
+            btnFixBugReport =
+                    ComponentUtil.createJButton("Close bug report",
+                            "Close bug report", "dialogs/fixed.png", action);
+            btnFixBugReport.setEnabled(false);
+            btnFixBugReport.setFocusTraversalKeysEnabled(false);
+        }
+        /* 'Invalidate bug report' button */
+        if (btnInvalidateBugReport == null) {
+            AbstractAction action = new ShowInvalidateBugAction(mapdustPlugin);
+            btnInvalidateBugReport =
+                    ComponentUtil.createJButton("Invalidate bug report",
+                            "Invalidate bug report", "dialogs/invalid.png",
+                            action);
+            btnInvalidateBugReport.setEnabled(false);
+            btnInvalidateBugReport.setFocusTraversalKeysEnabled(false);
+        }
+        /* 'Re-open bug report' button */
+        if (btnReOpenBugReport == null) {
+            AbstractAction action = new ShowReOpenBugAction(mapdustPlugin);
+            btnReOpenBugReport =
+                    ComponentUtil.createJButton("Re-open bug report",
+                            "Re-open bug report", "dialogs/reopen.png", action);
+            btnReOpenBugReport.setEnabled(false);
+            btnReOpenBugReport.setFocusTraversalKeysEnabled(false);
         }
         /* 'Refresh' button */
@@ -119,46 +175,91 @@
             AbstractAction action = new ExecuteRefresh();
             ((ExecuteRefresh) action).addObserver(mapdustPlugin);
-            btnRefresh = ComponentUtil.createJButton("Refresh", "Refresh",
-                    "dialogs/refresh.png", action);
+            btnRefresh =
+                    ComponentUtil.createJButton("Refresh", "Refresh",
+                            "dialogs/mapdust_refresh.png", action);
             if (pluginState.equals(MapdustPluginState.OFFLINE.getValue())) {
                 btnRefresh.setEnabled(false);
             }
-        }
-        /* 'Add Comment' button */
-        if (btnAddComment == null) {
-            AbstractAction action = new ShowCommentBugAction(mapdustPlugin);
-            btnAddComment = ComponentUtil.createJButton("Comment bug report",
-                    "Comment bug report", "dialogs/comment.png", action);
-            btnAddComment.setEnabled(false);
-        }
-        /* 'Fix bug report' button */
-        if (btnFixBugReport == null) {
-            AbstractAction action = new ShowCloseBugAction(mapdustPlugin);
-            btnFixBugReport = ComponentUtil.createJButton("Close bug report",
-                    "Close bug report", "dialogs/fixed.png", action);
-            btnFixBugReport.setEnabled(false);
-        }
-        /* 'Invalidate bug report' button */
-        if (btnInvalidateBugReport == null) {
-            AbstractAction action = new ShowInvalidateBugAction(mapdustPlugin);
-            btnInvalidateBugReport = ComponentUtil.createJButton("Invalidate bug report",
-                    "Invalidate bug report", "dialogs/invalid.png", action);
-            btnInvalidateBugReport.setEnabled(false);
-        }
-        /* 'Re-open bug report' button */
-        if (btnReOpenBugReport == null) {
-            AbstractAction action = new ShowReOpenBugAction(mapdustPlugin);
-            btnReOpenBugReport = ComponentUtil.createJButton("Re-open bug report",
-                    "Re-open bug report", "dialogs/reopen.png", action);
-            btnReOpenBugReport.setEnabled(false);
+            btnRefresh.setFocusTraversalKeysEnabled(false);
         }
 
         /* add components */
         add(btnWorkOffline);
-        add(btnRefresh);
+        add(btnFilter);
         add(btnAddComment);
         add(btnFixBugReport);
         add(btnInvalidateBugReport);
         add(btnReOpenBugReport);
+        add(btnRefresh);
+    }
+
+    /**
+     * Disables the buttons from the <code>MapdustButtonPanel</code>.
+     */
+    public void disableComponents() {
+        if (btnWorkOffline != null) {
+            btnWorkOffline.setEnabled(false);
+            btnWorkOffline.setSelected(false);
+            btnWorkOffline.setFocusable(false);
+        }
+        if (btnFilter != null) {
+            btnFilter.setEnabled(false);
+            btnFilter.setEnabled(false);
+            btnFilter.setEnabled(false);
+        }
+        if (btnRefresh != null) {
+            btnRefresh.setEnabled(false);
+            btnRefresh.setSelected(false);
+            btnRefresh.setFocusable(false);
+        }
+        if (btnAddComment != null) {
+            btnAddComment.setEnabled(false);
+            btnAddComment.setSelected(false);
+            btnAddComment.setFocusable(false);
+        }
+        if (btnFixBugReport != null) {
+            btnFixBugReport.setEnabled(false);
+            btnFixBugReport.setSelected(false);
+            btnFixBugReport.setFocusable(false);
+        }
+        if (btnInvalidateBugReport != null) {
+            btnInvalidateBugReport.setEnabled(false);
+            btnInvalidateBugReport.setEnabled(false);
+            btnInvalidateBugReport.setEnabled(false);
+        }
+        if (btnReOpenBugReport != null) {
+            btnReOpenBugReport.setEnabled(false);
+            btnReOpenBugReport.setEnabled(false);
+            btnReOpenBugReport.setEnabled(false);
+        }
+    }
+
+    /**
+     * Enables the basic components from the <code>MapdustButtonPanel</code>.
+     * Basic components are considered the following buttons: work offline,
+     * filter bug report, and refresh.If the onlyBasic flag is true then the
+     * other buttons will be disabled.
+     *
+     * @param onlyBasic If true then the not basic buttons will be disabled
+     */
+    public void enableBasicComponents(boolean onlyBasic) {
+        btnWorkOffline.setEnabled(true);
+        btnFilter.setEnabled(true);
+        btnRefresh.setEnabled(true);
+        if (onlyBasic) {
+            btnAddComment.setEnabled(false);
+            btnAddComment.setSelected(false);
+            btnAddComment.setFocusable(false);
+            btnFixBugReport.setEnabled(false);
+            btnFixBugReport.setSelected(false);
+            btnFixBugReport.setFocusable(false);
+            btnInvalidateBugReport.setEnabled(false);
+            btnInvalidateBugReport.setEnabled(false);
+            btnInvalidateBugReport.setEnabled(false);
+            btnReOpenBugReport.setEnabled(false);
+            btnReOpenBugReport.setEnabled(false);
+            btnReOpenBugReport.setEnabled(false);
+
+        }
     }
 
@@ -182,4 +283,11 @@
 
     /**
+     * @return the btnFilter
+     */
+    public JToggleButton getBtnFilter() {
+        return btnFilter;
+    }
+
+    /**
      * Returns the add comment button
      *
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustCommentsPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustCommentsPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustCommentsPanel.java	(revision 25591)
@@ -52,5 +52,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 5730420562553912697L;
 
     /**
@@ -62,7 +62,15 @@
     public MapdustCommentsPanel(MapdustComment[] comments) {
         setLayout(new BorderLayout());
-        String name = "Bug Comments (";
-        name += comments.length + " )";
-        setName(name);
+        addComponents(comments);
+    }
+
+    /**
+     * Updates the components of the <code>MapdustCommentsPanel</code> based on
+     * the given parameter.
+     *
+     * @param comments The array of <code>MapdustComment</code>s
+     */
+    public void updateComponents(MapdustComment[] comments) {
+        removeAll();
         addComponents(comments);
     }
@@ -74,4 +82,7 @@
      */
     private void addComponents(MapdustComment[] comments) {
+        String name = "Bug Comments (";
+        name += comments.length + " )";
+        setName(name);
         JTextArea txt = new JTextArea();
         txt.setAutoscrolls(true);
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustDescriptionPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustDescriptionPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustDescriptionPanel.java	(revision 25591)
@@ -49,5 +49,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -4246874841836269643L;
 
     /**
@@ -60,4 +60,24 @@
         String name = "Description ";
         setName(name);
+        addComponents(description);
+    }
+
+    /**
+     * Updates the components of the <code>MapdustDescriptionPanel</code> based
+     * on the given parameter
+     *
+     * @param description The description
+     */
+    public void updateComponents(String description) {
+        removeAll();
+        addComponents(description);
+    }
+
+    /**
+     * Adds the components to the <code>MapdustDescriptionPanel</code>.
+     *
+     * @param description the description
+     */
+    private void addComponents(String description) {
         if (description != null && !description.isEmpty()) {
             JTextArea txtDescription = new JTextArea(description);
@@ -65,6 +85,6 @@
             txtDescription.setFont(new Font("Times New Roman", Font.BOLD, 12));
             txtDescription.setEditable(false);
-            JScrollPane cmpDescription = ComponentUtil.createJScrollPane(txtDescription,
-                    null, Color.white, true, true);
+            JScrollPane cmpDescription = ComponentUtil.createJScrollPane(
+                    txtDescription, null, Color.white, true, true);
             cmpDescription.setPreferredSize(new Dimension(100, 100));
             add(cmpDescription, BorderLayout.CENTER);
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustHelpPanel.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustHelpPanel.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/MapdustHelpPanel.java	(revision 25591)
@@ -55,5 +55,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 8366853437915060878L;
 
     /**
@@ -94,5 +94,6 @@
      * related to the MapDust plugin.
      *
-     * @return
+     * @return a string containing the text which will be displayed on the Help
+     * tab
      */
     private String buildText() {
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/panel/package-info.java	(revision 25591)
@@ -1,4 +1,5 @@
 /**
- * constains the panel classes
+ * Contains the customized <code>JPanel</code> classes used for building
+ * the MapDust plugin GUI.
  */
 package org.openstreetmap.josm.plugins.mapdust.gui.component.panel;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/renderer/ActionListCellRenderer.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/renderer/ActionListCellRenderer.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/renderer/ActionListCellRenderer.java	(revision 25591)
@@ -49,5 +49,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 7552949107018269769L;
 
     /**
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/renderer/BugListCellRenderer.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/renderer/BugListCellRenderer.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/renderer/BugListCellRenderer.java	(revision 25591)
@@ -49,5 +49,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -5888587819204364046L;
 
     /**
@@ -78,5 +78,8 @@
             text += mapdustBug.getType().getValue();
             if (mapdustBug.getAddress() != null) {
-                text += " (" + mapdustBug.getAddress().toString() + " )";
+                String addressStr=mapdustBug.getAddress().toString();
+                if (!addressStr.trim().isEmpty()) {
+                    text += " (" + mapdustBug.getAddress().toString() + " )";
+                }
             }
             DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT,
@@ -86,4 +89,5 @@
             label.setText(text);
             label.setFont(new Font("Times New Roman", Font.BOLD, 12));
+            label.setSize(200, 20);
         }
         if (value instanceof String){
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/ComponentUtil.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/ComponentUtil.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/ComponentUtil.java	(revision 25591)
@@ -38,4 +38,5 @@
 import javax.swing.Action;
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
@@ -49,4 +50,5 @@
 import javax.swing.ListCellRenderer;
 import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
 import javax.swing.border.LineBorder;
 import org.openstreetmap.josm.plugins.mapdust.gui.component.model.ActionListModel;
@@ -74,5 +76,5 @@
      * @param font The font of the label
      * @param bounds The bounds of the element
-     * @return A <code>JLabel</code> label
+     * @return A <code>JLabel</code> object
      */
     public static JLabel createJLabel(String text, Font font, Rectangle bounds) {
@@ -83,4 +85,21 @@
         jLabel.setText(text);
         jLabel.setFont(font);
+        return jLabel;
+    }
+
+    /**
+     * Creates a <code>JLabel</code> object with the given properties.
+     *
+     * @param text The text of the label
+     * @param iconName The name of the label icon
+     * @param bounds The dimension of the label
+     * @return A <code>JLabel</code> object
+     */
+    public static JLabel createJLabel(String text, String iconName,
+            Rectangle bounds) {
+        JLabel jLabel = new JLabel(text, ImageProvider.get(iconName),
+                SwingConstants.LEFT);
+        jLabel.setBounds(bounds);
+        jLabel.setFont(new Font("Times New Roman", Font.BOLD, 12));
         return jLabel;
     }
@@ -286,3 +305,15 @@
     }
 
+    /**
+     * Creates a new <code>JCheckBox</code> object with the given properties.
+     *
+     * @param bounds The dimension of the check box
+     * @return A <code>JCheckBox</code> object
+     */
+    public static JCheckBox createJCheckBox(Rectangle bounds) {
+        JCheckBox jCheckBox = new JCheckBox();
+        jCheckBox.setBounds(bounds);
+        return jCheckBox;
+    }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/FilterCheckBox.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/FilterCheckBox.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/FilterCheckBox.java	(revision 25591)
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 14, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.component.util;
+
+
+import java.awt.Rectangle;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+
+
+/**
+ * This is a helper class for the customized <code>JCheckBox</code> object.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public class FilterCheckBox {
+
+    /** The identifier of the check box */
+    private Object id;
+
+    /** The <code>JLabel</code> of the filter */
+    private JLabel lblFilter;
+
+    /** The <code>JCheckBox</code> of the filter */
+    private JCheckBox chbFilter;
+
+    /**
+     * Builds a <code>FilterCheckBox</code> object
+     */
+    public FilterCheckBox() {}
+
+    /**
+     * Builds a <code>FilterCheckBox</code> object based on the given parameters
+     *
+     * @param id The identifier of the object
+     * @param chbBounds The bounds of the check box
+     * @param iconName The name of the icon
+     * @param text The text of the filter
+     * @param lblBounds The bounds of the label
+     */
+    public FilterCheckBox(Object id, Rectangle chbBounds, String iconName,
+            String text, Rectangle lblBounds) {
+        this.id = id;
+        this.chbFilter = ComponentUtil.createJCheckBox(chbBounds);
+        this.lblFilter = ComponentUtil.createJLabel(text, iconName, lblBounds);
+    }
+
+    /**
+     * Returns the id
+     *
+     * @return the id
+     */
+    public Object getId() {
+        return id;
+    }
+
+    /**
+     * Returns the filter label
+     *
+     * @return the lblFilter
+     */
+    public JLabel getLblFilter() {
+        return lblFilter;
+    }
+
+    /**
+     * Returns the filter check box
+     *
+     * @return the chbFilter
+     */
+    public JCheckBox getChbFilter() {
+        return chbFilter;
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/component/util/package-info.java	(revision 25591)
@@ -1,2 +1,4 @@
-
+/**
+ * Contains helper classes used for building the GUI.
+ */
 package org.openstreetmap.josm.plugins.mapdust.gui.component.util;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionListObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionListObservable.java	(revision 25590)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/* Copyright (c) 2010, skobbler GmbH
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its
- *    contributors may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package org.openstreetmap.josm.plugins.mapdust.gui.observer;
-
-
-import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustAction;
-
-
-/**
- * Observable interface for the MapdustAction list.
- *
- * @author Bea
- * @version $Revision$
- */
-public interface MapdustActionListObservable {
-
-    /**
-     * Adds a new observer to the list of observers.
-     *
-     * @param observer The <code>MapdustActionListObserver</code> object
-     */
-    public void addObserver(MapdustActionListObserver observer);
-
-    /**
-     * Removes the given observer from the list of observers.
-     *
-     * @param observer The <code>MapdustActionListObserver</code> object
-     */
-    public void removeObserver(MapdustActionListObserver observer);
-
-    /**
-     * Notifies all the observers observing the given <code>MapdustAction</code>
-     * object.
-     *
-     * @param mapdustAction The <code>MapdustAction</code> object
-     */
-    public void notifyObservers(MapdustAction mapdustAction);
-}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionListObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionListObserver.java	(revision 25590)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/* Copyright (c) 2010, skobbler GmbH
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its
- *    contributors may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package org.openstreetmap.josm.plugins.mapdust.gui.observer;
-
-
-import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustAction;
-
-
-/**
- * The observer interface for the <code>MapdustAction</code> object.
- *
- * @author Bea
- * @version $Revision$
- */
-public interface MapdustActionListObserver {
-
-    /**
-     * Adds a new <code>MapdustAction</code> object to the MapDust action list
-     *
-     * @param mapdustAction The <code>MapdustAction</code> list
-     */
-    public void addAction(MapdustAction mapdustAction);
-}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionObservable.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionObservable.java	(revision 25591)
@@ -0,0 +1,63 @@
+/* Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.observer;
+
+
+import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustAction;
+
+
+/**
+ * Observable interface for the <code>MapdustAction</code> object.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public interface MapdustActionObservable {
+
+    /**
+     * Adds a new observer to the list of observers.
+     *
+     * @param observer The <code>MapdustActionObserver</code> object
+     */
+    public void addObserver(MapdustActionObserver observer);
+
+    /**
+     * Removes the given observer from the list of observers.
+     *
+     * @param observer The <code>MapdustActionObserver</code> object
+     */
+    public void removeObserver(MapdustActionObserver observer);
+
+    /**
+     * Notifies all the observers observing the given <code>MapdustAction</code>
+     * object.
+     *
+     * @param mapdustAction The <code>MapdustAction</code> object
+     */
+    public void notifyObservers(MapdustAction mapdustAction);
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionObserver.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustActionObserver.java	(revision 25591)
@@ -0,0 +1,48 @@
+/* Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.observer;
+
+
+import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustAction;
+
+
+/**
+ * The observer interface for the <code>MapdustAction</code> object.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public interface MapdustActionObserver {
+
+    /**
+     * Adds a new <code>MapdustAction</code> object to the MapDust action list
+     *
+     * @param mapdustAction The <code>MapdustAction</code> list
+     */
+    public void addAction(MapdustAction mapdustAction);
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugDetailsObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugDetailsObservable.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugDetailsObservable.java	(revision 25591)
@@ -55,9 +55,10 @@
 
     /**
-     * Notifies all the observers observing the given <code>MapdustAction</code>
-     * object.
+     * Notifies all the observers observing the details of the given
+     * <code>MapdustBug</code> object.
      *
      * @param mapdustBug The <code>MapdustBug</code> object
      */
     public void notifyObservers(MapdustBug mapdustBug);
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugDetailsObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugDetailsObserver.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugDetailsObserver.java	(revision 25591)
@@ -47,3 +47,4 @@
      */
     public void showDetails(MapdustBug mapdustBug);
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugObservable.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugObservable.java	(revision 25591)
@@ -44,5 +44,5 @@
      * Adds a new observer to the list of observers.
      *
-     * @param observer The <code>MapdustBugObservable</code> object
+     * @param observer The <code>MapdustBugObserver</code> object
      */
     public void addObserver(MapdustBugObserver observer);
@@ -51,5 +51,5 @@
      * Removes the given observer from the list of observers.
      *
-     * @param observer The <code>MapdustBugObservable</code> object
+     * @param observer The <code>MapdustBugObserver</code> object
      */
     public void removeObserver(MapdustBugObserver observer);
@@ -62,3 +62,4 @@
      */
     public void notifyObservers(MapdustBug mapdustBug);
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugObserver.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustBugObserver.java	(revision 25591)
@@ -46,3 +46,4 @@
      */
     public void changedData(MapdustBug mapdustBug);
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustInitialUpdateObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustInitialUpdateObservable.java	(revision 25590)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/* Copyright (c) 2010, skobbler GmbH
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its
- *    contributors may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package org.openstreetmap.josm.plugins.mapdust.gui.observer;
-
-
-/**
- * The observable interface used for the initial MapDust data download and
- * plugin update.
- *
- * @author Bea
- */
-public interface MapdustInitialUpdateObservable {
-
-
-    /**
-     * Adds a new observer to the list of observers.
-     *
-     * @param observer The <code>MapdustInitialUpdateObserver</code> object
-     */
-    public void addObserver(MapdustInitialUpdateObserver observer);
-
-    /**
-     * Removes the given observer from the list of observers.
-     *
-     * @param observer The <code>MapdustInitialUpdateObserver</code> object
-     */
-    public void removeObserver(MapdustInitialUpdateObserver observer);
-
-    /**
-     * Notifies all the observers observing the initial download action.
-     *
-     */
-    public void notifyObservers();
-}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustInitialUpdateObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustInitialUpdateObserver.java	(revision 25590)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/* Copyright (c) 2010, skobbler GmbH
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its
- *    contributors may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package org.openstreetmap.josm.plugins.mapdust.gui.observer;
-
-
-/**
- * The observer interface used for the initial MapDust data download and plugin
- * update.
- *
- * @author Bea
- *
- */
-public interface MapdustInitialUpdateObserver {
-
-    /**
-     * Downloads initially the MapDust Bugs and updates the plugin.
-     */
-    public void initialUpdate();
-
-}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustRefreshObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustRefreshObservable.java	(revision 25590)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/* Copyright (c) 2010, skobbler GmbH
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its
- *    contributors may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package org.openstreetmap.josm.plugins.mapdust.gui.observer;
-
-
-/**
- * The observable interface for the refresh action.
- *
- * @author Bea
- * @version $Revision$
- */
-public interface MapdustRefreshObservable {
-
-    /**
-     * Adds a new observer to the list of observers.
-     *
-     * @param observer The <code>MapdustRefreshObserver</code>
-     */
-    public void addObserver(MapdustRefreshObserver observer);
-
-    /**
-     * Removes the given observer from the list of observers.
-     *
-     * @param observer the <code>MapdustRefreshObserver</code>
-     */
-    public void removeObserver(MapdustRefreshObserver observer);
-
-    /**
-     * Notifies all the observers observing this action.
-     */
-    public void notifyObservers();
-
-}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustRefreshObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustRefreshObserver.java	(revision 25590)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/* Copyright (c) 2010, skobbler GmbH
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its
- *    contributors may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package org.openstreetmap.josm.plugins.mapdust.gui.observer;
-
-
-/**
- * The observer interface for the refresh action. Updates the MapDust plugin
- * with new MapDust data.
- *
- * @author Bea
- * @version $Revision$
- */
-public interface MapdustRefreshObserver {
-
-    /**
-     * Refreshes the MapDust data. Downloads the bugs from the current view, and
-     * updates the plugin with the new data.
-     */
-    public void refreshData();
-}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustUpdateObservable.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustUpdateObservable.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustUpdateObservable.java	(revision 25591)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 10, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.observer;
+
+
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
+
+
+/**
+ * The observable interface for the MapDust bug update action.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public interface MapdustUpdateObservable {
+
+    /**
+     * Adds a new observer to the list of observers.
+     *
+     * @param observer The <code>MapdustUpdateObserver</code> object
+     */
+    public void addObserver(MapdustUpdateObserver observer);
+
+    /**
+     * Removes the given observer from the list of observers.
+     *
+     * @param observer The <code>MapdustUpdateObserver</code> object
+     */
+    public void removeObserver(MapdustUpdateObserver observer);
+
+    /**
+     * Notifies all the observers observing the MapDust bug update action.
+     *
+     * @param filter The <code>MapdustBugFilter</code> object
+     * @param initialUpdate Indicates if the update action is for the first time
+     * or not.
+     */
+    public void notifyObservers(MapdustBugFilter filter, boolean initialUpdate);
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustUpdateObserver.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustUpdateObserver.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/MapdustUpdateObserver.java	(revision 25591)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 10, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.gui.observer;
+
+
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
+
+
+/**
+ * The observer interface for the MapDust bug update action.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public interface MapdustUpdateObserver {
+
+    /**
+     * Updates the MapDust bugs based on the given filters. If the initialUpdate
+     * flag is true then the filters will not be applied to the MapDust bug
+     * data.
+     *
+     * @param filter The <code>MapdustBugFilter</code> object
+     * @param initialUpdate Indicates if the update action is for the first time
+     * or not.
+     */
+    public void update(MapdustBugFilter filter, boolean initialUpdate);
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/observer/package-info.java	(revision 25591)
@@ -1,2 +1,4 @@
-
+/**
+ * Contains the observer and observable interfaces.
+ */
 package org.openstreetmap.josm.plugins.mapdust.gui.observer;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/package-info.java	(revision 25591)
@@ -1,5 +1,8 @@
 /**
- * Contains the graphical user interface related part of the Mapdust plugin.
+ * Contains the graphical user interface related classes of the MapDust plugin.
+ * These classes are divided based on their type in the following four packages:
+ * action, component, observer and value.
  */
 package org.openstreetmap.josm.plugins.mapdust.gui;
 
+
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/MapdustPluginState.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/MapdustPluginState.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/MapdustPluginState.java	(revision 25591)
@@ -30,5 +30,5 @@
 
 /**
- * Enum representing the MapDust plugin state. The plugin can be in the
+ * Enumeration representing the MapDust plugin state. The plugin can be in the
  * following 2 states: online and offline.
  *
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/MapdustServiceCommand.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/MapdustServiceCommand.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/MapdustServiceCommand.java	(revision 25591)
@@ -30,5 +30,5 @@
 
 /**
- * Enum representing the MapDust service "commands".
+ * Enumeration representing the MapDust service "commands".
  *
  * @author Bea
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/gui/value/package-info.java	(revision 25591)
@@ -1,2 +1,4 @@
-
+/**
+ * Contains helper classes used by GUI.
+ */
 package org.openstreetmap.josm.plugins.mapdust.gui.value;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/package-info.java	(revision 25591)
@@ -1,5 +1,5 @@
 /**
- * The Mapdust OSM Bug reported JOSM plugin classes.
- * 
+ * Contains the JOSM MapDust Bug reporter plugin classes.
+ *
  */
 package org.openstreetmap.josm.plugins.mapdust;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/MapdustServiceHandler.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/MapdustServiceHandler.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/MapdustServiceHandler.java	(revision 25591)
@@ -36,5 +36,7 @@
 import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustPostResponse;
 import org.openstreetmap.josm.plugins.mapdust.service.converter.MapdustConverter;
+import org.openstreetmap.josm.plugins.mapdust.service.value.BoundingBox;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustComment;
 import org.openstreetmap.josm.plugins.mapdust.service.value.Paging;
@@ -78,23 +80,21 @@
      * a corresponding exception will be thrown.
      *
-     * @param minLon The minimum longitude. This parameter is required.
-     * @param minLat The minimum latitude.This parameter is required.
-     * @param maxLon The maximum longitude.This parameter is required.
-     * @param maxLat The maximum latitude.This parameter is required.
+     * @param bBox The bounding box where the bugs are searched.
+     * @param filter The MapDust bug filter. The bugs can be filtered based on
+     * the status, type and description. This parameter is not required.
      * @return A list of <code>MapdustBug</code> objects.
-     *
      * @throws MapdustServiceHandlerException In the case of an error
      */
-    public List<MapdustBug> getBugs(Double minLon, Double minLat,
-            Double maxLon, Double maxLat) throws MapdustServiceHandlerException {
+    public List<MapdustBug> getBugs(BoundingBox bBox, MapdustBugFilter filter)
+            throws MapdustServiceHandlerException {
         MapdustGetBugsResponse getBugsResponse = null;
         /* validates the coordinates */
-        if (minLon == null || minLat == null || maxLon == null
-                || maxLat == null) {
+        if (bBox.getMinLon() == null || bBox.getMinLat() == null
+                || bBox.getMaxLon() == null || bBox.getMaxLat() == null) {
             throw new MapdustServiceHandlerException("Invalid coordinates!");
         }
         /* executes the getBug MapDust method */
         try {
-            getBugsResponse = connector.getBugs(minLon, minLat, maxLon, maxLat);
+            getBugsResponse = connector.getBugs(bBox, filter);
         } catch (MapdustConnectorException e) {
             throw new MapdustServiceHandlerException(e.getMessage(), e);
@@ -152,5 +152,5 @@
             throw new MapdustServiceHandlerException(errorMessage);
         }
-        /* executes the addbug MapDust method */
+        /* executes the addBug MapDust method */
         try {
             postResponse = connector.addBug(bug);
@@ -181,5 +181,5 @@
         /* validates comment */
         if (comment == null) {
-            String errorMessage="Invalid comment. The comment cannot be null!";
+            String errorMessage = "Invalid comment. The comment cannot be null!";
             throw new MapdustServiceHandlerException(errorMessage);
         }
@@ -219,5 +219,6 @@
         /* validates comment */
         if (comment == null) {
-            String errorMessage="Invalid comment. The comment cannot be null!";
+            String errorMessage =
+                    "Invalid comment. The comment cannot be null!";
             throw new MapdustServiceHandlerException(errorMessage);
         }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/MapdustServiceHandlerException.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/MapdustServiceHandlerException.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/MapdustServiceHandlerException.java	(revision 25591)
@@ -31,12 +31,12 @@
 /**
  * Defines the exception type for <code>MapdustServiceHandler</code> object.
- * 
+ *
  * @author Bea
  */
 public class MapdustServiceHandlerException extends Exception {
-    
+
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-    
+    private static final long serialVersionUID = -2860059748215555626L;
+
     /**
      * Builds an empty <code>MapdustServiceHandlerException</code> object.
@@ -45,9 +45,9 @@
         super();
     }
-    
+
     /**
      * Builds a <code>MapdustServiceHandlerException</code> object based on the
      * given argument.
-     * 
+     *
      * @param message The message of the exception.
      */
@@ -55,9 +55,9 @@
         super(message);
     }
-    
+
     /**
      * Builds a <code>MapdustServiceHandlerException</code> object based on the
      * given argument.
-     * 
+     *
      * @param cause The cause of the exception.
      */
@@ -65,9 +65,9 @@
         super(cause);
     }
-    
+
     /**
      * Builds a <code>MapdustServiceHandlerException</code> object based on the
      * given arguments.
-     * 
+     *
      * @param message The message of the exception.
      * @param cause The cause of the exception.
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/MapdustConnector.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/MapdustConnector.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/MapdustConnector.java	(revision 25591)
@@ -33,11 +33,14 @@
 import java.net.URL;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import org.openstreetmap.josm.plugins.mapdust.service.connector.parser.MapdustParser;
+import org.openstreetmap.josm.plugins.mapdust.service.connector.parser.MapdustParserException;
 import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustGetBugResponse;
 import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustGetBugsResponse;
 import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustPostResponse;
-import org.openstreetmap.josm.plugins.mapdust.service.parser.MapdustParser;
-import org.openstreetmap.josm.plugins.mapdust.service.parser.MapdustParserException;
+import org.openstreetmap.josm.plugins.mapdust.service.value.BoundingBox;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug;
+import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBugFilter;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustComment;
 import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustResponseStatusCode;
@@ -85,6 +88,6 @@
 
     /**
-     * Searches for the OSM Mapdust bugs in the given bounding box. The method
-     * executes the 'getBugs' Mapdust service method, parses the obtained
+     * Searches for the OSM MapDust bugs in the given bounding box. The method
+     * executes the 'getBugs' MapDust service method, parses the obtained
      * response object and return a <code>MapdustGetBugsResponse</code> object
      * containing the pagination information and the array of bugs. In the case
@@ -92,8 +95,7 @@
      * will be thrown.
      *
-     * @param minLon The minimum longitude. This parameter is required.
-     * @param minLat The minimum latitude.This parameter is required.
-     * @param maxLon The maximum longitude.This parameter is required.
-     * @param maxLat The maximum latitude.This parameter is required.
+     * @param bBox The bounding box where the bugs are searched.
+     * @param filter The MapDust bug filter. The bugs can be filtered based on
+     * the status, type and description. This parameter is not required.
      * @return A <code>MapdustGetBugsResponse</code> object, containing the
      * pagination information and an array of <code>MapdustBugContent</code>
@@ -101,10 +103,10 @@
      * @throws MapdustConnectorException In the case of an error.
      */
-    public MapdustGetBugsResponse getBugs(Double minLon, Double minLat,
-            Double maxLon, Double maxLat) throws MapdustConnectorException {
+    public MapdustGetBugsResponse getBugs(BoundingBox bBox,
+            MapdustBugFilter filter) throws MapdustConnectorException {
         /* execute GET method and get the response */
         HttpResponse httpResponse = null;
         try {
-            httpResponse = executeGetBugs(minLon, minLat, maxLon, maxLat);
+            httpResponse = executeGetBugs(bBox, filter);
         } catch (MalformedURLException e) {
             throw new MapdustConnectorException(e.getMessage(), e);
@@ -114,5 +116,4 @@
             throw new MapdustConnectorException(e.getMessage(), e);
         }
-
         /* parse HttpResponse */
         MapdustGetBugsResponse result = null;
@@ -120,5 +121,5 @@
             /* verify status codes */
             handleStatusCode(httpResponse);
-            result =(MapdustGetBugsResponse) getParser().parseResponse(
+            result = (MapdustGetBugsResponse) getParser().parseResponse(
                             httpResponse.getContent(),
                             MapdustGetBugsResponse.class);
@@ -131,8 +132,9 @@
     }
 
+
     /**
      * Returns the OSM bug with the given id. If the <code>Paging</code> object
      * is set, then the comments of the bug will be paginated. The method
-     * executes the 'getBug' Mapdust service method, parses the obtained
+     * executes the 'getBug' MapDust service method, parses the obtained
      * response object and return a <code>MapdustGetBugResponse</code> object.
      * In the case if the response code is not 2
@@ -156,12 +158,10 @@
             throw new MapdustConnectorException(e.getMessage(), e);
         }
-
         /* parse result */
         MapdustGetBugResponse result = null;
         try {
             handleStatusCode(httpResponse);
-            result =(MapdustGetBugResponse) parser.parseResponse(
-                            httpResponse.getContent(),
-                            MapdustGetBugResponse.class);
+            result = (MapdustGetBugResponse) getParser().parseResponse(
+                    httpResponse.getContent(), MapdustGetBugResponse.class);
         } catch (MapdustConnectorException e) {
             throw new MapdustConnectorException(e.getMessage(), e);
@@ -174,5 +174,5 @@
     /**
      * Creates a new OSM bug with the specified arguments. The method executes
-     * the 'addBug' Mapdust service method, parses the obtained response object
+     * the 'addBug' MapDust service method, parses the obtained response object
      * and return a <code>MapdustPostResponse</code> object containing the id of
      * the created comment. In the case if the response code is not 200,201 or
@@ -202,7 +202,6 @@
         try {
             handleStatusCode(httpResponse);
-            result =(MapdustPostResponse) parser.parseResponse(
-                            httpResponse.getContent(),
-                            MapdustPostResponse.class);
+            result = (MapdustPostResponse) getParser().parseResponse(
+                    httpResponse.getContent(), MapdustPostResponse.class);
         } catch (MapdustConnectorException e) {
             throw new MapdustConnectorException(e.getMessage(), e);
@@ -215,5 +214,5 @@
     /**
      * Creates a new comment for the given bug. The method executes the
-     * 'commentBug' Mapdust service method, parses the obtained response object
+     * 'commentBug' MapDust service method, parses the obtained response object
      * and return a <code>MapdustPostResponse</code> object containing the id of
      * the created comment. In the case if the response code is not 200,201 or
@@ -237,12 +236,10 @@
             throw new MapdustConnectorException(e.getMessage(), e);
         }
-
         /* parse result */
         MapdustPostResponse result = null;
         try {
             handleStatusCode(httpResponse);
-            result = (MapdustPostResponse) parser.parseResponse(
-                            httpResponse.getContent(),
-                            MapdustPostResponse.class);
+            result = (MapdustPostResponse) getParser().parseResponse(
+                    httpResponse.getContent(), MapdustPostResponse.class);
         } catch (MapdustConnectorException e) {
             throw new MapdustConnectorException(e.getMessage(), e);
@@ -255,5 +252,5 @@
     /**
      * Changes the status of a given bug. The method executes the
-     * 'changeBugStatus' Mapdust service method, parses the obtained response
+     * 'changeBugStatus' MapDust service method, parses the obtained response
      * object and return a <code>MapdustPostResponse</code> object containing
      * the id of the created comment. In the case if the response code is not
@@ -283,5 +280,5 @@
         try {
             handleStatusCode(httpResponse);
-            result = (MapdustPostResponse) parser.parseResponse(
+            result = (MapdustPostResponse) getParser().parseResponse(
                     httpResponse.getContent(), MapdustPostResponse.class);
         } catch (MapdustConnectorException e) {
@@ -294,11 +291,10 @@
 
     /**
-     * Executes the 'getBugs' Mapdust service method.
-     *
-     * @param minLon The minimum longitude. This parameter is required.
-     * @param minLat The minimum latitude.This parameter is required.
-     * @param maxLon The maximum longitude.This parameter is required.
-     * @param maxLat The maximum latitude.This parameter is required.
-     *
+     * Executes the 'getBugs' MapDust service method.
+     *
+     * @param bBox The bounding box where the bugs are searched. This parameter
+     * it is a required parameter.
+     * @param filter The MapDust bug filter. The bugs can be filtered based on
+     * the status, type and description. This parameter is not required.
      * @return A <code>HttpResponse</code> object containing the JSON response.
      * @throws MalformedURLException In the case if the format of the URL is
@@ -306,7 +302,6 @@
      * @throws IOException In the case of an IO error
      */
-    private HttpResponse executeGetBugs(Double minLon, Double minLat,
-            Double maxLon, Double maxLat) throws MalformedURLException,
-            IOException {
+    private HttpResponse executeGetBugs(BoundingBox bBox,
+            MapdustBugFilter filter) throws MalformedURLException, IOException {
         HttpResponse httpResponse = null;
         String mapdustUri = Configuration.getInstance().getMapdustUrl();
@@ -317,12 +312,31 @@
             urlString += "/getBugs?";
             urlString += "key=" + mapdustApiKey;
-            urlString += "&bbox=" + minLon + "," + minLat + ",";
-            urlString += maxLon + "," + maxLat;
+            urlString += "&bbox=" + bBox.getMinLon();
+            urlString += "," + bBox.getMinLat();
+            urlString += "," + bBox.getMaxLon();
+            urlString += "," + bBox.getMaxLat();
+            if (filter != null) {
+                if (filter.getStatuses() != null
+                        && filter.getStatuses().size() > 0) {
+                    String paramStatus = buildParameter(filter.getStatuses());
+                    if (!paramStatus.isEmpty()) {
+                        urlString += "&fs=" + paramStatus;
+                    }
+                }
+                if (filter.getTypes() != null && filter.getTypes().size() > 0) {
+                    String paramTypes = buildParameter(filter.getTypes());
+                    if (!paramTypes.isEmpty()) {
+                        urlString += "&ft=" + paramTypes;
+                    }
+                }
+                if (filter.getDescr() != null && filter.getDescr()) {
+                    urlString += "&idd=" + "0";
+                }
+            }
         }
         URL url = null;
         if (urlString != null) {
             url = new URL(urlString);
-            httpResponse = httpConnector.executeGET(url);
-
+            httpResponse = getHttpConnector().executeGET(url);
         }
         return httpResponse;
@@ -330,5 +344,5 @@
 
     /**
-     * Executes the 'getBug' Mapdust service method.
+     * Executes the 'getBug' MapDust service method.
      *
      * @param id The id of the object
@@ -363,6 +377,5 @@
         if (urlString != null) {
             url = new URL(urlString);
-            httpResponse = httpConnector.executeGET(url);
-
+            httpResponse = getHttpConnector().executeGET(url);
         }
         return httpResponse;
@@ -370,9 +383,9 @@
 
     /**
-     * Executes the 'addBug' Mapdust service method.
+     * Executes the 'addBug' MapDust service method.
      *
      * @param bug A <code>MapdustBug</code> object
      * @return A <code>HttpResponse</code> containing the JSON response of the
-     * Mapdust method.
+     * MapDust method.
      *
      * @throws MalformedURLException In the case if the format of the URL is
@@ -391,6 +404,6 @@
             urlString += "/addBug";
             requestParameters.put("key", mapdustApiKey);
-            String coordinatesStr =
-                    bug.getLatLon().getX() + "," + bug.getLatLon().getY();
+            String coordinatesStr = "" + bug.getLatLon().getX();
+            coordinatesStr += "," + bug.getLatLon().getY();
             requestParameters.put("coordinates", coordinatesStr);
             requestParameters.put("type", bug.getType().getKey());
@@ -401,7 +414,6 @@
         if (urlString != null) {
             url = new URL(urlString);
-            httpResponse = httpConnector.executePOST(url, null,
+            httpResponse = getHttpConnector().executePOST(url, null,
                     requestParameters);
-
         }
         return httpResponse;
@@ -409,9 +421,9 @@
 
     /**
-     * Executes the 'commentBug' Mapdust service method.
+     * Executes the 'commentBug' MapDust service method.
      *
      * @param comment The <code>MapdustComment</code> object
      * @return A <code>HttpResponse</code> containing the JSON response of the
-     * Mapdust method.
+     * MapDust method.
      * @throws MalformedURLException In the case if the format of the URL is
      * invalid
@@ -436,7 +448,6 @@
         if (urlString != null) {
             url = new URL(urlString);
-            httpResponse = httpConnector.executePOST(url, null,
+            httpResponse = getHttpConnector().executePOST(url, null,
                     requestParameters);
-
         }
         return httpResponse;
@@ -444,10 +455,10 @@
 
     /**
-     * Executes the 'changeBugStatus' Mapdust service method.
+     * Executes the 'changeBugStatus' MapDust service method.
      *
      * @param statusId The id of the status.
      * @param comment A <code>MapdustComment</code> object.
      * @return A <code>HttpResponse</code> containing the JSON response of the
-     * Mapdust method.
+     * MapDust method.
      *
      * @throws MalformedURLException In the case if the format of the URL is
@@ -474,9 +485,26 @@
         if (urlString != null) {
             url = new URL(urlString);
-            httpResponse = httpConnector.executePOST(url, null,
+            httpResponse = getHttpConnector().executePOST(url, null,
                     requestParameters);
-
         }
         return httpResponse;
+    }
+
+    /**
+     * Builds a string containing the elements of the given list. The elements
+     * will be separated by a comma. If the list does not contains any element
+     * the returned result will be an empty string.
+     *
+     * @param list The list of objects.
+     * @return a string
+     */
+    private String buildParameter(List<? extends Object> list) {
+        StringBuffer sb = new StringBuffer();
+        for (Object obj : list) {
+            if (obj != null) {
+                sb.append(obj).append(",");
+            }
+        }
+        return sb.substring(0, sb.length() - 1);
     }
 
@@ -508,39 +536,33 @@
             case 400:
                 errorMessage = statusMessage + " ";
-                errorMessage+= MapdustResponseStatusCode.Status400.getDescription();
+                errorMessage += MapdustResponseStatusCode.Status400.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 401:
-                errorMessage = statusMessage+ " ";
-                errorMessage+= MapdustResponseStatusCode.Status401.getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status401.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 403:
-                errorMessage = statusMessage   + " ";
-                errorMessage+= MapdustResponseStatusCode.Status403
-                                        .getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status403.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 404:
-                errorMessage = statusMessage+ " ";
-                errorMessage+=MapdustResponseStatusCode.Status404
-                                        .getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status404.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 405:
-                errorMessage = statusMessage+ " ";
-                errorMessage+= MapdustResponseStatusCode.Status405
-                                        .getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status405.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 500:
-                errorMessage = statusMessage  + " ";
-                errorMessage+=MapdustResponseStatusCode.Status500
-                                        .getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status500.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 601:
-                errorMessage = statusMessage  + " ";
-                errorMessage+=MapdustResponseStatusCode.Status601
-                                        .getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status601.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             case 602:
-                errorMessage = statusMessage+ " ";
-                errorMessage+= MapdustResponseStatusCode.Status602
-                                        .getDescription();
+                errorMessage = statusMessage + " ";
+                errorMessage += MapdustResponseStatusCode.Status602.getDescription();
                 throw new MapdustConnectorException(errorMessage);
             default:
@@ -551,4 +573,6 @@
 
     /**
+     * Returns the <code>HttpConnector</code>
+     *
      * @return the httpConnector
      */
@@ -558,4 +582,6 @@
 
     /**
+     * Sets the <code>MapdustParser</code>
+     *
      * @return the parser
      */
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/MapdustConnectorException.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/MapdustConnectorException.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/MapdustConnectorException.java	(revision 25591)
@@ -31,13 +31,13 @@
 /**
  * Defines the exception type for the <code>MapdustConnector</code> object.
- * 
+ *
  * @author Bea
- * 
+ *
  */
 public class MapdustConnectorException extends Exception {
-    
+
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
-    
+    private static final long serialVersionUID = 6222042834700541233L;
+
     /**
      * Builds a <code>MapdustConnectorException</code> object.
@@ -46,9 +46,9 @@
         super();
     }
-    
+
     /**
      * Builds a <code>MapdustConnectorException</code> object based on the given
      * argument.
-     * 
+     *
      * @param message The message of the exception
      */
@@ -56,9 +56,9 @@
         super(message);
     }
-    
+
     /**
      * Builds a <code>MapdustConnectorException</code> object based on the given
      * argument.
-     * 
+     *
      * @param cause The cause of the exception
      */
@@ -66,9 +66,9 @@
         super(cause);
     }
-    
+
     /**
      * Builds a <code>MapdustConnectorException</code> object based on the given
      * arguments.
-     * 
+     *
      * @param message The message of the exception
      * @param cause The cause of the exception
@@ -77,4 +77,4 @@
         super(message, cause);
     }
-    
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/package-info.java	(revision 25591)
@@ -1,4 +1,4 @@
 /**
- * contains the http connector
+ * Contains the MapDust service connector classes.
  */
 package org.openstreetmap.josm.plugins.mapdust.service.connector;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/MapdustParser.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/MapdustParser.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/MapdustParser.java	(revision 25591)
@@ -0,0 +1,71 @@
+/* Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.openstreetmap.josm.plugins.mapdust.service.connector.parser;
+
+
+import com.google.gson.FieldNamingPolicy;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonParseException;
+
+
+/**
+ * The <code>MapdustParser</code> object parses the given JSON format into the
+ * given object.
+ *
+ * @author Bea
+ *
+ */
+public class MapdustParser {
+
+    /**
+     * Parses the given JSON response of the given type.
+     *
+     * @param response A string containing a JSON response
+     * @param responseClass The type of the result.
+     * @return A <code>MapdustGeneralResponse</code> object
+     * @throws MapdustParserException In the case of an error
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public Object parseResponse(String response, Class responseClass)
+            throws MapdustParserException {
+        Object result = null;
+        FieldNamingPolicy policy = FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES;
+        GsonBuilder gsonBuilder = new GsonBuilder();
+        gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+        gsonBuilder.setFieldNamingPolicy(policy);
+        Gson gson = gsonBuilder.create();
+        try {
+            result = gson.fromJson(response, responseClass);
+        } catch (JsonParseException e) {
+            throw new MapdustParserException();
+        }
+        return result;
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/MapdustParserException.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/MapdustParserException.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/MapdustParserException.java	(revision 25591)
@@ -0,0 +1,79 @@
+/* Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.openstreetmap.josm.plugins.mapdust.service.connector.parser;
+
+
+/**
+ * Defines the exception for the <code>MapdustParser</code> object.
+ *
+ * @author Bea
+ *
+ */
+public class MapdustParserException extends Exception {
+
+    /** The serial version UID */
+    private static final long serialVersionUID = 3365429227063310977L;
+
+    /**
+     * Builds a <code>MapdustParserException</code> object.
+     */
+    public MapdustParserException() {
+        super();
+    }
+
+    /**
+     * Builds a <code>MapdustParserException</code> object based on the given
+     * arguments.
+     *
+     * @param message The message of the exception
+     */
+    public MapdustParserException(String message) {
+        super(message);
+    }
+
+    /**
+     * Builds a <code>MapdustParserException</code> object based on the given
+     * arguments.
+     *
+     * @param cause The cause of the exception
+     */
+    public MapdustParserException(Throwable cause) {
+        super(cause);
+    }
+
+    /**
+     * Builds a <code>MapdustParserException</code> object based on the given
+     * arguments.
+     *
+     * @param message The message of the exception
+     * @param cause The cause of the exception
+     */
+    public MapdustParserException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/package-info.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/parser/package-info.java	(revision 25591)
@@ -0,0 +1,4 @@
+/**
+ * Contains the JSON parses classes.
+ */
+package org.openstreetmap.josm.plugins.mapdust.service.connector.parser;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustBugProperties.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustBugProperties.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustBugProperties.java	(revision 25591)
@@ -56,4 +56,7 @@
     private String description;
 
+    /** Flag indicating if the description is default or not */
+    private boolean isDefaultDescription;
+
     /** The nickname of the bug */
     private String nickname;
@@ -93,4 +96,6 @@
      * @param type The type of the bug
      * @param description The description of the bug
+     * @param isDefaultDescription Flag indicating if the description is default
+     * or not
      * @param nickname The nickname
      * @param skoUid The skobbler user id
@@ -103,8 +108,8 @@
      */
     public MapdustBugProperties(Date dateCreated, Date dateUpdated,
-            Integer status, String type, String description, String nickname,
-            String skoUid, String extUid, String source, String kmlUrl,
-            Address address, Integer numberOfComments,
-            MapdustCommentProperties[] comments) {
+            Integer status, String type, String description,
+            boolean isDefaultDescription, String nickname, String skoUid,
+            String extUid, String source, String kmlUrl, Address address,
+            Integer numberOfComments, MapdustCommentProperties[] comments) {
         this.dateCreated = dateCreated;
         this.dateUpdated = dateUpdated;
@@ -112,4 +117,5 @@
         this.type = type;
         this.description = description;
+        this.isDefaultDescription = isDefaultDescription;
         this.nickname = nickname;
         this.skoUid = skoUid;
@@ -213,4 +219,22 @@
 
     /**
+     * Returns the isDefaultDescription flag
+     *
+     * @return the isDefaultDescription
+     */
+    public boolean getIsDefaultDescription() {
+        return isDefaultDescription;
+    }
+
+    /**
+     * Sets the isDefaultDescription flag
+     *
+     * @param isDefaultDescription the isDefaultDescription to set
+     */
+    public void setIsDefaultDescription(boolean isDefaultDescription) {
+        this.isDefaultDescription = isDefaultDescription;
+    }
+
+    /**
      * Returns the nickname
      *
@@ -355,3 +379,4 @@
         this.comments = comments;
     }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustCommentProperties.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustCommentProperties.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustCommentProperties.java	(revision 25591)
@@ -27,4 +27,5 @@
  */
 package org.openstreetmap.josm.plugins.mapdust.service.connector.response;
+
 
 import java.util.Date;
@@ -189,3 +190,4 @@
         this.source = source;
     }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustGetBugsResponse.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustGetBugsResponse.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustGetBugsResponse.java	(revision 25591)
@@ -36,5 +36,5 @@
  *
  */
-public class MapdustGetBugsResponse  {
+public class MapdustGetBugsResponse {
 
     /** The array of <code>MapdustBugContent</code> object */
@@ -73,4 +73,3 @@
     }
 
-
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustGetResponse.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustGetResponse.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustGetResponse.java	(revision 25591)
@@ -38,5 +38,5 @@
  *
  */
-public class MapdustGetResponse  {
+public class MapdustGetResponse {
 
     /**
@@ -60,4 +60,6 @@
 
     /**
+     * Returns the <code>Paging</code> object
+     *
      * @return the paging
      */
@@ -67,4 +69,6 @@
 
     /**
+     * Sets the <code>Paging</code> object
+     *
      * @param paging the paging to set
      */
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustPostResponse.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustPostResponse.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/MapdustPostResponse.java	(revision 25591)
@@ -73,3 +73,4 @@
         this.id = id;
     }
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/connector/response/package-info.java	(revision 25591)
@@ -1,4 +1,4 @@
 /**
- * contains the response objects
+ * Contains the MapDust service the response objects.
  */
 package org.openstreetmap.josm.plugins.mapdust.service.connector.response;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/converter/MapdustConverter.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/converter/MapdustConverter.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/converter/MapdustConverter.java	(revision 25591)
@@ -65,5 +65,4 @@
             /* sets the id */
             bug.setId(bugResponse.getId());
-
             /* sets the coordinates */
             Geometry geometry = bugResponse.getGeometry();
@@ -76,5 +75,4 @@
             }
             bug.setLatLon(latLon);
-
             /* sets the properties of the bug */
             MapdustBugProperties bugProperties = bugResponse.getProperties();
@@ -94,4 +92,7 @@
                 /* sets the description */
                 bug.setDescription(bugProperties.getDescription());
+                /* sets the isDefaultDescription */
+                bug.setIsDefaultDescription(bugProperties
+                        .getIsDefaultDescription());
                 /* sets the skobbler user id */
                 bug.setSkoUid(bugProperties.getSkoUid());
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/converter/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/converter/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/converter/package-info.java	(revision 25591)
@@ -1,4 +1,4 @@
 /**
- * contains the converter object
+ * Contains the converter class.
  */
 package org.openstreetmap.josm.plugins.mapdust.service.converter;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/package-info.java	(revision 25591)
@@ -1,5 +1,8 @@
 /**
- * retrieves and sends data from/to the Mapdust api
- * 
+ * Contains the MapDust API connection classes. These classes are used for
+ * downloading/uploading MapDust bug data from/to the MapDust service.
+ * The MapDust service connection classes are divided based on their type
+ * in the following four packages: connector, converter, parser and value.
+ *
  */
 package org.openstreetmap.josm.plugins.mapdust.service;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/BoundingBox.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/BoundingBox.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/BoundingBox.java	(revision 25591)
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on 06.03.2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.service.value;
+
+
+/**
+ * Helper object used for representing a bounding box. This object it is used
+ * for representing the searching area.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public class BoundingBox {
+
+    /** The minimum longitude */
+    private Double minLon;
+
+    /** The minimum latitude */
+    private Double minLat;
+
+    /** The maximum longitude */
+    private Double maxLon;
+
+    /** The maximum latitude */
+    private Double maxLat;
+
+    /**
+     * Builds a <code>BoundingBox</code> object
+     */
+    public BoundingBox(){}
+
+    /**
+     * Builds a <code>BoundingBox</code> object based on the given arguments.
+     *
+     * @param minLon The minimum longitude
+     * @param minLat The minimum latitude
+     * @param maxLon The maximum longitude
+     * @param maxLat The maximum latitude
+     */
+    public BoundingBox(Double minLon, Double minLat, Double maxLon,
+            Double maxLat) {
+        this.minLon = minLon;
+        this.minLat = minLat;
+        this.maxLon = maxLon;
+        this.maxLat = maxLat;
+        normalize();
+    }
+
+    /**
+     * Normalize the bounding box values.
+     */
+    private void normalize() {
+        if (minLon < -180) {
+            minLon = -180.0;
+        }
+        if (maxLon > 180) {
+            maxLon = 180.0;
+        }
+        if (minLat < -90) {
+            minLat = -90.0;
+        }
+        if (maxLat > 90) {
+            maxLat = 90.0;
+        }
+    }
+
+    /**
+     * Returns the minimum longitude
+     *
+     * @return the minLon
+     */
+    public Double getMinLon() {
+        return minLon;
+    }
+
+    /**
+     * Returns the minimum latitude
+     *
+     * @return the minLat
+     */
+    public Double getMinLat() {
+        return minLat;
+    }
+
+    /**
+     * Returns the maximum longitude
+     *
+     * @return the maxLon
+     */
+    public Double getMaxLon() {
+        return maxLon;
+    }
+
+    /**
+     * Returns the maximum latitude
+     *
+     * @return the maxLat
+     */
+    public Double getMaxLat() {
+        return maxLat;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((maxLat == null) ? 0 : maxLat.hashCode());
+        result = prime * result + ((maxLon == null) ? 0 : maxLon.hashCode());
+        result = prime * result + ((minLat == null) ? 0 : minLat.hashCode());
+        result = prime * result + ((minLon == null) ? 0 : minLon.hashCode());
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof BoundingBox) {
+            BoundingBox bBox = (BoundingBox) obj;
+            Double bBoxMinLon = bBox.getMinLon();
+            Double bBoxMinLat = bBox.getMinLat();
+            Double bBoxMaxLon = bBox.getMaxLon();
+            Double bBoxMaxLat = bBox.getMaxLat();
+            return (minLon.equals(bBoxMinLon) && minLat.equals(bBoxMinLat)
+                    && maxLon.equals(bBoxMaxLon) && maxLat.equals(bBoxMaxLat));
+        }
+        return false;
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/MapdustBug.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/MapdustBug.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/MapdustBug.java	(revision 25591)
@@ -65,4 +65,7 @@
     private String description;
 
+    /** Flag indicating if the description is default or not */
+    private boolean isDefaultDescription;
+
     /** The nickname of the user who created the bug */
     private String nickname;
@@ -120,4 +123,6 @@
      * @param type The type of the bug
      * @param description The description of the bug
+     * @param isDefaultDescription Flag indicating if the description is default
+     * or not
      * @param nickname The nickname
      * @param skoUid The skobbler user id
@@ -130,7 +135,7 @@
     public MapdustBug(Long id, LatLon latLon, Address address,
             Date dateCreated, Date dateUpdated, Status status, Type type,
-            String description, String nickname, String skoUid, String extUid,
-            String source, String kmlUrl, Integer numberOfComments,
-            MapdustComment[] comments) {
+            String description, boolean isDefaultDescription, String nickname,
+            String skoUid, String extUid, String source, String kmlUrl,
+            Integer numberOfComments, MapdustComment[] comments) {
         this.id = id;
         this.latLon = latLon;
@@ -141,4 +146,5 @@
         this.type = type;
         this.description = description;
+        this.isDefaultDescription = isDefaultDescription;
         this.nickname = nickname;
         this.skoUid = skoUid;
@@ -277,4 +283,22 @@
 
     /**
+     * Returns the isDefaultDescription flag
+     *
+     * @return the isDefaultDescription
+     */
+    public boolean getIsDefaultDescription() {
+        return isDefaultDescription;
+    }
+
+    /**
+     * Sets the isDefaultDescription flag
+     *
+     * @param isDefaultDescription the isDefaultDescription to set
+     */
+    public void setIsDefaultDescription(boolean isDefaultDescription) {
+        this.isDefaultDescription = isDefaultDescription;
+    }
+
+    /**
      * Returns the address
      *
@@ -419,3 +443,35 @@
     }
 
+    /* (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((id == null) ? 0 : id.hashCode());
+        return result;
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        MapdustBug other = (MapdustBug) obj;
+        if (id == null) {
+            if (other.id != null)
+                return false;
+        } else if (!id.equals(other.id))
+            return false;
+        return true;
+    }
+
+
 }
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/MapdustBugFilter.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/MapdustBugFilter.java	(revision 25591)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/MapdustBugFilter.java	(revision 25591)
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2010, skobbler GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on Feb 17, 2011 by Bea
+ * Modified on $DateTime$ by $Author$
+ */
+package org.openstreetmap.josm.plugins.mapdust.service.value;
+
+
+import java.util.List;
+
+
+/**
+ * This object represents the MapDust bug filter.
+ *
+ * @author Bea
+ * @version $Revision$
+ */
+public class MapdustBugFilter {
+
+    /** The list of status filter values */
+    private List<Integer> statuses;
+
+    /** The list of type filter values */
+    private List<String> types;
+
+    /** The description filter value */
+    private Boolean descr;
+
+    /**
+     * Build a <code>MapdustBugFilter</code> object
+     */
+    public MapdustBugFilter() {}
+
+    /**
+     * Builds a <code>MapdustBugFilter</code> object based on the given
+     * arguments.
+     *
+     * @param statuses The list of status filter values
+     * @param types The list of type filter values
+     * @param descr The description filter value
+     */
+    public MapdustBugFilter(List<Integer> statuses, List<String> types,
+            Boolean descr) {
+        this.statuses = statuses;
+        this.types = types;
+        this.descr = descr;
+    }
+
+    /**
+     * Returns the list of status filter values
+     *
+     * @return the statuses
+     */
+    public List<Integer> getStatuses() {
+        return statuses;
+    }
+
+    /**
+     * Sets the list of status filter values.
+     *
+     * @param statuses the statuses to set
+     */
+    public void setStatuses(List<Integer> statuses) {
+        this.statuses = statuses;
+    }
+
+    /**
+     * Returns the list of type filter values.
+     *
+     * @return the types
+     */
+    public List<String> getTypes() {
+        return types;
+    }
+
+    /**
+     * Sets the list of type filter values.
+     *
+     * @param types the types to set
+     */
+    public void setTypes(List<String> types) {
+        this.types = types;
+    }
+
+    /**
+     * Returns the description filter value.
+     *
+     * @return the descr
+     */
+    public Boolean getDescr() {
+        return descr;
+    }
+
+    /**
+     * Sets the description filter value.
+     *
+     * @param descr the descr to set
+     */
+    public void setDescr(Boolean descr) {
+        this.descr = descr;
+    }
+
+}
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/Status.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/Status.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/Status.java	(revision 25591)
@@ -41,5 +41,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 5534551701260061940L;
 
     /** The key of the <code>Status</code> */
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/Type.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/Type.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/Type.java	(revision 25591)
@@ -43,5 +43,5 @@
 
     /** The serial version UID */
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 4022464908172242274L;
 
     /** The key of the <code>Type</code> */
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/package-info.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/package-info.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/service/value/package-info.java	(revision 25591)
@@ -1,4 +1,4 @@
 /**
- * Contains the objects used by representing the Mapdust data.
+ * Contains the objects used for representing the MapDust data.
  */
 package org.openstreetmap.josm.plugins.mapdust.service.value;
Index: applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/util/http/HttpConnector.java
===================================================================
--- applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/util/http/HttpConnector.java	(revision 25590)
+++ applications/editors/josm/plugins/mapdust/src/org/openstreetmap/josm/plugins/mapdust/util/http/HttpConnector.java	(revision 25591)
@@ -51,5 +51,5 @@
 
     /** The timeout */
-    private final int timeout = 10000;
+    private final int timeout = 20000;
 
     /** The <code>RetrySetup</code> */
