diff --git a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
index cbfffc9..7a1e888 100644
--- a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
+++ b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
@@ -64,7 +64,6 @@
       posText.setEditable(false);
     }
     playButton.setEnabled(true);
-    player.setPaused(paused);
   }
 
   public void setPos(int pos) {
@@ -86,7 +85,7 @@
 
   public void actionPerformed(ActionEvent evt) {
     if (evt.getSource() == playButton) {
-      setPaused(playButton.getLabel().equals("Pause"));
+      player.setPaused(playButton.getLabel().equals("Pause"));
     } else if (evt.getSource() == posText) {
       player.setPos(Integer.parseInt(posText.getText()));
     }
diff --git a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
index f5aeb2d..d47953a 100644
--- a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
+++ b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
@@ -116,7 +116,7 @@
     return timeOffset;
   }
 
-  public synchronized void setTimeOffset(int pos)
+  public synchronized void setTimeOffset(long pos)
   {
     // FIXME: Seeking works only in paused mode.
     paused = true;
diff --git a/java/src/com/tightvnc/rfbplayer/README b/java/src/com/tightvnc/rfbplayer/README
index 4a3a72e..1661652 100644
--- a/java/src/com/tightvnc/rfbplayer/README
+++ b/java/src/com/tightvnc/rfbplayer/README
@@ -2,14 +2,63 @@
 RFB Session Player 0.7.0
 ========================
 
-RFB Session Player is a Java application/applet for playing back RFB
-session files in FBS format saved by such programs as VNC Reflector or
-rfbproxy.
+RFB Session Player is a Java application/applet for playing back RFB session
+files in FBS format saved by such programs as VNC Reflector or rfbproxy.
 
-Usage:  java RfbPlayer URL file:test.fbs
+Usage:  java RfbPlayer URL file:test.fbs position 5000
         java RfbPlayer URL http://remote.host/sessions/test.fbs
 
 
+Applet Parameters
+=================
+
+--> "URL"
+
+    Value: URL of the session file to play.
+    Default: none (required parameter).
+
+    This parameter tells the player which session file to play. Please note
+    that if the player operates as an unsigned applet, it is able to play
+    only files from the host where the applet was loaded from. It's a usual
+    JVM security limitation.
+
+--> "Position"
+
+    Value: time in milliseconds.
+    Default: 0.
+
+    Set initial time position in the session file, in milliseconds.
+
+--> "Open new window" (applicable only in the applet mode)
+
+    Values: "Yes", "No".
+    Default: "No".
+
+    Operate in a separate window. This makes possible resizing the desktop,
+    and adds scroll bars when necessary. If the server supports variable
+    desktop size, the window will resize automatically when remote desktop
+    size changes.
+
+--> "Show controls"
+
+    Values: "Yes", "No".
+    Default: "Yes".
+
+    Set to "No" if you want to get rid of the control panel at the top. 
+    Please note that hiding the panel in current version makes playback
+    impossible. :-)
+
+--> "Defer screen updates"
+
+    Value: time in milliseconds.
+    Default: "20".
+
+    When updating the desktop contents after reading each update, schedule
+    repaint within the specified number of milliseconds. Small delay helps to
+    coalesce several small updates into one drawing operation, improving CPU
+    usage. Set this parameter to 0 to disable deferred updates.
+
+
 Licensing Terms
 ===============
 
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index 099148b..0d87006 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -59,6 +59,7 @@
   VncCanvas vc;
 
   String sessionURL;
+  long initialTimeOffset;
   boolean showControls;
   int deferScreenUpdates;
 
@@ -158,9 +159,11 @@
 
       while (true) {
 	try {
-	  buttonPanel.setPaused(true);
+	  setPaused(true);
+	  fbsStream.setTimeOffset(initialTimeOffset);
 	  vc.processNormalProtocol();
 	} catch (EOFException e) {
+	  initialTimeOffset = 0;
 	  fbsStream.close();
 	  fbsStream = new FbsInputStream(url.openStream());
 	  rfb.newInputStream(fbsStream);
@@ -177,6 +180,8 @@
   }
 
   public void setPaused(boolean paused) {
+    if (showControls)
+      buttonPanel.setPaused(paused);
     if (fbsStream != null) {
       if (paused) {
 	fbsStream.pausePlayback();
@@ -191,7 +196,8 @@
   }
 
   public void updatePos() {
-    buttonPanel.setPos((int)(fbsStream.getTimeOffset() / 1000));
+    if (showControls)
+      buttonPanel.setPos((int)(fbsStream.getTimeOffset() / 1000));
   }
 
   //
@@ -204,6 +210,7 @@
   public void readParameters() {
 
     sessionURL = readParameter("URL", true);
+    initialTimeOffset = readLongParameter("Position", 0);
 
     showControls = true;
     String str = readParameter("Show Controls", false);
@@ -217,7 +224,9 @@
     }
 
     // Fine tuning options.
-    deferScreenUpdates = readIntParameter("Defer screen updates", 20);
+    deferScreenUpdates = (int)readLongParameter("Defer screen updates", 20);
+    if (deferScreenUpdates < 0)
+      deferScreenUpdates = 0;	// Just in case.
   }
 
   public String readParameter(String name, boolean required) {
@@ -247,12 +256,12 @@
     return null;
   }
 
-  int readIntParameter(String name, int defaultValue) {
+  long readLongParameter(String name, long defaultValue) {
     String str = readParameter(name, false);
-    int result = defaultValue;
+    long result = defaultValue;
     if (str != null) {
       try {
-	result = Integer.parseInt(str);
+	result = Long.parseLong(str);
       } catch (NumberFormatException e) { }
     }
     return result;
