diff --git a/pixelgl/window.go b/pixelgl/window.go
index df8be4f862b8094fd123e34fcb638e9597a83717..36a8da366dcca99289feb68383f058a144d0c08f 100644
--- a/pixelgl/window.go
+++ b/pixelgl/window.go
@@ -122,6 +122,17 @@ func NewWindow(cfg WindowConfig) (*Window, error) {
 		return nil, errors.Wrap(err, "creating window failed")
 	}
 
+	if len(cfg.Icon) > 0 {
+		imgs := make([]image.Image, len(cfg.Icon))
+		for i, icon := range cfg.Icon {
+			pic := pixel.PictureDataFromPicture(icon)
+			imgs[i] = pic.Image()
+		}
+		mainthread.Call(func() {
+			w.window.SetIcon(imgs)
+		})
+	}
+
 	w.SetVSync(cfg.VSync)
 
 	w.initInput()
@@ -131,14 +142,7 @@ func NewWindow(cfg WindowConfig) (*Window, error) {
 	w.Update()
 
 	runtime.SetFinalizer(w, (*Window).Destroy)
-	imgs := make([]image.Image, len(cfg.Icon))
-	for i, v := range cfg.Icon {
-		pic := pixel.PictureDataFromPicture(v)
-		imgs[i] = pic.Image()
-	}
-	mainthread.Call(func() {
-		w.window.SetIcon(imgs)
-	})
+
 	return w, nil
 }