Merging my work so far.