diff --git a/java/src/com/tightvnc/rfbplayer/FbsConnection.java b/java/src/com/tightvnc/rfbplayer/FbsConnection.java
new file mode 100644
index 0000000..34f9576
--- /dev/null
+++ b/java/src/com/tightvnc/rfbplayer/FbsConnection.java
@@ -0,0 +1,60 @@
+//
+//  Copyright (C) 2008 Wimba, Inc.  All Rights Reserved.
+//
+//  This is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This software is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this software; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+//  USA.
+//
+
+//
+// FbsConnection.java
+//
+
+package com.tightvnc.rfbplayer;
+
+import java.io.*;
+import java.net.*;
+import java.applet.Applet;
+
+public class FbsConnection {
+
+  URL fbsURL;
+  URL fbiURL;
+  URL fbkURL;
+
+  FbsConnection(String fbsLocation, String indexLocationPrefix, Applet applet)
+      throws MalformedURLException {
+
+    URL base = null;
+    if (applet != null) {
+      base = applet.getCodeBase();
+    }
+    fbsURL = new URL(base, fbsLocation);
+    fbiURL = null;
+    fbkURL = null;
+    if (indexLocationPrefix != null) {
+      fbiURL = new URL(base, indexLocationPrefix + ".fbi");
+      fbkURL = new URL(base, indexLocationPrefix + ".fbk");
+    }
+  }
+
+  FbsInputStream connect(long timeOffset) throws IOException {
+    URLConnection connection = fbsURL.openConnection();
+    FbsInputStream fbs = new FbsInputStream(connection.getInputStream());
+    fbs.setTimeOffset(timeOffset);
+
+    return fbs;
+  }
+
+}
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index d2ae1c8..242ffde 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -130,12 +130,9 @@
     }
 
     try {
-      if (inAnApplet) {
-        url = new URL(getCodeBase(), sessionURL);
-      } else {
-        url = new URL(sessionURL);
-      }
-      newFbsConnection(initialTimeOffset);
+      java.applet.Applet applet = (inAnApplet) ? this : null;
+      FbsConnection conn = new FbsConnection(sessionURL, null, applet);
+      fbs = conn.connect(initialTimeOffset);
       rfb = new RfbProto(fbs);
 
       vc = new VncCanvas(this);
@@ -194,7 +191,7 @@
             autoPlay = false;
           }
           fbs.close();
-          newFbsConnection(newTimeOffset);
+          fbs = conn.connect(newTimeOffset);
           rfb.newSession(fbs);
           vc.updateFramebufferSize();
         } catch (NullPointerException e) {
@@ -212,20 +209,6 @@
 
   }
 
-  /**
-   * Open new connection specified by this.url, save new FbsInputStream in
-   * this.fbs.
-   *
-   * @param timeOffset set this as current time position in the newly created
-   *   FbsInputStream object.
-   * @throws java.io.IOException
-   */
-  void newFbsConnection(long timeOffset) throws IOException {
-    URLConnection connection = url.openConnection();
-    fbs = new FbsInputStream(connection.getInputStream());
-    fbs.setTimeOffset(timeOffset);
-  }
-
   public void setPausedInt(String paused) {
     // default to true (pause)
     int pause = 1;
