diff --git a/hwcomposer.cpp b/hwcomposer.cpp
index 2ed2073..912bb74 100644
--- a/hwcomposer.cpp
+++ b/hwcomposer.cpp
@@ -166,20 +166,6 @@
 	return ret;
 }
 
-/*
- * TODO: This hack allows us to use the importer's fd to drm to add and remove
- * framebuffers. The reason it exists is because gralloc doesn't export its
- * bo's, so we have to use its file descriptor to drm for some operations. Once
- * gralloc behaves, we can remove this.
- */
-static int hwc_get_fd_for_bo(struct hwc_context_t *ctx, struct hwc_drm_bo *bo)
-{
-	if (bo->importer_fd >= 0)
-		return bo->importer_fd;
-
-	return ctx->fd;
-}
-
 static bool hwc_mode_is_equal(drmModeModeInfoPtr a, drmModeModeInfoPtr b)
 {
 	return a->clock == b->clock &&
@@ -290,9 +276,10 @@
 static int hwc_wait_and_set(struct hwc_drm_display *hd,
 			struct hwc_drm_bo *buf)
 {
-	int ret;
+	struct drm_gem_close args;
+	int ret, i;
 
-	ret = drmModeAddFB2(hwc_get_fd_for_bo(hd->ctx, buf), buf->width,
+	ret = drmModeAddFB2(hd->ctx->fd, buf->width,
 		buf->height, buf->format, buf->gem_handles, buf->pitches,
 		buf->offsets, &buf->fb_id, 0);
 	if (ret) {
@@ -315,13 +302,20 @@
 	}
 
 	if (hd->front.fb_id) {
-		ret = drmModeRmFB(hwc_get_fd_for_bo(hd->ctx, &hd->front),
-				hd->front.fb_id);
+		ret = drmModeRmFB(hd->ctx->fd, hd->front.fb_id);
 		if (ret) {
 			ALOGE("Failed to rm fb from front %d", ret);
 			return ret;
 		}
 	}
+
+	memset(&args, 0, sizeof(args));
+	for (i = 0; i < ARRAY_SIZE(hd->front.gem_handles); i++) {
+		if (!hd->front.gem_handles[i])
+			continue;
+		args.handle = hd->front.gem_handles[i];
+		drmIoctl(hd->ctx->fd, DRM_IOCTL_GEM_CLOSE, &args);
+	}
 	hd->front = *buf;
 
 	return ret;
@@ -1129,11 +1123,7 @@
 
 	ret = hwc_get_display_configs(&hd->ctx->device, hd->display, &config,
 		&num_configs);
-	if (ret) {
-		ALOGE("Failed to get display configs d=%d ret=%d", hd->display,
-			ret);
-	}
-	if (!num_configs)
+	if (ret || !num_configs)
 		return 0;
 
 	ret = hwc_set_active_config(&hd->ctx->device, hd->display, 0);
diff --git a/hwcomposer_import_drm_gralloc.cpp b/hwcomposer_import_drm_gralloc.cpp
index 1e54f70..e2e2e94 100644
--- a/hwcomposer_import_drm_gralloc.cpp
+++ b/hwcomposer_import_drm_gralloc.cpp
@@ -85,13 +85,16 @@
 	}
 }
 
-int hwc_create_bo_from_import(int /* fd */, hwc_import_context *ctx,
+int hwc_create_bo_from_import(int fd, hwc_import_context *ctx,
 			buffer_handle_t handle, struct hwc_drm_bo *bo)
 {
-	gralloc_drm_t *drm = ctx->gralloc_module->drm;
-	gralloc_drm_handle_t *gr_handle;
+	gralloc_drm_handle_t *gr_handle = gralloc_drm_handle(handle);
 	struct gralloc_drm_bo_t *gralloc_bo;
-	gr_handle = (gralloc_drm_handle_t *)handle;
+	uint32_t gem_handle;
+	int ret;
+
+	if (!gr_handle)
+		return -EINVAL;
 
 	gralloc_bo = gr_handle->data;
 	if (!gralloc_bo) {
@@ -99,12 +102,18 @@
 		return -EINVAL;
 	}
 
-	bo->importer_fd = drm->fd;
+	ret = drmPrimeFDToHandle(fd, gr_handle->prime_fd, &gem_handle);
+	if (ret) {
+		ALOGE("failed to import prime fd %d ret=%d",
+			gr_handle->prime_fd, ret);
+		return ret;
+	}
+
 	bo->width = gr_handle->width;
 	bo->height = gr_handle->height;
 	bo->format = hwc_convert_hal_format_to_drm_format(gr_handle->format);
 	bo->pitches[0] = gr_handle->stride;
-	bo->gem_handles[0] = gralloc_bo->fb_handle;
+	bo->gem_handles[0] = gem_handle;
 	bo->offsets[0] = 0;
 
 	return 0;
