According to reference it should be. However ImageList_Replace with mask specified (when images are also displayed with ListView control) seem to produce random display errors like black rectangle etc. Multithreaded without mask seems to work ok, singlethread with mask works ok. The question is there any workaround to be able to use ImageList_Replace multithreaded ? I can protect code around image replace in rendering thread, however I can't protect drawing (as it's ListView control default drawing code). And I don't want to duplicate code in ListView to handle drawing of items by my self. The only solution so far is only adding to it, however this may eat memory fast (and as such is not a good idea)