too many changes to note... this version is buggy cause the global data string gets perpetually larger