* updated for portability