Initial commit. Splitted into 6 parts.