 			}
 			else
 			{
-				log(str, 'debug');
+				warn(str, 'ERROR');
 			}
 		}
 
-		public static function info (str:String) :void
+		public static function info (str:String, level:String = 'info') :void
 		{
-			log(str);
+			log('[' + level + '] ' + str);
 		}
 
-		private static function log (str:String, level:String = 'info') :void
+		public static function warn (str:String, level:String = 'WARNING') :void
 		{
-			if (verbose) trace('[' + level + '] ' + str);
+			log('>>> ' + level + ': ' + str);
+		}
+
+		private static function log (str:String) :void
+		{
+			if (verbose) trace(str);
 		}
 	}
 }

	public class Logger
	{
		public static var verbose:Boolean = true;

		public static function dump (o:Object, depth:int = 0) :void

			}

			// trace the string value
			if (depth == 0) info(pad + o, 'dump');

			// process properties
			for (var p:String in o)
			{
				info(pad + ' ' + p + ': ' + o[p], 'dump');
				if ((typeof o[p]) == 'object' || (typeof o[p]) == 'xml')
				{
					dump(o[p], (depth + 1));
