Big refact.:(