Index: supertux/src/object/player.hpp
===================================================================
--- supertux/src/object/player.hpp	(revision 4954)
+++ supertux/src/object/player.hpp	(working copy)
@@ -114,6 +114,7 @@
   bool jumping;
   bool can_jump;
   bool butt_jump;
+  bool jumping_down;      // from unisolid
 
   Timer invincible_timer;
   Timer skidding_timer;
@@ -303,6 +304,7 @@
 
   Vector floor_normal;
   void try_grab();
+  void try_jumpdown();
 
   bool ghost_mode; /**< indicates if Tux should float around and through solid objects */
 
Index: supertux/src/object/player.cpp
===================================================================
--- supertux/src/object/player.cpp	(revision 4954)
+++ supertux/src/object/player.cpp	(working copy)
@@ -509,6 +509,18 @@
 }
 
 void
+Player::try_jumpdown() {
+  if (!on_ground() || jumping_down)
+	return;
+
+  // Drop right here if ground isn't solid (so, if it's unisolid)
+  set_pos(get_pos()+Vector(0,8));
+
+  // Do this once per button press
+  jumping_down = true;
+}
+
+void
 Player::do_standup() {
   if (!duck)
     return;
@@ -653,6 +665,13 @@
       shooting_timer.start(SHOOTING_TIME);
   }
 
+  /* Jump down from unisolid */
+  if (controller->hold(Controller::DOWN) && controller->hold(Controller::ACTION))
+  {
+    try_jumpdown();
+  } else
+	if (jumping_down) jumping_down = false;
+
   /* Duck or Standup! */
   if (controller->hold(Controller::DOWN)) {
     do_duck();
