Initial commit. Does not work correctly in mono.