Index: /applications/editors/josm/plugins/pointInfo/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- /applications/editors/josm/plugins/pointInfo/.settings/org.eclipse.jdt.core.prefs	(revision 32845)
+++ /applications/editors/josm/plugins/pointInfo/.settings/org.eclipse.jdt.core.prefs	(revision 32846)
@@ -1,7 +1,96 @@
 eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.8
Index: /applications/editors/josm/plugins/pointInfo/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- /applications/editors/josm/plugins/pointInfo/.settings/org.eclipse.jdt.ui.prefs	(revision 32845)
+++ /applications/editors/josm/plugins/pointInfo/.settings/org.eclipse.jdt.ui.prefs	(revision 32846)
@@ -16,5 +16,5 @@
 sp_cleanup.convert_functional_interfaces=false
 sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=true
+sp_cleanup.correct_indentation=false
 sp_cleanup.format_source_code=false
 sp_cleanup.format_source_code_changes_only=false
Index: /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoAction.java
===================================================================
--- /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoAction.java	(revision 32845)
+++ /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoAction.java	(revision 32846)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.plugins.pointinfo.ruian.RuianModule;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -143,5 +144,6 @@
         progressMonitor.invalidate();
         if (htmlText.length() == 0) {
-            PointInfoUtils.showNotification(tr("Data not available.")+ "\n(" + pos.toDisplayString() + ")", "warning");
+            GuiHelper.runInEDTAndWait(
+                    () -> PointInfoUtils.showNotification(tr("Data not available.")+ "\n(" + pos.toDisplayString() + ")", "warning"));
             return;
         }
Index: plications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoServer.java
===================================================================
--- /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoServer.java	(revision 32845)
+++ 	(revision )
@@ -1,37 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.plugins.pointinfo;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.URL;
-
-public class PointInfoServer {
-
-    public PointInfoServer() {
-
-    }
-
-    /**
-     * Call Info server.
-     * @param urlString Input parameters.
-     * @return Result text.
-     */
-    public String callServer(String urlString) {
-        try {
-            URL url = new URL(urlString);
-            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
-
-            StringBuilder sb = new StringBuilder();
-            String line;
-            while ((line = reader.readLine()) != null) {
-                if (sb.length() == 0)
-                    sb.append(line);
-                else
-                    sb.append(" "+line);
-            }
-            return sb.toString();
-        } catch (Exception e) {
-            return "";
-        }
-    }
-}
Index: /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoUtils.java
===================================================================
--- /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoUtils.java	(revision 32845)
+++ /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/PointInfoUtils.java	(revision 32846)
@@ -46,6 +46,5 @@
         DecimalFormat df = new DecimalFormat("#.00000", symbols);
 
-        r = "(" + df.format(lat) + ", " +
-                df.format(lon) + ")";
+        r = "(" + df.format(lat) + ", " + df.format(lon) + ")";
         return r;
     }
Index: /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/ruian/RuianModule.java
===================================================================
--- /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/ruian/RuianModule.java	(revision 32845)
+++ /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/ruian/RuianModule.java	(revision 32846)
@@ -2,7 +2,9 @@
 package org.openstreetmap.josm.plugins.pointinfo.ruian;
 
+import java.net.URL;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.plugins.pointinfo.PointInfoServer;
+import org.openstreetmap.josm.tools.HttpClient;
 
 /**
@@ -14,5 +16,4 @@
     private String m_text = "";
     private String URL = "http://josm.poloha.net/pointInfo/v4/index.php";
-    protected PointInfoServer server = new PointInfoServer();
 
     private RuianRecord m_record = new RuianRecord();
@@ -46,8 +47,5 @@
         try {
             String request = URL + "?lat=" + pos.lat() + "&lon=" + pos.lon();
-            System.out.println("Request: "+ request);
-            String content = server.callServer(request);
-            System.out.println("Reply: " + content);
-            m_record.parseJSON(content);
+            m_record.parseJSON(HttpClient.create(new URL(request)).connect().fetchContent());
         } catch (Exception e) {
             Main.warn(e);
Index: /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/ruian/RuianRecord.java
===================================================================
--- /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/ruian/RuianRecord.java	(revision 32845)
+++ /applications/editors/josm/plugins/pointInfo/src/org/openstreetmap/josm/plugins/pointinfo/ruian/RuianRecord.java	(revision 32846)
@@ -5,4 +5,5 @@
 
 import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -14,4 +15,5 @@
 import javax.json.JsonObject;
 import javax.json.JsonReader;
+import javax.json.JsonValue;
 
 import org.openstreetmap.josm.Main;
@@ -24,6 +26,6 @@
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.TagCollection;
+import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.plugins.pointinfo.PointInfoUtils;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -107,6 +109,6 @@
         m_err_note = "";
 
-        m_so_bez_geometrie = new ArrayList<ObjectWithoutGeometry>();
-        m_adresni_mista = new ArrayList<AddrPlaces>();
+        m_so_bez_geometrie = new ArrayList<>();
+        m_adresni_mista = new ArrayList<>();
 
         m_parcela_ruian_id = 0;
@@ -137,5 +139,5 @@
         init();
 
-        JsonReader jsonReader = Json.createReader(new ByteArrayInputStream(jsonStr.getBytes()));
+        JsonReader jsonReader = Json.createReader(new ByteArrayInputStream(jsonStr.getBytes(StandardCharsets.UTF_8)));
         JsonObject obj = jsonReader.readObject();
         jsonReader.close();
@@ -163,4 +165,17 @@
         // =========================================================================
         parseKatastr(obj);
+    }
+
+    private JsonObject getSafeJsonObject(JsonObject obj, String key) {
+        JsonValue val = obj.get(key);
+        if (val instanceof JsonObject) {
+            return (JsonObject) val;
+        } else if (val instanceof JsonArray) {
+            JsonArray array = (JsonArray) val;
+            if (!array.isEmpty()) {
+                return array.getJsonObject(0);
+            }
+        }
+        throw new IllegalArgumentException("No value for " + key);
     }
 
@@ -171,22 +186,22 @@
             try {
                 m_coor_lat = Double.parseDouble(coorObjekt.getString("lat"));
-            } catch (Exception e) {
-                System.out.println("coordinates.lat: " + e.getMessage());
+            } catch (NumberFormatException e) {
+                Main.warn(e, "coordinates.lat:");
             }
 
             try {
                 m_coor_lon = Double.parseDouble(coorObjekt.getString("lon"));
-            } catch (Exception e) {
-                System.out.println("coordinates.lon: " + e.getMessage());
+            } catch (NumberFormatException e) {
+                Main.warn(e, "coordinates.lon:");
             }
 
             try {
                 m_source = obj.getString("source");
-            } catch (Exception e) {
-                System.out.println("source: " + e.getMessage());
+            } catch (RuntimeException e) {
+                Main.warn(e, "source:");
             }
 
         } catch (Exception e) {
-            System.out.println("coordinates: " + e.getMessage());
+            Main.warn(e, "coordinates:");
         }
     }
@@ -194,10 +209,10 @@
     private void parseStavebniObjekt(JsonObject obj) {
         try {
-            JsonObject stavebniObjekt = obj.getJsonObject("stavebni_objekt");
+            JsonObject stavebniObjekt = getSafeJsonObject(obj, "stavebni_objekt");
 
             try {
                 m_objekt_ruian_id = Long.parseLong(stavebniObjekt.getString("ruian_id"));
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.ruian_id: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.ruian_id:");
             }
 
@@ -205,5 +220,5 @@
                 m_objekt_podlazi = Integer.parseInt(stavebniObjekt.getString("pocet_podlazi"));
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.pocet_podlazi: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.pocet_podlazi:");
             }
 
@@ -211,5 +226,5 @@
                 m_objekt_byty = Integer.parseInt(stavebniObjekt.getString("pocet_bytu"));
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.pocet_bytu: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.pocet_bytu:");
             }
 
@@ -217,5 +232,5 @@
                 m_objekt_zpusob_vyuziti = stavebniObjekt.getString("zpusob_vyuziti");
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.zpusob_vyuziti: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.zpusob_vyuziti:");
             }
 
@@ -223,5 +238,5 @@
                 m_objekt_zpusob_vyuziti_kod = stavebniObjekt.getString("zpusob_vyuziti_kod");
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.m_objekt_zpusob_vyuziti_kod: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.m_objekt_zpusob_vyuziti_kod:");
             }
 
@@ -229,5 +244,5 @@
                 m_objekt_zpusob_vyuziti_key = stavebniObjekt.getString("zpusob_vyuziti_key");
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.zpusob_vyuziti_key: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.zpusob_vyuziti_key:");
             }
 
@@ -235,5 +250,5 @@
                 m_objekt_zpusob_vyuziti_val = stavebniObjekt.getString("zpusob_vyuziti_val");
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.m_objekt_zpusob_vyuziti_val: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.m_objekt_zpusob_vyuziti_val:");
             }
 
@@ -241,5 +256,5 @@
                 m_objekt_plati_od = stavebniObjekt.getString("plati_od");
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.plati_od: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.plati_od:");
             }
 
@@ -247,9 +262,9 @@
                 m_objekt_dokonceni = stavebniObjekt.getString("dokonceni");
             } catch (Exception e) {
-                System.out.println("stavebni_objekt.dokonceni: " + e.getMessage());
+                Main.warn(e, "stavebni_objekt.dokonceni:");
             }
 
         } catch (Exception e) {
-            System.out.println("stavebni_objekt: " + e.getMessage());
+            Main.warn(e, "stavebni_objekt:");
         }
     }
@@ -257,10 +272,10 @@
     private void parseNahlasenyProblem(JsonObject obj) {
         try {
-            JsonObject errObjekt = obj.getJsonObject("nahlaseny_problem");
+            JsonObject errObjekt = getSafeJsonObject(obj, "nahlaseny_problem");
 
             try {
                 m_err_user = errObjekt.getString("uzivatel");
             } catch (Exception e) {
-                System.out.println("nahlaseny_problem.uzivatel: " + e.getMessage());
+                Main.warn(e, "nahlaseny_problem.uzivatel:");
             }
 
@@ -268,5 +283,5 @@
                 m_err_date = errObjekt.getString("datum");
             } catch (Exception e) {
-                System.out.println("nahlaseny_problem.datum: " + e.getMessage());
+                Main.warn(e, "nahlaseny_problem.datum:");
             }
 
@@ -274,5 +289,5 @@
                 m_err_type = errObjekt.getString("duvod");
             } catch (Exception e) {
-                System.out.println("nahlaseny_problem.duvod: " + e.getMessage());
+                Main.warn(e, "nahlaseny_problem.duvod:");
             }
 
@@ -280,9 +295,9 @@
                 m_err_note = errObjekt.getString("poznamka");
             } catch (Exception e) {
-                System.out.println("nahlaseny_problem.poznamka: " + e.getMessage());
+                Main.warn(e, "nahlaseny_problem.poznamka:");
             }
 
         } catch (Exception e) {
-            System.out.println("nahlaseny_problem: " + e.getMessage());
+            Main.warn(e, "nahlaseny_problem:");
         }
     }
@@ -299,5 +314,5 @@
                     so.setRuianID(Long.parseLong(soBezGeom.getString("ruian_id")));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.ruian_id: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.ruian_id:");
                 }
 
@@ -305,5 +320,5 @@
                     so.setPodlazi(Integer.parseInt(soBezGeom.getString("pocet_podlazi")));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.pocet_podlazi: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.pocet_podlazi:");
                 }
 
@@ -311,5 +326,5 @@
                     so.setByty(Integer.parseInt(soBezGeom.getString("pocet_bytu")));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.pocet_bytu: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.pocet_bytu:");
                 }
 
@@ -317,5 +332,5 @@
                     so.setZpusobVyuziti(soBezGeom.getString("zpusob_vyuziti"));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.zpusob_vyuziti: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.zpusob_vyuziti:");
                 }
 
@@ -323,5 +338,5 @@
                     so.setZpusobVyuzitiKod(soBezGeom.getString("zpusob_vyuziti_kod"));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.zpusob_vyuziti_kod: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.zpusob_vyuziti_kod:");
                 }
 
@@ -329,5 +344,5 @@
                     so.setZpusobVyuzitiKey(soBezGeom.getString("zpusob_vyuziti_key"));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.zpusob_vyuziti_key: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.zpusob_vyuziti_key:");
                 }
 
@@ -335,5 +350,5 @@
                     so.setZpusobVyuzitiVal(soBezGeom.getString("zpusob_vyuziti_val"));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.zpusob_vyuziti_val: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.zpusob_vyuziti_val:");
                 }
 
@@ -341,5 +356,5 @@
                     so.setDokonceni(soBezGeom.getString("dokonceni"));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.dokonceni: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.dokonceni:");
                 }
 
@@ -347,5 +362,5 @@
                     so.setPlatiOd(soBezGeom.getString("plati_od"));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.plati_od: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.plati_od:");
                 }
 
@@ -353,5 +368,5 @@
                     so.setVzdalenost(Float.parseFloat(soBezGeom.getString("vzdalenost")));
                 } catch (Exception e) {
-                    System.out.println("so_bez_geometrie.vzdalenost: " + e.getMessage());
+                    Main.warn(e, "so_bez_geometrie.vzdalenost:");
                 }
 
@@ -359,5 +374,5 @@
             }
         } catch (Exception e) {
-            System.out.println("so_bez_geometrie: " + e.getMessage());
+            Main.warn(e, "so_bez_geometrie:");
         }
     }
@@ -374,5 +389,5 @@
                     am.setRuianID(Long.parseLong(adresniMisto.getString("ruian_id")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.ruian_id: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.ruian_id:");
                 }
 
@@ -384,5 +399,5 @@
                             );
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.pozice: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.pozice:");
                 }
 
@@ -390,5 +405,5 @@
                     am.setBudovaID(Long.parseLong(adresniMisto.getString("budova_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.budova_kod: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.budova_kod:");
                 }
 
@@ -396,5 +411,5 @@
                     am.setCisloTyp(adresniMisto.getString("cislo_typ"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.cislo_typ: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.cislo_typ:");
                 }
 
@@ -402,5 +417,5 @@
                     am.setCisloDomovni(adresniMisto.getString("cislo_domovni"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.cislo_domovni: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.cislo_domovni:");
                 }
 
@@ -408,5 +423,5 @@
                     am.setCisloOrientacni(adresniMisto.getString("cislo_orientacni"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.cislo_orientacni: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.cislo_orientacni:");
                 }
 
@@ -414,5 +429,5 @@
                     am.setUliceID(Long.parseLong(adresniMisto.getString("ulice_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.ulice_kod: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.ulice_kod:");
                 }
 
@@ -420,5 +435,5 @@
                     am.setUlice(adresniMisto.getString("ulice"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.ulice: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.ulice:");
                 }
 
@@ -426,5 +441,5 @@
                     am.setCastObceID(Long.parseLong(adresniMisto.getString("cast_obce_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.cast_obce_kod: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.cast_obce_kod:");
                 }
 
@@ -432,5 +447,5 @@
                     am.setCastObce(adresniMisto.getString("cast_obce"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.m_cast_obce: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.m_cast_obce:");
                 }
 
@@ -438,5 +453,5 @@
                     am.setMestskaCastID(Long.parseLong(adresniMisto.getString("mestska_cast_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.mestska_cast_kod: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.mestska_cast_kod:");
                 }
 
@@ -444,5 +459,5 @@
                     am.setMestskaCast(adresniMisto.getString("mestska_cast"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.mestska_cast: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.mestska_cast:");
                 }
 
@@ -450,5 +465,5 @@
                     am.setObecID(Long.parseLong(adresniMisto.getString("obec_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.obec:_kod " + e.getMessage());
+                    Main.warn(e, "adresni_mista.obec_kod:");
                 }
 
@@ -456,5 +471,5 @@
                     am.setObec(adresniMisto.getString("obec"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.obec: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.obec:");
                 }
 
@@ -462,5 +477,5 @@
                     am.setOkresID(Long.parseLong(adresniMisto.getString("okres_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.okres_kod: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.okres_kod:");
                 }
 
@@ -468,5 +483,5 @@
                     am.setOkres(adresniMisto.getString("okres"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.okres: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.okres:");
                 }
 
@@ -474,5 +489,5 @@
                     am.setKrajID(Long.parseLong(adresniMisto.getString("kraj_kod")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.kraj_kod: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.kraj_kod:");
                 }
 
@@ -480,5 +495,5 @@
                     am.setKraj(adresniMisto.getString("kraj"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.kraj: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.kraj:");
                 }
 
@@ -486,5 +501,5 @@
                     am.setPsc(adresniMisto.getString("psc"));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.psc: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.psc:");
                 }
 
@@ -492,5 +507,5 @@
                     am.setVzdalenost(Float.parseFloat(adresniMisto.getString("vzdalenost")));
                 } catch (Exception e) {
-                    System.out.println("adresni_mista.vzdalenost: " + e.getMessage());
+                    Main.warn(e, "adresni_mista.vzdalenost:");
                 }
 
@@ -498,5 +513,5 @@
             }
         } catch (Exception e) {
-            System.out.println("adresni_mista: " + e.getMessage());
+            Main.warn(e, "adresni_mista:");
         }
     }
@@ -504,10 +519,10 @@
     private void parseParcela(JsonObject obj) {
         try {
-            JsonObject parcela = obj.getJsonObject("parcela");
+            JsonObject parcela = getSafeJsonObject(obj, "parcela");
 
             try {
                 m_parcela_ruian_id = Long.parseLong(parcela.getString("ruian_id"));
             } catch (Exception e) {
-                System.out.println("parcela.ruian_id: " + e.getMessage());
+                Main.warn(e, "parcela.ruian_id:");
             }
 
@@ -515,5 +530,5 @@
                 m_parcela_druh_pozemku = parcela.getString("druh_pozemku");
             } catch (Exception e) {
-                System.out.println("parcela.druh_pozemku: " + e.getMessage());
+                Main.warn(e, "parcela.druh_pozemku:");
             }
 
@@ -521,5 +536,5 @@
                 m_parcela_zpusob_vyuziti = parcela.getString("zpusob_vyuziti");
             } catch (Exception e) {
-                System.out.println("parcela.zpusob_vyuziti: " + e.getMessage());
+                Main.warn(e, "parcela.zpusob_vyuziti:");
             }
 
@@ -527,9 +542,9 @@
                 m_parcela_plati_od = parcela.getString("plati_od");
             } catch (Exception e) {
-                System.out.println("parcela.plati_od: " + e.getMessage());
+                Main.warn(e, "parcela.plati_od:");
             }
 
         } catch (Exception e) {
-            System.out.println("parcela: " + e.getMessage());
+            Main.warn(e, "parcela:");
         }
     }
@@ -537,10 +552,10 @@
     private void parseUlice(JsonObject obj) {
         try {
-            JsonObject ulice = obj.getJsonObject("ulice");
+            JsonObject ulice = getSafeJsonObject(obj, "ulice");
 
             try {
                 m_ulice_ruian_id = Long.parseLong(ulice.getString("ruian_id"));
             } catch (Exception e) {
-                System.out.println("ulice.ruian_id: " + e.getMessage());
+                Main.warn(e, "ulice.ruian_id:");
             }
 
@@ -548,9 +563,9 @@
                 m_ulice_jmeno = ulice.getString("jmeno");
             } catch (Exception e) {
-                System.out.println("ulice.jmeno: " + e.getMessage());
+                Main.warn(e, "ulice.jmeno:");
             }
 
         } catch (Exception e) {
-            System.out.println("ulice: " + e.getMessage());
+            Main.warn(e, "ulice:");
         }
     }
@@ -558,10 +573,10 @@
     private void parseKatastr(JsonObject obj) {
         try {
-            JsonObject katastr = obj.getJsonObject("katastr");
+            JsonObject katastr = getSafeJsonObject(obj, "katastr");
 
             try {
                 m_katastr_ruian_id = Long.parseLong(katastr.getString("ruian_id"));
             } catch (Exception e) {
-                System.out.println("katastr.ruian_id: " + e.getMessage());
+                Main.warn(e, "katastr.ruian_id:");
             }
 
@@ -569,5 +584,5 @@
                 m_katastr_nazev = katastr.getString("nazev");
             } catch (Exception e) {
-                System.out.println("katastr.nazev: " + e.getMessage());
+                Main.warn(e, "katastr.nazev:");
             }
 
@@ -575,5 +590,5 @@
                 m_katastr_obec_kod = Long.parseLong(katastr.getString("obec_kod"));
             } catch (Exception e) {
-                System.out.println("katastr.obec_kod: " + e.getMessage());
+                Main.warn(e, "katastr.obec_kod:");
             }
 
@@ -581,5 +596,5 @@
                 m_katastr_obec = katastr.getString("obec");
             } catch (Exception e) {
-                System.out.println("katastr.okres: " + e.getMessage());
+                Main.warn(e, "katastr.okres:");
             }
 
@@ -587,5 +602,5 @@
                 m_katastr_okres_kod = Long.parseLong(katastr.getString("okres_kod"));
             } catch (Exception e) {
-                System.out.println("katastr.okres_kod: " + e.getMessage());
+                Main.warn(e, "katastr.okres_kod:");
             }
 
@@ -593,5 +608,5 @@
                 m_katastr_okres = katastr.getString("okres");
             } catch (Exception e) {
-                System.out.println("katastr.okres: " + e.getMessage());
+                Main.warn(e, "katastr.okres:");
             }
 
@@ -599,5 +614,5 @@
                 m_katastr_kraj_kod = Long.parseLong(katastr.getString("kraj_kod"));
             } catch (Exception e) {
-                System.out.println("katastr.kraj_kod: " + e.getMessage());
+                Main.warn(e, "katastr.kraj_kod:");
             }
 
@@ -605,9 +620,9 @@
                 m_katastr_kraj = katastr.getString("kraj");
             } catch (Exception e) {
-                System.out.println("katastr.kraj: " + e.getMessage());
+                Main.warn(e, "katastr.kraj:");
             }
 
         } catch (Exception e) {
-            System.out.println("katastr: " + e.getMessage());
+            Main.warn(e, "katastr:");
         }
     }
@@ -907,8 +922,8 @@
         String[] parts = ruianDate.split("\\.");
         try {
-            int day = Integer.parseInt(parts[0]);
-            int month = Integer.parseInt(parts[1]);
-            int year = Integer.parseInt(parts[2]);
-            r = new Integer(year).toString() + "-" + String.format("%02d", month) + "-" + String.format("%02d", day);
+            int day = Integer.valueOf(parts[0]);
+            int month = Integer.valueOf(parts[1]);
+            int year = Integer.valueOf(parts[2]);
+            r = Integer.toString(year) + "-" + String.format("%02d", month) + "-" + String.format("%02d", day);
         } catch (Exception e) {
             Main.warn(e);
@@ -940,6 +955,6 @@
         if (keyType.equals("building") && m_objekt_ruian_id > 0) {
             c.append(tagToString("ref:ruian:building", Long.toString(m_objekt_ruian_id)));
-            if (m_objekt_zpusob_vyuziti_key.length() > 0 &&
-                    m_objekt_zpusob_vyuziti_val.length() > 0
+            if (!m_objekt_zpusob_vyuziti_key.isEmpty() &&
+                !m_objekt_zpusob_vyuziti_val.isEmpty()
                     ) {
                 c.append(tagToString(m_objekt_zpusob_vyuziti_key, m_objekt_zpusob_vyuziti_val));
@@ -960,7 +975,7 @@
         }
 
-        if (keyType.startsWith("ghost") && m_so_bez_geometrie.size() > 0) {
+        if (keyType.startsWith("ghost") && !m_so_bez_geometrie.isEmpty()) {
             String[] key = keyType.split(":");
-            int i = new Integer(key[1]);
+            int i = Integer.valueOf(key[1]);
             System.out.println("Ghost ID: " + i);
 
@@ -988,13 +1003,13 @@
         // Copy address tags to clipboard
         if (keyType.startsWith("address")) {
-            if (m_adresni_mista.size() > 0) {
+            if (!m_adresni_mista.isEmpty()) {
                 int i;
 
-                if (m_adresni_mista.size() == 0) {
+                if (m_adresni_mista.isEmpty()) {
                     i = 0;
                 } else {
                     String[] key = keyType.split(":");
-                    i = new Integer(key[1]);
-                    System.out.println("Address ID: " + i);
+                    i = Integer.valueOf(key[1]);
+                    Main.info("Address ID: " + i);
                 }
 
@@ -1079,9 +1094,9 @@
      */
     void createAddrPoint(String cmd, String t) {
-        Collection<Command> commands = new LinkedList<Command>();
+        Collection<Command> commands = new LinkedList<>();
         Node node;
         if (cmd.startsWith("tags.create-on-place")) {
             String[] key = cmd.split(":");
-            int i = new Integer(key[1]);
+            int i = Integer.valueOf(key[1]);
             node = new Node(m_adresni_mista.get(i).getPosition());
         } else {
@@ -1090,12 +1105,12 @@
         commands.add(new AddCommand(node));
 
-        Collection<OsmPrimitive> coll = new LinkedList<OsmPrimitive>();
+        Collection<OsmPrimitive> coll = new LinkedList<>();
         coll.add(node);
 
         TagCollection tc = new TagCollection();
-        ArrayList<String> list = new ArrayList<String>(Arrays.asList(t.split("\n")));
+        ArrayList<String> list = new ArrayList<>(Arrays.asList(t.split("\n")));
         for (String line : list) {
             String[] tag = line.split("\"=\"");
-            System.out.println("<" + tag[0] + ">. <" + tag[1] +">");
+            Main.info("<" + tag[0] + ">. <" + tag[1] +">");
             tc.add(new Tag(tag[0].substring(1), tag[1].substring(0, tag[1].length()-1)));
         }
@@ -1113,5 +1128,5 @@
     public void performAction(String act) {
 
-        System.out.println("act: " + act.substring(7));
+        Main.info("act: " + act.substring(7));
         String[] params = act.substring(7).split("/");
         if (!params[0].equals("tags.copy") && !params[0].startsWith("tags.create")) {
@@ -1123,6 +1138,6 @@
         // Copy tags to clipboard
         if (params[0].equals("tags.copy")) {
-            if (task.length() > 0) {
-                Utils.copyToClipboard(task);
+            if (!task.isEmpty()) {
+                ClipboardUtils.copyString(task);
                 PointInfoUtils.showNotification(tr("Tags copied to clipboard."), "info");
             }
@@ -1131,5 +1146,5 @@
         // Create address node
         if (params[0].startsWith("tags.create")) {
-            if (task.length() > 0) {
+            if (!task.isEmpty()) {
                 createAddrPoint(act.substring(7), task);
                 PointInfoUtils.showNotification(tr("New address point added."), "info");
