diff --git a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
index 0a67090..3b4f275 100644
--- a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
+++ b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
@@ -28,7 +28,7 @@
   protected TextField posText;
   protected TextField timeScaleText;
 
-  protected int lastPos = -1;
+  protected int lastPosSeconds = -1;
 
   ButtonPanel(RfbPlayer player) {
     this.player = player;
@@ -64,11 +64,12 @@
     playButton.setEnabled(true);
   }
 
-  public void setPos(int pos) {
-    if (pos != lastPos) {
-      lastPos = pos;
+  public void setPos(long pos) {
+    int seconds = (int)(pos / 1000);
+    if (seconds != lastPosSeconds) {
+      lastPosSeconds = seconds;
       char[] zeroes = {'0', '0', '0', '0'};
-      String text = String.valueOf(pos);
+      String text = String.valueOf(seconds);
       if (text.length() < 4) {
 	text = new String(zeroes, 0, 4 - text.length()) + text;
       }
@@ -85,7 +86,7 @@
     if (evt.getSource() == playButton) {
       player.setPaused(playButton.getLabel().equals("Pause"));
     } else if (evt.getSource() == posText) {
-      player.setPos(Integer.parseInt(posText.getText()));
+      player.setPos(Long.parseLong(posText.getText()) * 1000);
     } else if (evt.getSource() == timeScaleText) {
       double speed = Double.parseDouble(timeScaleText.getText());
       if (speed <= 0.0)
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index 4a60016..1d725f9 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -57,6 +57,7 @@
   VncCanvas vc;
 
   String sessionURL;
+  URL url;
   long initialTimeOffset;
   double playbackSpeed;
   boolean showControls;
@@ -118,7 +119,7 @@
     }
 
     try {
-      URL url = new URL(sessionURL);
+      url = new URL(sessionURL);
       rfb = new RfbProto(url);
 
       vc = new VncCanvas(this);
@@ -158,7 +159,7 @@
       while (true) {
 	try {
 	  setPaused(true);
-	  rfb.fbs.setTimeOffset(initialTimeOffset);
+	  setPos(initialTimeOffset);
 	  rfb.fbs.setSpeed(playbackSpeed);
 	  vc.processNormalProtocol();
 	} catch (EOFException e) {
@@ -195,14 +196,18 @@
     rfb.fbs.setSpeed(speed);
   }
 
-  public void setPos(int pos) {
-    rfb.fbs.setTimeOffset(pos * 1000);
+  public void setPos(long pos) {
+    if (pos > rfb.fbs.getTimeOffset()) {
+      rfb.fbs.setTimeOffset(pos);
+    } else {
+      System.out.println("Seeking backwards is not implemented yet.");
+    }
   }
 
 
   public void updatePos() {
     if (showControls)
-      buttonPanel.setPos((int)(rfb.fbs.getTimeOffset() / 1000));
+      buttonPanel.setPos(rfb.fbs.getTimeOffset());
   }
 
   //
diff --git a/java/src/com/tightvnc/rfbplayer/RfbProto.java b/java/src/com/tightvnc/rfbplayer/RfbProto.java
index 2faf66c..5814012 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbProto.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbProto.java
@@ -86,6 +86,10 @@
     newSession(url);
   }
 
+  //
+  // Open new session URL.
+  //
+
   public void newSession(URL url) throws Exception {
     if (fbs != null)
       fbs.close();
@@ -100,7 +104,7 @@
   }
 
   //
-  // Read server's protocol version message
+  // Read server's protocol version message.
   //
 
   int serverMajor, serverMinor;
