diff --git a/include/con.h b/include/con.h
index 8ffa7ce2..1dd65a6e 100644
--- a/include/con.h
+++ b/include/con.h
@@ -167,6 +167,16 @@ Con *con_get_next(Con *con, char way, orientation_t orientation);
  */
 Con *con_descend_focused(Con *con);
 
+/**
+ * Returns the focused con inside this client, descending the tree as far as
+ * possible. This comes in handy when attaching a con to a workspace at the
+ * currently focused position, for example.
+ *
+ * Works like con_descend_focused but considers only tiling cons.
+ *
+ */
+Con *con_descend_tiling_focused(Con *con);
+
 /**
  * Returns a "relative" Rect which contains the amount of pixels that need to
  * be added to the original Rect to get the final position (obviously the
diff --git a/src/con.c b/src/con.c
index 0ed4436a..04db250b 100644
--- a/src/con.c
+++ b/src/con.c
@@ -694,6 +694,32 @@ Con *con_descend_focused(Con *con) {
     return next;
 }
 
+/*
+ * Returns the focused con inside this client, descending the tree as far as
+ * possible. This comes in handy when attaching a con to a workspace at the
+ * currently focused position, for example.
+ *
+ * Works like con_descend_focused but considers only tiling cons.
+ *
+ */
+Con *con_descend_tiling_focused(Con *con) {
+    Con *next = con;
+    Con *before;
+    Con *child;
+    do {
+        before = next;
+        TAILQ_FOREACH(child, &(next->focus_head), focused) {
+            if (child->type == CT_FLOATING_CON)
+                continue;
+
+            next = child;
+            break;
+        }
+    } while (before != next);
+    return next;
+}
+
+
 /*
  * Returns a "relative" Rect which contains the amount of pixels that need to
  * be added to the original Rect to get the final position (obviously the
diff --git a/src/floating.c b/src/floating.c
index fe878f75..ef500bf6 100644
--- a/src/floating.c
+++ b/src/floating.c
@@ -175,7 +175,8 @@ void floating_disable(Con *con, bool automatic) {
 
     /* 3: re-attach to the parent of the currently focused con on the workspace
      * this floating con was on */
-    Con *focused = con_descend_focused(con_get_workspace(con));
+    Con *focused = con_descend_tiling_focused(con_get_workspace(con));
+
     /* if there is no other container on this workspace, focused will be the
      * workspace itself */
     if (focused->type == CT_WORKSPACE)