In non-functional state
Refactored a ton of shit, added factory methods. Have not tested yet