container_of(x, struct vmw_screen_object_unit, base.connector)
 
 struct vmw_screen_object_display {
-       unsigned num_active;
+       unsigned num_implicit;
 
-       struct vmw_framebuffer *fb;
+       struct vmw_framebuffer *implicit_fb;
 };
 
 /**
        struct vmw_dma_buffer *buffer; /**< Backing store buffer */
 
        bool defined;
-       bool active;
+       bool active_implicit;
 };
 
 static void vmw_sou_destroy(struct vmw_screen_object_unit *sou)
 {
        struct vmw_screen_object_display *ld = vmw_priv->sou_priv;
 
-       if (sou->active) {
-               if (--(ld->num_active) == 0)
-                       ld->fb = NULL;
-               sou->active = false;
+       if (sou->active_implicit) {
+               if (--(ld->num_implicit) == 0)
+                       ld->implicit_fb = NULL;
+               sou->active_implicit = false;
        }
 }
 
 {
        struct vmw_screen_object_display *ld = vmw_priv->sou_priv;
 
-       BUG_ON(!ld->num_active && ld->fb);
+       BUG_ON(!ld->num_implicit && ld->implicit_fb);
 
-       if (!sou->active) {
-               ld->fb = vfb;
-               sou->active = true;
-               ld->num_active++;
+       if (!sou->active_implicit && sou->base.is_implicit) {
+               ld->implicit_fb = vfb;
+               sou->active_implicit = true;
+               ld->num_implicit++;
        }
 }
 
                (sou->base.unit == 0 ? SVGA_SCREEN_IS_PRIMARY : 0);
        cmd->obj.size.width = mode->hdisplay;
        cmd->obj.size.height = mode->vdisplay;
-       cmd->obj.root.x = x;
-       cmd->obj.root.y = y;
+       if (sou->base.is_implicit) {
+               cmd->obj.root.x = x;
+               cmd->obj.root.y = y;
+       } else {
+               cmd->obj.root.x = sou->base.gui_x;
+               cmd->obj.root.y = sou->base.gui_y;
+       }
 
        /* Ok to assume that buffer is pinned in vram */
        vmw_bo_get_guest_ptr(&sou->buffer->base, &cmd->obj.backingStore.ptr);
        }
 
        /* sou only supports one fb active at the time */
-       if (dev_priv->sou_priv->fb && vfb &&
-           !(dev_priv->sou_priv->num_active == 1 &&
-             sou->active) &&
-           dev_priv->sou_priv->fb != vfb) {
+       if (sou->base.is_implicit &&
+           dev_priv->sou_priv->implicit_fb && vfb &&
+           !(dev_priv->sou_priv->num_implicit == 1 &&
+             sou->active_implicit) &&
+           dev_priv->sou_priv->implicit_fb != vfb) {
                DRM_ERROR("Multiple framebuffers not supported\n");
                return -EINVAL;
        }
        encoder = &sou->base.encoder;
        connector = &sou->base.connector;
 
-       sou->active = false;
+       sou->active_implicit = false;
 
        sou->base.pref_active = (unit == 0);
        sou->base.pref_width = 800;
        sou->base.pref_height = 600;
        sou->base.pref_mode = NULL;
+       sou->base.is_implicit = true;
 
        drm_connector_init(dev, connector, &vmw_legacy_connector_funcs,
                           DRM_MODE_CONNECTOR_VIRTUAL);
        if (unlikely(!dev_priv->sou_priv))
                goto err_no_mem;
 
-       dev_priv->sou_priv->num_active = 0;
-       dev_priv->sou_priv->fb = NULL;
+       dev_priv->sou_priv->num_implicit = 0;
+       dev_priv->sou_priv->implicit_fb = NULL;
 
        ret = drm_vblank_init(dev, VMWGFX_NUM_DISPLAY_UNITS);
        if (unlikely(ret != 0))
 
        drm_vblank_cleanup(dev);
 
-       if (dev_priv->sou_priv->num_active > 0)
-               DRM_ERROR("Still have active outputs when unloading driver");
-
        kfree(dev_priv->sou_priv);
 
        return 0;