Major refactor: make PerfectLink a regular object rather than an actor