diff --git a/java/src/com/tightvnc/rfbplayer/FbsConnection.java b/java/src/com/tightvnc/rfbplayer/FbsConnection.java
index 66e12c7..96b3c44 100644
--- a/java/src/com/tightvnc/rfbplayer/FbsConnection.java
+++ b/java/src/com/tightvnc/rfbplayer/FbsConnection.java
@@ -25,6 +25,7 @@
 
 import java.io.*;
 import java.net.*;
+import java.util.Vector;
 import java.applet.Applet;
 
 public class FbsConnection {
@@ -33,6 +34,9 @@
   URL fbiURL;
   URL fbkURL;
 
+  /** Index data read from the .fbi file. */
+  Vector idx;
+
   FbsConnection(String fbsLocation, String indexLocationPrefix, Applet applet)
       throws MalformedURLException {
 
@@ -53,6 +57,7 @@
     }
 
     // Try to load the .fbi index file.
+    idx = null;
     loadIndex();
   }
 
@@ -85,22 +90,23 @@
         }
 
         // Load index from the .fbi file.
-        // FIXME: Real loading is not implemented yet.
-        int numRecords = 0;
+        Vector newIndex = new Vector();
+        FbsEntryPoint record = new FbsEntryPoint();
         try {
           while (true) {
-            is.readInt();
-            is.readInt();
-            is.readInt();
-            is.readInt();
-            is.readInt();
-            numRecords++;
+            record.timestamp = is.readInt();
+            record.key_fpos = is.readInt();
+            record.key_size = is.readInt();
+            record.fbs_fpos = is.readInt();
+            record.fbs_skip = is.readInt();
+            newIndex.add(record);
           }
         } catch (EOFException e) {
         } catch (IOException e) {
           System.err.println("Warning: Index data may be incomplete");
         }
-        System.err.println("Loaded index data, " + numRecords + " records");
+        idx = newIndex;
+        System.err.println("Loaded index data, " + idx.size() + " records");
       } catch (IOException e) {
         System.err.println("Warning: I/O exception while loading index: " + e);
         System.err.println("Warning: failed to load .fbi, not using index");
diff --git a/java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java b/java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java
new file mode 100644
index 0000000..9b49758
--- /dev/null
+++ b/java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java
@@ -0,0 +1,68 @@
+//
+//  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.
+//
+
+//
+// FbsEntryPoint.java
+//
+
+package com.tightvnc.rfbplayer;
+
+/**
+ * Representation of an individual record of the .fbi (FrameBuffer Index) file.
+ * It includes data that constitutes an entry point to indexed framebuffer
+ * stream at a particular time offset.
+ *
+ * @author Constantin Kaplinsky
+ */
+public class FbsEntryPoint {
+
+  /**
+   * Timestamp in milliseconds corresponding to the keyframe data.
+   * 32-bit unsigned integer.
+   */
+  public long timestamp;
+
+  /**
+   * Keyframe position in the respective .fbk file, offset in bytes from the
+   * very beginning of the file. It should point to the byte counter of an FBS
+   * data block. 32-bit unsigned integer.
+   */
+  public long key_fpos;
+
+  /**
+   * Keyframe data size in the respective .fbk file, in bytes. 32-bit unsigned
+   * integer.
+   */
+  public long key_size;
+
+  /**
+   * Position of the next update in the .fbs file, offset in bytes from the
+   * very beginning of the file. It should point to the byte counter of an FBS
+   * data block. 32-bit unsigned integer.
+   */
+  public long fbs_fpos;
+
+  /**
+   * Offset in the FBS data block referenced by fbs_fpos. It allows addressing
+   * those updates that begin not on the data block boundary. 32-bit unsigned
+   * integer.
+   */
+  public long fbs_skip;
+
+}
