diff --git a/sway/tree/container.c b/sway/tree/container.c
index eb06edc2..db780270 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -1030,12 +1030,13 @@ void container_set_floating(struct sway_container *container, bool enable) {
 	struct sway_container *workspace = container_parent(container, C_WORKSPACE);
 
 	if (enable) {
-		container_remove_child(container);
+		struct sway_container *old_parent = container_remove_child(container);
 		container_add_child(workspace->sway_workspace->floating, container);
 		container_init_floating(container);
 		if (container->type == C_VIEW) {
 			view_set_tiled(container->sway_view, false);
 		}
+		container_reap_empty(old_parent);
 	} else {
 		// Returning to tiled
 		if (container->scratchpad) {