separated platform-specific stuff