working version for all needs