Work in progress, quite a mess right now.