A technique named thunking is fundamental to the implementation of Win32s as well as Chicago-kernel operating systems, which are Windows 95, Windows 98, and Windows ME. However, allowing user-level thunking greatly complicates attempts to provide stable memory management or memory protection on a system-wide basis, as well as core or kernel security—this allows poorly written applications to undermine system stability on Win32s, as well as the Chicago-kernel systems. The stability and security Windows NT can offer is partially based on thunking being illegal, except thunks from Win16 to Win32—the CPU must remain in protected mode at all times. Windows XP and later 32-bit versions of Windows transparently provide a virtual machine for running Win16 applications, although this feature was removed from 64-bit versions of Windows.