Index: /applications/editors/josm/plugins/videomapping/.classpath
===================================================================
--- /applications/editors/josm/plugins/videomapping/.classpath	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/.classpath	(revision 25796)
@@ -7,5 +7,9 @@
 	<classpathentry kind="lib" path="lib/jna.jar"/>
 	<classpathentry kind="lib" path="lib/log4j.jar"/>
-	<classpathentry kind="lib" path="lib/vlcj-1.1.5.1.jar" sourcepath="C:/Dokumente und Einstellungen/Matthias/Desktop/vlcj/vlcj-1.1.5.1-javadoc.jar"/>
+	<classpathentry kind="lib" path="lib/vlcj-1.1.5.1.jar" sourcepath="C:/Dokumente und Einstellungen/Matthias/Desktop/vlcj/vlcj-1.1.5.1-javadoc.jar">
+		<attributes>
+			<attribute name="javadoc_location" value="jar:file:/D:/Projekte/Studium/BA Arbeit/working/plugins/videomapping/lib/vlcj-1.1.5.1-javadoc.jar!/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry combineaccessrules="false" kind="src" path="/core"/>
 	<classpathentry kind="lib" path="lib/platform.jar"/>
Index: /applications/editors/josm/plugins/videomapping/build.xml
===================================================================
--- /applications/editors/josm/plugins/videomapping/build.xml	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/build.xml	(revision 25796)
@@ -109,5 +109,5 @@
 			<manifest>
 				<attribute name="Author" value="Matthias Meißer"/>
-				<attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.videomapping.VideoMappingPlugin"/>
+				<attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.videomapping.VideoPlugin"/>
 				<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
 				<attribute name="Plugin-Description" value="(This Plugin is currently work in progress!!!) Links and syncs a georeferenced video against a GPS track, to use it for identify visible objects."/>
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java	(revision 25796)
@@ -37,4 +37,5 @@
 import uk.co.caprica.vlcj.runtime.windows.WindowsRuntimeUtil;
 
+import com.sun.jna.LastErrorException;
 import com.sun.jna.NativeLibrary;
 
@@ -50,22 +51,240 @@
 //Here we manage properties and start the other classes
 public class VideoPlugin extends Plugin implements LayerChangeListener{
+	private JMenu VMenu,VDeinterlacer;
+	private JosmAction VAdd,VRemove,VStart,Vbackward,Vforward,VJump,Vfaster,Vslower,Vloop;
+	private JRadioButtonMenuItem VIntBob,VIntNone,VIntLinear;
+    private JCheckBoxMenuItem VCenterIcon,VSubTitles;
+    private JMenuItem VJumpLength,VLoopLength;
+    private final String PROP_MRU="videomapping.mru";
+    private final String PROP_AUTOCENTER="videomapping.autocenter";
+    private final String PROP_JUMPLENGTH="videomapping.jumplength";
+    private final String PROP_LOOPLENGTH="videomapping.looplength"; 
+    private String deinterlacer;
+    private boolean autoCenter;
+    private Integer jumpLength,loopLength;
+    private String mostRecentFolder;
+	private GpxLayer gpsLayer;
 
 	public VideoPlugin(PluginInformation info) {
 		super(info);
-		// TODO Auto-generated constructor stub
-	}
-
-	public void activeLayerChange(Layer arg0, Layer arg1) {
-		// TODO Auto-generated method stub
+		MapView.addLayerChangeListener(this);				
+		createMenusAndShortCuts();
+		enableVideoControlMenus(false);
+		setDefaults();
+		loadProperties();
+	}
+
+	private void createMenusAndShortCuts() {
+		VMenu = Main.main.menu.addMenu(" Video", KeyEvent.VK_V, Main.main.menu.defaultMenuPos,ht("/Plugin/Videomapping"));
+		VMenu.setEnabled(false);
+		VAdd= new JosmAction(tr("Import Video"),"videomapping",tr("Sync a video against this GPS track"),null,false) {
+            public void actionPerformed(ActionEvent arg0) {                 
+                    importVideoFile();
+                }
+        
+        };
+        VRemove= new JosmAction(tr("Remove Video"),"videomapping",tr("removes current video from layer"),null,false) {
+            private static final long serialVersionUID = 1L;
+
+            public void actionPerformed(ActionEvent arg0) {
+            }
+        };       
+        VStart = new JosmAction(tr("Play/Pause"), "audio-playpause", tr("starts/pauses video playback"),
+                Shortcut.registerShortcut("videomapping:startstop","Video: "+tr("Play/Pause"),KeyEvent.VK_NUMPAD5, Shortcut.GROUP_DIRECT), false) {            
+            public void actionPerformed(ActionEvent e) {                                
+                
+            }
+        };
+        Vbackward = new JosmAction(tr("Backward"), "audio-prev", tr("jumps n sec back"),
+                Shortcut.registerShortcut("videomapping:backward","Video: "+tr("Backward"),KeyEvent.VK_NUMPAD4, Shortcut.GROUP_DIRECT), false) {
+            public void actionPerformed(ActionEvent e) {
+               
+            }
+        };
+        Vforward= new JosmAction(tr("Forward"), "audio-next", tr("jumps n sec forward"),
+                Shortcut.registerShortcut("videomapping:forward","Video: "+tr("Forward"),KeyEvent.VK_NUMPAD6, Shortcut.GROUP_DIRECT), false) {            
+            public void actionPerformed(ActionEvent e) {
+                
+                            
+            }
+        };
+        Vfaster= new JosmAction(tr("Faster"), "audio-faster", tr("faster playback"),
+                Shortcut.registerShortcut("videomapping:faster","Video: "+tr("Faster"),KeyEvent.VK_NUMPAD8, Shortcut.GROUP_DIRECT), false) {
+            
+            public void actionPerformed(ActionEvent e) {
+                
+                            
+            }
+        };
+        Vslower= new JosmAction(tr("Slower"), "audio-slower", tr("slower playback"),
+                Shortcut.registerShortcut("videomapping:slower","Video: "+tr("Slower"),KeyEvent.VK_NUMPAD2, Shortcut.GROUP_DIRECT), false) {
+            
+            public void actionPerformed(ActionEvent e) {
+                
+                            
+            }
+        };
+        VJump= new JosmAction(tr("Jump To"), "jumpto", tr("jumps to the entered gps time"),null, false) {          
+            public void actionPerformed(ActionEvent e) {
+            	
+
+            }
+                            
+            
+        };
+        Vloop= new JosmAction(tr("Loop"), "loop", tr("loops n sec around current position"),
+                Shortcut.registerShortcut("videomapping:loop","Video: "+tr("loop"),KeyEvent.VK_NUMPAD7, Shortcut.GROUP_DIRECT), false) {            
+            public void actionPerformed(ActionEvent e) {
+
+                            
+            }
+        };
+        
+        //now the options menu
+        VCenterIcon = new JCheckBoxMenuItem(new JosmAction(tr("Keep centered"), null, tr("follows the video icon automaticly"),null, false) {            
+            public void actionPerformed(ActionEvent e) {
+
+                            
+            }
+        });
+        //now the options menu
+        VSubTitles = new JCheckBoxMenuItem(new JosmAction(tr("Subtitles"), null, tr("Show subtitles in video"),null, false) {           
+            public void actionPerformed(ActionEvent e) {
+  
+                            
+            }
+        });
+        
+        VJumpLength = new JMenuItem(new JosmAction(tr("Jump length"), null, tr("Set the length of a jump"),null, false) {            
+            public void actionPerformed(ActionEvent e) {                        
+            }
+        });
+        
+        VLoopLength = new JMenuItem(new JosmAction(tr("Loop length"), null, tr("Set the length around a looppoint"),null, false) {            
+            public void actionPerformed(ActionEvent e) {
+               
+                            
+            }
+        });        
+        VDeinterlacer= new JMenu("Deinterlacer");
+        VIntNone= new JRadioButtonMenuItem(new JosmAction(tr("none"), null, tr("no deinterlacing"),null, false) {            
+            public void actionPerformed(ActionEvent e) {                
+            }
+        });
+        VIntBob= new JRadioButtonMenuItem(new JosmAction("bob", null, tr("deinterlacing using line doubling"),null, false) {            
+            public void actionPerformed(ActionEvent e) {
+
+            }
+        });
+        VIntLinear= new JRadioButtonMenuItem(new JosmAction("linear", null, tr("deinterlacing using linear interpolation"),null, false) {            
+            public void actionPerformed(ActionEvent e) {
+
+            }
+        });
+        VDeinterlacer.add(VIntNone);
+        VDeinterlacer.add(VIntBob);
+        VDeinterlacer.add(VIntLinear);        
+        VMenu.add(VAdd);        
+        VMenu.add(VStart);
+        VMenu.add(Vbackward);
+        VMenu.add(Vforward);
+        VMenu.add(Vfaster);
+        VMenu.add(Vslower);
+        VMenu.add(Vloop);
+        VMenu.add(VJump);
+        VMenu.addSeparator();
+        VMenu.add(VCenterIcon);
+        VMenu.add(VJumpLength);
+        VMenu.add(VLoopLength);
+        VMenu.add(VDeinterlacer);
+        VMenu.add(VSubTitles);
+        
+    }
+
+	protected void importVideoFile() {
+		JFileChooser fc = new JFileChooser(mostRecentFolder);
+        fc.setSelectedFile(new File(mostRecentFolder));
+        if(fc.showOpenDialog(Main.main.parent)!=JFileChooser.CANCEL_OPTION)
+        {
+//        	mostRecentFolder=fc.getSelectedFile().getAbsolutePath();
+//        	saveProperties();
+        	VideoPositionLayer videoPositionLayer= new VideoPositionLayer(gpsLayer);
+        }
 		
 	}
 
+	private void enableVideoControlMenus(boolean b) {
+		VStart.setEnabled(b);
+        Vbackward.setEnabled(b);
+        Vforward.setEnabled(b);
+        Vloop.setEnabled(b);
+        Vfaster.setEnabled(b);
+        Vslower.setEnabled(b);
+        VJump.setEnabled(b);		
+	}
+	
+	private void setDefaults()
+	{
+		autoCenter=false;
+		deinterlacer="";
+		jumpLength=1000;
+		loopLength=6000;
+		mostRecentFolder=System.getProperty("user.home");		
+	}
+	
+	private void loadProperties() {
+        String temp;        
+        temp=Main.pref.get(PROP_AUTOCENTER);
+        if((temp!=null)&&(temp.length()!=0))
+        	autoCenter=Boolean.getBoolean(temp);        
+        temp=Main.pref.get(PROP_JUMPLENGTH);
+        if((temp!=null)&&(temp.length()!=0))
+        	jumpLength=Integer.valueOf(temp);
+        temp=Main.pref.get(PROP_LOOPLENGTH);
+        if((temp!=null)&&(temp.length()!=0))
+        	loopLength=Integer.valueOf(temp);
+        temp=Main.pref.get(PROP_MRU);
+        if((temp!=null)&&(temp.length()!=0))
+        	mostRecentFolder=Main.pref.get(PROP_MRU);        
+    }
+	
+	private void saveProperties(){
+        Main.pref.put(PROP_AUTOCENTER, autoCenter);
+        Main.pref.put(PROP_JUMPLENGTH, jumpLength.toString());
+        Main.pref.put(PROP_LOOPLENGTH, loopLength.toString());  
+    	Main.pref.put(PROP_MRU, mostRecentFolder);
+    }
+	
+	private void applySettings()
+	{
+		//GUI
+        VCenterIcon.setSelected(autoCenter);
+        VIntNone.setSelected(true);
+        if(deinterlacer=="")
+        	VIntNone.setSelected(true);
+        if(deinterlacer=="bob")
+        	VIntBob.setSelected(true);
+        if(deinterlacer=="linear")
+        	VIntLinear.setSelected(true);
+	}
+	
+
+	public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        VMenu.setEnabled(true);
+        if (newLayer instanceof GpxLayer)
+        {
+            VAdd.setEnabled(true);
+            gpsLayer=((GpxLayer) newLayer);            
+            //TODO append to GPS Layer menu
+        }        
+    }
+
 	public void layerAdded(Layer arg0) {
-		// TODO Auto-generated method stub
+		activeLayerChange(null,arg0);
 		
 	}
 
 	public void layerRemoved(Layer arg0) {
-		// TODO Auto-generated method stub
+		activeLayerChange(null,arg0);
 		
 	}
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPositionLayer.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPositionLayer.java	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPositionLayer.java	(revision 25796)
@@ -2,4 +2,5 @@
 
 
+import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Collections;
@@ -23,4 +24,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.GpxTrack;
@@ -37,12 +39,202 @@
 //Basic rendering and GPS layer interaction
 public class VideoPositionLayer extends Layer implements MouseListener,MouseMotionListener {
-
-	public VideoPositionLayer(String name) {
-		super(name);
-		// TODO Auto-generated constructor stub
-	}
+	private List<WayPoint> gpsTrack;
+	private ImageIcon layerIcon;
+	private DateFormat gpsTimeFormat;
+	private WayPoint iconPosition;
+	private final int GPS_INTERVALL=1000;
+
+	public VideoPositionLayer(GpxLayer gpsLayer) {
+		super("videolayer");
+		layerIcon = new ImageIcon("images/videomapping.png");
+		gpsTrack=importGPSLayer(gpsLayer.data);
+		gpsTimeFormat= new SimpleDateFormat("HH:mm:ss");
+		Main.map.mapView.addMouseListener(this);
+        Main.map.mapView.addMouseMotionListener(this);
+        iconPosition=gpsTrack.get(0);
+        Main.main.addLayer(this);        
+		
+	}
+
+	//make a flat copy
+	private List<WayPoint> importGPSLayer(GpxData gps) {
+		LinkedList<WayPoint> ls = new LinkedList<WayPoint>();
+        for (GpxTrack trk : gps.tracks) {
+            for (GpxTrackSegment segment : trk.getSegments()) {
+                ls.addAll(segment.getWayPoints());
+            }
+        }
+        Collections.sort(ls); //sort basing upon time
+        return ls;
+		
+	}
+
+	@Override
+	public void paint(Graphics2D g, MapView map, Bounds bound) {
+		paintGpsTrack(g);
+		paintPositionIcon(g);
+		paintInterpolatedSegment(g);
+	}
+
+	private void paintGpsTrack(Graphics2D g) {
+		g.setColor(Color.YELLOW);
+        for(WayPoint n: gpsTrack) {
+            Point p = Main.map.mapView.getPoint(n.getEastNorth());
+            g.drawOval(p.x - 2, p.y - 2, 4, 4);
+        }
+	}
+	
+	private void paintPositionIcon(Graphics2D g) {
+		Point p=Main.map.mapView.getPoint(iconPosition.getEastNorth());
+        layerIcon.paintIcon(null, g, p.x-layerIcon.getIconWidth()/2, p.y-layerIcon.getIconHeight()/2);
+        g.drawString(gpsTimeFormat.format(iconPosition.getTime()),p.x-15,p.y-15);
+	}
+	
+	private void paintInterpolatedSegment(Graphics2D g) {
+		g.setColor(Color.CYAN);
+		List<WayPoint>ls=getInterpolatedSegment(iconPosition,5,5);
+        for(WayPoint n: ls) {
+            Point p = Main.map.mapView.getPoint(n.getEastNorth());
+            g.drawOval(p.x - 2, p.y - 2, 4, 4);
+        }
+		
+	}
+
+	private List<WayPoint> getInterpolatedSegment(WayPoint center, int before, int after) {
+		LinkedList<WayPoint> ls = new LinkedList<WayPoint>();
+		if(gpsTrack.indexOf(iconPosition)!=0)
+		{
+			WayPoint prev=gpsTrack.get(gpsTrack.indexOf(iconPosition)-1);
+			for(int i=1;i<=before;i++)
+			{
+				ls.add(interpolate(prev,(float)100f/before*i));
+			}
+		}
+		for(int i=1;i<=after;i++)
+		{
+			ls.add(interpolate(iconPosition,(float)100f/before*i));
+		}
+		//test code
+		Date test=getFirstWayPoint().getTime();
+		test.setHours(14);
+		test.setMinutes(50);
+		test.setSeconds(33);
+		
+		ls.add(getWayPointBefore(new Date(test.getTime()+500)));
+		ls.add(interpolate(new Date(test.getTime()+500)));
+		System.out.print(test);
+		return ls;
+	}
+	
+	//creates a waypoint for the corresponding time
+	private WayPoint interpolate(Date GPSTime)
+	{
+		WayPoint before =getWayPointBefore(GPSTime);
+		long diff=GPSTime.getTime()-before.getTime().getTime();
+		assert diff>=0;
+		assert diff<GPS_INTERVALL;
+		float perc=((float)diff/(float)GPS_INTERVALL)*100;		
+		return interpolate(before,perc);
+	}
+	
+	private WayPoint getWayPointBefore(Date GPSTime)
+	{
+		assert GPSTime.after(getFirstWayPoint().getTime())==true;
+		assert GPSTime.before(getLastWayPoint().getTime())==true;
+		
+		Date first=getFirstWayPoint().getTime();
+		long diff=GPSTime.getTime()-first.getTime();
+		//assumes that GPS intervall is constant
+		int id=(int) (diff/GPS_INTERVALL);		
+		return gpsTrack.get(id);
+	}
+	
+	public WayPoint getFirstWayPoint()
+	{
+		return gpsTrack.get(0);
+	}
+	
+	public WayPoint getLastWayPoint()
+	{
+		return gpsTrack.get(gpsTrack.size()-1);
+	}
+
+	//interpolates a waypoint between this and the following waypoint at percent
+	private WayPoint interpolate(WayPoint first, float percent) {
+		assert (percent>0);
+		assert (percent<100);
+		double dX,dY;
+        WayPoint leftP,rightP;
+        
+        
+        WayPoint next=gpsTrack.get(gpsTrack.indexOf(first)+1);       
+        //determine which point is what
+        leftP=getLeftPoint(first, next);
+        rightP=getRightPoint(first,next);
+        //calc increment
+        percent=percent/100;
+        dX=(rightP.getCoor().lon()-leftP.getCoor().lon())*percent;
+        dY=(rightP.getCoor().lat()-leftP.getCoor().lat())*percent;
+        //move in the right direction
+        if (first==leftP)
+        {
+        	return new WayPoint(new LatLon(leftP.getCoor().lat()+dY,leftP.getCoor().lon()+dX));
+        }
+        else
+        	 return new WayPoint(new LatLon(rightP.getCoor().lat()-dY,rightP.getCoor().lon()-dX));
+
+        
+	}
+	
+	private WayPoint getLeftPoint(WayPoint p1,WayPoint p2)
+    {
+        if(p1.getCoor().lon()<p2.getCoor().lon()) return p1; else return p2;
+    }
+    
+    private WayPoint getRightPoint(WayPoint p1, WayPoint p2)
+    {
+        if(p1.getCoor().lon()>p2.getCoor().lon()) return p1; else return p2;
+    }
+
+	public void mouseReleased(MouseEvent e) {
+		//only leftclicks on our layer
+        if(e.getButton() == MouseEvent.BUTTON1) {
+        	WayPoint wp = getNearestWayPoint(e.getPoint());            	
+            if(wp!=null)
+            {
+            	iconPosition=wp;
+            }
+            Main.map.mapView.repaint();
+        }
+		
+	}
+	
+	//finds the first waypoint that is nearby the given point
+    private WayPoint getNearestWayPoint(Point mouse)
+    {
+        final int MAX=10;
+        Point p;
+        Rectangle rect = new Rectangle(mouse.x-MAX/2,mouse.y-MAX/2,MAX,MAX);
+        //iterate through all possible notes
+        for(WayPoint n : gpsTrack)
+        {
+            p = Main.map.mapView.getPoint(n.getEastNorth());
+            if (rect.contains(p))
+            {               
+                return n;
+            }
+            
+        }
+        return null;
+        
+    }
 
 	@Override
 	public Icon getIcon() {
+		return layerIcon;
+	}
+
+	@Override
+	public Object getInfoComponent() {
 		// TODO Auto-generated method stub
 		return null;
@@ -50,24 +242,21 @@
 
 	@Override
-	public Object getInfoComponent() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
 	public Action[] getMenuEntries() {
-		// TODO Auto-generated method stub
-		return null;
-	}
+		return new Action[]{
+                LayerListDialog.getInstance().createActivateLayerAction(this),
+                LayerListDialog.getInstance().createShowHideLayerAction(),
+                LayerListDialog.getInstance().createDeleteLayerAction(),
+                SeparatorLayerAction.INSTANCE,
+                new LayerListPopup.InfoAction(this)};
+	}
+
 
 	@Override
 	public String getToolTipText() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public boolean isMergable(Layer arg0) {
-		// TODO Auto-generated method stub
+		return tr("Shows current position in the video");
+	}
+
+	@Override
+	public boolean isMergable(Layer arg0) {		
 		return false;
 	}
@@ -75,11 +264,4 @@
 	@Override
 	public void mergeFrom(Layer arg0) {
-		// TODO Auto-generated method stub
-		
-	}
-
-	@Override
-	public void paint(Graphics2D arg0, MapView arg1, Bounds arg2) {
-		// TODO Auto-generated method stub
 		
 	}
@@ -107,9 +289,4 @@
 
 	public void mousePressed(MouseEvent arg0) {
-		// TODO Auto-generated method stub
-		
-	}
-
-	public void mouseReleased(MouseEvent arg0) {
 		// TODO Auto-generated method stub
 		
Index: /applications/editors/josm/plugins/videomapping/test/videotest.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/test/videotest.java	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/test/videotest.java	(revision 25796)
@@ -29,4 +29,5 @@
     	testplayer.setLoopLength(3000);
     	testplayer.addVideo(new File("C:\\TEMP\\test.mpg"));
+    	testplayer.addVideo(new File("C:\\TEMP\\aoe-drachen_dvdscr.avi"));
         
     }
Index: /applications/editors/josm/plugins/videomapping/uml/refactoring.uml
===================================================================
--- /applications/editors/josm/plugins/videomapping/uml/refactoring.uml	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/uml/refactoring.uml	(revision 25796)
@@ -31,6 +31,6 @@
       <ownedParameter xmi:id="_E7zbIFRsEeCQNNgUSH7L8A" direction="return"/>
     </ownedOperation>
-    <ownedOperation xmi:id="_FPB5IFRsEeCQNNgUSH7L8A" name="loadDefaults">
-      <ownedParameter xmi:id="_GcXO8FRsEeCQNNgUSH7L8A" direction="return"/>
+    <ownedOperation xmi:id="_FPB5IFRsEeCQNNgUSH7L8A" name="setDefaults">
+      <ownedParameter xmi:id="_pmckUF0CEeCEEfnO4j572A" direction="return"/>
     </ownedOperation>
     <ownedOperation xmi:id="_7wH7oFSgEeCQNNgUSH7L8A" name="enableControlMenus">
@@ -83,5 +83,5 @@
     </ownedOperation>
   </packagedElement>
-  <packagedElement xmi:type="uml:Class" xmi:id="_4MAgAFRxEeCQNNgUSH7L8A" name="VideoPositionLayer">
+  <packagedElement xmi:type="uml:Class" xmi:id="_4MAgAFRxEeCQNNgUSH7L8A" name="VideoPositionLayer" clientDependency="_xv7skF0FEeCEEfnO4j572A">
     <ownedAttribute xmi:id="_TfBWsFSdEeCQNNgUSH7L8A" name="iconPosition" aggregation="composite"/>
     <ownedAttribute xmi:id="_HIPx0FSeEeCQNNgUSH7L8A" name="isDragging" aggregation="composite"/>
@@ -169,3 +169,4 @@
   <packagedElement xmi:type="uml:Dependency" xmi:id="_VjNvcFqlEeC9SaX6k5fY1Q" supplier="_n4H5YFolEeClo8qtmvnTtw" client="_Zzy2UFRvEeCQNNgUSH7L8A"/>
   <packagedElement xmi:type="uml:Interface" xmi:id="_6vSikFxoEeCd3KUH_BuVkA" name="VideoObserver"/>
+  <packagedElement xmi:type="uml:Dependency" xmi:id="_xv7skF0FEeCEEfnO4j572A" supplier="_aDA64FRrEeCQNNgUSH7L8A" client="_4MAgAFRxEeCQNNgUSH7L8A"/>
 </uml:Package>
Index: /applications/editors/josm/plugins/videomapping/uml/refactoring.umlclass
===================================================================
--- /applications/editors/josm/plugins/videomapping/uml/refactoring.umlclass	(revision 25795)
+++ /applications/editors/josm/plugins/videomapping/uml/refactoring.umlclass	(revision 25796)
@@ -497,3 +497,15 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VjqbYFqlEeC9SaX6k5fY1Q" id="(0.028037383177570093,0.6026490066225165)"/>
   </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_xwYYgF0FEeCEEfnO4j572A" type="4002" source="_4MKRAFRxEeCQNNgUSH7L8A" target="_aKUcwFRrEeCQNNgUSH7L8A">
+    <children xmi:type="notation:DecorationNode" xmi:id="_xwYYhF0FEeCEEfnO4j572A" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_xwYYhV0FEeCEEfnO4j572A" y="40"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_xwYYhl0FEeCEEfnO4j572A" type="6010">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_xwYYh10FEeCEEfnO4j572A" y="20"/>
+    </children>
+    <styles xmi:type="notation:RoutingStyle" xmi:id="_xwYYgV0FEeCEEfnO4j572A"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_xwYYgl0FEeCEEfnO4j572A" fontName="Calibri"/>
+    <element xmi:type="uml:Dependency" href="refactoring.uml#_xv7skF0FEeCEEfnO4j572A"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xwYYg10FEeCEEfnO4j572A" points="[-4, -99, -6, 145]$[-22, -128, -24, 116]"/>
+  </edges>
 </notation:Diagram>
