Updated with elerchs branch, refactored to allow users to use whatever branch they want.