diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
index 43653bb..7fa3b71 100644
--- a/ext/gl/gstglimagesink.c
+++ b/ext/gl/gstglimagesink.c
@@ -100,6 +100,7 @@
 #define DEFAULT_HANDLE_EVENTS       TRUE
 #define DEFAULT_FORCE_ASPECT_RATIO  TRUE
 #define DEFAULT_IGNORE_ALPHA        TRUE
+#define DEFAULT_FULLSCREEN          FALSE
 
 #define DEFAULT_MULTIVIEW_MODE GST_VIDEO_MULTIVIEW_MODE_MONO
 #define DEFAULT_MULTIVIEW_FLAGS GST_VIDEO_MULTIVIEW_FLAGS_NONE
@@ -123,6 +124,7 @@
   PROP_BIN_OUTPUT_MULTIVIEW_LAYOUT,
   PROP_BIN_OUTPUT_MULTIVIEW_FLAGS,
   PROP_BIN_OUTPUT_MULTIVIEW_DOWNMIX_MODE,
+  PROP_BIN_FULLSCREEN,
   PROP_BIN_LAST
 };
 
@@ -285,6 +287,11 @@
           "Output anaglyph type to generate when downmixing to mono",
           GST_TYPE_GL_STEREO_DOWNMIX_MODE_TYPE, DEFAULT_MULTIVIEW_DOWNMIX,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BIN_FULLSCREEN,
+      g_param_spec_boolean ("fullscreen", "Fullscreen",
+          "Requests that internally created windows are fullscreen"
+          " (does not affect external windows)",
+          DEFAULT_FULLSCREEN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   gst_video_overlay_install_properties (gobject_class, PROP_BIN_LAST);
 
@@ -394,6 +401,7 @@
   PROP_OUTPUT_MULTIVIEW_LAYOUT,
   PROP_OUTPUT_MULTIVIEW_FLAGS,
   PROP_OUTPUT_MULTIVIEW_DOWNMIX_MODE,
+  PROP_FULLSCREEN,
   PROP_LAST
 };
 
@@ -697,6 +705,12 @@
           GST_TYPE_GL_STEREO_DOWNMIX_MODE_TYPE, DEFAULT_MULTIVIEW_DOWNMIX,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_FULLSCREEN,
+      g_param_spec_boolean ("fullscreen", "Fullscreen",
+          "Requests that internally created windows are fullscreen"
+          " (does not affect external windows)",
+          DEFAULT_FULLSCREEN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gst_video_overlay_install_properties (gobject_class, PROP_LAST);
 
   gst_element_class_set_metadata (element_class, "OpenGL video sink",
@@ -779,6 +793,8 @@
   glimage_sink->current_rotate_method = DEFAULT_ROTATE_METHOD;
   glimage_sink->transform_matrix = NULL;
 
+  glimage_sink->fullscreen = DEFAULT_FULLSCREEN;
+
   g_mutex_init (&glimage_sink->drawing_lock);
 }
 
@@ -833,6 +849,9 @@
       glimage_sink->output_mode_changed = TRUE;
       GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
       break;
+    case PROP_FULLSCREEN:
+      glimage_sink->fullscreen = g_value_get_boolean (value);
+      break;
     default:
       if (!gst_video_overlay_set_property (object, PROP_LAST, prop_id, value))
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -892,6 +911,9 @@
     case PROP_OUTPUT_MULTIVIEW_DOWNMIX_MODE:
       g_value_set_enum (value, glimage_sink->mview_downmix_mode);
       break;
+    case PROP_FULLSCREEN:
+      g_value_set_boolean (value, glimage_sink->fullscreen);
+      break;
     default:
       if (!gst_video_overlay_set_property (object, PROP_LAST, prop_id, value))
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -2341,6 +2363,7 @@
 
     gst_gl_window_set_preferred_size (window, GST_VIDEO_SINK_WIDTH (gl_sink),
         GST_VIDEO_SINK_HEIGHT (gl_sink));
+    gst_gl_window_prefer_fullscreen (window, gl_sink->fullscreen);
     gst_gl_window_show (window);
   }
 
diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h
index 12166ec..f5ac43d 100644
--- a/ext/gl/gstglimagesink.h
+++ b/ext/gl/gstglimagesink.h
@@ -141,6 +141,8 @@
     GstGLRotateMethod current_rotate_method;
     GstGLRotateMethod rotate_method;
     const gfloat *transform_matrix;
+
+    gboolean fullscreen;
 };
 
 struct _GstGLImageSinkClass
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index f7237a4..daee213 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -931,6 +931,18 @@
 }
 
 void
+gst_gl_window_prefer_fullscreen (GstGLWindow * window, gboolean fullscreen)
+{
+  GstGLWindowClass *window_class;
+
+  g_return_val_if_fail (GST_IS_GL_WINDOW (window), FALSE);
+  window_class = GST_GL_WINDOW_GET_CLASS (window);
+
+  if (window_class->prefer_fullscreen)
+    window_class->prefer_fullscreen (window, fullscreen);
+}
+
+void
 gst_gl_window_queue_resize (GstGLWindow * window)
 {
   GstGLWindowClass *window_class;
diff --git a/gst-libs/gst/gl/gstglwindow.h b/gst-libs/gst/gl/gstglwindow.h
index ece8d31..b857e4d 100644
--- a/gst-libs/gst/gl/gstglwindow.h
+++ b/gst-libs/gst/gl/gstglwindow.h
@@ -168,6 +168,7 @@
   void     (*show)               (GstGLWindow *window);
   gboolean (*set_render_rectangle)(GstGLWindow *window, gint x, gint y, gint width, gint height);
   void     (*queue_resize)       (GstGLWindow *window);
+  void     (*prefer_fullscreen)  (GstGLWindow *window, gboolean fullscreen);
 
   /*< private >*/
   gpointer _reserved[GST_PADDING];
@@ -251,6 +252,10 @@
                                                gint width,
                                                gint height);
 
+GST_GL_API
+void gst_gl_window_prefer_fullscreen (GstGLWindow * window,
+                                      gboolean fullscreen);
+
 /* subclass usage only */
 GST_GL_API
 void     gst_gl_window_resize               (GstGLWindow *window, guint width, guint height);
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
index 3852818..06809fa 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
@@ -328,6 +328,25 @@
 }
 
 static void
+gst_gl_window_wayland_egl_prefer_fullscreen (GstGLWindow * window,
+    gboolean fullscreen)
+{
+  GstGLWindowWaylandEGL *window_egl = GST_GL_WINDOW_WAYLAND_EGL (window);
+
+  window_egl->window.preferred_fullscreen = fullscreen;
+}
+
+static void
+gst_gl_window_wayland_egl_set_preferred_size (GstGLWindow * window, gint width,
+    gint height)
+{
+  GstGLWindowWaylandEGL *window_egl = GST_GL_WINDOW_WAYLAND_EGL (window);
+
+  window_egl->window.preferred_width = width;
+  window_egl->window.preferred_height = height;
+}
+
+static void
 gst_gl_window_wayland_egl_class_init (GstGLWindowWaylandEGLClass * klass)
 {
   GstGLWindowClass *window_class = (GstGLWindowClass *) klass;
@@ -344,6 +363,10 @@
       GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_get_display);
   window_class->set_render_rectangle =
       GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_set_render_rectangle);
+  window_class->set_preferred_size =
+      GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_set_preferred_size);
+  window_class->prefer_fullscreen =
+      GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_prefer_fullscreen);
 }
 
 static void
@@ -470,6 +493,17 @@
 
   create_surfaces (window_egl);
 
+  if (!window_egl->window.foreign_surface &&
+      window_egl->window.preferred_width &&
+      window_egl->window.preferred_height &&
+      window_egl->window.preferred_fullscreen) {
+    window_resize(window_egl, window_egl->window.preferred_width,
+        window_egl->window.preferred_height);
+    wl_shell_surface_set_fullscreen (window_egl->window.shell_surface,
+        WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT,
+        0, NULL);
+  }
+
   gst_gl_window_send_message (window, (GstGLWindowCB) _roundtrip_async, window);
 }
 
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
index 07c7ad1..a643617 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
@@ -73,6 +73,8 @@
   int fullscreen, configured;
   int window_width, window_height;
   int window_x, window_y;
+  int preferred_width, preferred_height;
+  gboolean preferred_fullscreen;
 };
 
 struct _GstGLWindowWaylandEGL {
