diff --git a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
index 95a7eb6..306c62e 100644
--- a/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
+++ b/java/src/com/tightvnc/rfbplayer/ButtonPanel.java
@@ -17,6 +17,8 @@
 //  USA.
 //
 
+package com.HorizonLive.RfbPlayer;
+
 import java.awt.*;
 import java.awt.event.*;
 import java.io.*;
diff --git a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
index 1dcdd09..5547c3c 100644
--- a/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
+++ b/java/src/com/tightvnc/rfbplayer/FbsInputStream.java
@@ -21,6 +21,8 @@
 // FbsInputStream.java
 //
 
+package com.HorizonLive.RfbPlayer;
+
 import java.io.*;
 import java.util.*;
 
diff --git a/java/src/com/tightvnc/rfbplayer/PARfbSender.java b/java/src/com/tightvnc/rfbplayer/PARfbSender.java
new file mode 100644
index 0000000..1f620cf
--- /dev/null
+++ b/java/src/com/tightvnc/rfbplayer/PARfbSender.java
@@ -0,0 +1,19 @@
+
+package com.HorizonLive.RfbPlayer;
+
+import java.applet.*;
+
+public class PARfbSender extends Applet {
+
+  public void init() {
+    Applet receiver = null;
+    receiver = RfbSharedStatic.refApplet;
+    long time = Long.valueOf(getParameter("time")).longValue();
+
+    if (receiver != null) {
+      ((RfbPlayer)receiver).jumpTo(time);
+    } else
+      System.out.println("Couldn't jump to time: " + time + " in RfbPlayer.");
+  }
+
+}
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index 0918bef..c46c769 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -18,6 +18,8 @@
 //  USA.
 //
 
+package com.HorizonLive.RfbPlayer;
+
 import java.awt.*;
 import java.awt.event.*;
 import java.io.*;
@@ -68,6 +70,9 @@
   //
   public void init() {
 
+    // LiveConnect work-a-round
+    RfbSharedStatic.refApplet = this;
+
     readParameters();
 
     if (inSeparateFrame) {
@@ -208,6 +213,17 @@
     rfb.fbs.setSpeed(speed);
   }
 
+  public void jumpTo(long pos) {
+    long diff = Math.abs(pos - rfb.fbs.getTimeOffset());
+
+    // Current threshold is 5 seconds
+    if (diff > 5000) {
+      rfb.fbs.pausePlayback();
+      setPos(pos);
+      rfb.fbs.resumePlayback();
+    }
+  }
+
   public void setPos(long pos) {
     rfb.fbs.setTimeOffset(pos);
   }
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayerSetDisplaySize.java b/java/src/com/tightvnc/rfbplayer/RfbPlayerSetDisplaySize.java
new file mode 100644
index 0000000..917b112
--- /dev/null
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayerSetDisplaySize.java
@@ -0,0 +1,20 @@
+
+package com.HorizonLive.RfbPlayer;
+
+import java.applet.*;
+
+public class RfbPlayerSetDisplaySize extends Applet {
+
+  public void init() {
+    Applet receiver = null;
+    receiver = RfbSharedStatic.refApplet;
+    int width = Integer.valueOf(getParameter("DISPLAY_WIDTH")).intValue();
+    int height = Integer.valueOf(getParameter("DISPLAY_HEIGHT")).intValue();
+
+    if (receiver != null) {
+      ((RfbPlayer)receiver).displaySize(width, height);
+    } else
+      System.out.println("Couldn't resize RfbPlayer.");
+  }
+
+}
diff --git a/java/src/com/tightvnc/rfbplayer/RfbProto.java b/java/src/com/tightvnc/rfbplayer/RfbProto.java
index e8a5042..8f341df 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbProto.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbProto.java
@@ -24,6 +24,8 @@
 // RfbProto.java
 //
 
+package com.HorizonLive.RfbPlayer;
+
 import java.io.*;
 import java.awt.*;
 import java.awt.event.*;
@@ -100,6 +102,9 @@
 
     byte[] b = new byte[12];
 
+    for (int i = 0; i < b.length; i++)
+      b[i] = (byte)'0';
+
     is.readFully(b);
 
     if ((b[0] != 'R') || (b[1] != 'F') || (b[2] != 'B') || (b[3] != ' ') ||
diff --git a/java/src/com/tightvnc/rfbplayer/RfbSharedStatic.java b/java/src/com/tightvnc/rfbplayer/RfbSharedStatic.java
new file mode 100644
index 0000000..377ede3
--- /dev/null
+++ b/java/src/com/tightvnc/rfbplayer/RfbSharedStatic.java
@@ -0,0 +1,9 @@
+
+package com.HorizonLive.RfbPlayer;
+
+import java.applet.*;
+
+public class RfbSharedStatic {
+
+  public static Applet refApplet;
+}
diff --git a/java/src/com/tightvnc/rfbplayer/VncCanvas.java b/java/src/com/tightvnc/rfbplayer/VncCanvas.java
index 57bb858..3b4a30b 100644
--- a/java/src/com/tightvnc/rfbplayer/VncCanvas.java
+++ b/java/src/com/tightvnc/rfbplayer/VncCanvas.java
@@ -20,6 +20,8 @@
 //  USA.
 //
 
+package com.HorizonLive.RfbPlayer;
+
 import java.awt.*;
 import java.awt.event.*;
 import java.awt.image.*;
@@ -184,6 +186,18 @@
     Dimension screenSize = player.vncFrame.getToolkit().getScreenSize();
     Dimension frameSize = player.vncFrame.getSize();
     Dimension newSize = frameSize;
+
+    // Reduce Screen Size by 30 pixels in each direction;
+    // This is a (poor) attempt to account for
+    //     1) Menu bar on Macintosh (should really also account for
+    //        Dock on OSX).  Usually 22px on top of screen.
+    //	   2) Taxkbar on Windows (usually about 28 px on bottom)
+    //	   3) Other obstructions.
+
+    screenSize.height -= 30;
+    screenSize.width -= 30;
+
+
     boolean needToResizeFrame = false;
     if (frameSize.height > screenSize.height) {
       newSize.height = screenSize.height;
