Ver: 05/05/2013 
Rewritten, enhanced unit tests, fixed class naming.