Finalizing this, some testing coming