Complete restructure to make the wrapper more dynamic and doesn't have to be updated everytime something changes with the API
merge with remote changes in develop branch