In today's fast-moving world, many people find themselves playing many roles, as a working professional, a student, or a book club president. Many times, they keep a different schedule for each role, often on different computers and different calendaring programs. The book club schedule may be a shared calendar on the internet, the work schedule may be kept in Microsoft Outlook and only accesible from the office PC, and the personal calendar kept in Evolution on a Linux machine. Users need an efficient way to keep track of their activities and obligations in all of the roles that they play. In this scenario, it is useful to be able to update information in one application and have the information propagated to other relevant applications so that the information can be later accessed from any location.

Lenses written using a bidirectional language present a novel way of resolving the issue. Because lenses can transform string data from one form to another in both directions, they allow application developers to create a single routine in the bidirectional to achieve the same function as two routines written with a traditional programming language, saving time and effort. Our goal is to demonstrate the use of a bidrectional language by creating an extensible cross-platform data synchronizer for calendar data. The system is implemented by building on top of the Unison file synchronizer and the Boomerang bi-directional language.