diff --git a/sway/layout.c b/sway/layout.c
index 3fd7f5c1..918da9f0 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -95,15 +95,28 @@ void arrange_windows(swayc_t *container, int width, int height) {
 			child->x = x;
 			child->y = y;
 			arrange_windows(child, -1, -1);
-			x += child->width;
+			// Removed for now because wlc works with relative positions
+			// Addition can be reconsidered once wlc positions are changed
+			// x += child->width;
 		}
 		return;
 	case C_OUTPUT:
 		container->width = width;
 		container->height = height;
-		x -= container->x;
-		y -= container->y;
-		break;
+		// These lines make x/y negative and result in stuff glitching out
+		// Their addition can be reconsidered once wlc positions are changed
+		// x -= container->x;
+		// y -= container->y;
+		for (i = 0; i < container->children->length; ++i) {
+			swayc_t *child = container->children->items[i];
+			sway_log(L_DEBUG, "Arranging workspace #%d", i);
+			child->x = x;
+			child->y = y;
+			child->width = width;
+			child->height = height;
+			arrange_windows(child, -1, -1);
+		}
+		return;
 	case C_VIEW:
 		{
 			struct wlc_geometry geometry = {