diff --git a/cmake b/cmake
index 3a52692a40839b10f38352c1b06ccfebc0b53f36..7e797cbcae0947acce802c0bc63765a2b7c75828 160000
--- a/cmake
+++ b/cmake
@@ -1 +1 @@
-Subproject commit 3a52692a40839b10f38352c1b06ccfebc0b53f36
+Subproject commit 7e797cbcae0947acce802c0bc63765a2b7c75828
diff --git a/python/example_robot_data/robots_loader.py b/python/example_robot_data/robots_loader.py
index dd313e66def87811c096b93523d72c32a9d2057c..36ae8c99ec4a6f3cc07bc55e36fb21b51b2a26d2 100644
--- a/python/example_robot_data/robots_loader.py
+++ b/python/example_robot_data/robots_loader.py
@@ -265,6 +265,13 @@ def loadSolo(solo=True):
     loader = SoloLoader if solo else Solo12Loader
     return loader().robot
 
+class FingerEduLoader(RobotLoader):
+    path = 'finger_edu_description'
+    urdf_filename = "finger_edu.urdf"
+    srdf_filename = "finger_edu.srdf"
+    ref_posture = "hanging"
+    free_flyer = False
+
 
 class KinovaLoader(RobotLoader):
     path = "kinova_description"
@@ -482,6 +489,7 @@ ROBOTS = {
     'simple_humanoid_classical': SimpleHumanoidClassicalLoader,
     'solo': SoloLoader,
     'solo12': Solo12Loader,
+    'finger_edu': FingerEduLoader,
     'talos': TalosLoader,
     'talos_box': TalosBoxLoader,
     'talos_arm': TalosArmLoader,
diff --git a/robots/finger_edu_description/finger_edu.urdf b/robots/finger_edu_description/finger_edu.urdf
new file mode 100644
index 0000000000000000000000000000000000000000..d0bd2b4fd36f3a68025810e76d8449b74cc0043f
--- /dev/null
+++ b/robots/finger_edu_description/finger_edu.urdf
@@ -0,0 +1,213 @@
+<?xml version="1.0" ?>
+<!-- =================================================================================== -->
+<!-- |    This document was autogenerated by xacro from /home/jviereck_local/dev/nyu_finger/workspace/src/catkin/robots/robot_properties/robot_properties_fingers/xacro/edu/fingeredu.urdf.xacro | -->
+<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
+<!-- =================================================================================== -->
+<robot name="fingeredu" xmlns:xacro="https://ei.is.tuebingen.mpg.de/xacro">
+  <!--
+    Frames are defined such that they all align with the base frame when all
+    joints are at position zero.
+
+    In zero-configuration the origins of all joints are in one line.
+
+    In zero-configuration the origin of the base link is exactly above the
+    finger tip which should make it easy to place the finger in the world.
+    -->
+  <!--
+    Frames are defined such that they all align with the base frame when all
+    joints are at position zero.
+
+    In zero-configuration the origins of all joints are in one line.
+    -->
+  <material name="fingeredu_material">
+    <color rgba="0.6 0.6 0.6 1.0"/>
+  </material>
+  <link name="base_link">
+    <inertial>
+      <origin rpy="0 0 0" xyz="0 0 0"/>
+      <mass value="1"/>
+      <inertia ixx="4.16666666667e-06" ixy="0" ixz="0" iyy="4.16666666667e-06" iyz="0" izz="4.16666666667e-06"/>
+    </inertial>
+  </link>
+  <!--
+        Fixed links for the finger base (parts where the upper link is mounted).
+        -->
+  <link name="finger_base_link">
+    <visual>
+      <origin rpy="0 0 0" xyz="-0.17995 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_back.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="-0.17995 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_back.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <visual>
+      <origin rpy="0 0 0" xyz="0.0255 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_front.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="0.0255 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_front.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <visual>
+      <origin rpy="0 0 0" xyz="0.0255 0.02 0.08"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_side_left.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="0.0255 0.02 0.08"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_side_left.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <!-- Disable this part.  It is not very relevant for collisions but
+                 would cause trouble in pybullet due to its concavity.
+            <xacro:add_geometry
+                rpy="0 0 0"
+                xyz="${offset_x_base_to_front} -0.02 ${offset_z_base_to_top}"
+                mesh_file="${mesh_dir}/base_side_right.stl"
+                material="${material}" />
+            -->
+    <visual>
+      <origin rpy="0 0 0" xyz="0.0255 0 0.08"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_top.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="0.0255 0 0.08"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/base_top.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <inertial>
+      <origin rpy="0 0 0" xyz="-0.1 0 0.4"/>
+      <mass value="1"/>
+      <inertia ixx="0.0608333333333" ixy="0" ixz="0" iyy="0.0566666666667" iyz="0" izz="0.0108333333333"/>
+    </inertial>
+  </link>
+  <!-- The movable links (upper, middle and lower) of the finger. -->
+  <!-- FIXME inertias are not correct! -->
+  <link name="finger_upper_link">
+    <visual>
+      <origin rpy="0 0 0" xyz="0.0195 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/upper_link.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="0.0195 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/upper_link.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <inertial>
+      <!-- Note: This uses the values from the middle link, assuming
+                     that it is similar enough. -->
+      <!-- CoM is only estimated based -->
+      <origin rpy="0 0 0" xyz="-0.079 0 0"/>
+      <mass value="0.14854"/>
+      <inertia ixx="0.00003" ixy="0.00005" ixz="0.00000" iyy="0.00041" iyz="0.00000" izz="0.00041"/>
+    </inertial>
+  </link>
+  <link name="finger_middle_link">
+    <visual>
+      <origin rpy="0 0 0" xyz="0 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/middle_link.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="0 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/middle_link.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <inertial>
+      <origin rpy="0 0 0" xyz="0 -0.019 -0.079"/>
+      <mass value="0.14854"/>
+      <inertia ixx="0.00041" ixy="0.00000" ixz="0.00000" iyy="0.00041" iyz="0.00005" izz="0.00003"/>
+    </inertial>
+  </link>
+  <link name="finger_lower_link">
+    <visual>
+      <origin rpy="0 0 0" xyz="0 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/lower_link.stl" scale="1 1 1"/>
+      </geometry>
+      <material name="fingeredu_material"/>
+    </visual>
+    <collision>
+      <origin rpy="0 0 0" xyz="0 0 0"/>
+      <geometry>
+        <mesh filename="package://example-robot-data/robots/finger_edu_description/meshes/lower_link.stl" scale="1 1 1"/>
+      </geometry>
+    </collision>
+    <!-- TODO: these are the interial values from the Solo lower leg
+                 link which is similar but not exactly the same to the FingerEdu
+                 lower link. -->
+    <inertial>
+      <origin rpy="0 0 0" xyz="0 -0.009 -0.089"/>
+      <mass value="0.03070"/>
+      <inertia ixx="0.00012" ixy="0.00000" ixz="0.00000" iyy="0.00012" iyz="0.00000" izz="0.00000"/>
+    </inertial>
+  </link>
+  <!-- fixed link for finger tip -->
+  <link name="finger_tip_link">
+    <inertial>
+      <origin rpy="0 0 0" xyz="0 0 0"/>
+      <mass value="0.01"/>
+      <inertia ixx="1.66666666667e-07" ixy="0" ixz="0" iyy="1.66666666667e-07" iyz="0" izz="1.66666666667e-07"/>
+    </inertial>
+  </link>
+  <joint name="finger_lower_to_tip_joint" type="fixed">
+    <parent link="finger_lower_link"/>
+    <child link="finger_tip_link"/>
+    <origin xyz="0 -0.008 -0.16"/>
+  </joint>
+  <!-- kinematics -->
+  <joint name="finger_base_to_upper_joint" type="revolute">
+    <parent link="finger_base_link"/>
+    <child link="finger_upper_link"/>
+    <limit effort="1000" lower="-1.57079632679" upper="1.57079632679" velocity="1000"/>
+    <axis xyz="-1 0 0"/>
+    <origin rpy="0 0 0" xyz="0 0 0"/>
+  </joint>
+  <joint name="finger_upper_to_middle_joint" type="revolute">
+    <parent link="finger_upper_link"/>
+    <child link="finger_middle_link"/>
+    <limit effort="1000" lower="-1.57079632679" upper="1.57079632679" velocity="1000"/>
+    <axis xyz="0 1 0"/>
+    <origin rpy="0 0 0" xyz="0 -0.014 0"/>
+  </joint>
+  <joint name="finger_middle_to_lower_joint" type="revolute">
+    <parent link="finger_middle_link"/>
+    <child link="finger_lower_link"/>
+    <limit effort="1000" lower="-3.14159265359" upper="3.14159265359" velocity="1000"/>
+    <axis xyz="0 1 0"/>
+    <origin rpy="0 0 0" xyz="0 -0.03745 -0.16"/>
+  </joint>
+  <!--
+    Define the global base link and place the finger relative to it.
+    -->
+  <joint name="base_to_finger" type="fixed">
+    <parent link="base_link"/>
+    <child link="finger_base_link"/>
+    <origin xyz="0 0 0.283"/>
+  </joint>
+</robot>
diff --git a/robots/finger_edu_description/meshes/base_back.stl b/robots/finger_edu_description/meshes/base_back.stl
new file mode 100644
index 0000000000000000000000000000000000000000..c246ca8205e0cf4a0758a1624d6954b65840fc09
Binary files /dev/null and b/robots/finger_edu_description/meshes/base_back.stl differ
diff --git a/robots/finger_edu_description/meshes/base_front.stl b/robots/finger_edu_description/meshes/base_front.stl
new file mode 100644
index 0000000000000000000000000000000000000000..64bb5716424507ee7f25df32cabeb5a66c5c1228
Binary files /dev/null and b/robots/finger_edu_description/meshes/base_front.stl differ
diff --git a/robots/finger_edu_description/meshes/base_side_left.stl b/robots/finger_edu_description/meshes/base_side_left.stl
new file mode 100644
index 0000000000000000000000000000000000000000..d3980072eca4cfd961660d6da5415ed494686278
Binary files /dev/null and b/robots/finger_edu_description/meshes/base_side_left.stl differ
diff --git a/robots/finger_edu_description/meshes/base_side_right.stl b/robots/finger_edu_description/meshes/base_side_right.stl
new file mode 100644
index 0000000000000000000000000000000000000000..b2f0f9048546636fa276cb869460dcd73f593976
Binary files /dev/null and b/robots/finger_edu_description/meshes/base_side_right.stl differ
diff --git a/robots/finger_edu_description/meshes/base_top.stl b/robots/finger_edu_description/meshes/base_top.stl
new file mode 100644
index 0000000000000000000000000000000000000000..ecf6918f1044fe6f3f5a6411426a14fd76ed4f8c
Binary files /dev/null and b/robots/finger_edu_description/meshes/base_top.stl differ
diff --git a/robots/finger_edu_description/meshes/frame_wall.stl b/robots/finger_edu_description/meshes/frame_wall.stl
new file mode 100644
index 0000000000000000000000000000000000000000..3e00e35827f982d8833984ced1af329d5195ba3f
Binary files /dev/null and b/robots/finger_edu_description/meshes/frame_wall.stl differ
diff --git a/robots/finger_edu_description/meshes/lower_link.stl b/robots/finger_edu_description/meshes/lower_link.stl
new file mode 100644
index 0000000000000000000000000000000000000000..2129b8ecb6aa4baf896a14a802ce5244a23a2e0c
Binary files /dev/null and b/robots/finger_edu_description/meshes/lower_link.stl differ
diff --git a/robots/finger_edu_description/meshes/middle_link.stl b/robots/finger_edu_description/meshes/middle_link.stl
new file mode 100644
index 0000000000000000000000000000000000000000..98ca6c7b9c118637d0c8833b2bc6ef4a5cc44f91
Binary files /dev/null and b/robots/finger_edu_description/meshes/middle_link.stl differ
diff --git a/robots/finger_edu_description/meshes/upper_link.stl b/robots/finger_edu_description/meshes/upper_link.stl
new file mode 100644
index 0000000000000000000000000000000000000000..1e507cc9d8f23bec2710eeb6c2198928c00b172e
Binary files /dev/null and b/robots/finger_edu_description/meshes/upper_link.stl differ
diff --git a/robots/finger_edu_description/srdf/finger_edu.srdf b/robots/finger_edu_description/srdf/finger_edu.srdf
new file mode 100644
index 0000000000000000000000000000000000000000..798e99648ab5afa752480fece11762242dbc48e4
--- /dev/null
+++ b/robots/finger_edu_description/srdf/finger_edu.srdf
@@ -0,0 +1,24 @@
+<?xml version="1.0" ?>
+<robot name="finger_edu">
+
+    <!-- leg -->
+    <group name="leg">
+        <joint name="finger_base_to_upper_joint" />
+        <joint name="finger_upper_to_middle_joint" />
+        <joint name="finger_middle_to_lower_joint" />
+        <chain base_link="finger_base_link" tip_link="finger_tip_link" />
+    </group>
+
+    <end_effector name="tip" parent_link="finger_tip_link" group="leg" />
+
+    <group_state name="hanging" group="leg">
+        <joint name="base_to_finger" value="0. 0. 0. 0. 0. 0. 1." />
+        <joint name="finger_base_to_upper_joint" value="0.0" />
+        <joint name="finger_upper_to_middle_joint" value="0.0" />
+        <joint name="finger_middle_to_lower_joint" value="0.0" />
+    </group_state>
+
+    <disable_collisions link1="finger_upper_link" link2="finger_base_link" reason="Adjacent" />
+    <disable_collisions link1="finger_middle_link" link2="finger_upper_link" reason="Adjacent" />
+    <disable_collisions link1="finger_lower_link" link2="finger_middle_link" reason="Adjacent" />
+</robot>
diff --git a/unittest/test_load.py b/unittest/test_load.py
index 95d869e639aab908d2b9425431deced040892fde..818f134084cf1aec9209ad212b75cd2bd7cf35e3 100755
--- a/unittest/test_load.py
+++ b/unittest/test_load.py
@@ -79,6 +79,9 @@ class RobotTestCase(unittest.TestCase):
     def test_solo12(self):
         self.check('solo12', 19, 18)
 
+    def test_solo(self):
+        self.check('finger_edu', 3, 3)
+
     def test_talos(self):
         self.check('talos', 39, 38)