Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java	(revision 33264)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java	(revision 33265)
@@ -150,5 +150,5 @@
         g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f * opacity));
 
-        drawRelations(g, mv, bbox, chosenRelation);
+        drawRelations(g, mv, bbox, chosenRelation, new HashSet<>());
 
         g.setComposite(oldComposite);
@@ -156,29 +156,32 @@
     }
 
-    private void drawRelations(Graphics2D g, MapView mv, Bounds bbox, Relation rel) {
-        for (OsmPrimitive element : rel.getMemberPrimitives()) {
-            if (element.getType() == OsmPrimitiveType.NODE) {
-                Node node = (Node) element;
-                Point center = mv.getPoint(node);
-                g.drawOval(center.x - 4, center.y - 4, 9, 9);
-            } else if (element.getType() == OsmPrimitiveType.WAY) {
-                Way way = (Way) element;
-                if (way.getNodesCount() >= 2) {
-                    GeneralPath b = new GeneralPath();
-                    Point p = mv.getPoint(way.getNode(0));
-                    b.moveTo(p.x, p.y);
-                    for (int i = 1; i < way.getNodesCount(); i++) {
-                        p = mv.getPoint(way.getNode(i));
-                        b.lineTo(p.x, p.y);
+    private void drawRelations(Graphics2D g, MapView mv, Bounds bbox, Relation rel, Set<Relation> visitedRelations) {
+        if (!visitedRelations.contains(rel)) {
+            visitedRelations.add(rel);
+            for (OsmPrimitive element : rel.getMemberPrimitives()) {
+                if (element.getType() == OsmPrimitiveType.NODE) {
+                    Node node = (Node) element;
+                    Point center = mv.getPoint(node);
+                    g.drawOval(center.x - 4, center.y - 4, 9, 9);
+                } else if (element.getType() == OsmPrimitiveType.WAY) {
+                    Way way = (Way) element;
+                    if (way.getNodesCount() >= 2) {
+                        GeneralPath b = new GeneralPath();
+                        Point p = mv.getPoint(way.getNode(0));
+                        b.moveTo(p.x, p.y);
+                        for (int i = 1; i < way.getNodesCount(); i++) {
+                            p = mv.getPoint(way.getNode(i));
+                            b.lineTo(p.x, p.y);
+                        }
+                        g.draw(b);
                     }
-                    g.draw(b);
+                } else if (element.getType() == OsmPrimitiveType.RELATION) {
+                    Color oldColor = g.getColor();
+                    g.setColor(Color.magenta);
+                    drawRelations(g, mv, bbox, (Relation) element, visitedRelations);
+                    g.setColor(oldColor);
                 }
-            } else if (element.getType() == OsmPrimitiveType.RELATION) {
-                Color oldColor = g.getColor();
-                g.setColor(Color.magenta);
-                drawRelations(g, mv, bbox, (Relation) element);
-                g.setColor(oldColor);
+                // todo: closedway, multipolygon - ?
             }
-            // todo: closedway, multipolygon - ?
         }
     }
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java	(revision 33264)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java	(revision 33265)
@@ -24,4 +24,5 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -438,5 +439,5 @@
         ClassLoader classLoader = RelContextDialog.class.getClassLoader();
         try (InputStream possibleRolesStream = classLoader.getResourceAsStream(POSSIBLE_ROLES_FILE);
-                BufferedReader r = new BufferedReader(new InputStreamReader(possibleRolesStream));
+                BufferedReader r = new BufferedReader(new InputStreamReader(possibleRolesStream, StandardCharsets.UTF_8));
                 ) {
             while (r.ready()) {
@@ -530,5 +531,5 @@
     }
 
-    private class ChosenRelationPopupMenu extends JPopupMenu {
+    private static class ChosenRelationPopupMenu extends JPopupMenu {
         ChosenRelationPopupMenu(ChosenRelation chosenRelation) {
             add(new SelectMembersAction(chosenRelation));
@@ -578,5 +579,5 @@
     }
 
-    private class MultipolygonSettingsPopup extends JPopupMenu implements ActionListener {
+    private static class MultipolygonSettingsPopup extends JPopupMenu implements ActionListener {
         MultipolygonSettingsPopup() {
             addMenuItem("boundary", tr("Create administrative boundary relations"));
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/FindRelationAction.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/FindRelationAction.java	(revision 33264)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/FindRelationAction.java	(revision 33265)
@@ -202,5 +202,5 @@
      * I admit, some of it was copypasted from {@link org.openstreetmap.josm.gui.dialogs.RelationListDialog.RelationListModel}.
      */
-    protected class FindRelationListModel extends AbstractListModel<Relation> {
+    protected static class FindRelationListModel extends AbstractListModel<Relation> {
         private final ArrayList<Relation> relations = new ArrayList<>();
         private DefaultListSelectionModel selectionModel;
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/ReconstructPolygonAction.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/ReconstructPolygonAction.java	(revision 33264)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/ReconstructPolygonAction.java	(revision 33265)
@@ -90,8 +90,8 @@
         for (JoinedPolygon p : mpc.outerWays) {
 
-            ArrayList<JoinedPolygon> myInnerWays = new ArrayList<JoinedPolygon>();
+            ArrayList<JoinedPolygon> myInnerWays = new ArrayList<>();
             for (JoinedPolygon i : mpc.innerWays) {
                 // if the first point of any inner ring is contained in this
-                // outer ring, then this inner ring belongs to us. This 
+                // outer ring, then this inner ring belongs to us. This
                 // assumption only works if multipolygons have valid geometries
                 EastNorth en = i.ways.get(0).firstNode().getEastNorth();
@@ -102,6 +102,6 @@
 
             if (!myInnerWays.isEmpty()) {
-                // this ring has inner rings, so we leave a multipolygon in 
-                // place and don't reconstruct the rings. 
+                // this ring has inner rings, so we leave a multipolygon in
+                // place and don't reconstruct the rings.
                 Relation n = null;
                 if (relationReused) {
@@ -131,6 +131,5 @@
 
             // move all tags from relation and common tags from ways
-            // start with all tags from first way but only if area tags are 
-            // present
+            // start with all tags from first way but only if area tags are present
             Map<String, String> tags = p.ways.get(0).getKeys();
             if (!p.ways.get(0).hasAreaTags()) {
@@ -209,7 +208,6 @@
         if (newRelation == null || !"multipolygon".equals(newRelation.get("type")) || newRelation.getMembersCount() == 0)
             return false;
-        else {
+        else
             return true;
-        }
     }
 }
