re-design Classes structure and add custom indexing