this article needs a huge clean up possibly a rewrite