add more generic constructors
don't overwrite files unless they are changed