added randoms (must redo since unsafePreformIO for better random)