functional usually means *don't* use the "new" keyword