strings_one.b is the second string implementation from class today, a string consists of just one vector that contains the capacity, current length, and all the characters. Because increasing the size of a string results in a totally new string object being created, every operation that could increase the size must return the (new) string object and that returned value must overwrite the variable that refers to the string. stringstream_one.b is a slightly enlarged stringstream object as we had by the end of the class. From these two files you can see how easy it is to split a program into multiple files. strings_one.b has an "export" statement that simply lists the things that are to be made available to any program that imports "strings_one", everything after that is automatic. You must remember that if strings_one is modified, you need to prep strings_one again and then re-prep stringstream_one again even if it has not been changed. If you only modify stringstream_one, it is a waste of time to re-prep strings_one. strings_two.b implements a string as two vectors, one contains just the characters, the other contains the capacity, current length, and a pointer to the character vector. This means that when the string changes size, only the character vector gets replaced. The three-item vector is updated to point to the new character vector, so it does not need to be replaced. I think the result is neater and easier to use, even if it is a little less efficient. stringstream_two.b is just stringstream_one.b adapted for this other style of string implementation.