Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java	(revision 21615)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java	(revision 21616)
@@ -48,4 +48,5 @@
 import org.openstreetmap.josm.plugins.validator.tests.SimilarNamedWays;
 import org.openstreetmap.josm.plugins.validator.tests.TagChecker;
+import org.openstreetmap.josm.plugins.validator.tests.TurnrestrictionTest;
 import org.openstreetmap.josm.plugins.validator.tests.UnclosedWays;
 import org.openstreetmap.josm.plugins.validator.tests.UnconnectedWays;
@@ -103,4 +104,5 @@
             MultipolygonTest.class, // ID  1601 ..  1699
             RelationChecker.class, // ID  1701 ..  1799
+            TurnrestrictionTest.class, // ID  1801 ..  1899
     };
 
Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/MultipolygonTest.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/MultipolygonTest.java	(revision 21615)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/MultipolygonTest.java	(revision 21616)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -18,4 +19,9 @@
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.JoinedWay;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData.Intersection;
+import org.openstreetmap.josm.gui.mappaint.AreaElemStyle;
+import org.openstreetmap.josm.gui.mappaint.ElemStyle;
+import org.openstreetmap.josm.gui.mappaint.ElemStyles;
+import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
+import org.openstreetmap.josm.plugins.validator.OSMValidatorPlugin;
 import org.openstreetmap.josm.plugins.validator.Severity;
 import org.openstreetmap.josm.plugins.validator.Test;
@@ -30,4 +36,11 @@
     protected static final int INNER_WAY_OUTSIDE = 1605;
     protected static final int CROSSING_WAYS = 1606;
+    protected static final int OUTER_STYLE_MISMATCH = 1607;
+    protected static final int INNER_STYLE_MISMATCH = 1608;
+    protected static final int NOT_CLOSED = 1609;
+    protected static final int NO_STYLE = 1610;
+    protected static final int NO_STYLE_POLYGON = 1611;
+
+    private static ElemStyles.StyleSet styles;
 
     private final List<List<Node>> nonClosedWays = new ArrayList<List<Node>>();
@@ -36,4 +49,10 @@
         super(tr("Multipolygon"),
                 tr("This test checks if multipolygons are valid"));
+    }
+
+    @Override
+    public void initialize(OSMValidatorPlugin plugin) throws Exception
+    {
+        styles = MapPaintStyles.getStyles().getStyleSet();
     }
 
@@ -94,4 +113,14 @@
 
     @Override
+    public void visit(Way w) {
+        if (styles != null && !w.isClosed())
+        {
+            ElemStyle e = styles.getArea(w);
+            if(e instanceof AreaElemStyle && !((AreaElemStyle)e).closed)
+                errors.add( new TestError(this, Severity.WARNING, tr("Area style way is not closed"), NOT_CLOSED,  w));
+        }
+    }
+
+    @Override
     public void visit(Relation r) {
         nonClosedWays.clear();
@@ -114,4 +143,48 @@
             List<List<Node>> innerWays = joinWays(polygon.getInnerWays()); // Side effect - sets nonClosedWays
             List<List<Node>> outerWays = joinWays(polygon.getOuterWays());
+
+            if(styles != null) {
+                ElemStyle wayStyle = styles.get(r);
+
+                // If area style was not found for relation then use style of ways
+                if(!(wayStyle instanceof AreaElemStyle)) {
+                    errors.add( new TestError(this, Severity.OTHER, tr("No style in multipolygon relation"),
+                    NO_STYLE_POLYGON, r));
+                    for (Way w : polygon.getOuterWays()) {
+                        wayStyle = styles.getArea(w);
+                        if(wayStyle != null) {
+                            break;
+                        }
+                    }
+                }
+
+                if (wayStyle instanceof AreaElemStyle) {
+                    for (Way wInner : polygon.getInnerWays())
+                    {
+                        ElemStyle innerStyle = styles.get(wInner);
+                        if(wayStyle != null && wayStyle.equals(innerStyle)) {
+                            List<OsmPrimitive> l = new ArrayList<OsmPrimitive>();
+                            l.add(r);
+                            l.add(wInner);
+                            errors.add( new TestError(this, Severity.WARNING, tr("Style for inner way equals multipolygon"),
+                            INNER_STYLE_MISMATCH, l, Collections.singletonList(wInner)));
+                        }
+                    }
+                    for (Way wOuter : polygon.getOuterWays())
+                    {
+                        ElemStyle outerStyle = styles.get(wOuter);
+                        if(outerStyle instanceof AreaElemStyle && !wayStyle.equals(outerStyle)) {
+                            List<OsmPrimitive> l = new ArrayList<OsmPrimitive>();
+                            l.add(r);
+                            l.add(wOuter);
+                            errors.add( new TestError(this, Severity.WARNING, tr("Style for outer way mismatches"),
+                            OUTER_STYLE_MISMATCH, l, Collections.singletonList(wOuter)));
+                        }
+                    }
+                }
+                else
+                    errors.add( new TestError(this, Severity.OTHER, tr("No style for multipolygon"),
+                    NO_STYLE, r));
+            }
 
             if (!nonClosedWays.isEmpty()) {
@@ -134,9 +207,9 @@
                     }
                 }
-                if (outside | crossing) {
+                if (outside || crossing) {
                     List<List<Node>> highlights = new ArrayList<List<Node>>();
                     highlights.add(pdInner);
                     if (outside) {
-                        errors.add(new TestError(this, Severity.WARNING, tr("Multipolygon inner way is outside."), INNER_WAY_OUTSIDE, Collections.singletonList(r), highlights));
+                        errors.add(new TestError(this, Severity.WARNING, tr("Multipolygon inner way is outside"), INNER_WAY_OUTSIDE, Collections.singletonList(r), highlights));
                     } else if (crossing) {
                         highlights.add(outerWay);
@@ -155,5 +228,5 @@
                 }
             } else {
-                errors.add( new TestError(this, Severity.WARNING, tr("Non-Way in multipolygon."), WRONG_MEMBER_TYPE, rm.getMember()));
+                errors.add( new TestError(this, Severity.WARNING, tr("Non-Way in multipolygon"), WRONG_MEMBER_TYPE, rm.getMember()));
             }
         }
Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java	(revision 21615)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java	(revision 21616)
@@ -92,5 +92,4 @@
     public static final String PREF_CHECK_COMPLEX = PREFIX + ".checkComplex";
     public static final String PREF_CHECK_FIXMES = PREFIX + ".checkFixmes";
-    public static final String PREF_CHECK_PAINT = PREFIX + ".paint";
 
     public static final String PREF_SOURCES = PREFIX + ".sources";
@@ -103,5 +102,4 @@
     public static final String PREF_CHECK_COMPLEX_BEFORE_UPLOAD = PREF_CHECK_COMPLEX + "BeforeUpload";
     public static final String PREF_CHECK_FIXMES_BEFORE_UPLOAD = PREF_CHECK_FIXMES + "BeforeUpload";
-    public static final String PREF_CHECK_PAINT_BEFORE_UPLOAD = PREF_CHECK_PAINT + "BeforeUpload";
 
     protected boolean checkKeys = false;
@@ -109,5 +107,4 @@
     protected boolean checkComplex = false;
     protected boolean checkFixmes = false;
-    protected boolean checkPaint = false;
 
     protected JCheckBox prefCheckKeys;
@@ -137,6 +134,5 @@
     protected static int INVALID_SPACE     = 1204;
     protected static int INVALID_KEY_SPACE = 1205;
-    protected static int INVALID_HTML      = 1206;
-    protected static int PAINT             = 1207;
+    protected static int INVALID_HTML      = 1206; /* 1207 was PAINT */
     protected static int LONG_VALUE        = 1208;
     protected static int LONG_KEY          = 1209;
@@ -466,19 +462,4 @@
             }
         }
-        if(checkPaint)
-        {
-            List<String> pe = p.getDataSet().getErrors(p);
-            if(pe != null)
-            {
-                for(String s: pe)
-                {
-                    /* passing translated text also to original string, as we already
-                    translated the stuff before. Makes the ignore file language dependend. */
-                    errors.add( new TestError(this, Severity.WARNING, tr("Painting problem"),
-                            s, s, PAINT, p) );
-                    withErrors.add(p, "P");
-                }
-            }
-        }
 
         Map<String, String> props = (p.getKeys() == null) ? Collections.<String, String>emptyMap() : p.getKeys();
@@ -627,8 +608,4 @@
         if( isBeforeUpload )
             checkFixmes = checkFixmes && Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true);
-
-        checkPaint = Main.pref.getBoolean(PREF_CHECK_PAINT, true);
-        if( isBeforeUpload )
-            checkPaint = checkPaint && Main.pref.getBoolean(PREF_CHECK_PAINT_BEFORE_UPLOAD, true);
     }
 
@@ -636,5 +613,5 @@
     public void visit(Collection<OsmPrimitive> selection)
     {
-        if( checkKeys || checkValues || checkComplex || checkPaint || checkFixmes)
+        if( checkKeys || checkValues || checkComplex || checkFixmes)
             super.visit(selection);
     }
@@ -782,12 +759,4 @@
         testPanel.add(prefCheckFixmesBeforeUpload, a);
 
-        prefCheckPaint = new JCheckBox(tr("Check for paint notes."), Main.pref.getBoolean(PREF_CHECK_PAINT, true));
-        prefCheckPaint.setToolTipText(tr("Check if map painting found data errors."));
-        testPanel.add(prefCheckPaint, GBC.std().insets(20,0,0,0));
-
-        prefCheckPaintBeforeUpload = new JCheckBox();
-        prefCheckPaintBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_PAINT_BEFORE_UPLOAD, true));
-        testPanel.add(prefCheckPaintBeforeUpload, a);
-
         prefUseDataFile = new JCheckBox(tr("Use default data file."), Main.pref.getBoolean(PREF_USE_DATA_FILE, true));
         prefUseDataFile.setToolTipText(tr("Use the default data file (recommended)."));
@@ -824,10 +793,8 @@
         Main.pref.put(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
         Main.pref.put(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
-        Main.pref.put(PREF_CHECK_PAINT, prefCheckPaint.isSelected());
         Main.pref.put(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
         Main.pref.put(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, prefCheckComplexBeforeUpload.isSelected());
         Main.pref.put(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
         Main.pref.put(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_PAINT_BEFORE_UPLOAD, prefCheckPaintBeforeUpload.isSelected());
         Main.pref.put(PREF_USE_DATA_FILE, prefUseDataFile.isSelected());
         Main.pref.put(PREF_USE_IGNORE_FILE, prefUseIgnoreFile.isSelected());
Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TurnrestrictionTest.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TurnrestrictionTest.java	(revision 21616)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TurnrestrictionTest.java	(revision 21616)
@@ -0,0 +1,185 @@
+// License: GPL. See LICENSE file for details.
+package org.openstreetmap.josm.plugins.validator.tests;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmUtils;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.plugins.validator.Severity;
+import org.openstreetmap.josm.plugins.validator.Test;
+import org.openstreetmap.josm.plugins.validator.TestError;
+
+public class TurnrestrictionTest extends Test {
+
+    protected static final int NO_VIA = 1801;
+    protected static final int NO_FROM = 1802;
+    protected static final int NO_TO = 1803;
+    protected static final int MORE_VIA = 1804;
+    protected static final int MORE_FROM = 1805;
+    protected static final int MORE_TO = 1806;
+    protected static final int UNKNOWN_ROLE = 1807;
+    protected static final int UNKNOWN_TYPE = 1808;
+    protected static final int FROM_VIA_NODE = 1809;
+    protected static final int TO_VIA_NODE = 1810;
+    protected static final int FROM_VIA_WAY = 1811;
+    protected static final int TO_VIA_WAY = 1812;
+
+    public TurnrestrictionTest() {
+        super(tr("Turnrestriction"),
+                tr("This test checks if turnrestrictions are valid"));
+    }
+
+    @Override
+    public void visit(Relation r) {
+        if (!"restriction".equals(r.get("type")))
+            return;
+
+        Way fromWay = null;
+        Way toWay = null;
+        OsmPrimitive via = null;
+
+        boolean morefrom = false;
+        boolean moreto = false;
+        boolean morevia = false;
+
+        /* find the "from", "via" and "to" elements */
+        for (RelationMember m : r.getMembers())
+        {
+            if(m.getMember().isIncomplete())
+                return;
+            else
+            {
+                ArrayList<OsmPrimitive> l = new ArrayList<OsmPrimitive>();
+                l.add(r);
+                l.add(m.getMember());
+                if(m.isWay())
+                {
+                    Way w = m.getWay();
+                    if(w.getNodesCount() < 2) {
+                        continue;
+                    }
+
+                    if("from".equals(m.getRole())) {
+                        if(fromWay != null) {
+                            morefrom = true;
+                        } else {
+                            fromWay = w;
+                        }
+                    } else if("to".equals(m.getRole())) {
+                        if(toWay != null) {
+                            moreto = true;
+                        } else {
+                            toWay = w;
+                        }
+                    } else if("via".equals(m.getRole())) {
+                        if(via != null) {
+                            morevia = true;
+                        } else {
+                            via = w;
+                        }
+                    } else {
+                        errors.add(new TestError(this, Severity.WARNING, tr("Unknown role"), UNKNOWN_ROLE,
+                        l, Collections.singletonList(m)));
+                    }
+                }
+                else if(m.isNode())
+                {
+                    Node n = m.getNode();
+                    if("via".equals(m.getRole()))
+                    {
+                        if(via != null) {
+                            morevia = true;
+                        } else {
+                            via = n;
+                        }
+                    } else {
+                        errors.add(new TestError(this, Severity.WARNING, tr("Unknown role"), UNKNOWN_ROLE,
+                        l, Collections.singletonList(m)));
+                    }
+                } else {
+                    errors.add(new TestError(this, Severity.WARNING, tr("Unknown member type"), UNKNOWN_TYPE,
+                    l, Collections.singletonList(m)));
+                }
+            }
+        }
+        if(morefrom)
+            errors.add(new TestError(this, Severity.ERROR, tr("More than one \"from\" way found"), MORE_FROM, r));
+        if(moreto)
+            errors.add(new TestError(this, Severity.ERROR, tr("More than one \"to\" way found"), MORE_TO, r));
+        if(morevia)
+            errors.add(new TestError(this, Severity.ERROR, tr("More than one \"via\" way found"), MORE_VIA, r));
+
+        if (fromWay == null) {
+            errors.add(new TestError(this, Severity.ERROR, tr("No \"from\" way found"), NO_FROM, r));
+            return;
+        }
+        if (toWay == null) {
+            errors.add(new TestError(this, Severity.ERROR, tr("No \"to\" way found"), NO_TO, r));
+            return;
+        }
+        if (via == null) {
+            errors.add(new TestError(this, Severity.ERROR, tr("No \"via\" node or way found"), NO_VIA, r));
+            return;
+        }
+
+        Node viaNode;
+        if(via instanceof Node)
+        {
+            viaNode = (Node) via;
+            if(!fromWay.isFirstLastNode(viaNode)) {
+                errors.add(new TestError(this, Severity.ERROR,
+                tr("The \"from\" way does not start or end at a \"via\" node"), FROM_VIA_NODE, r));
+                return;
+            }
+            if(!toWay.isFirstLastNode(viaNode)) {
+                errors.add(new TestError(this, Severity.ERROR,
+                tr("The \"to\" way does not start or end at a \"via\" node"), TO_VIA_NODE, r));
+            }
+        }
+        else
+        {
+            Way viaWay = (Way) via;
+            Node firstNode = viaWay.firstNode();
+            Node lastNode = viaWay.lastNode();
+            Boolean onewayvia = false;
+
+            String onewayviastr = viaWay.get("oneway");
+            if(onewayviastr != null)
+            {
+                if("-1".equals(onewayviastr)) {
+                    onewayvia = true;
+                    Node tmp = firstNode;
+                    firstNode = lastNode;
+                    lastNode = tmp;
+                } else {
+                    onewayvia = OsmUtils.getOsmBoolean(onewayviastr);
+                    if (onewayvia == null) {
+                        onewayvia = false;
+                    }
+                }
+            }
+
+            if(fromWay.isFirstLastNode(firstNode))
+                viaNode = firstNode;
+            else if(!onewayvia && fromWay.isFirstLastNode(lastNode))
+                viaNode = lastNode;
+            else
+            {
+                errors.add(new TestError(this, Severity.ERROR,
+                tr("The \"from\" way does not start or end at a \"via\" way."), FROM_VIA_WAY, r));
+                return;
+            }
+            if(!toWay.isFirstLastNode(viaNode == firstNode ? lastNode : firstNode)) {
+                errors.add(new TestError(this, Severity.ERROR,
+                tr("The \"to\" way does not start or end at a \"via\" way."), TO_VIA_WAY, r));
+            }
+        }
+    }
+}
Index: /applications/editors/josm/plugins/videomapping/build.xml
===================================================================
--- /applications/editors/josm/plugins/videomapping/build.xml	(revision 21615)
+++ /applications/editors/josm/plugins/videomapping/build.xml	(revision 21616)
@@ -47,5 +47,4 @@
 	<property name="ant.build.javac.target" value="1.5"/>
 	<property name="plugin.jar"             value="${plugin.dist.dir}/${ant.project.name}.jar"/>
-	<property name="vlcj"                  value="lib/vlcj-1.1f.jar"/>
 	<!--
     **********************************************************
@@ -67,7 +66,9 @@
 			<compilerarg value="-Xlint:deprecation"/>
 			<compilerarg value="-Xlint:unchecked"/>
-			<classpath>
-				<pathelement location="${vlcj}"/> <!--Add external library -->
-			</classpath>
+                        <classpath>
+                                <fileset dir="lib">
+                                        <include name="**/*.jar"/>
+                                </fileset>
+                        </classpath>
 		</javac>
 	</target>
