another upstream merge, looks like this rumble fork might no longer be necessary! :D