initial implementation with most used methods