Thanks to Dimple for providing library details and other contributions