Refactor the whole way of naming type parameters to fix #323