Writing 3rd party software