code complete. need testing