works as independent class now, more options for different data types