actual code, look below for stuff