diff -pruN src/PlayerClient.java src-new/PlayerClient.java
--- src/PlayerClient.java	2005-11-24 13:39:51.000000000 +0100
+++ src-new/PlayerClient.java	2006-01-27 15:31:02.000000000 +0100
@@ -123,6 +123,7 @@ public class PlayerClient extends Thread
     protected static final short PLAYER_JOYSTICK_CODE            = 49;  // Joystick
     protected static final short PLAYER_SPEECH_RECOGNITION_CODE  = 50;  // speech recognitionI/O
     protected static final short PLAYER_OPAQUE_CODE              = 51;  // plugin interface
+    protected static final short PLAYER_RFID_CODE                = 52;  // RFID reader interface
     
     /* the device access modes */
     public static final short PLAYER_READ_MODE                = 114;   // 'r'
@@ -132,7 +133,7 @@ public class PlayerClient extends Thread
     public static final short PLAYER_ERROR_MODE               = 101;   // 'e'
 	 
     /* total number of assigned interface codes (see player.h) */ 
-    protected static int N_DEVICES   = 52;
+    protected static int N_DEVICES   = 53;
     /** maximum devices of the same type */
     public static int MAX_DEVICES = 10;
     
@@ -702,6 +703,17 @@ public class PlayerClient extends Thread
     }
     
     /**
+     * Request a RFID reader device. 
+     * @param index the device index
+     * @param r access mode
+     * @return a RFID reader device if successful, null otherwise
+     */
+    public RFIDInterface requestInterfaceRFID (int index, char r) {
+        return (RFIDInterface)requestDeviceAccess (PLAYER_RFID_CODE, 
+                (short)index, r);
+    }
+    
+    /**
      * Sends a Player message header filled with the given values.
      * @param type type of message (DATA, CMD, REQ, RESP_ACK, SYNCH, RESP_NACK, RESP_ERR)
      * @param device type of device
@@ -1041,6 +1053,10 @@ public class PlayerClient extends Thread
                         newpd = new SpeechRecognitionInterface (this, index2);
                         break;
                     }
+                    case PLAYER_RFID_CODE: {  				/* RFID reader interface */
+                        newpd = new RFIDInterface (this, index2);
+                        break;
+                    }
                     case PLAYER_OPAQUE_CODE: {              /* plugin interface */
                         break;
                     }
diff -pruN src/RFIDInterface.java src-new/RFIDInterface.java
--- src/RFIDInterface.java	1970-01-01 01:00:00.000000000 +0100
+++ src-new/RFIDInterface.java	2006-02-01 16:34:55.000000000 +0100
@@ -0,0 +1,117 @@
+/*
+ *  Player Java Client - RFIDInterface.java
+ *  Copyright (C) 2006 Radu Bogdan Rusu
+ *
+ *
+ *  This program 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 program 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 program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * $Id: RFIDInterface.java,v 1.0 2006/01/25 15:20:23 veedee Exp $
+ *
+ */
+package javaclient;
+
+import javaclient.structures.PlayerRFIDTagT;
+
+/**
+ * @author Radu Bogdan Rusu
+ * @version
+ * <ul>
+ *      <li>v1.6.5 - added support for RFID Interface
+ * </ul>
+ */
+public class RFIDInterface extends PlayerDevice {
+	
+    private static final boolean isDebugging = PlayerClient.isDebugging;
+    
+    /* RFID reader interface */
+    private short PLAYER_RFID_CODE = PlayerClient.PLAYER_RFID_CODE;
+	
+    /* the player message types (see player.h) */
+    private final short PLAYER_MSGTYPE_REQ = PlayerClient.PLAYER_MSGTYPE_REQ;
+
+    /** the maximum number of tags that can be detected in the RFID field in total */
+    static public final int PLAYER_RFID_MAX_TAGS = 30;
+    /** the maximum number of digits a RFID tag can have */
+    static public final int PLAYER_RFID_MAX_GUID = 8;
+    
+    private int tagsCount = 0;		/* number of RFID tags found */
+    /* list of tags */
+    private PlayerRFIDTagT[] tags = new PlayerRFIDTagT[PLAYER_RFID_MAX_TAGS];
+
+    /**
+     * Constructor for RFIDInterface.
+     * @param pc a reference to the PlayerClient object
+     * @param indexOfDevice the index of the device
+     */
+    public RFIDInterface (PlayerClient pc, short indexOfDevice) {
+        super (pc);
+        device    = PLAYER_RFID_CODE;
+        index     = indexOfDevice;
+	}
+
+    /**
+     * Read the RFID data packet.
+     */
+    public synchronized void readData () {
+        readHeader ();
+        try {
+            tagsCount = is.readUnsignedShort ();     /* number of RFID tags found */
+            
+            for (int i = 0; i < PLAYER_RFID_MAX_TAGS; i++) {
+            	tags[i] = new PlayerRFIDTagT ();     /* RFID tag */
+            	tags[i].setType (is.readByte ());
+            	
+                byte temp[] = new byte[PLAYER_RFID_MAX_GUID];
+
+            	for (int j = 0; j < PLAYER_RFID_MAX_GUID; j++)
+            		temp[j] = is.readByte ();
+            	
+            	tags[i].setGUID (temp);
+            }
+
+        } catch (Exception e) {
+        	System.err.println ("[RFID] : Error when reading payload: " + e.toString ());
+        }
+    }
+    
+    public synchronized int              getTagsCount ()      { return tagsCount;     }
+    public synchronized PlayerRFIDTagT[] getTags      ()      { return tags;          }
+    public synchronized PlayerRFIDTagT   getTag       (int i) { return tags[i];       }
+
+    /**
+     * Handle acknowledgement response messages (threaded mode).
+     * @param size size of the payload
+     */
+    public void handleResponse (int size) {
+        if (size == 0) {
+            if (isDebugging)
+            	System.err.println ("[RFID][Debug] : Unexpected response of size 0!");
+            return;
+        }
+        try {
+            /* each reply begins with a uint8_t subtype field */
+            short subtype = is.readByte ();
+            switch (subtype) {
+                default:{
+                    System.err.println ("[RFID] : Unexpected response " + subtype + 
+                            " of size = " + size);
+                    break;
+                }
+            }
+        } catch (Exception e) {
+        	System.err.println ("[RFID] : Error when reading payload " + e.toString ());
+        }
+    }
+}
diff -pruN src/structures/PlayerRFIDTagT.java src-new/structures/PlayerRFIDTagT.java
--- src/structures/PlayerRFIDTagT.java	1970-01-01 01:00:00.000000000 +0100
+++ src-new/structures/PlayerRFIDTagT.java	2006-01-27 14:12:04.000000000 +0100
@@ -0,0 +1,75 @@
+/*
+ *  Player Java Client - PlayerRFIDTagT.java
+ *  Copyright (C) 2006 Radu Bogdan Rusu
+ *
+ *
+ *  This program 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 program 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 program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * $Id: PlayerRFIDTagT.java,v 1.0 2006/01/27 11:34:24 veedee Exp $
+ *
+ */
+
+package javaclient.structures;
+
+import javaclient.RFIDInterface;
+
+/**
+ * Structure describing a single RFID tag. <br />
+ * (see the player_rfid_tag structure from player.h)
+ * @author Radu Bogdan Rusu
+ * @version
+ * <ul>
+ *      <li>v1.6.5 - added support for RFID Interface
+ * </ul>
+ */
+public class PlayerRFIDTagT {
+	
+    private byte type;                         /* RFID tag type */
+    
+	/** The Globally Unique IDentifier (GUID) of the tag. */
+    private byte guid[] = new byte[RFIDInterface.PLAYER_RFID_MAX_GUID];
+    
+    /**
+     * 
+     * @return Tag type
+     */
+    public synchronized byte getType () {
+        return this.type;
+    }
+    
+    /**
+     * 
+     * @param newtype Tag type
+     */
+    public synchronized void setType (byte newtype) {
+        this.type = newtype;
+    }
+    
+    /**
+     * 
+     * @return the Globally Unique IDentifier (GUID) of the tag
+     */
+    public synchronized byte[] getGUID () {
+        return this.guid;
+    }
+    
+    /**
+     * 
+     * @param newGUID the new Globally Unique IDentifier (GUID)
+     */
+    public synchronized void setGUID (byte[] newGUID) {
+        this.guid = newGUID;
+    }
+}
