Index: plications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/GpsPlayer.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/GpsPlayer.java	(revision 25863)
+++ 	(revision )
@@ -1,377 +1,0 @@
-package org.openstreetmap.josm.plugins.videomapping;
-
-import java.awt.Point;
-import java.sql.Time;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.gpx.WayPoint;
-
-//for GPS play control, secure stepping through list and interpolation work in current projection
-public class GpsPlayer {
-    private List<WayPoint> ls;
-    private WayPoint prev,curr,next;
-    private WayPoint start;
-    private boolean autoCenter;    
-    private List<WayPoint> ipos; //TODO can become optiized hashtable
-    private WayPoint ipo;
-    
-
-    public WayPoint getPrev() {
-        return prev;
-    }
-
-    public WayPoint getCurr() {
-        return curr;
-    }
-
-    public WayPoint getNext() {
-        return next;
-    }
-    
-    //jumps to the waypoint x ms from the beginning
-    public WayPoint getWaypoint(long relTime)
-    {
-        int pos = Math.round(relTime/1000);//TODO ugly quick hack   
-        return ls.get(pos);
-    }
-
-    public GpsPlayer(List<WayPoint> l) {
-        super();
-        this.ls = l;
-        //set start position
-        start=ls.get(0);
-        prev=null;
-        curr=ls.get(0);
-        next=ls.get(1);
-        ipo=curr;
-    }
-    
-    // one secure step forward
-    public void next() {        
-        if(ls.indexOf(curr)+1<ls.size())
-        {
-            prev=curr;
-            curr=next;
-            if(ls.indexOf(curr)+1==ls.size()) next=null;
-            else next=ls.get(ls.indexOf(curr)+1);
-        }
-        else next=null;
-        
-    }
-    
-    //one secure step backward
-    public void prev()
-    {
-        if(ls.indexOf(curr)>0)
-        {           
-            next =curr;
-            curr=prev;
-            if(ls.indexOf(curr)==0) prev=null;else  prev=ls.get(ls.indexOf(curr)-1);
-        }
-        else prev=null;     
-    }
-    
-    //select the given waypoint as center
-    public void goTo(WayPoint p)
-    {
-        if(ls.contains(p))
-        {
-            curr=p;
-            if(ls.indexOf(curr)>0)
-            {
-                prev=ls.get(ls.indexOf(curr)-1);
-            }
-            else prev=null;
-            if(ls.indexOf(curr)+1<ls.size())
-            {
-                next=ls.get(ls.indexOf(curr)+1);
-            }
-            else next=null;
-        }
-    }
-    
-    //select the k-th waypoint
-    public void goTo(int k)
-    {
-        if (k>0)
-        {
-            if ((ls.indexOf(curr)+k>0)&&(ls.indexOf(curr)<ls.size())) //check range
-            {
-                goTo(ls.get(k));
-            }
-            Main.map.mapView.repaint();
-        }
-    }
-    
-    //walk k waypoints forward/backward
-    public void move(int k)
-    {
-
-        if ((ls.indexOf(curr)+k>0)&&(ls.indexOf(curr)<ls.size())) //check range
-        {
-            goTo(ls.get(ls.indexOf(curr)+k));
-        }
-        Main.map.mapView.repaint(); //seperate modell and view logic...
-    }
-    //go to the position e.g.  "14.4.2010 14:00:01";
-    public void jump(Date GPSAbsTime)
-    {  
-    	Date zero=start.getTime();//TODO better Time wayfinding
-    	//patch to get same datebase
-    	Date starttime = (Date) GPSAbsTime.clone();
-    	starttime.setHours(zero.getHours());
-    	starttime.setMinutes(zero.getMinutes());
-    	starttime.setSeconds(zero.getSeconds());  	
-    	long diff=GPSAbsTime.getTime()-starttime.getTime();
-        goTo(getWaypoint(diff));
-    }
-    
-    //jumps to a specific time since the beginning, called by Video
-    public void jump(long relTime) {
-        int pos = Math.round(relTime/1000);//TODO assumes the time is constant
-        goTo(pos);
-        if (autoCenter) Main.map.mapView.zoomTo(curr.getCoor());
-    }
-      
- 
-    //gets only points on the line of the GPS track (between waypoints) nearby the point m
-    private Point getInterpolated(Point m)
-    {
-        Point leftP,rightP,highP,lowP;
-        boolean invalid = false; //when we leave this segment
-        Point p1 = Main.map.mapView.getPoint(getCurr().getEastNorth());
-        Point p2 = getEndpoint();
-        //determine which point is what
-        leftP=getLeftPoint(p1, p2);
-        rightP=getRightPoint(p1,p2);
-        highP=getHighPoint(p1, p2);
-        lowP=getLowPoint(p1, p2);
-        if(getNext()!=null)
-        {
-            //we might switch to one neighbor segment
-            if(m.x<leftP.x)
-            {
-                Point c = Main.map.mapView.getPoint(getCurr().getEastNorth());
-                Point n = Main.map.mapView.getPoint(getNext().getEastNorth());
-                if(n.x<c.x) next(); else prev();
-                invalid=true;
-                m=leftP;
-                System.out.println("entering left segment");
-            }
-            if(m.x>rightP.x)
-            {
-                Point c = Main.map.mapView.getPoint(getCurr().getEastNorth());
-                Point n = Main.map.mapView.getPoint(getNext().getEastNorth());
-                if(n.x>c.x) next(); else prev();
-                invalid=true;
-                m=rightP;
-                System.out.println("entering right segment");
-            }
-            if(!invalid)
-            {
-                float slope = getSlope(highP, lowP);
-                m.y = highP.y+Math.round(slope*(m.x-highP.x));
-            }
-        }
-        else
-        {
-            //currently we are at the end
-            if(m.x>rightP.x)
-            {
-                m=rightP; //we can't move anywhere
-            }
-            else
-            {
-                prev(); //walk back to the segment before
-            }           
-        }
-        return m;
-    }
-    
-    //returns a point on the p% of the current selected segment
-    private Point getInterpolated(float percent)
-    {
-
-        int dX,dY;
-        Point p;
-        Point leftP,rightP;
-        Point p1 = Main.map.mapView.getPoint(getCurr().getEastNorth());
-        Point p2 = getEndpoint();       
-        //determine which point is what
-        leftP=getLeftPoint(p1, p2);
-        rightP=getRightPoint(p1,p2);
-        //we will never go over the segment
-        percent=percent/100;
-        dX=Math.round((rightP.x-leftP.x)*percent);
-        dY=Math.round((rightP.y-leftP.y)*percent);
-        //move in the right direction
-        p=new Point(rightP.x-dX,rightP.y-dY);
-
-        return p;
-    }
-
-    //gets further infos for a point between two Waypoints
-    public WayPoint getInterpolatedWaypoint(Point m)
-    {   int length,lengthSeg;
-        long timeSeg;
-        float ratio;
-        Point p2;
-        
-        Point curr =Main.map.mapView.getPoint(getCurr().getEastNorth());
-        m =getInterpolated(m); //get the right position
-        //get the right time
-        p2=getEndpoint();
-        if (getNext()!=null)
-        {
-            timeSeg=getNext().getTime().getTime()-getCurr().getTime().getTime();
-        }
-        else
-        {
-            timeSeg=-(getPrev().getTime().getTime()-getCurr().getTime().getTime());
-        }
-        WayPoint w =new WayPoint(Main.map.mapView.getLatLon(m.x, m.y));        
-        //calc total traversal length
-        lengthSeg = getTraversalLength(p2, curr);
-        length = getTraversalLength(p2, m);
-        length=lengthSeg-length;
-        //calc time difference
-        ratio=(float)length/(float)lengthSeg;
-        long inc=(long) (timeSeg*ratio);        
-        long old = getCurr().getTime().getTime();
-        old=old+inc;
-        Date t = new Date(old);
-        w.time = t.getTime()/1000; //TODO need better way to set time and sync it
-        SimpleDateFormat df = new SimpleDateFormat("hh:mm:ss:S");
-        System.out.println(df.format(w.getTime()));
-        //TODO we have to publish the new date to the node...
-        return w;
-    }
-
-    //returns a point and time for the current segment
-    private WayPoint getInterpolatedWaypoint(float percentage)
-    {
-        Point p = getInterpolated(percentage);
-        WayPoint w =new WayPoint(Main.map.mapView.getLatLon(p.x, p.y));
-        return w;
-    }
-    
-    //returns n points on the current segment
-    public List<WayPoint> getInterpolatedLine(int interval)
-    {
-        List<WayPoint> ls;
-        float step;
-        
-        step=100/(float)interval;
-        ls=new LinkedList<WayPoint>();
-        for(float i=step;i<100;i+=step)
-        {
-            ls.add(getInterpolatedWaypoint(i));
-        }
-        return ls;
-    }
-    
-    private Point getLeftPoint(Point p1,Point p2)
-    {
-        if(p1.x<p2.x) return p1; else return p2;
-    }
-    
-    private Point getRightPoint(Point p1, Point p2)
-    {
-        if(p1.x>p2.x) return p1; else return p2;
-    }
-    
-    private Point getHighPoint(Point p1, Point p2)
-    {
-        if(p1.y<p2.y)return p1; else return p2;
-    }
-    
-    private Point getLowPoint(Point p1, Point p2)
-    {
-        if(p1.y>p2.y)return p1; else return p2;
-    }
-
-    private Point getEndpoint() {
-        if(getNext()!=null)
-        {
-            return Main.map.mapView.getPoint(getNext().getEastNorth());
-        }
-        else
-        {
-            return Main.map.mapView.getPoint(getPrev().getEastNorth());
-        }
-        
-    }
-
-    private float getSlope(Point highP, Point lowP) {
-        float slope=(float)(highP.y-lowP.y) / (float)(highP.x - lowP.x);
-        return slope;
-    }
-
-    private int getTraversalLength(Point p2, Point curr) {
-        int a;
-        int b;
-        int lengthSeg;
-        a=Math.abs(curr.x-p2.x);
-        b=Math.abs(curr.y-p2.y);
-        lengthSeg= (int) Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2));
-        return lengthSeg;
-    }
-
-    //returns time in ms relative to startpoint
-    public long getRelativeTime()
-    {
-        return getRelativeTime(curr);
-    }
-    
-    //returns time in ms relative to startpoint
-    public long getRelativeTime(WayPoint p)
-    {
-        return p.getTime().getTime()-start.getTime().getTime(); //TODO assumes timeintervall is constant!!!!
-    }
-
-    public long getLength() {
-        return ls.size()*1000; //FIXME this is a poor hack
-    }
-    
-    public void setAutoCenter(boolean b)
-    {
-        this.autoCenter=b;
-    }
-    
-    public List<WayPoint> getTrack()
-    {
-        return ls;
-    }
-
-	public List<WayPoint> interpolate() {
-		ipos = new LinkedList<WayPoint>();
-		WayPoint old = getCurr();
-		for (int i=1;i<ls.size();i++)
-		{			
-			ipos.addAll(getInterpolatedLine(5));
-			next();
-		}
-		goTo(old);
-		return ipos;
-	}
-
-	public void jumpIPO(long relTime) {
-		int pos = Math.round(relTime/1000);//TODO assumes the time is constant
-        goTo(pos); 
-        pos=Math.round(relTime/200);
-        ipo= ipos.get(pos);
-        if (autoCenter) Main.map.mapView.zoomTo(curr.getCoor());
-		
-	}
-	
-	public WayPoint getIPO()
-	{
-		return ipo;
-	}
-
-
-    
-}
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 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java	(revision 25864)
@@ -29,4 +29,5 @@
 import org.openstreetmap.josm.plugins.*;
 import org.openstreetmap.josm.plugins.videomapping.video.GPSVideoPlayer;
+import org.openstreetmap.josm.plugins.videomapping.video.VideoEngine;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -68,4 +69,5 @@
 	public VideoPlugin(PluginInformation info) {
 		super(info);
+		VideoEngine.setupPlayer();
 		MapView.addLayerChangeListener(this);				
 		createMenusAndShortCuts();
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 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPositionLayer.java	(revision 25864)
@@ -35,5 +35,7 @@
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.plugins.videomapping.video.GPSVideo;
 import org.openstreetmap.josm.plugins.videomapping.video.GPSVideoPlayer;
+import org.openstreetmap.josm.plugins.videomapping.video.Video;
 
 //Basic rendering and GPS layer interaction
@@ -44,4 +46,5 @@
 	private WayPoint iconPosition;
 	private final int GPS_INTERVALL=1000;
+	private GPSVideoPlayer gpsVideoPlayer;
 
 	public VideoPositionLayer(GpxLayer gpsLayer) {
@@ -73,6 +76,7 @@
 	public void paint(Graphics2D g, MapView map, Bounds bound) {
 		paintGpsTrack(g);
+		paintSyncedTrack(g);
 		paintPositionIcon(g);
-		paintInterpolatedSegment(g);
+		//paintInterpolatedSegment(g); //just a test for my own
 	}
 
@@ -85,4 +89,16 @@
 	}
 	
+	private void paintSyncedTrack(Graphics2D g) {
+		g.setColor(Color.GREEN);
+		for (WayPoint n : gpsTrack) {
+			if (n.attr.containsKey("synced"))
+			{
+				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());
@@ -119,9 +135,7 @@
 		test.setHours(14);
 		test.setMinutes(50);
-		test.setSeconds(33);
-		
+		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;
 	}
@@ -201,4 +215,16 @@
     	return iconPosition.getTime();
     }
+    
+    public WayPoint getCurrentWayPoint()
+    {
+    	return iconPosition;
+    }
+
+
+
+	public List<WayPoint> getTrack() {
+		return gpsTrack;
+		
+	}
 
 	public void mouseReleased(MouseEvent e) {
@@ -208,7 +234,12 @@
             if(wp!=null)
             {
+            	if (gpsVideoPlayer.areAllVideosSynced())
+            	{
+            		//we set the video to right position
+            		gpsVideoPlayer.jumpTo(wp.getTime());
+            	}
             	iconPosition=wp;
-            }
-            Main.map.mapView.repaint();
+            	Main.map.mapView.repaint();
+            }            
         }
 		
@@ -293,7 +324,5 @@
 	}
 
-	public void mousePressed(MouseEvent arg0) {
-		// TODO Auto-generated method stub
-		
+	public void mousePressed(MouseEvent e) {
 	}
 
@@ -306,4 +335,9 @@
 		// TODO Auto-generated method stub
 		
+	}
+	
+	public void setGPSVideoPlayer(GPSVideoPlayer player)
+	{
+		gpsVideoPlayer=player;
 	}
     
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideo.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideo.java	(revision 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideo.java	(revision 25864)
@@ -2,14 +2,99 @@
 import java.awt.Canvas;
 import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
 
 import javax.swing.JComponent;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.plugins.videomapping.VideoPositionLayer;
 
 // a specific synced video
 public class GPSVideo extends Video{
 	public JComponent SyncComponent;
-	public GPSVideo(File filename, Canvas canvas) {
-		super(filename, canvas);
+	private WayPoint syncWayPoint;
+	private long syncVideoTime;
+	private Date start;
+	private Date end;
+	public WayPoint firstWayPoint;
+	public WayPoint lastWayPoint;
+	private VideoPositionLayer videoPositionLayer;
+	
+	public GPSVideo(File filename) {
+		super(filename);
 	}
-   
+	
+	public GPSVideo(Video video)
+	{
+		super(video.filename);
+		this.player=video.player;
+	}
+	
+	public void doSync(VideoPositionLayer layer) {
+		this.videoPositionLayer=layer;
+		syncWayPoint=layer.getCurrentWayPoint();
+		syncVideoTime=getCurrentTime();
+		//calc now, to avoid calculations on every click
+		start=new Date(syncWayPoint.getTime().getTime()-syncVideoTime);
+		end=new Date(start.getTime()+player.getLength());
+		firstWayPoint=getFirstGPS();
+		lastWayPoint=getLastGPS();
+		markSyncedWayPoints();
+		Main.map.mapView.repaint();
+		System.out.println(firstWayPoint.getTime());
+		System.out.println(lastWayPoint.getTime());
+
+	}
+
+	//make sure we don't leave the GPS track
+	private WayPoint getFirstGPS() {
+		if(start.before(videoPositionLayer.getFirstWayPoint().getTime()))
+		{
+			return videoPositionLayer.getFirstWayPoint();
+		}
+		else
+		{
+			return videoPositionLayer.getWayPointBefore(start);
+		}
+	}
+	
+	//make sure we don't leave the GPS track
+	private WayPoint getLastGPS() {		
+		if(end.after(videoPositionLayer.getLastWayPoint().getTime()))
+		{
+			return videoPositionLayer.getLastWayPoint();
+		}
+		else
+		{
+			return videoPositionLayer.getWayPointBefore(end);
+		}
+	}
+
+	private void markSyncedWayPoints() {
+		List <WayPoint> track =videoPositionLayer.getTrack();
+		int start=track.indexOf(firstWayPoint);
+		int end=track.indexOf(lastWayPoint);
+		List <WayPoint> ls =videoPositionLayer.getTrack().subList(start, end);
+		for (WayPoint n : ls) {
+			n.attr.put("synced", Boolean.TRUE);
+		}
+		
+		
+	}
+
+	public boolean isSynced() {
+		return firstWayPoint!=null;
+	}
+
+	public void jumpTo(Date GPSTime) {
+		if((GPSTime.after(firstWayPoint.getTime())&(GPSTime.before(lastWayPoint.getTime()))))
+		{
+			long diff=GPSTime.getTime()-start.getTime();
+			player.setTime(diff);
+			System.out.println(diff);
+		}
+	}  
 
 }
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideoPlayer.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideoPlayer.java	(revision 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideoPlayer.java	(revision 25864)
@@ -8,7 +8,7 @@
 import java.awt.event.WindowEvent;
 import java.io.File;
-import java.sql.Date;
-import java.sql.Time;
 import java.text.DateFormat;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -23,5 +23,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.gpx.WayPoint;
-import org.openstreetmap.josm.plugins.videomapping.GpsPlayer;
 import org.openstreetmap.josm.plugins.videomapping.VideoObserver;
 import org.openstreetmap.josm.plugins.videomapping.VideoPositionLayer;
@@ -33,64 +32,33 @@
 public class GPSVideoPlayer extends VideoPlayer
 {
-	private JPanel syncPanel;
 	private List<GPSVideo> videos;
-	private List<JButton> syncButtons;
 	private VideoPositionLayer videoPositionLayer;
 
 	public GPSVideoPlayer(DateFormat videoTimeFormat,VideoPositionLayer videoPositionLayer) throws HeadlessException {
 		super(videoTimeFormat);
-		extendUI();
-		syncButtons=new LinkedList<JButton>();
+		videos = new LinkedList<GPSVideo>();
 		this.videoPositionLayer=videoPositionLayer;
+		videoPositionLayer.setGPSVideoPlayer(this);
 	}
 
+
 	@Override
-	public GPSVideo addVideo(File Videofile) {
-		
-		GPSVideo video=(GPSVideo) super.addVideo(Videofile);
+	public GPSVideo addVideo(File Videofile) {		
+		GPSVideo video = new GPSVideo(super.addVideo(Videofile));
 		videos.add(video);
 		JButton syncButton= new JButton(tr("Sync"));
-		syncButton.setBackground(Color.RED);
-		syncPanel.add(syncButton);
+		syncButton.setBackground(Color.RED);		
 		syncButton.addActionListener(new ActionListener() {
             //do a sync
             public void actionPerformed(ActionEvent e) {
             	GPSVideo v=findVideo((JButton)e.getSource());
-            	doSync(v,videoPositionLayer);
+            	v.doSync(videoPositionLayer);
             }
 		});
+		video.SyncComponent=syncButton;
+		//video.panel.add(syncButton,BorderLayout.SOUTH);
+		controlsPanel.add(syncButton);
 		return video;
-	}
-
-	protected void doSync(GPSVideo v, VideoPositionLayer layer) {
-		WayPoint first=getFirstGPS(v.getTime(),layer.getGPSDate());
-		
-	}
-
-	//make sure we don't leave the GPS track
-	private WayPoint getFirstGPS(long videoTime, java.util.Date gpsDate) {
-		Date start=new Date(gpsDate.getTime()-videoTime);
-		if(start.before(videoPositionLayer.getFirstWayPoint().getTime()))
-		{
-			return videoPositionLayer.getFirstWayPoint();
-		}
-		else
-		{
-			return videoPositionLayer.getWayPointBefore(start);
-		}
-	}
-	
-	//make sure we don't leave the GPS track
-	private WayPoint getLastGPS(long videoTime, java.util.Date gpsDate) {
-		Date end=new Date(gpsDate.getTime()-videoTime);
-		if(end.after(videoPositionLayer.getLastWayPoint().getTime()))
-		{
-			return videoPositionLayer.getLastWayPoint();
-		}
-		else
-		{
-			return videoPositionLayer.getWayPointBefore(end);
-		}
-	}
+	}	
 
 	protected GPSVideo findVideo(JButton source) {
@@ -100,9 +68,19 @@
 		return null;
 	}
+	
+	public void jumpTo(Date date)
+	{
+		for (GPSVideo video : videos) {
+			video.jumpTo(date);
+		}
+	}
+	
+	public boolean areAllVideosSynced()
+	{
 
-	private void extendUI() {
-		syncPanel=new JPanel(new FlowLayout());
-		screenPanel.add(syncPanel,BorderLayout.EAST);
-				
+		for (GPSVideo video : videos) {
+			if (!video.isSynced()) return false;
+		}
+		return true;		
 	}
 	
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/Video.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/Video.java	(revision 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/Video.java	(revision 25864)
@@ -1,6 +1,10 @@
 package org.openstreetmap.josm.plugins.videomapping.video;
 
+import java.awt.BorderLayout;
 import java.awt.Canvas;
+import java.awt.FlowLayout;
 import java.io.File;
+
+import javax.swing.JPanel;
 
 import uk.co.caprica.vlcj.player.MediaPlayer;
@@ -10,11 +14,15 @@
 	public MediaPlayer player;
 	public Canvas canvas;
+	public JPanel panel;
 	
-	public Video(File filename, Canvas canvas) {
+	public Video(File filename) {
 		this.filename=filename;
-		this.canvas=canvas;
+		canvas=new Canvas();
+		panel=new JPanel();
+		panel.setLayout(new FlowLayout());
+		panel.add(canvas,BorderLayout.CENTER);
 	}
 	
-	public long getTime()
+	public long getCurrentTime()
 	{
 		return player.getTime();
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoEngine.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoEngine.java	(revision 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoEngine.java	(revision 25864)
@@ -85,4 +85,16 @@
 	}
 	
+	private Video getVideo(MediaPlayer mp)
+	{
+		for (Video video : videos) {
+			if (video.player==mp) return video;
+		}
+		return null;
+	}
+
+	public List<Video> getVideos() {		
+		return videos;
+	}
+
 	public void play()
 	{
@@ -119,5 +131,5 @@
 			
 	//TODO muss auf Rückgabe für alle Videos erweitert werden
-	public long getCurrentVideoTime()
+	public long getVideoTime()
 	{
 		return videos.get(0).player.getTime();
@@ -212,4 +224,16 @@
 	}
 
+	public void addObserver(VideosObserver observer) {
+		observers.add(observer);
+		
+	}
+
+	private void notifyObservers(VideoObserversEvents event)
+	{
+		for (VideosObserver observer : observers) {
+			observer.update(event);
+		}
+	}
+
 	public void backward(MediaPlayer arg0) {
 		
@@ -285,24 +309,4 @@
 		
 	}
-	
-	private Video getVideo(MediaPlayer mp)
-	{
-		for (Video video : videos) {
-			if (video.player==mp) return video;
-		}
-		return null;
-	}
-	
-	private void notifyObservers(VideoObserversEvents event)
-	{
-		for (VideosObserver observer : observers) {
-			observer.update(event);
-		}
-	}
-
-	public void addObserver(VideosObserver observer) {
-		observers.add(observer);
-		
-	}
 
 }
Index: /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayer.java
===================================================================
--- /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayer.java	(revision 25863)
+++ /applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayer.java	(revision 25864)
@@ -96,6 +96,6 @@
 	public Video addVideo(File Videofile)
 	{
-		Video video = new Video(Videofile,new Canvas());
-		canvasPanel.add(video.canvas);
+		Video video = new Video(Videofile);		
+		canvasPanel.add(video.panel);
 		video.canvas.setSize(new Dimension(300, 300)); // will be updated by the video engine itself
 		videoengine.add(video);
@@ -104,11 +104,21 @@
         return video;
 	}
-
-	protected void play() {
-		videoengine.play();
-		
-	}
+	
+	public List <Video> getVideos()
+	{
+		return videoengine.getVideos();
+	}
+
 	
 	protected void pause(){
+		if (notificationTimer!=null)
+		{
+			notificationTimer.cancel();
+			notificationTimer=null;
+		}
+		else
+		{
+			startNotificationTimer();
+		}
 		videoengine.pause();
 	}
@@ -126,5 +136,5 @@
 		{
 			//do reset after loop time experienced
-			final long videoResetTime=(long) videoengine.getCurrentVideoTime()-loopLength/2;
+			final long videoResetTime=(long) videoengine.getVideoTime()-loopLength/2;
 			TimerTask reset=new TimerTask() {                
                 @Override
@@ -237,4 +247,5 @@
 	            	isManualJump=true;
 	            	videoengine.jumpToPosition((timeline.getValue()));
+	            	System.out.println("manual jump");
             	}
             }
@@ -343,6 +354,7 @@
 	public void update_plays() {
 		timeline.setValue(videoengine.getPosition());
-		System.out.println(videoengine.getPosition());
+		setTitle(Long.toString(videoengine.getVideoTime()));
 		isManualJump=false;
+		System.out.println("update");
 		
 	}
