Why is this all public? it should be internal.