almost finished basic parts, but not yet tested