based on files from TakTik & Grouper, then cleaned up and reorganized