 		private var _init:Boolean = false;
 		private var _error:Boolean = false;
 		private var _crashHandlerArgs:Array = null;
+		private var _buf:ByteArray;
 
 		public var isReady:Boolean = false;
 
 		private static const AIRSteam_Init:int = 0;
 		private static const AIRSteam_RunCallbacks:int = 1;
-		private static const AIRSteam_RequestStats:int = 2;
-		private static const AIRSteam_SetAchievement:int = 3;
-		private static const AIRSteam_ClearAchievement:int = 4;
-		private static const AIRSteam_IsAchievement:int = 5;
-		private static const AIRSteam_GetStatInt:int = 6;
-		private static const AIRSteam_GetStatFloat:int = 7;
-		private static const AIRSteam_SetStatInt:int = 8;
-		private static const AIRSteam_SetStatFloat:int = 9;
-		private static const AIRSteam_StoreStats:int = 10;
-		private static const AIRSteam_ResetAllStats:int = 11;
-		private static const AIRSteam_GetFileCount:int = 12;
-		private static const AIRSteam_GetFileSize:int = 13;
-		private static const AIRSteam_FileExists:int = 14;
-		private static const AIRSteam_FileWrite:int = 15;
-		private static const AIRSteam_FileRead:int = 16;
-		private static const AIRSteam_FileDelete:int = 17;
-		private static const AIRSteam_IsCloudEnabledForApp:int = 18;
-		private static const AIRSteam_SetCloudEnabledForApp:int = 19;
-		private static const AIRSteam_GetUserID:int = 20;
-		private static const AIRSteam_GetPersonaName:int = 21;
-		private static const AIRSteam_UseCrashHandler:int = 22;
+		private static const AIRSteam_GetUserID:int = 2;
+		private static const AIRSteam_GetAppID:int = 3;
+		private static const AIRSteam_GetPersonaName:int = 4;
+		private static const AIRSteam_UseCrashHandler:int = 5;
+		/* stats/achievements */
+		private static const AIRSteam_RequestStats:int = 6;
+		private static const AIRSteam_SetAchievement:int = 7;
+		private static const AIRSteam_ClearAchievement:int = 8;
+		private static const AIRSteam_IsAchievement:int = 9;
+		private static const AIRSteam_GetStatInt:int = 10;
+		private static const AIRSteam_GetStatFloat:int = 11;
+		private static const AIRSteam_SetStatInt:int = 12;
+		private static const AIRSteam_SetStatFloat:int = 13;
+		private static const AIRSteam_StoreStats:int = 14;
+		private static const AIRSteam_ResetAllStats:int = 15;
+		/* cloud */
+		private static const AIRSteam_GetFileCount:int = 16;
+		private static const AIRSteam_GetFileSize:int = 17;
+		private static const AIRSteam_FileExists:int = 18;
+		private static const AIRSteam_FileWrite:int = 19;
+		private static const AIRSteam_FileRead:int = 20;
+		private static const AIRSteam_FileDelete:int = 21;
+		private static const AIRSteam_FileShare:int = 22;
+		private static const AIRSteam_FileShareResult:int = 23;
+		private static const AIRSteam_IsCloudEnabledForApp:int = 24;
+		private static const AIRSteam_SetCloudEnabledForApp:int = 25;
+		private static const AIRSteam_GetQuota:int = 26;
+		/* ugc/workshop */
+		private static const AIRSteam_UGCDownload:int = 27;
+		private static const AIRSteam_UGCRead:int = 28;
+		private static const AIRSteam_GetUGCDownloadProgress:int = 29;
+		private static const AIRSteam_GetUGCDownloadResult:int = 30;
+		private static const AIRSteam_PublishWorkshopFile:int = 31;
+		private static const AIRSteam_PublishWorkshopFileResult:int = 32;
+		private static const AIRSteam_DeletePublishedFile:int = 33;
+		private static const AIRSteam_GetPublishedFileDetails:int = 34;
+		private static const AIRSteam_GetPublishedFileDetailsResult:int = 35;
+		private static const AIRSteam_EnumerateUserPublishedFiles:int = 36;
+		private static const AIRSteam_EnumerateUserPublishedFilesResult:int = 37;
+		private static const AIRSteam_EnumeratePublishedWorkshopFiles:int = 38;
+		private static const AIRSteam_EnumeratePublishedWorkshopFilesResult:int = 39;
+		private static const AIRSteam_EnumerateUserSubscribedFiles:int = 40;
+		private static const AIRSteam_EnumerateUserSubscribedFilesResult:int = 41;
+		private static const AIRSteam_EnumerateUserSharedWorkshopFiles:int = 42;
+		private static const AIRSteam_EnumerateUserSharedWorkshopFilesResult:int = 43;
+		private static const AIRSteam_EnumeratePublishedFilesByUserAction:int = 44;
+		private static const AIRSteam_EnumeratePublishedFilesByUserActionResult:int = 45;
+		private static const AIRSteam_SubscribePublishedFile:int = 46;
+		private static const AIRSteam_UnsubscribePublishedFile:int = 47;
+		private static const AIRSteam_CreatePublishedFileUpdateRequest:int = 48;
+		private static const AIRSteam_UpdatePublishedFileFile:int = 49;
+		private static const AIRSteam_UpdatePublishedFilePreviewFile:int = 50;
+		private static const AIRSteam_UpdatePublishedFileTitle:int = 51;
+		private static const AIRSteam_UpdatePublishedFileDescription:int = 52;
+		private static const AIRSteam_UpdatePublishedFileSetChangeDescription:int = 53;
+		private static const AIRSteam_UpdatePublishedFileVisibility:int = 54;
+		private static const AIRSteam_UpdatePublishedFileTags:int = 55;
+		private static const AIRSteam_CommitPublishedFileUpdate:int = 56;
+		private static const AIRSteam_GetPublishedItemVoteDetails:int = 57;
+		private static const AIRSteam_GetPublishedItemVoteDetailsResult:int = 58;
+		private static const AIRSteam_UpdateUserPublishedItemVote:int = 59;
+		private static const AIRSteam_SetUserPublishedFileAction:int = 60;
+		/* overlay */
+		private static const AIRSteam_ActivateGameOverlay:int = 61;
+		private static const AIRSteam_ActivateGameOverlayToUser:int = 62;
+		private static const AIRSteam_ActivateGameOverlayToWebPage:int = 63;
+		private static const AIRSteam_ActivateGameOverlayToStore:int = 64;
+		private static const AIRSteam_ActivateGameOverlayInviteDialog:int = 65;
+		private static const AIRSteam_IsOverlayEnabled:int = 66;
+		/* DLC / subscriptions */
+		private static const AIRSteam_IsSubscribedApp:int = 67;
+		private static const AIRSteam_IsDLCInstalled:int = 68;
+		private static const AIRSteam_GetDLCCount:int = 69;
+		private static const AIRSteam_InstallDLC:int = 70;
+		private static const AIRSteam_UninstallDLC:int = 71;
+		private static const AIRSteam_DLCInstalledResult:int = 72;
 
 		public function FRESteamWorks (target:IEventDispatcher = null) {
 			_file = File.applicationDirectory.resolvePath(PATH);
 			_process = new NativeProcess();
 			_process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, eventDispatched);
 			_process.addEventListener(IOErrorEvent.STANDARD_INPUT_IO_ERROR, errorCallback);
+			_buf = new ByteArray();
+
+			registerClassAlias("com.amanitadesign.steam.DownloadUGCResult", DownloadUGCResult);
+			registerClassAlias("com.amanitadesign.steam.FileDetailsResult", FileDetailsResult);
+			registerClassAlias("com.amanitadesign.steam.FilesByUserActionResult", FilesByUserActionResult);
+			registerClassAlias("com.amanitadesign.steam.ItemVoteDetailsResult", ItemVoteDetailsResult);
+			registerClassAlias("com.amanitadesign.steam.SubscribedFilesResult", SubscribedFilesResult);
+			registerClassAlias("com.amanitadesign.steam.UserFilesResult", UserFilesResult);
+			registerClassAlias("com.amanitadesign.steam.WorkshopFilesResult", WorkshopFilesResult);
+
 			super(target);
 		}
 

			return true;
		}

		public function setAchievement(id:String):Boolean {
			if(!callWrapper(AIRSteam_SetAchievement, [id])) return false;
			return readBoolResponse();
		}

		public function clearAchievement(id:String):Boolean {
			if(!callWrapper(AIRSteam_ClearAchievement, [id])) return false;
			return readBoolResponse();
		}

		public function isAchievement(id:String):Boolean {
			if(!callWrapper(AIRSteam_IsAchievement, [id])) return false;
			return readBoolResponse();
		}

		public function getStatInt(id:String):int {
			if(!callWrapper(AIRSteam_GetStatInt, [id])) return 0;
			return readIntResponse();
		}

		public function getStatFloat(id:String):Number {
			if(!callWrapper(AIRSteam_GetStatFloat, [id])) return 0.0;
			return readFloatResponse();
		}

		public function setStatInt(id:String, value:int):Boolean {
			if(!callWrapper(AIRSteam_SetStatInt, [id, value])) return false;
			return readBoolResponse();
		}

		public function setStatFloat(id:String, value:Number):Boolean {
			if(!callWrapper(AIRSteam_SetStatFloat, [id, value])) return false;
			return readBoolResponse();
		}

		public function storeStats():Boolean {
			if(!callWrapper(AIRSteam_StoreStats)) return false;
			return readBoolResponse();
		}

		public function resetAllStats(bAchievementsToo:Boolean):Boolean {
			if(!callWrapper(AIRSteam_ResetAllStats, [bAchievementsToo])) return false;
			return readBoolResponse();
		}

		public function getFileCount():int {
			if(!callWrapper(AIRSteam_GetFileCount)) return 0;
			return readIntResponse();
		}

		public function getFileSize(fileName:String):int {
			if(!callWrapper(AIRSteam_GetFileSize, [fileName])) return 0;
			return readIntResponse();
		}

		public function fileExists(fileName:String):Boolean {
			if(!callWrapper(AIRSteam_FileExists, [fileName])) return false;
			return readBoolResponse();
		}

		public function fileWrite(fileName:String, data:ByteArray):Boolean {
			if(!callWrapper(AIRSteam_FileWrite, [fileName, data])) return false;
			return readBoolResponse();
		}

		public function fileRead(fileName:String, data:ByteArray):Boolean {
			if(!callWrapper(AIRSteam_FileRead, [fileName])) return false;

			var success:Boolean = readBoolResponse();
			if(success) {
				var content:String = readStringResponse();
				data.writeUTFBytes(content);
				data.position = 0;
			}

			return success;
		}

		public function fileDelete(fileName:String):Boolean {
			if(!callWrapper(AIRSteam_FileDelete, [fileName])) return false;
			return readBoolResponse();
		}

		public function isCloudEnabledForApp():Boolean {
			if(!callWrapper(AIRSteam_IsCloudEnabledForApp)) return false;
			return readBoolResponse();
		}


package com.amanitadesign.steam {
	import flash.desktop.NativeProcess;
	import flash.desktop.NativeProcessStartupInfo;
	import flash.display.DisplayObjectContainer;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
