Index: trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 9592)
+++ trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 9594)
@@ -213,9 +213,9 @@
 
     /**
-     * Replies the current dataset
+     * Replies the current dataset.
      *
      * @return the current dataset. null, if no current dataset exists
      */
-    protected static DataSet getCurrentDataSet() {
+    public static DataSet getCurrentDataSet() {
         return Main.main != null ? Main.main.getCurrentDataSet() : null;
     }
Index: trunk/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java	(revision 9592)
+++ trunk/src/org/openstreetmap/josm/actions/SelectByInternalPointAction.java	(revision 9594)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.actions;
 
-import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -24,5 +23,9 @@
  * @since 7144
  */
-public class SelectByInternalPointAction extends JosmAction {
+public final class SelectByInternalPointAction {
+
+    private SelectByInternalPointAction() {
+        // Hide public constructor for utility class
+    }
 
     /**
@@ -35,5 +38,5 @@
      */
     public static Collection<OsmPrimitive> getSurroundingObjects(EastNorth internalPoint) {
-        final DataSet ds = getCurrentDataSet();
+        final DataSet ds = JosmAction.getCurrentDataSet();
         if (ds == null) {
             return Collections.emptySet();
@@ -42,26 +45,21 @@
         final Map<Double, OsmPrimitive> found = new TreeMap<>();
         for (Way w : ds.getWays()) {
-            if (w.isUsable() && w.isClosed() && w.isSelectable()) {
-                if (Geometry.nodeInsidePolygon(n, w.getNodes())) {
-                    found.put(Geometry.closedWayArea(w), w);
-                }
+            if (w.isUsable() && w.isClosed() && w.isSelectable() && Geometry.nodeInsidePolygon(n, w.getNodes())) {
+                found.put(Geometry.closedWayArea(w), w);
             }
         }
         for (Relation r : ds.getRelations()) {
-            if (r.isUsable() && r.isMultipolygon() && r.isSelectable()) {
-                if (Geometry.isNodeInsideMultiPolygon(n, r, null)) {
-                    for (RelationMember m : r.getMembers()) {
-                        if (m.isWay() && m.getWay().isClosed()) {
-                            found.values().remove(m.getWay());
-                        }
+            if (r.isUsable() && r.isMultipolygon() && r.isSelectable() && Geometry.isNodeInsideMultiPolygon(n, r, null)) {
+                for (RelationMember m : r.getMembers()) {
+                    if (m.isWay() && m.getWay().isClosed()) {
+                        found.values().remove(m.getWay());
                     }
-                    // estimate multipolygon size by its bounding box area
-                    BBox bBox = r.getBBox();
-                    EastNorth en1 = Main.map.mapView.getProjection().latlon2eastNorth(bBox.getTopLeft());
-                    EastNorth en2 = Main.map.mapView.getProjection().latlon2eastNorth(bBox.getBottomRight());
-                    double s = Math.abs((en1.east() - en2.east()) * (en1.north() - en2.north()));
-                    if (s == 0) s = 1e8;
-                    found.put(s, r);
                 }
+                // estimate multipolygon size by its bounding box area
+                BBox bBox = r.getBBox();
+                EastNorth en1 = Main.map.mapView.getProjection().latlon2eastNorth(bBox.getTopLeft());
+                EastNorth en2 = Main.map.mapView.getProjection().latlon2eastNorth(bBox.getBottomRight());
+                double s = Math.abs((en1.east() - en2.east()) * (en1.north() - en2.north()));
+                found.put(s <= 0 ? 1e8 : s, r);
             }
         }
@@ -89,22 +87,18 @@
     public static void performSelection(EastNorth internalPoint, boolean doAdd, boolean doRemove) {
         final Collection<OsmPrimitive> surroundingObjects = getSurroundingObjects(internalPoint);
+        final DataSet ds = JosmAction.getCurrentDataSet();
         if (surroundingObjects.isEmpty()) {
             return;
         } else if (doRemove) {
-            final Collection<OsmPrimitive> newSelection = new ArrayList<>(getCurrentDataSet().getSelected());
+            final Collection<OsmPrimitive> newSelection = new ArrayList<>(ds.getSelected());
             newSelection.removeAll(surroundingObjects);
-            getCurrentDataSet().setSelected(newSelection);
+            ds.setSelected(newSelection);
         } else if (doAdd) {
-            final Collection<OsmPrimitive> newSelection = new ArrayList<>(getCurrentDataSet().getSelected());
+            final Collection<OsmPrimitive> newSelection = new ArrayList<>(ds.getSelected());
             newSelection.add(surroundingObjects.iterator().next());
-            getCurrentDataSet().setSelected(newSelection);
+            ds.setSelected(newSelection);
         } else {
-            getCurrentDataSet().setSelected(surroundingObjects.iterator().next());
+            ds.setSelected(surroundingObjects.iterator().next());
         }
     }
-
-    @Override
-    public void actionPerformed(ActionEvent e) {
-        throw new UnsupportedOperationException();
-    }
 }
