diff --git a/bindings/android-sdk/android_bindings_generator.lpi b/bindings/android-sdk/android_bindings_generator.lpi
index d781dcf58..1932ee8dd 100644
--- a/bindings/android-sdk/android_bindings_generator.lpi
+++ b/bindings/android-sdk/android_bindings_generator.lpi
@@ -39,7 +39,7 @@
         <PackageName Value="LCL"/>
       </Item2>
     </RequiredPackages>
-    <Units Count="34">
+    <Units Count="35">
       <Unit0>
         <Filename Value="android_bindings_generator.pas"/>
         <IsPartOfProject Value="True"/>
@@ -48,7 +48,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="15" Y="14"/>
-        <UsageCount Value="61"/>
+        <UsageCount Value="73"/>
         <Loaded Value="True"/>
       </Unit0>
       <Unit1>
@@ -59,9 +59,9 @@
         <UnitName Value="mainform"/>
         <EditorIndex Value="0"/>
         <WindowIndex Value="0"/>
-        <TopLine Value="1"/>
+        <TopLine Value="7"/>
         <CursorPos X="3" Y="39"/>
-        <UsageCount Value="61"/>
+        <UsageCount Value="73"/>
         <Loaded Value="True"/>
         <LoadedDesigner Value="True"/>
       </Unit1>
@@ -71,7 +71,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="51"/>
         <CursorPos X="25" Y="24"/>
-        <UsageCount Value="12"/>
+        <UsageCount Value="11"/>
       </Unit2>
       <Unit3>
         <Filename Value="../../../p-tools/turbochessclock4android/androidutil.pas"/>
@@ -79,7 +79,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="13"/>
+        <UsageCount Value="12"/>
       </Unit3>
       <Unit4>
         <Filename Value="../../../p-tools/turbochessclock4android/androidview.pas"/>
@@ -87,7 +87,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="82" Y="10"/>
-        <UsageCount Value="13"/>
+        <UsageCount Value="12"/>
       </Unit4>
       <Unit5>
         <Filename Value="../../../p-tools/turbochessclock4android/androiddialog.pas"/>
@@ -95,7 +95,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="13"/>
+        <UsageCount Value="12"/>
       </Unit5>
       <Unit6>
         <Filename Value="../../../p-tools/turbochessclock4android/androidinputevent.pas"/>
@@ -103,25 +103,26 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="7"/>
+        <UsageCount Value="6"/>
       </Unit6>
       <Unit7>
         <Filename Value="../../../p-tools/turbochessclock4android/android/src/com/pascal/turbochessclock/AndroidMenu.java"/>
         <WindowIndex Value="0"/>
         <TopLine Value="54"/>
         <CursorPos X="87" Y="37"/>
-        <UsageCount Value="14"/>
+        <UsageCount Value="13"/>
         <DefaultSyntaxHighlighter Value="Java"/>
       </Unit7>
       <Unit8>
         <Filename Value="android_sdk_bindings_gen.pas"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="android_sdk_bindings_gen"/>
+        <IsVisibleTab Value="True"/>
         <EditorIndex Value="3"/>
         <WindowIndex Value="0"/>
-        <TopLine Value="677"/>
-        <CursorPos X="1" Y="692"/>
-        <UsageCount Value="61"/>
+        <TopLine Value="435"/>
+        <CursorPos X="3" Y="454"/>
+        <UsageCount Value="73"/>
         <Loaded Value="True"/>
       </Unit8>
       <Unit9>
@@ -130,7 +131,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="60"/>
-        <UsageCount Value="13"/>
+        <UsageCount Value="12"/>
       </Unit9>
       <Unit10>
         <Filename Value="../../../p-tools/turbochessclock4android/androidpipescomm.pas"/>
@@ -138,14 +139,14 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="7"/>
+        <UsageCount Value="6"/>
       </Unit10>
       <Unit11>
         <Filename Value="../../../fpcbuild/fpcsrc/rtl/objpas/sysutils/sysstrh.inc"/>
         <WindowIndex Value="0"/>
         <TopLine Value="92"/>
         <CursorPos X="18" Y="116"/>
-        <UsageCount Value="7"/>
+        <UsageCount Value="6"/>
         <DefaultSyntaxHighlighter Value="Delphi"/>
       </Unit11>
       <Unit12>
@@ -153,7 +154,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="232"/>
         <CursorPos X="111" Y="259"/>
-        <UsageCount Value="13"/>
+        <UsageCount Value="12"/>
         <DefaultSyntaxHighlighter Value="Java"/>
       </Unit12>
       <Unit13>
@@ -162,7 +163,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="127"/>
         <CursorPos X="17" Y="161"/>
-        <UsageCount Value="11"/>
+        <UsageCount Value="10"/>
       </Unit13>
       <Unit14>
         <Filename Value="sdk_level_7/android_all.pas"/>
@@ -170,7 +171,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="10"/>
+        <UsageCount Value="9"/>
       </Unit14>
       <Unit15>
         <Filename Value="../../../p-tools/systeminfo4android/javalang.pas"/>
@@ -178,7 +179,7 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="8"/>
+        <UsageCount Value="7"/>
       </Unit15>
       <Unit16>
         <Filename Value="../../../p-tools/systeminfo4android/androidtimer.pas"/>
@@ -186,23 +187,23 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="3" Y="20"/>
-        <UsageCount Value="8"/>
+        <UsageCount Value="7"/>
       </Unit16>
       <Unit17>
         <Filename Value="sdk_level_7/AndroidAll.java"/>
         <WindowIndex Value="0"/>
         <TopLine Value="441"/>
         <CursorPos X="16" Y="441"/>
-        <UsageCount Value="10"/>
+        <UsageCount Value="9"/>
         <DefaultSyntaxHighlighter Value="Java"/>
       </Unit17>
       <Unit18>
         <Filename Value="sdk_level_7/android_all.txt"/>
         <EditorIndex Value="4"/>
         <WindowIndex Value="0"/>
-        <TopLine Value="92"/>
-        <CursorPos X="64" Y="131"/>
-        <UsageCount Value="23"/>
+        <TopLine Value="1"/>
+        <CursorPos X="1" Y="1"/>
+        <UsageCount Value="28"/>
         <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="None"/>
       </Unit18>
@@ -212,14 +213,14 @@
         <WindowIndex Value="0"/>
         <TopLine Value="501"/>
         <CursorPos X="54" Y="525"/>
-        <UsageCount Value="8"/>
+        <UsageCount Value="7"/>
       </Unit19>
       <Unit20>
         <Filename Value="../../../test/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java"/>
         <WindowIndex Value="0"/>
         <TopLine Value="365"/>
         <CursorPos X="38" Y="381"/>
-        <UsageCount Value="8"/>
+        <UsageCount Value="7"/>
         <DefaultSyntaxHighlighter Value="Java"/>
       </Unit20>
       <Unit21>
@@ -229,36 +230,37 @@
         <WindowIndex Value="0"/>
         <TopLine Value="1"/>
         <CursorPos X="26" Y="9"/>
-        <UsageCount Value="23"/>
+        <UsageCount Value="28"/>
         <Loaded Value="True"/>
       </Unit21>
       <Unit22>
         <Filename Value="../../examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java"/>
+        <EditorIndex Value="6"/>
         <WindowIndex Value="0"/>
-        <TopLine Value="53"/>
-        <CursorPos X="1" Y="1"/>
-        <UsageCount Value="8"/>
+        <TopLine Value="151"/>
+        <CursorPos X="35" Y="120"/>
+        <UsageCount Value="12"/>
+        <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="Java"/>
       </Unit22>
       <Unit23>
         <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
         <UnitName Value="android_all"/>
-        <IsVisibleTab Value="True"/>
         <EditorIndex Value="5"/>
         <WindowIndex Value="0"/>
-        <TopLine Value="404"/>
-        <CursorPos X="21" Y="144"/>
-        <UsageCount Value="23"/>
+        <TopLine Value="99"/>
+        <CursorPos X="15" Y="99"/>
+        <UsageCount Value="28"/>
         <Loaded Value="True"/>
       </Unit23>
       <Unit24>
         <Filename Value="../../../lazarus/lcl/interfaces/android/androidpipescomm.pas"/>
         <UnitName Value="androidpipescomm"/>
-        <EditorIndex Value="12"/>
+        <EditorIndex Value="7"/>
         <WindowIndex Value="0"/>
         <TopLine Value="38"/>
         <CursorPos X="15" Y="62"/>
-        <UsageCount Value="23"/>
+        <UsageCount Value="28"/>
         <Loaded Value="True"/>
       </Unit24>
       <Unit25>
@@ -267,200 +269,200 @@
         <WindowIndex Value="0"/>
         <TopLine Value="74"/>
         <CursorPos X="1" Y="1"/>
-        <UsageCount Value="8"/>
+        <UsageCount Value="7"/>
       </Unit25>
       <Unit26>
         <Filename Value="../../../lazarus/lcl/arrow.pp"/>
         <UnitName Value="Arrow"/>
-        <EditorIndex Value="6"/>
         <WindowIndex Value="0"/>
         <TopLine Value="21"/>
         <CursorPos X="3" Y="45"/>
-        <UsageCount Value="19"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="18"/>
       </Unit26>
       <Unit27>
         <Filename Value="../../../lazarus/lcl/extctrls.pp"/>
         <UnitName Value="ExtCtrls"/>
-        <EditorIndex Value="7"/>
         <WindowIndex Value="0"/>
         <TopLine Value="388"/>
         <CursorPos X="3" Y="412"/>
-        <UsageCount Value="19"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="18"/>
       </Unit27>
       <Unit28>
         <Filename Value="../../../lazarus/lcl/comctrls.pp"/>
         <UnitName Value="ComCtrls"/>
-        <EditorIndex Value="10"/>
         <WindowIndex Value="0"/>
         <TopLine Value="1952"/>
         <CursorPos X="26" Y="1976"/>
-        <UsageCount Value="19"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="18"/>
       </Unit28>
       <Unit29>
         <Filename Value="../../../lazarus/lcl/stdctrls.pp"/>
         <UnitName Value="StdCtrls"/>
-        <EditorIndex Value="9"/>
         <WindowIndex Value="0"/>
         <TopLine Value="1025"/>
         <CursorPos X="32" Y="1049"/>
-        <UsageCount Value="19"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="18"/>
       </Unit29>
       <Unit30>
         <Filename Value="../../../lazarus/lcl/grids.pas"/>
         <UnitName Value="Grids"/>
-        <EditorIndex Value="8"/>
         <WindowIndex Value="0"/>
         <TopLine Value="606"/>
         <CursorPos X="3" Y="630"/>
-        <UsageCount Value="19"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="18"/>
       </Unit30>
       <Unit31>
         <Filename Value="../../../lazarus/lcl/toolwin.pp"/>
         <UnitName Value="Toolwin"/>
-        <EditorIndex Value="11"/>
         <WindowIndex Value="0"/>
         <TopLine Value="31"/>
         <CursorPos X="3" Y="56"/>
-        <UsageCount Value="19"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="18"/>
       </Unit31>
       <Unit32>
         <Filename Value="../../../lazarus/lcl/interfaces/wince/winceobject.inc"/>
         <WindowIndex Value="0"/>
         <TopLine Value="301"/>
         <CursorPos X="12" Y="339"/>
-        <UsageCount Value="9"/>
+        <UsageCount Value="8"/>
       </Unit32>
       <Unit33>
         <Filename Value="../../../lazarus/lcl/interfaces/carbon/carbonobject.inc"/>
         <WindowIndex Value="0"/>
         <TopLine Value="520"/>
         <CursorPos X="44" Y="552"/>
-        <UsageCount Value="9"/>
+        <UsageCount Value="8"/>
       </Unit33>
+      <Unit34>
+        <Filename Value="../../examples/androidlcl/android/src/com/pascal/androidlcl/AndroidApp.java"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="1"/>
+        <CursorPos X="1" Y="1"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Java"/>
+      </Unit34>
     </Units>
-    <JumpHistory Count="29" HistoryIndex="28">
+    <JumpHistory Count="30" HistoryIndex="29">
       <Position1>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="402" Column="39" TopLine="379"/>
+        <Caret Line="57" Column="26" TopLine="31"/>
       </Position1>
       <Position2>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="30" Column="29" TopLine="6"/>
+        <Caret Line="784" Column="46" TopLine="743"/>
       </Position2>
       <Position3>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="39" Column="20" TopLine="6"/>
+        <Caret Line="57" Column="15" TopLine="31"/>
       </Position3>
       <Position4>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="41" Column="20" TopLine="15"/>
+        <Caret Line="784" Column="46" TopLine="743"/>
       </Position4>
       <Position5>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="867" Column="11" TopLine="831"/>
+        <Caret Line="859" Column="60" TopLine="834"/>
       </Position5>
       <Position6>
-        <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="857" Column="11" TopLine="843"/>
+        <Filename Value="../../examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java"/>
+        <Caret Line="140" Column="50" TopLine="96"/>
       </Position6>
       <Position7>
-        <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="886" Column="23" TopLine="862"/>
+        <Filename Value="../../examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java"/>
+        <Caret Line="1" Column="1" TopLine="1"/>
       </Position7>
       <Position8>
-        <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="889" Column="16" TopLine="878"/>
+        <Filename Value="../../examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java"/>
+        <Caret Line="39" Column="50" TopLine="1"/>
       </Position8>
       <Position9>
-        <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="876" Column="3" TopLine="863"/>
+        <Filename Value="../../examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java"/>
+        <Caret Line="52" Column="1" TopLine="27"/>
       </Position9>
       <Position10>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="852" Column="3" TopLine="834"/>
+        <Caret Line="192" Column="34" TopLine="178"/>
       </Position10>
       <Position11>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="877" Column="8" TopLine="853"/>
+        <Caret Line="427" Column="17" TopLine="386"/>
       </Position11>
       <Position12>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="849" Column="1" TopLine="834"/>
+        <Caret Line="1176" Column="46" TopLine="1138"/>
       </Position12>
       <Position13>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="429" Column="3" TopLine="410"/>
+        <Caret Line="1" Column="1" TopLine="1"/>
       </Position13>
       <Position14>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="432" Column="1" TopLine="410"/>
+        <Caret Line="71" Column="27" TopLine="30"/>
       </Position14>
       <Position15>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="35" Column="1" TopLine="16"/>
+        <Caret Line="490" Column="1" TopLine="448"/>
       </Position15>
       <Position16>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="44" Column="41" TopLine="15"/>
+        <Caret Line="626" Column="1" TopLine="584"/>
       </Position16>
       <Position17>
-        <Filename Value="sdk_level_7/android_all.txt"/>
-        <Caret Line="32" Column="1" TopLine="1"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="915" Column="1" TopLine="872"/>
       </Position17>
       <Position18>
-        <Filename Value="sdk_level_7/android_all.txt"/>
-        <Caret Line="93" Column="19" TopLine="52"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="920" Column="17" TopLine="879"/>
       </Position18>
       <Position19>
-        <Filename Value="sdk_level_7/android_all.txt"/>
-        <Caret Line="207" Column="1" TopLine="166"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="923" Column="17" TopLine="882"/>
       </Position19>
       <Position20>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="844" Column="58" TopLine="815"/>
+        <Caret Line="926" Column="17" TopLine="885"/>
       </Position20>
       <Position21>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="8" Column="51" TopLine="1"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="1180" Column="17" TopLine="1152"/>
       </Position21>
       <Position22>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="14" Column="19" TopLine="1"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="1219" Column="17" TopLine="1178"/>
       </Position22>
       <Position23>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="63" Column="19" TopLine="22"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="1244" Column="17" TopLine="1203"/>
       </Position23>
       <Position24>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="235" Column="21" TopLine="194"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="1" Column="1" TopLine="1"/>
       </Position24>
       <Position25>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="40" Column="15" TopLine="16"/>
+        <Caret Line="20" Column="19" TopLine="1"/>
       </Position25>
       <Position26>
         <Filename Value="android_sdk_bindings_gen.pas"/>
-        <Caret Line="842" Column="3" TopLine="835"/>
+        <Caret Line="192" Column="34" TopLine="151"/>
       </Position26>
       <Position27>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="330" Column="61" TopLine="318"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="427" Column="17" TopLine="386"/>
       </Position27>
       <Position28>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="1" Column="1" TopLine="1"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="1179" Column="17" TopLine="1138"/>
       </Position28>
       <Position29>
-        <Filename Value="../../../lazarus/lcl/interfaces/android/android_all.pas"/>
-        <Caret Line="14" Column="19" TopLine="1"/>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="1219" Column="17" TopLine="1178"/>
       </Position29>
+      <Position30>
+        <Filename Value="android_sdk_bindings_gen.pas"/>
+        <Caret Line="917" Column="23" TopLine="909"/>
+      </Position30>
     </JumpHistory>
   </ProjectOptions>
   <CompilerOptions>
diff --git a/bindings/android-sdk/android_sdk_bindings_gen.pas b/bindings/android-sdk/android_sdk_bindings_gen.pas
index 637e849d1..78d1dd942 100644
--- a/bindings/android-sdk/android_sdk_bindings_gen.pas
+++ b/bindings/android-sdk/android_sdk_bindings_gen.pas
@@ -22,17 +22,27 @@ type
     FClassNum, FMethodNum: Integer;
     FIsGlobalObject: Boolean;
     FGlobalObject: string;
+    // List of Callback types which are used later
+    FCallbackTypesJavaName: TStringList;
+    FCallbackTypesParams: TStringList;
+    FCallbackTypesInnerName: TStringList;
+    FCallbackTypesFirstParam: TStringList;
     //
     // ProcessMethodReturnValue
     FMethodReturnPas, FDeclarationBase: string;
     FDeclarationIsFunction: Boolean;
     // ProcessMethodName
     FMethodName: string;
+    // ProcessMethodPreface
+    FJavaParamSelf: String;
+    FIDString: String;
+    FIDSetter, FIDStart, FIDFinished: String;
+    FCallbackName, FSetterName, FCallerName: string;
     // ProcessMethodParameters
-    FPascalParams, FJavaParams: string;
+    FPascalParams, FJavaParams, FFirstParam: string;
     FHasStringParam: Boolean;
     FPasOutputImplCurLine: Integer;
-    FCallbackTypePas: string;
+    FCallbackTypePas, FCallbackTypeJava: string;
     //
     procedure GeneratePascalFile(ASourceFile: string; ADest: TStringList);
     procedure GenerateJavaFile(ASourceFile: string; ADest: TStringList);
@@ -47,6 +57,7 @@ type
     //
     procedure ProcessMethodReturnValue(ASourceLine: string; var lReaderPos: Integer);
     procedure ProcessMethodName(ASourceLine: string; var lReaderPos: Integer);
+    procedure ProcessMethodPreface(ASourceLine: string; AIsCallback: Boolean);
     procedure ProcessMethodParameters(ASourceLine: string; var lReaderPos: Integer; AAddParamRead: Boolean = True);
     //
     function GetNextWord(ALine: string; var AStartPos: Integer): string;
@@ -162,6 +173,7 @@ begin
   ADest.Add('  JavaLang MyJavaLang;');
   ADest.Add('  // lists of variables');
   ADest.Add('  ArrayList ViewElements;');
+  ADest.Add('  ArrayList ViewElementsTags;');
   ADest.Add('');
   ADest.Add('  public AndroidAll(AndroidPipesComm AAndroidPipesComm, Activity AActivity, JavaLang AJavaLang)');
   ADest.Add('  {');
@@ -169,6 +181,7 @@ begin
   ADest.Add('    MyAndroidPipesComm = AAndroidPipesComm;');
   ADest.Add('    MyJavaLang = AJavaLang;');
   ADest.Add('    ViewElements = new ArrayList();');
+  ADest.Add('    ViewElementsTags = new ArrayList();');
   ADest.Add('  }');
   ADest.Add('');
   ADest.Add('  public void DebugOut(String Str)');
@@ -205,13 +218,15 @@ begin
   ADest.Add('    ArrayAdapter<String> param_self_ArrayAdapter_String_;');
   ADest.Add('    AdapterView param_self_AdapterView;');
   ADest.Add('    AlertDialog.Builder param_self_AlertDialog_Builder;');
+  ADest.Add('    Dialog param_self_Dialog;');
+  ADest.Add('    AlertDialog param_self_AlertDialog;');
   ADest.Add('    //');
   ADest.Add('    // Params');
   ADest.Add('    //');
   ADest.Add('    ViewGroup.LayoutParams lViewGroup_LayoutParams_1, lViewGroup_LayoutParams_2, lViewGroup_LayoutParams_3;');
   ADest.Add('    SpinnerAdapter lSpinnerAdapter_1;');
   ADest.Add('    DisplayMetrics lDisplayMetrics_1;');
-  ADest.Add('    CharSequence lCharSequence_1;');
+  ADest.Add('    CharSequence lCharSequence_1, lCharSequence_2;');
   ADest.Add('    String lString_1;');
   ADest.Add('    View lView_1;');
   ADest.Add('    int lint_1, lint_2, lint_3, lint_4;');
@@ -579,6 +594,7 @@ begin
     else
     begin
       FJavaOutputMethods.Add(Format('      ViewElements.add(%s);', [lMethodReturnJavaIdentifier]));
+      FJavaOutputMethods.Add(       '      ViewElementsTags.add(null);');
       FJavaOutputMethods.Add(Format('      MyAndroidPipesComm.%s(ViewElements.size() - 1);', [GetJavaResultFunction(lMethodReturn)]))
     end;
   end;
@@ -673,6 +689,7 @@ begin
   FPasOutputImpl.Add('end;');
 
   FJavaOutputMethods.Add('      ViewElements.add(new ' + FClassName + '(' + lConstructorJavaParams + '));');
+  FJavaOutputMethods.Add('      ViewElementsTags.add(null);');
   FJavaOutputMethods.Add('      MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);');
   FJavaOutputMethods.Add('      break;');
 
@@ -701,10 +718,12 @@ procedure TAndroidSDKBindingsGen.ProcessModelCallbackSetter(ASourceLine: string)
 var
   lReaderPos: Integer = 1;
   lCurWord: string;
-  lSetterName, lCallerName, lCallbackName, lCallbackDeclaration: string;
-  lIDSetter, lIDStart, lIDFinished: String;
-  lJavaParamSelf: string;
   lStr: String;
+  lSeparator: String;
+  lJavaCallbackIndex: Integer;
+  lJavaCallbackParams, lJavaCallbackInnerName, lFirstCallbackParam: String;
+  lHugeParamList: TStringList;
+  lHugeParamListText: String;
 begin
   if ASourceLine = '' then Exit;
 
@@ -712,49 +731,40 @@ begin
 
   ProcessMethodReturnValue(ASourceLine, lReaderPos);
   ProcessMethodName(ASourceLine, lReaderPos);
+
+  // Pascal and Java Implementation Start
+  ProcessMethodPreface(ASourceLine, True);
+
   ProcessMethodParameters(ASourceLine, lReaderPos);
 
-  lSetterName := FMethodName;
-  lIDSetter := GetIDString(lSetterName);
-  lCallbackName := Copy(lSetterName, 4, Length(lSetterName)); // remove the "set" from the setter name
-  lCallerName := 'call' + lCallbackName;
-  AddOutputIDs(lIDSetter);
-  Inc(FMethodNum);
-  lIDStart := GetIDString(lCallbackName + '_Start');
-  AddOutputIDs(lIDStart);
-  Inc(FMethodNum);
-  lIDFinished := GetIDString(lCallbackName + '_Finished');
-  AddOutputIDs(lIDFinished);
-  Inc(FMethodNum);
+  // Pascal implementation continuation
+  if FPascalParams = '' then lSeparator := ''
+  else lSeparator := '; ';
+  FPasOutputImpl.Insert(FPasOutputImplCurLine,
+                     Format('procedure %s.%s(%s%sACallback: %s);', [FClassNamePas, FSetterName, FPascalParams, lSeparator, FCallbackTypePas]));
 
-  FPasOutputClasses.Add(       '  public');
-  FPasOutputClasses.Add(Format('    %s: %s;', [lCallbackName, FCallbackTypePas]));
-  FPasOutputClasses.Add(Format('    procedure %s(ACallback: %s);', [lSetterName, FCallbackTypePas]));
-  FPasOutputClasses.Add(Format('    procedure %s();', [lCallerName]));
-  FPasOutputClasses.Add(       '  public');
-
-  FPasOutputImpl.Add(Format('procedure %s.%s(ACallback: %s);', [FClassNamePas, lSetterName, FCallbackTypePas]));
-  FPasOutputImpl.Add(       'begin');
-  FPasOutputImpl.Add(       '  OnClickListener := ACallback;');
-  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendByte(ShortInt(amkUICommand));');
-  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendInt(' + lIDSetter + ');');
-  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendInt(Index); // Self, Java Index');
-  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendInt(PtrInt(Self)); // Self, Pascal pointer');
   FPasOutputImpl.Add(       '  vAndroidPipesComm.WaitForReturn();');
   FPasOutputImpl.Add(       'end;');
   FPasOutputImpl.Add(       '');
-  FPasOutputImpl.Add(Format('procedure %s.%s();', [FClassNamePas, lCallerName]));
+  FPasOutputImpl.Add(Format('procedure %s.%s();', [FClassNamePas, FCallerName]));
   FPasOutputImpl.Add(       'begin');
-  FPasOutputImpl.Add(       '  if Assigned(OnClickListener) then OnClickListener(Self);');
+  FPasOutputImpl.Add(Format('  if Assigned(%s) then %s();', [FCallbackName, FCallbackName]));
   FPasOutputImpl.Add(       'end;');
 
-  // Method type and name
-  FPasOutputMessages.Add('  ' + lIDStart + ':');
-  FPasOutputMessages.Add('  begin');
-  FPasOutputMessages.Add('    lPascalPointer := vAndroidPipesComm.ReadInt();');
-  FPasOutputMessages.Add('    TTextView(lPascalPointer).callOnClickListener();');
-  FPasOutputMessages.Add('    vAndroidPipesComm.SendMessage(amkUICommand, ' + lIDFinished + ');');
-  FPasOutputMessages.Add('  end;');
+  // Pascal Interface
+  FPasOutputClasses.Add(       '  public');
+  FPasOutputClasses.Add(Format('    %s: %s;', [FCallbackName, FCallbackTypePas]));
+  FPasOutputClasses.Add(Format('    procedure %s(%s%sACallback: %s);', [FSetterName, FPascalParams, lSeparator, FCallbackTypePas]));
+  FPasOutputClasses.Add(Format('    procedure %s();', [FCallerName]));
+  FPasOutputClasses.Add(       '  public');
+
+  // Pascal Message Reader
+  FPasOutputMessages.Add(       '  ' + FIDStart + ':');
+  FPasOutputMessages.Add(       '  begin');
+  FPasOutputMessages.Add(       '    lPascalPointer := vAndroidPipesComm.ReadInt();');
+  FPasOutputMessages.Add(Format('    %s(lPascalPointer).%s();', [FClassNamePas, FCallerName]));
+  FPasOutputMessages.Add(       '    vAndroidPipesComm.SendMessage(amkUICommand, ' + FIDFinished + ');');
+  FPasOutputMessages.Add(       '  end;');
 {    amkUI_MenuItem_setOnMenuItemClickListener_Start:
     begin
       lInt := ReadInt();
@@ -766,36 +776,35 @@ begin
     end;
   end;}
 
-
   // -----------------------------------------------
   // Now Java:
   // -----------------------------------------------
 
-  lJavaParamSelf := 'param_self_' + FClassName;
-  FJavaOutputMethods.Add(       '    // ' + ASourceLine);
-  FJavaOutputMethods.Add(       '    case ' + lIDSetter + ':');
-  FJavaOutputMethods.Add(       '      DebugOut("' + lIDSetter + '");');
-  FJavaOutputMethods.Add(       '      // Self');
-  FJavaOutputMethods.Add(       '      lInt = MyAndroidPipesComm.GetInt();');
-  FJavaOutputMethods.Add(       '      ' + lJavaParamSelf + ' = (' + FClassName + ') ViewElements.get(lInt);');
-  FJavaOutputMethods.Add(       '      lPascalPointer = MyAndroidPipesComm.GetInt();');
-  FJavaOutputMethods.Add(Format('      %s.setTag(Integer.valueOf(lPascalPointer));', [lJavaParamSelf]));
-  FJavaOutputMethods.Add(       '');
+  lJavaCallbackIndex := FCallbackTypesJavaName.IndexOf(FCallbackTypeJava);
+  lJavaCallbackParams := FCallbackTypesParams.Strings[lJavaCallbackIndex];
+  lJavaCallbackInnerName := FCallbackTypesInnerName.Strings[lJavaCallbackIndex];
+  lFirstCallbackParam := FCallbackTypesFirstParam.Strings[lJavaCallbackIndex];
+
+  lHugeParamList := TStringList.Create;
+  lHugeParamList.Add(Format('      new %s()', [FCallbackTypeJava]));
+  lHugeParamList.Add(       '      {');
+  lHugeParamList.Add(Format('        public void %s(%s)', [lJavaCallbackInnerName, lJavaCallbackParams]));
+  lHugeParamList.Add(       '        {');
+  lHugeParamList.Add(       '          // Perform action');
+  lHugeParamList.Add(Format('          DebugOut("START %s");', [FCallbackTypeJava]));
+  lHugeParamList.Add(Format('          MyAndroidPipesComm.SendMessage(AndroidPipesComm.amkUICommand, %s);', [FIDStart]));
+  lHugeParamList.Add(Format('          Integer lTag = (Integer) ViewElementsTags.get(ViewElements.indexOf(%s));', [lFirstCallbackParam]));
+  //FJavaOutputMethods.Add(       '          Integer lTag = (Integer) v.getTag();');
+  lHugeParamList.Add(       '          MyAndroidPipesComm.SendInt(lTag.intValue());');
+  lHugeParamList.Add(Format('          MyAndroidPipesComm.WaitForPascalMessage(AndroidPipesComm.amkUICommand, %s);', [FIDFinished]));
+  lHugeParamList.Add(Format('          DebugOut("END %s");', [FCallbackTypeJava]));
+  lHugeParamList.Add(       '        }');
+  lHugeParamList.Add(       '      }');
+  lHugeParamListText := StringReplace(FJavaParams, '$', lHugeParamList.Text, []);
+  lHugeParamList.Free;
+
   FJavaOutputMethods.Add(       '      // Run the code');
-  FJavaOutputMethods.Add(Format('      %s.setOnClickListener(', [lJavaParamSelf]));
-  FJavaOutputMethods.Add(Format('      new View.OnClickListener()', []));
-  FJavaOutputMethods.Add(       '      {');
-  FJavaOutputMethods.Add(       '        public void onClick(View v)');
-  FJavaOutputMethods.Add(       '        {');
-  FJavaOutputMethods.Add(       '          // Perform action');
-  FJavaOutputMethods.Add(       '          DebugOut("START TextView OnClickListener");');
-  FJavaOutputMethods.Add(Format('          MyAndroidPipesComm.SendMessage(AndroidPipesComm.amkUICommand, %s);', [lIDStart]));
-  FJavaOutputMethods.Add(       '          Integer lTag = (Integer) v.getTag();');
-  FJavaOutputMethods.Add(       '          MyAndroidPipesComm.SendInt(lTag.intValue());');
-  FJavaOutputMethods.Add(Format('          MyAndroidPipesComm.WaitForPascalMessage(AndroidPipesComm.amkUICommand, %s);', [lIDFinished]));
-  FJavaOutputMethods.Add(       '          DebugOut("END TextView OnClickListener");');
-  FJavaOutputMethods.Add(       '        }');
-  FJavaOutputMethods.Add(       '      });');
+  FJavaOutputMethods.Add(Format('      %s.%s(%s);', [FJavaParamSelf, FMethodName, lHugeParamListText]));
   FJavaOutputMethods.Add(       '      MyAndroidPipesComm.SendResult();');
   FJavaOutputMethods.Add(       '      break;');
 (*  case amkUI_TextView_setOnClickListener:
@@ -833,22 +842,40 @@ var
   lReaderPos: Integer = 1;
   lCurWord: string;
   lStr, lCallbackDeclaration, lPascalType: String;
+  lJavaName, lJavaParams, lFirstParam: String;
 begin
   if ASourceLine = '' then Exit;
 
   lStr := GetNextWord(ASourceLine, lReaderPos);
 
   lStr := GetNextWord(ASourceLine, lReaderPos);
+  lJavaName := lStr;
   lPascalType := GetPascalTypeName(lStr);
 
   ProcessMethodReturnValue(ASourceLine, lReaderPos);
   ProcessMethodName(ASourceLine, lReaderPos);
+  lJavaParams := Copy(ASourceLine, lReaderPos, Length(ASourceLine));
+  lJavaParams := Trim(lJavaParams);
+  lJavaParams := Copy(lJavaParams, 2, Length(lJavaParams)-2);
+
   ProcessMethodParameters(ASourceLine, lReaderPos, False);
 
+  // Correct code, but at the moment too complex
+
+  {$IFDEF CORRECT_TYPES}
   if FDeclarationIsFunction then
     FPasOutputTypes.Add(Format('  %s = %s (%s): %s of object;', [lPascalType, FDeclarationBase, FPascalParams, FMethodReturnPas]))
   else
     FPasOutputTypes.Add(Format('  %s = %s (%s) of object;', [lPascalType, FDeclarationBase, FPascalParams]));
+  {$ELSE}
+  FPasOutputTypes.Add(Format('  %s = procedure () of object;', [lPascalType, FDeclarationBase, FPascalParams]));
+  {$ENDIF}
+
+  // Also add to the lists
+  FCallbackTypesJavaName.Add(lJavaName);
+  FCallbackTypesParams.Add(lJavaParams);
+  FCallbackTypesInnerName.Add(FMethodName);
+  FCallbackTypesFirstParam.Add(FFirstParam);
 end;
 
 procedure TAndroidSDKBindingsGen.ProcessMethodReturnValue(ASourceLine: string;
@@ -878,6 +905,65 @@ begin
   FMethodName := GetNextWord(ASourceLine, lReaderPos);
 end;
 
+procedure TAndroidSDKBindingsGen.ProcessMethodPreface(ASourceLine: string; AIsCallback: Boolean);
+begin
+  FIDString := GetIDString(FMethodName);
+  // Lists of constants for the IDs
+
+  if not AIsCallback then AddOutputIDs(FIDString)
+  else
+  begin
+    FSetterName := FMethodName;
+    FIDSetter := GetIDString(FSetterName);
+    FCallbackName := Copy(FSetterName, 4, Length(FSetterName)); // remove the "set" from the setter name
+    FCallerName := 'call' + FCallbackName;
+    AddOutputIDs(FIDSetter);
+    Inc(FMethodNum);
+    FIDStart := GetIDString(FCallbackName + '_Start');
+    AddOutputIDs(FIDStart);
+    Inc(FMethodNum);
+    FIDFinished := GetIDString(FCallbackName + '_Finished');
+    AddOutputIDs(FIDFinished);
+    Inc(FMethodNum);
+  end;
+
+  // Pascal implementation start, without method title
+  FPasOutputImplCurLine := FPasOutputImpl.Count;
+  FPasOutputImpl.Add(       'begin');
+  if AIsCallback then
+  FPasOutputImpl.Add(Format('  %s := ACallback;', [FCallbackName]));
+  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendByte(ShortInt(amkUICommand));');
+  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendInt(' + FIDSetter + ');');
+  if not FIsGlobalObject then
+  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendInt(Index); // Self, Java Index');
+  if AIsCallback then
+  FPasOutputImpl.Add(       '  vAndroidPipesComm.SendInt(PtrInt(Self)); // Self, Pascal pointer');
+
+  // Java implementation
+  FJavaParamSelf := 'param_self_' + JavaRemoveGeneric(ConvertPointToUnderline(FClassName));
+  FJavaOutputMethods.Add(Format('    // %s', [ASourceLine]));
+  FJavaOutputMethods.Add(Format('    case %s:', [FIDString]));
+  FJavaOutputMethods.Add(Format('      DebugOut("%s");', [FIDString]));
+  if not FIsGlobalObject then
+  begin
+    FJavaOutputMethods.Add(     '      // Self');
+    FJavaOutputMethods.Add(     '      lInt = MyAndroidPipesComm.GetInt();');
+    FJavaOutputMethods.Add(Format('      %s = (%s) ViewElements.get(lInt);', [FJavaParamSelf, FClassName]));
+  end
+  else
+    FJavaParamSelf := FGlobalObject;
+
+  FJavaOutputMethods.Add('      // params');
+
+  if AIsCallback then
+  begin
+    FJavaOutputMethods.Add(       '      lPascalPointer = MyAndroidPipesComm.GetInt();');
+    FJavaOutputMethods.Add(Format('      ViewElementsTags.set(lInt, new Integer(lPascalPointer));', [fJavaParamSelf]));
+    //FJavaOutputMethods.Add(Format('      %s.setTag(Integer.valueOf(lPascalPointer));', [lJavaParamSelf]));
+    FJavaOutputMethods.Add(       '');
+  end;
+end;
+
 // callbacksetter void setOnClickListener($View.OnClickListener l)
 // $ indicates that this parameter should be skipped
 procedure TAndroidSDKBindingsGen.ProcessMethodParameters(ASourceLine: string;
@@ -889,12 +975,14 @@ var
   lParamTypePas, lParamName, lParamPrefix: String;
   lJavaParams, lJavaParamVar: String;
   StringParamCount: Integer = 0;
+  i: Integer;
 begin
   // Add all parameters
   TmpStr := '';
   lJavaParams := '';
   FHasStringParam := False;
   FCallbackTypePas := '';
+  FFirstParam := '';
 
   repeat
     lParamType := GetNextWord(ASourceLine, lReaderPos);
@@ -909,10 +997,11 @@ begin
       Continue;
     end;
 
-    // Parameter to skip because it is a callback name, just write $,
+    // Parameter to skip because it is a callback name, just write "$, " to the Java Params
     if lParamType[1] = '$' then
     begin
-      TmpStr := TmpStr + '$, ';
+      lJavaParams := lJavaParams + '$, ';
+      FCallbackTypeJava := StringReplace(lParamType, '$', '', [rfReplaceAll]);
       FCallbackTypePas := GetPascalTypeName(lParamType);
       FCallbackTypePas := StringReplace(FCallbackTypePas, '$', '', [rfReplaceAll]);
       lParamType := GetNextWord(ASourceLine, lReaderPos);
@@ -921,6 +1010,7 @@ begin
 
     lParamTypePas := GetPascalTypeName(lParamType);
     lParamName := GetNextWord(ASourceLine, lReaderPos);
+    if FFirstParam = '' then FFirstParam := lParamName;
     if PassByReference(lParamType) then lParamPrefix := 'var '
     else lParamPrefix := '';
 
@@ -961,6 +1051,21 @@ begin
   FPascalParams := TmpStr;
   // And for Java params too
   FJavaParams := System.Copy(lJavaParams, 0, Length(lJavaParams)-2);
+
+  // Insert the start
+  //FPasOutputClasses.Add('    ' + DeclarationBase + TmpStr + lPascalMethodModifiers);
+  //FPasOutputImpl.Insert(FPasOutputImplCurLine, DeclarationBase + FClassNamePas + '.' + TmpStr);
+  if FHasStringParam then
+  begin
+    FPasOutputImpl.Insert(FPasOutputImplCurLine, 'var');
+    for i := 1 to StringParamCount do
+    begin
+      FPasOutputImpl.Insert(FPasOutputImplCurLine+i, Format('  lString_%d: TString;', [i]));
+      FPasOutputImpl.Add(Format('  lString_%d.Free;', [i]));
+    end;
+  end;
+  //FPasOutputImpl.Add('end;');
+  //FPasOutputImpl.Add('');
 end;
 
 { Reads one word in a string, starting at AStartPos (1-based index)
@@ -1114,6 +1219,11 @@ begin
   FJavaOutputIDs := TStringList.Create;
   FJavaOutputMethods := TStringList.Create;
 
+  FCallbackTypesJavaName := TStringList.Create;
+  FCallbackTypesParams := TStringList.Create;
+  FCallbackTypesInnerName := TStringList.Create;
+  FCallbackTypesFirstParam := TStringList.Create;
+
   FClassNum := $100;
 end;
 
@@ -1134,6 +1244,11 @@ begin
   FJavaOutputIDs.Free;
   FJavaOutputMethods.Free;
 
+  FCallbackTypesJavaName.Free;
+  FCallbackTypesParams.Free;
+  FCallbackTypesInnerName.Free;
+  FCallbackTypesFirstParam.Free;
+
   inherited Destroy;
 end;
 
diff --git a/bindings/android-sdk/sdk_level_7/android_all.txt b/bindings/android-sdk/sdk_level_7/android_all.txt
index 3400ad3ed..876b35074 100644
--- a/bindings/android-sdk/sdk_level_7/android_all.txt
+++ b/bindings/android-sdk/sdk_level_7/android_all.txt
@@ -50,12 +50,116 @@ method void getMetrics(DisplayMetrics outMetrics)
 method Display getDefaultDisplay()
 
 [Dialog] TJavaObject
+#void 	addContentView(View view, ViewGroup.LayoutParams params)
+#void 	cancel()
+#void 	closeOptionsMenu()
+#void 	dismiss()
+#boolean 	dispatchGenericMotionEvent(MotionEvent ev)
+#boolean 	dispatchKeyEvent(KeyEvent event)
+#boolean 	dispatchKeyShortcutEvent(KeyEvent event)
+#boolean 	dispatchPopulateAccessibilityEvent(AccessibilityEvent event)
+#boolean 	dispatchTouchEvent(MotionEvent ev)
+#boolean 	dispatchTrackballEvent(MotionEvent ev)
+#View 	findViewById(int id)
+#ActionBar 	getActionBar()
+#final Context 	getContext()
+#View 	getCurrentFocus()
+#LayoutInflater 	getLayoutInflater()
+#final Activity 	getOwnerActivity()
+#final int 	getVolumeControlStream()
+#Window 	getWindow()
+#void 	hide()
+#void 	invalidateOptionsMenu()
+#boolean 	isShowing()
+#void 	onActionModeFinished(ActionMode mode)
+#void 	onActionModeStarted(ActionMode mode)
+#void 	onAttachedToWindow()
+#void 	onBackPressed()
+#void 	onContentChanged()
+#boolean 	onContextItemSelected(MenuItem item)
+#void 	onContextMenuClosed(Menu menu)
+#void 	onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
+#boolean 	onCreateOptionsMenu(Menu menu)
+#boolean 	onCreatePanelMenu(int featureId, Menu menu)
+#View 	onCreatePanelView(int featureId)
+#void 	onDetachedFromWindow()
+#boolean 	onGenericMotionEvent(MotionEvent event)
+#boolean 	onKeyDown(int keyCode, KeyEvent event)
+#boolean 	onKeyLongPress(int keyCode, KeyEvent event)
+#boolean 	onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
+#boolean 	onKeyShortcut(int keyCode, KeyEvent event)
+#boolean 	onKeyUp(int keyCode, KeyEvent event)
+#boolean 	onMenuItemSelected(int featureId, MenuItem item)
+#boolean 	onMenuOpened(int featureId, Menu menu)
+#boolean 	onOptionsItemSelected(MenuItem item)
+#void 	onOptionsMenuClosed(Menu menu)
+#void 	onPanelClosed(int featureId, Menu menu)
+#boolean 	onPrepareOptionsMenu(Menu menu)
+#boolean 	onPreparePanel(int featureId, View view, Menu menu)
+#void 	onRestoreInstanceState(Bundle savedInstanceState)
+#Bundle 	onSaveInstanceState()
+#boolean 	onSearchRequested()
+#boolean 	onTouchEvent(MotionEvent event)
+#boolean 	onTrackballEvent(MotionEvent event)
+#void 	onWindowAttributesChanged(WindowManager.LayoutParams params)
+#void 	onWindowFocusChanged(boolean hasFocus)
+#ActionMode 	onWindowStartingActionMode(ActionMode.Callback callback)
+#void 	openContextMenu(View view)
+#void 	openOptionsMenu()
+#void 	registerForContextMenu(View view)
+#final boolean 	requestWindowFeature(int featureId)
+#void 	setCancelMessage(Message msg)
+#void 	setCancelable(boolean flag)
+#void 	setCanceledOnTouchOutside(boolean cancel)
+#void 	setContentView(View view)
+#void 	setContentView(int layoutResID)
+#void 	setContentView(View view, ViewGroup.LayoutParams params)
+#void 	setDismissMessage(Message msg)
+#final void 	setFeatureDrawable(int featureId, Drawable drawable)
+#final void 	setFeatureDrawableAlpha(int featureId, int alpha)
+#final void 	setFeatureDrawableResource(int featureId, int resId)
+#final void 	setFeatureDrawableUri(int featureId, Uri uri)
+#void 	setOnCancelListener(DialogInterface.OnCancelListener listener)
+#void 	setOnDismissListener(DialogInterface.OnDismissListener listener)
+#void 	setOnKeyListener(DialogInterface.OnKeyListener onKeyListener)
+#void 	setOnShowListener(DialogInterface.OnShowListener listener)
+#final void 	setOwnerActivity(Activity activity)
+#void 	setTitle(int titleId)
+#void 	setTitle(CharSequence title)
+#final void 	setVolumeControlStream(int streamType)
+method void show()
+#void 	takeKeyEvents(boolean get)
+#void 	unregisterForContextMenu(View view)
 
 [AlertDialog] Dialog
+const THEME_HOLO_DARK = $00000002;
+const THEME_HOLO_LIGHT = $00000003;
+const THEME_TRADITIONAL = $00000001;
+# Button 	getButton(int whichButton)
+# ListView 	getListView()
+# boolean 	onKeyDown(int keyCode, KeyEvent event)
+# boolean 	onKeyUp(int keyCode, KeyEvent event)
+# void 	setButton(CharSequence text, Message msg)
+callbacksetter void 	setButton(int whichButton, CharSequence text, $DialogInterface.OnClickListener listener)
+# void 	setButton(CharSequence text, DialogInterface.OnClickListener listener)
+# void 	setButton(int whichButton, CharSequence text, Message msg)
+# void 	setButton2(CharSequence text, DialogInterface.OnClickListener listener)
+# void 	setButton2(CharSequence text, Message msg)
+# void 	setButton3(CharSequence text, DialogInterface.OnClickListener listener)
+# void 	setButton3(CharSequence text, Message msg)
+# void 	setCustomTitle(View customTitleView)
+#void 	setIcon(Drawable icon)
+#void 	setIcon(int resId)
+#void 	setIconAttribute(int attrId)
+# void 	setInverseBackgroundForced(boolean forceInverseBackground)
+method void setMessage(CharSequence message)
+method void setTitle(CharSequence title)
+#void 	setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom)
+method void setView(View view)
 
 [AlertDialog.Builder] TJavaObject
 constructor Create(Activity)
-#public AlertDialog create ()
+method AlertDialog create ()
 #public Context getContext ()
 #public AlertDialog.Builder setAdapter (ListAdapter adapter, DialogInterface.OnClickListener listener)
 #public AlertDialog.Builder setCancelable (boolean cancelable)
@@ -79,7 +183,7 @@ method AlertDialog.Builder setMessage (CharSequence message)
 #public AlertDialog.Builder setOnKeyListener (DialogInterface.OnKeyListener onKeyListener)
 #public AlertDialog.Builder setPositiveButton (int textId, DialogInterface.OnClickListener listener)
 #public AlertDialog.Builder setPositiveButton (CharSequence text, DialogInterface.OnClickListener listener)
-# callbacksetter AlertDialog.Builder setPositiveButton (CharSequence text, DialogInterface.OnClickListener $listener)
+#callbacksetter AlertDialog.Builder setPositiveButton (CharSequence text, $DialogInterface.OnClickListener listener)
 #public AlertDialog.Builder setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)
 #public AlertDialog.Builder setSingleChoiceItems (ListAdapter adapter, int checkedItem, DialogInterface.OnClickListener listener)
 #public AlertDialog.Builder setSingleChoiceItems (int itemsId, int checkedItem, DialogInterface.OnClickListener listener)
diff --git a/examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java b/examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java
index 531774619..afde62b34 100644
--- a/examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java
+++ b/examples/androidlcl/android/src/com/pascal/androidlcl/AndroidAll.java
@@ -19,6 +19,7 @@ public class AndroidAll
   JavaLang MyJavaLang;
   // lists of variables
   ArrayList ViewElements;
+  ArrayList ViewElementsTags;
 
   public AndroidAll(AndroidPipesComm AAndroidPipesComm, Activity AActivity, JavaLang AJavaLang)
   {
@@ -26,6 +27,7 @@ public class AndroidAll
     MyAndroidPipesComm = AAndroidPipesComm;
     MyJavaLang = AJavaLang;
     ViewElements = new ArrayList();
+    ViewElementsTags = new ArrayList();
   }
 
   public void DebugOut(String Str)
@@ -42,88 +44,97 @@ public class AndroidAll
   static final int amkUI_TDisplayMetrics_widthPixels_5 = 0x00101005;
   static final int amkUI_TDisplayMetrics_xdpi_6 = 0x00101006;
   static final int amkUI_TDisplayMetrics_ydpi_7 = 0x00101007;
+  // DialogInterface
   // Activity
-  static final int amkUI_TActivity_setTitle_0 = 0x00102000;
-  static final int amkUI_TActivity_getTitle_1 = 0x00102001;
+  static final int amkUI_TActivity_setTitle_0 = 0x00103000;
+  static final int amkUI_TActivity_getTitle_1 = 0x00103001;
   // Display
-  static final int amkUI_TDisplay_getMetrics_0 = 0x00103000;
+  static final int amkUI_TDisplay_getMetrics_0 = 0x00104000;
   // WindowManager
-  static final int amkUI_TWindowManager_getDefaultDisplay_0 = 0x00104000;
+  static final int amkUI_TWindowManager_getDefaultDisplay_0 = 0x00105000;
   // Dialog
+  static final int amkUI_TDialog_show_0 = 0x00106000;
   // AlertDialog
+  static final int amkUI_TAlertDialog_setButton_0 = 0x00107000;
+  static final int amkUI_TAlertDialog_Button_Start_1 = 0x00107001;
+  static final int amkUI_TAlertDialog_Button_Finished_2 = 0x00107002;
+  static final int amkUI_TAlertDialog_setMessage_3 = 0x00107003;
+  static final int amkUI_TAlertDialog_setTitle_4 = 0x00107004;
+  static final int amkUI_TAlertDialog_setView_5 = 0x00107005;
   // AlertDialog.Builder
-  static final int amkUI_TAlertDialog_Builder_Create_0 = 0x00107000;
-  static final int amkUI_TAlertDialog_Builder_setMessage_1 = 0x00107001;
-  static final int amkUI_TAlertDialog_Builder_setTitle_2 = 0x00107002;
-  static final int amkUI_TAlertDialog_Builder_setView_3 = 0x00107003;
-  static final int amkUI_TAlertDialog_Builder_show_4 = 0x00107004;
+  static final int amkUI_TAlertDialog_Builder_Create_0 = 0x00108000;
+  static final int amkUI_TAlertDialog_Builder_create_1 = 0x00108001;
+  static final int amkUI_TAlertDialog_Builder_setMessage_2 = 0x00108002;
+  static final int amkUI_TAlertDialog_Builder_setTitle_3 = 0x00108003;
+  static final int amkUI_TAlertDialog_Builder_setView_4 = 0x00108004;
+  static final int amkUI_TAlertDialog_Builder_show_5 = 0x00108005;
   // ViewGroup.LayoutParams
-  static final int amkUI_TViewGroup_LayoutParams_Create_0 = 0x00108000;
+  static final int amkUI_TViewGroup_LayoutParams_Create_0 = 0x00109000;
   // View
-  static final int amkUI_TView_setLayoutParams_0 = 0x00109000;
-  static final int amkUI_TView_setVisibility_1 = 0x00109001;
+  static final int amkUI_TView_setLayoutParams_0 = 0x0010A000;
+  static final int amkUI_TView_setVisibility_1 = 0x0010A001;
   // ViewGroup
-  static final int amkUI_TViewGroup_addView_0 = 0x0010A000;
-  static final int amkUI_TViewGroup_addView_1 = 0x0010A001;
-  static final int amkUI_TViewGroup_addView_2 = 0x0010A002;
-  static final int amkUI_TViewGroup_addView_3 = 0x0010A003;
-  static final int amkUI_TViewGroup_addView_4 = 0x0010A004;
+  static final int amkUI_TViewGroup_addView_0 = 0x0010B000;
+  static final int amkUI_TViewGroup_addView_1 = 0x0010B001;
+  static final int amkUI_TViewGroup_addView_2 = 0x0010B002;
+  static final int amkUI_TViewGroup_addView_3 = 0x0010B003;
+  static final int amkUI_TViewGroup_addView_4 = 0x0010B004;
   // LinearLayout
-  static final int amkUI_TLinearLayout_Create_0 = 0x0010B000;
-  static final int amkUI_TLinearLayout_setOrientation_1 = 0x0010B001;
+  static final int amkUI_TLinearLayout_Create_0 = 0x0010C000;
+  static final int amkUI_TLinearLayout_setOrientation_1 = 0x0010C001;
   // AbsoluteLayout
-  static final int amkUI_TAbsoluteLayout_Create_0 = 0x0010C000;
+  static final int amkUI_TAbsoluteLayout_Create_0 = 0x0010D000;
   // AbsoluteLayout.LayoutParams
-  static final int amkUI_TAbsoluteLayout_LayoutParams_Create_0 = 0x0010D000;
+  static final int amkUI_TAbsoluteLayout_LayoutParams_Create_0 = 0x0010E000;
   // TextView
-  static final int amkUI_TTextView_Create_0 = 0x0010E000;
-  static final int amkUI_TTextView_setText_1 = 0x0010E001;
-  static final int amkUI_TTextView_setOnClickListener_2 = 0x0010E002;
-  static final int amkUI_TTextView_OnClickListener_Start_3 = 0x0010E003;
-  static final int amkUI_TTextView_OnClickListener_Finished_4 = 0x0010E004;
-  static final int amkUI_TTextView_setTextSize_5 = 0x0010E005;
-  static final int amkUI_TTextView_getText_6 = 0x0010E006;
+  static final int amkUI_TTextView_Create_0 = 0x0010F000;
+  static final int amkUI_TTextView_setText_1 = 0x0010F001;
+  static final int amkUI_TTextView_setOnClickListener_2 = 0x0010F002;
+  static final int amkUI_TTextView_OnClickListener_Start_3 = 0x0010F003;
+  static final int amkUI_TTextView_OnClickListener_Finished_4 = 0x0010F004;
+  static final int amkUI_TTextView_setTextSize_5 = 0x0010F005;
+  static final int amkUI_TTextView_getText_6 = 0x0010F006;
   // EditText
-  static final int amkUI_TEditText_Create_0 = 0x0010F000;
+  static final int amkUI_TEditText_Create_0 = 0x00110000;
   // Button
-  static final int amkUI_TButton_Create_0 = 0x00110000;
+  static final int amkUI_TButton_Create_0 = 0x00111000;
   // FrameLayout
   // TimePicker
-  static final int amkUI_TTimePicker_Create_0 = 0x00112000;
-  static final int amkUI_TTimePicker_getCurrentHour_1 = 0x00112001;
-  static final int amkUI_TTimePicker_setCurrentHour_2 = 0x00112002;
-  static final int amkUI_TTimePicker_getCurrentMinute_3 = 0x00112003;
-  static final int amkUI_TTimePicker_setCurrentMinute_4 = 0x00112004;
-  static final int amkUI_TTimePicker_is24HourView_5 = 0x00112005;
-  static final int amkUI_TTimePicker_setIs24HourView_6 = 0x00112006;
+  static final int amkUI_TTimePicker_Create_0 = 0x00113000;
+  static final int amkUI_TTimePicker_getCurrentHour_1 = 0x00113001;
+  static final int amkUI_TTimePicker_setCurrentHour_2 = 0x00113002;
+  static final int amkUI_TTimePicker_getCurrentMinute_3 = 0x00113003;
+  static final int amkUI_TTimePicker_setCurrentMinute_4 = 0x00113004;
+  static final int amkUI_TTimePicker_is24HourView_5 = 0x00113005;
+  static final int amkUI_TTimePicker_setIs24HourView_6 = 0x00113006;
   // ScrollView
-  static final int amkUI_TScrollView_Create_0 = 0x00113000;
+  static final int amkUI_TScrollView_Create_0 = 0x00114000;
   // CompoundButton
-  static final int amkUI_TCompoundButton_isChecked_0 = 0x00114000;
-  static final int amkUI_TCompoundButton_performClick_1 = 0x00114001;
-  static final int amkUI_TCompoundButton_setChecked_2 = 0x00114002;
-  static final int amkUI_TCompoundButton_toggle_3 = 0x00114003;
+  static final int amkUI_TCompoundButton_isChecked_0 = 0x00115000;
+  static final int amkUI_TCompoundButton_performClick_1 = 0x00115001;
+  static final int amkUI_TCompoundButton_setChecked_2 = 0x00115002;
+  static final int amkUI_TCompoundButton_toggle_3 = 0x00115003;
   // CheckBox
-  static final int amkUI_TCheckBox_Create_0 = 0x00115000;
+  static final int amkUI_TCheckBox_Create_0 = 0x00116000;
   // AdapterView
-  static final int amkUI_TAdapterView_getSelectedItemPosition_0 = 0x00116000;
+  static final int amkUI_TAdapterView_getSelectedItemPosition_0 = 0x00117000;
   // AbsSpinner
-  static final int amkUI_TAbsSpinner_getCount_0 = 0x00117000;
-  static final int amkUI_TAbsSpinner_setAdapter_1 = 0x00117001;
-  static final int amkUI_TAbsSpinner_setSelection_2 = 0x00117002;
+  static final int amkUI_TAbsSpinner_getCount_0 = 0x00118000;
+  static final int amkUI_TAbsSpinner_setAdapter_1 = 0x00118001;
+  static final int amkUI_TAbsSpinner_setSelection_2 = 0x00118002;
   // Spinner
-  static final int amkUI_TSpinner_Create_0 = 0x00118000;
+  static final int amkUI_TSpinner_Create_0 = 0x00119000;
   // Filterable
   // Adapter
   // ListAdapter
   // SpinnerAdapter
   // BaseAdapter
   // ArrayAdapter<String>
-  static final int amkUI_TArrayAdapter_String__Create_0 = 0x0011E000;
-  static final int amkUI_TArrayAdapter_String__add_1 = 0x0011E001;
-  static final int amkUI_TArrayAdapter_String__clear_2 = 0x0011E002;
-  static final int amkUI_TArrayAdapter_String__insert_3 = 0x0011E003;
-  static final int amkUI_TArrayAdapter_String__remove_4 = 0x0011E004;
+  static final int amkUI_TArrayAdapter_String__Create_0 = 0x0011F000;
+  static final int amkUI_TArrayAdapter_String__add_1 = 0x0011F001;
+  static final int amkUI_TArrayAdapter_String__clear_2 = 0x0011F002;
+  static final int amkUI_TArrayAdapter_String__insert_3 = 0x0011F003;
+  static final int amkUI_TArrayAdapter_String__remove_4 = 0x0011F004;
   // layout
 
   public boolean ProcessCommand(int Buffer)
@@ -153,13 +164,15 @@ public class AndroidAll
     ArrayAdapter<String> param_self_ArrayAdapter_String_;
     AdapterView param_self_AdapterView;
     AlertDialog.Builder param_self_AlertDialog_Builder;
+    Dialog param_self_Dialog;
+    AlertDialog param_self_AlertDialog;
     //
     // Params
     //
     ViewGroup.LayoutParams lViewGroup_LayoutParams_1, lViewGroup_LayoutParams_2, lViewGroup_LayoutParams_3;
     SpinnerAdapter lSpinnerAdapter_1;
     DisplayMetrics lDisplayMetrics_1;
-    CharSequence lCharSequence_1;
+    CharSequence lCharSequence_1, lCharSequence_2;
     String lString_1;
     View lView_1;
     int lint_1, lint_2, lint_3, lint_4;
@@ -182,6 +195,7 @@ public class AndroidAll
     case amkUI_TDisplayMetrics_Create_0:
       DebugOut("amkUI_TDisplayMetrics_Create_0");
       ViewElements.add(new DisplayMetrics());
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // field float density
@@ -302,16 +316,112 @@ public class AndroidAll
       //
       lResult_Display = param_self_WindowManager.getDefaultDisplay();
       ViewElements.add(lResult_Display);
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
+    // method void show()
+    case amkUI_TDialog_show_0:
+      DebugOut("amkUI_TDialog_show_0");
+      // Self
+      lInt = MyAndroidPipesComm.GetInt();
+      param_self_Dialog = (Dialog) ViewElements.get(lInt);
+      // params
+      //
+      param_self_Dialog.show();
+      MyAndroidPipesComm.SendResult();
+      break;
+    // callbacksetter void 	setButton(int whichButton, CharSequence text, $DialogInterface.OnClickListener listener)
+    case amkUI_TAlertDialog_setButton_0:
+      DebugOut("amkUI_TAlertDialog_setButton_0");
+      // Self
+      lInt = MyAndroidPipesComm.GetInt();
+      param_self_AlertDialog = (AlertDialog) ViewElements.get(lInt);
+      // params
+      lPascalPointer = MyAndroidPipesComm.GetInt();
+      ViewElementsTags.set(lInt, new Integer(lPascalPointer));
+
+      lInt = MyAndroidPipesComm.GetInt();
+      lint_1 = lInt;
+      lInt = MyAndroidPipesComm.GetInt();
+      lCharSequence_2 = (CharSequence) MyJavaLang.LangElements.get(lInt);
+      // Run the code
+      param_self_AlertDialog.setButton(lint_1, lCharSequence_2,       new DialogInterface.OnClickListener()
+      {
+        public void onClick(DialogInterface dialog, int which)
+        {
+          // Perform action
+          DebugOut("START DialogInterface.OnClickListener");
+          MyAndroidPipesComm.SendMessage(AndroidPipesComm.amkUICommand, amkUI_TAlertDialog_Button_Start_1);
+          Integer lTag = (Integer) ViewElementsTags.get(ViewElements.indexOf(dialog));
+          MyAndroidPipesComm.SendInt(lTag.intValue());
+          MyAndroidPipesComm.WaitForPascalMessage(AndroidPipesComm.amkUICommand, amkUI_TAlertDialog_Button_Finished_2);
+          DebugOut("END DialogInterface.OnClickListener");
+        }
+      }
+);
+      MyAndroidPipesComm.SendResult();
+      break;
+    // method void setMessage(CharSequence message)
+    case amkUI_TAlertDialog_setMessage_3:
+      DebugOut("amkUI_TAlertDialog_setMessage_3");
+      // Self
+      lInt = MyAndroidPipesComm.GetInt();
+      param_self_AlertDialog = (AlertDialog) ViewElements.get(lInt);
+      // params
+      lInt = MyAndroidPipesComm.GetInt();
+      lCharSequence_1 = (CharSequence) MyJavaLang.LangElements.get(lInt);
+      //
+      param_self_AlertDialog.setMessage(lCharSequence_1);
+      MyAndroidPipesComm.SendResult();
+      break;
+    // method void setTitle(CharSequence title)
+    case amkUI_TAlertDialog_setTitle_4:
+      DebugOut("amkUI_TAlertDialog_setTitle_4");
+      // Self
+      lInt = MyAndroidPipesComm.GetInt();
+      param_self_AlertDialog = (AlertDialog) ViewElements.get(lInt);
+      // params
+      lInt = MyAndroidPipesComm.GetInt();
+      lCharSequence_1 = (CharSequence) MyJavaLang.LangElements.get(lInt);
+      //
+      param_self_AlertDialog.setTitle(lCharSequence_1);
+      MyAndroidPipesComm.SendResult();
+      break;
+    // method void setView(View view)
+    case amkUI_TAlertDialog_setView_5:
+      DebugOut("amkUI_TAlertDialog_setView_5");
+      // Self
+      lInt = MyAndroidPipesComm.GetInt();
+      param_self_AlertDialog = (AlertDialog) ViewElements.get(lInt);
+      // params
+      lInt = MyAndroidPipesComm.GetInt();
+      lView_1 = (View) ViewElements.get(lInt);
+      //
+      param_self_AlertDialog.setView(lView_1);
+      MyAndroidPipesComm.SendResult();
+      break;
     case amkUI_TAlertDialog_Builder_Create_0:
       DebugOut("amkUI_TAlertDialog_Builder_Create_0");
       ViewElements.add(new AlertDialog.Builder(activity));
+      ViewElementsTags.add(null);
+      MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
+      break;
+    // method AlertDialog create ()
+    case amkUI_TAlertDialog_Builder_create_1:
+      DebugOut("amkUI_TAlertDialog_Builder_create_1");
+      // Self
+      lInt = MyAndroidPipesComm.GetInt();
+      param_self_AlertDialog_Builder = (AlertDialog.Builder) ViewElements.get(lInt);
+      // params
+      //
+      lResult_AlertDialog = param_self_AlertDialog_Builder.create();
+      ViewElements.add(lResult_AlertDialog);
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method AlertDialog.Builder setMessage (CharSequence message)
-    case amkUI_TAlertDialog_Builder_setMessage_1:
-      DebugOut("amkUI_TAlertDialog_Builder_setMessage_1");
+    case amkUI_TAlertDialog_Builder_setMessage_2:
+      DebugOut("amkUI_TAlertDialog_Builder_setMessage_2");
       // Self
       lInt = MyAndroidPipesComm.GetInt();
       param_self_AlertDialog_Builder = (AlertDialog.Builder) ViewElements.get(lInt);
@@ -321,11 +431,12 @@ public class AndroidAll
       //
       lResult_AlertDialog_Builder = param_self_AlertDialog_Builder.setMessage(lCharSequence_1);
       ViewElements.add(lResult_AlertDialog_Builder);
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method AlertDialog.Builder setTitle (CharSequence title)
-    case amkUI_TAlertDialog_Builder_setTitle_2:
-      DebugOut("amkUI_TAlertDialog_Builder_setTitle_2");
+    case amkUI_TAlertDialog_Builder_setTitle_3:
+      DebugOut("amkUI_TAlertDialog_Builder_setTitle_3");
       // Self
       lInt = MyAndroidPipesComm.GetInt();
       param_self_AlertDialog_Builder = (AlertDialog.Builder) ViewElements.get(lInt);
@@ -335,11 +446,12 @@ public class AndroidAll
       //
       lResult_AlertDialog_Builder = param_self_AlertDialog_Builder.setTitle(lCharSequence_1);
       ViewElements.add(lResult_AlertDialog_Builder);
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method AlertDialog.Builder setView (View view)
-    case amkUI_TAlertDialog_Builder_setView_3:
-      DebugOut("amkUI_TAlertDialog_Builder_setView_3");
+    case amkUI_TAlertDialog_Builder_setView_4:
+      DebugOut("amkUI_TAlertDialog_Builder_setView_4");
       // Self
       lInt = MyAndroidPipesComm.GetInt();
       param_self_AlertDialog_Builder = (AlertDialog.Builder) ViewElements.get(lInt);
@@ -349,11 +461,12 @@ public class AndroidAll
       //
       lResult_AlertDialog_Builder = param_self_AlertDialog_Builder.setView(lView_1);
       ViewElements.add(lResult_AlertDialog_Builder);
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method AlertDialog show ()
-    case amkUI_TAlertDialog_Builder_show_4:
-      DebugOut("amkUI_TAlertDialog_Builder_show_4");
+    case amkUI_TAlertDialog_Builder_show_5:
+      DebugOut("amkUI_TAlertDialog_Builder_show_5");
       // Self
       lInt = MyAndroidPipesComm.GetInt();
       param_self_AlertDialog_Builder = (AlertDialog.Builder) ViewElements.get(lInt);
@@ -361,6 +474,7 @@ public class AndroidAll
       //
       lResult_AlertDialog = param_self_AlertDialog_Builder.show();
       ViewElements.add(lResult_AlertDialog);
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     case amkUI_TViewGroup_LayoutParams_Create_0:
@@ -368,6 +482,7 @@ public class AndroidAll
       lint_1 = MyAndroidPipesComm.GetInt();
       lint_2 = MyAndroidPipesComm.GetInt();
       ViewElements.add(new ViewGroup.LayoutParams(lint_1, lint_2));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method void setLayoutParams(ViewGroup.LayoutParams params);
@@ -476,6 +591,7 @@ public class AndroidAll
     case amkUI_TLinearLayout_Create_0:
       DebugOut("amkUI_TLinearLayout_Create_0");
       ViewElements.add(new LinearLayout(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method void setOrientation(int orientation);
@@ -494,6 +610,7 @@ public class AndroidAll
     case amkUI_TAbsoluteLayout_Create_0:
       DebugOut("amkUI_TAbsoluteLayout_Create_0");
       ViewElements.add(new AbsoluteLayout(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     case amkUI_TAbsoluteLayout_LayoutParams_Create_0:
@@ -503,11 +620,13 @@ public class AndroidAll
       lint_3 = MyAndroidPipesComm.GetInt();
       lint_4 = MyAndroidPipesComm.GetInt();
       ViewElements.add(new AbsoluteLayout.LayoutParams(lint_1, lint_2, lint_3, lint_4));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     case amkUI_TTextView_Create_0:
       DebugOut("amkUI_TTextView_Create_0");
       ViewElements.add(new TextView(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method void setText(CharSequence AText); virtual;
@@ -523,30 +642,31 @@ public class AndroidAll
       param_self_TextView.setText(lCharSequence_1);
       MyAndroidPipesComm.SendResult();
       break;
-    // callbacksettercaller setOnClickListener callOnClickListener OnClickListener = procedure (v: TView) of object;
+    // callbacksetter void setOnClickListener($View.OnClickListener l)
     case amkUI_TTextView_setOnClickListener_2:
       DebugOut("amkUI_TTextView_setOnClickListener_2");
       // Self
       lInt = MyAndroidPipesComm.GetInt();
       param_self_TextView = (TextView) ViewElements.get(lInt);
+      // params
       lPascalPointer = MyAndroidPipesComm.GetInt();
-      param_self_TextView.setTag(Integer.valueOf(lPascalPointer));
+      ViewElementsTags.set(lInt, new Integer(lPascalPointer));
 
       // Run the code
-      param_self_TextView.setOnClickListener(
-      new View.OnClickListener()
+      param_self_TextView.setOnClickListener(      new View.OnClickListener()
       {
         public void onClick(View v)
         {
           // Perform action
-          DebugOut("START TextView OnClickListener");
+          DebugOut("START View.OnClickListener");
           MyAndroidPipesComm.SendMessage(AndroidPipesComm.amkUICommand, amkUI_TTextView_OnClickListener_Start_3);
-          Integer lTag = (Integer) v.getTag();
+          Integer lTag = (Integer) ViewElementsTags.get(ViewElements.indexOf(v));
           MyAndroidPipesComm.SendInt(lTag.intValue());
           MyAndroidPipesComm.WaitForPascalMessage(AndroidPipesComm.amkUICommand, amkUI_TTextView_OnClickListener_Finished_4);
-          DebugOut("END TextView OnClickListener");
+          DebugOut("END View.OnClickListener");
         }
-      });
+      }
+);
       MyAndroidPipesComm.SendResult();
       break;
     // method void setTextSize(int unit_; float size);
@@ -578,16 +698,19 @@ public class AndroidAll
     case amkUI_TEditText_Create_0:
       DebugOut("amkUI_TEditText_Create_0");
       ViewElements.add(new EditText(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     case amkUI_TButton_Create_0:
       DebugOut("amkUI_TButton_Create_0");
       ViewElements.add(new Button(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     case amkUI_TTimePicker_Create_0:
       DebugOut("amkUI_TTimePicker_Create_0");
       ViewElements.add(new TimePicker(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method int getCurrentHour();
@@ -665,6 +788,7 @@ public class AndroidAll
     case amkUI_TScrollView_Create_0:
       DebugOut("amkUI_TScrollView_Create_0");
       ViewElements.add(new ScrollView(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method boolean 	isChecked() 
@@ -716,6 +840,7 @@ public class AndroidAll
     case amkUI_TCheckBox_Create_0:
       DebugOut("amkUI_TCheckBox_Create_0");
       ViewElements.add(new CheckBox(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method int getSelectedItemPosition()
@@ -769,12 +894,14 @@ public class AndroidAll
     case amkUI_TSpinner_Create_0:
       DebugOut("amkUI_TSpinner_Create_0");
       ViewElements.add(new Spinner(activity));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     case amkUI_TArrayAdapter_String__Create_0:
       DebugOut("amkUI_TArrayAdapter_String__Create_0");
       lint_1 = MyAndroidPipesComm.GetInt();
       ViewElements.add(new ArrayAdapter<String>(activity, lint_1));
+      ViewElementsTags.add(null);
       MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);
       break;
     // method void add(String aobject)