diff --git a/Examples/AsyncFormUpdates/App.config b/Examples/AsyncFormUpdates/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/Examples/AsyncFormUpdates/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Examples/AsyncFormUpdates/AsyncFormUpdates.csproj b/Examples/AsyncFormUpdates/AsyncFormUpdates.csproj
new file mode 100644
index 0000000..212f87e
--- /dev/null
+++ b/Examples/AsyncFormUpdates/AsyncFormUpdates.csproj
@@ -0,0 +1,69 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {673A56F5-6110-4AED-A68D-562FD6ED3EA6}
+ Exe
+ AsyncFormUpdates
+ AsyncFormUpdates
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+ ..\..\packages\Telegram.Bot.15.7.1\lib\net45\Telegram.Bot.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {0bd16fb9-7ed4-4ccb-83eb-5cee538e1b6c}
+ TelegramBotBase
+
+
+
+
\ No newline at end of file
diff --git a/Examples/AsyncFormUpdates/Program.cs b/Examples/AsyncFormUpdates/Program.cs
new file mode 100644
index 0000000..f249391
--- /dev/null
+++ b/Examples/AsyncFormUpdates/Program.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Timers;
+
+namespace AsyncFormUpdates
+{
+ class Program
+ {
+ static TelegramBotBase.BotBase bot = null;
+
+ static void Main(string[] args)
+ {
+ String apiKey = "APIKey";
+
+ bot = new TelegramBotBase.BotBase(apiKey);
+
+ bot.Start();
+
+ var timer = new Timer(5000);
+
+ timer.Elapsed += Timer_Elapsed;
+ timer.Start();
+
+ Console.ReadLine();
+
+ timer.Stop();
+ bot.Stop();
+ }
+
+ private static async void Timer_Elapsed(object sender, ElapsedEventArgs e)
+ {
+
+ foreach(var s in bot.Sessions.SessionList)
+ {
+ //Only for AsyncUpdateForm
+ if (s.Value.ActiveForm.GetType() != typeof(forms.AsyncFormUpdate) && s.Value.ActiveForm.GetType() != typeof(forms.AsyncFormEdit))
+ continue;
+
+ await bot.InvokeMessageLoop(s.Key);
+ }
+
+
+ }
+ }
+}
diff --git a/Examples/AsyncFormUpdates/Properties/AssemblyInfo.cs b/Examples/AsyncFormUpdates/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..216bef4
--- /dev/null
+++ b/Examples/AsyncFormUpdates/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("AsyncFormUpdates")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("AsyncFormUpdates")]
+[assembly: AssemblyCopyright("Copyright © 2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
+// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("673a56f5-6110-4aed-a68d-562fd6ed3ea6")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+// indem Sie "*" wie unten gezeigt eingeben:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Examples/AsyncFormUpdates/forms/AsyncFormEdit.cs b/Examples/AsyncFormUpdates/forms/AsyncFormEdit.cs
new file mode 100644
index 0000000..1e176d7
--- /dev/null
+++ b/Examples/AsyncFormUpdates/forms/AsyncFormEdit.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TelegramBotBase.Attributes;
+using TelegramBotBase.Base;
+using TelegramBotBase.Form;
+
+namespace AsyncFormUpdates.forms
+{
+ public class AsyncFormEdit : FormBase
+ {
+ [SaveState]
+ int counter = 0;
+
+ int MessageId = 0;
+
+ public override async Task Load(MessageResult message)
+ {
+ counter++;
+ }
+
+ public override async Task Action(MessageResult message)
+ {
+ await message.ConfirmAction("");
+
+ switch (message.RawData ?? "")
+ {
+ case "back":
+
+ var st = new Start();
+ await NavigateTo(st);
+
+ break;
+ }
+ }
+
+ public override async Task Render(MessageResult message)
+ {
+ var bf = new ButtonForm();
+ bf.AddButtonRow("Back", "back");
+
+ if (MessageId != 0)
+ {
+ await Device.Edit(MessageId, $"Your current count is at: {counter}", bf);
+ }
+ else
+ {
+ var m = await Device.Send($"Your current count is at: {counter}", bf, disableNotification: true);
+ MessageId = m.MessageId;
+ }
+
+ }
+
+ }
+}
diff --git a/Examples/AsyncFormUpdates/forms/AsyncFormUpdate.cs b/Examples/AsyncFormUpdates/forms/AsyncFormUpdate.cs
new file mode 100644
index 0000000..4a4b4c7
--- /dev/null
+++ b/Examples/AsyncFormUpdates/forms/AsyncFormUpdate.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TelegramBotBase.Attributes;
+using TelegramBotBase.Base;
+using TelegramBotBase.Form;
+
+namespace AsyncFormUpdates.forms
+{
+ public class AsyncFormUpdate : AutoCleanForm
+ {
+ [SaveState]
+ int counter = 0;
+
+
+ public override async Task Load(MessageResult message)
+ {
+ counter++;
+ }
+
+ public override async Task Action(MessageResult message)
+ {
+ await message.ConfirmAction("");
+
+ switch (message.RawData ?? "")
+ {
+ case "back":
+
+ var st = new Start();
+ await NavigateTo(st);
+
+ break;
+ }
+ }
+
+ public override async Task Render(MessageResult message)
+ {
+ var bf = new ButtonForm();
+ bf.AddButtonRow("Back", "back");
+
+ await Device.Send($"Your current count is at: {counter}", bf, disableNotification: true);
+ }
+
+
+ }
+}
diff --git a/Examples/AsyncFormUpdates/forms/Start.cs b/Examples/AsyncFormUpdates/forms/Start.cs
new file mode 100644
index 0000000..c69fa4a
--- /dev/null
+++ b/Examples/AsyncFormUpdates/forms/Start.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TelegramBotBase.Base;
+using TelegramBotBase.Form;
+
+namespace AsyncFormUpdates.forms
+{
+ public class Start : AutoCleanForm
+ {
+
+
+ public override async Task Action(MessageResult message)
+ {
+ await message.ConfirmAction("");
+
+ switch (message.RawData ?? "")
+ {
+ case "async":
+
+ var afe = new AsyncFormEdit();
+ await NavigateTo(afe);
+
+
+ break;
+
+ case "async_del":
+
+ var afu = new AsyncFormUpdate();
+ await NavigateTo(afu);
+
+
+ break;
+ }
+
+ }
+
+ public override async Task Render(MessageResult message)
+ {
+ var bf = new ButtonForm();
+
+ bf.AddButtonRow("Open Async Form with AutoCleanupForm", "async_del");
+
+ bf.AddButtonRow("Open Async Form with Edit", "async");
+
+ await Device.Send("Choose your option", bf);
+ }
+
+ }
+}
diff --git a/Examples/AsyncFormUpdates/packages.config b/Examples/AsyncFormUpdates/packages.config
new file mode 100644
index 0000000..e25dbb0
--- /dev/null
+++ b/Examples/AsyncFormUpdates/packages.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file