diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 4435162..4222e57 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -449,7 +449,6 @@
 	    buffer->width != output->base.current->width ||
 	    buffer->height != output->base.current->height ||
 	    output->base.transform != es->buffer_transform ||
-	    output->base.scale != es->buffer_scale ||
 	    es->transform.enabled)
 		return NULL;
 
@@ -1249,7 +1248,7 @@
 }
 
 static struct drm_mode *
-drm_output_add_mode(struct drm_output *output, drmModeModeInfo *info, int scale)
+drm_output_add_mode(struct drm_output *output, drmModeModeInfo *info)
 {
 	struct drm_mode *mode;
 	uint64_t refresh;
@@ -1258,15 +1257,9 @@
 	if (mode == NULL)
 		return NULL;
 
-	if (info->hdisplay % scale != 0 ||
-	    info->vdisplay % scale) {
-		weston_log("Mode %dx%d not multiple of scale %d\n", info->hdisplay, info->vdisplay, scale);
-		return NULL;
-	}
-
 	mode->base.flags = 0;
-	mode->base.width = info->hdisplay / scale;
-	mode->base.height = info->vdisplay / scale;
+	mode->base.width = info->hdisplay;
+	mode->base.height = info->vdisplay;
 
 	/* Calculate higher precision (mHz) refresh rate */
 	refresh = (info->clock * 1000000LL / info->htotal +
@@ -1282,9 +1275,6 @@
 	mode->base.refresh = refresh;
 	mode->mode_info = *info;
 
-	if (scale != 1)
-		mode->base.flags |= WL_OUTPUT_MODE_SCALED;
-
 	if (info->type & DRM_MODE_TYPE_PREFERRED)
 		mode->base.flags |= WL_OUTPUT_MODE_PREFERRED;
 
@@ -1446,8 +1436,8 @@
 	int i, flags;
 
 	output->surface = gbm_surface_create(ec->gbm,
-					     output->base.current->width * output->base.scale,
-					     output->base.current->height * output->base.scale,
+					     output->base.current->width,
+					     output->base.current->height,
 					     GBM_FORMAT_XRGB8888,
 					     GBM_BO_USE_SCANOUT |
 					     GBM_BO_USE_RENDERING);
@@ -1491,12 +1481,12 @@
 	/* FIXME error checking */
 
 	for (i = 0; i < ARRAY_LENGTH(output->dumb); i++) {
-		output->dumb[i] = drm_fb_create_dumb(c, w * output->base.scale, h * output->base.scale);
+		output->dumb[i] = drm_fb_create_dumb(c, w, h);
 		if (!output->dumb[i])
 			goto err;
 
 		output->image[i] =
-			pixman_image_create_bits(PIXMAN_x8r8g8b8, w * output->base.scale, h * output->base.scale,
+			pixman_image_create_bits(PIXMAN_x8r8g8b8, w, h,
 						 output->dumb[i]->map,
 						 output->dumb[i]->stride);
 		if (!output->image[i])
@@ -1507,7 +1497,7 @@
 		goto err;
 
 	pixman_region32_init_rect(&output->previous_damage,
-				  output->base.x, output->base.y, w, h);
+				  output->base.x, output->base.y, output->base.width, output->base.height);
 
 	return 0;
 
@@ -1839,8 +1829,7 @@
 	}
 
 	for (i = 0; i < connector->count_modes; i++) {
-		drm_mode = drm_output_add_mode(output, 
-					       &connector->modes[i], scale);
+		drm_mode = drm_output_add_mode(output, &connector->modes[i]);
 		if (!drm_mode)
 			goto err_free;
 	}
@@ -1858,8 +1847,8 @@
 
 	wl_list_for_each(drm_mode, &output->base.mode_list, base.link) {
 		if (config == OUTPUT_CONFIG_MODE &&
-		    width == drm_mode->base.width * scale &&
-		    height == drm_mode->base.height * scale)
+		    width == drm_mode->base.width &&
+		    height == drm_mode->base.height)
 			configured = drm_mode;
 		if (!memcmp(&crtc_mode, &drm_mode->mode_info, sizeof crtc_mode))
 			current = drm_mode;
@@ -1868,13 +1857,13 @@
 	}
 
 	if (config == OUTPUT_CONFIG_MODELINE) {
-		configured = drm_output_add_mode(output, &modeline, scale);
+		configured = drm_output_add_mode(output, &modeline);
 		if (!configured)
 			goto err_free;
 	}
 
 	if (current == NULL && crtc_mode.clock != 0) {
-		current = drm_output_add_mode(output, &crtc_mode, scale);
+		current = drm_output_add_mode(output, &crtc_mode);
 		if (!current)
 			goto err_free;
 	}
