This is the modified initialization logic implemented by the attached patch: # When a frame is created, actually call rif->define_fringe_bitmap # for each standard bitmap and also for lisp defined # bitmaps that were created in a daemon with no frame / rif gui_init_fringe (I assume this is called once per frame) for each standard bitmap rif->define_fringe_bitmap for each additional bitmap (recently introduced by [1]) rif->define_fringe_bitmap # When defined from lisp call rif->define_fringe_bitmap # except that we're in daemon with no frame / rif define-fringe-bitmap (lisp) when rif: rif->define_fringe_bitmap Much simpler, don't you think? Also removed ~30 LOCs. Except that I'm overlooking something obvious it seems to do exactly the same, only that the bit shuffling part is postponed until the frame is actually created (that is, moved into rif->define_fringe_bitmap). Some remarks: 1. There was this comment on top of init_fringe_bitmap: "On MAC with big-endian CPU, we need to byte-swap each short". But all the code there were either specific to NTGUI, specific to XWINDOWS or related to bitmap destruction. So nothing remained that could be actually moved into the NS backend. 2. I left the HAVE_NTGUI guard even after moving the relevant code into w32term.c because I'm not sure whether all w32 code share the NTGUI path or not. 3. The previous implementation modified bits as a way of connecting init with define, this was the state passed from one stage to the other. Now, since both parts are done together, there is no need to modify the passed bits array, the array is only required in order to initialize backend-specific structures. Nevertheless, I decided to keep that as it was in order to prevent regressions, but I believe an implementation that preserves the original value of bits would be preferable now that it is indeed possible. In particular, for X the only "backend-specific structure" is an utterly modified bits array (in some cases shorts are converted into chars, that's why I said in #37689 that it's difficult for the upper layer to "split rows" after this kind of manipulations had already taken place). Any reviews would be much appreciated. Best regards -- Carlos