abstraced a few things away