This looks better. Only deal with Source/Http(*), and keep Input untouched.