implemented 3 types for variables