Made a small change in the organization of the external dependencies.
Added a special smart pointer that copies the data pointed to when it's modified