 		{
 			return source.readByte() == 1;
 		}
+		
+		private static function encodeCustomObject(source : Object, target : ByteArray) : void
+		{
+			var variables : XMLList = describeType(source).variable;
+			var object	: Object = new Object();
+			
+			encodeString(getQualifiedClassName(source), target);
+			
+			for each (var variable : XML in variables)
+			{
+				var propertyName : String = variable.@name;
+				
+				object[propertyName] = source[propertyName];
+			}
+			
+			encodeObject(object, target);
+		}
+		
+		private static function decodeCustomObject(source : ByteArray) : Object
+		{
+			var className : String = decodeString(source);
+			var instance : Object = new (getDefinitionByName(className))();
+			
+			decodeObject(source, instance);
+			
+			return instance;
+		}
 	}
 }
														   encodeString,
														   encodeUTFString,
														   encodeBytes,
														   encodeBoolean];
		
		private static const DECODERS		: Array		= [decodeObject,
														   decodeArray,

package aerys.qark
{
	import flash.utils.ByteArray;
	import flash.utils.describeType;
	import flash.utils.getDefinitionByName;
	import flash.utils.getQualifiedClassName;

	public class Qark
	{
