Add source and tests