private Exception ExecuteState (IStateHandler state, ref bool readysync)
			{
				Exception lasterror = null;
				try {
					if (state.PossibleToTimeout) {
						_app.Context.BeginTimeoutPossible ();
					}

					try {
						state.Execute ();	
					} finally {
						if (state.PossibleToTimeout) {
							_app.Context.EndTimeoutPossible ();
						}
					}
#if TARGET_J2EE		//Catch case of aborting by timeout
					if (_app.Context.TimedOut) {
						_app.CompleteRequest ();
						return null;
					}
#endif
					if (state.PossibleToTimeout) {
						// Async Execute
						_app.Context.TryWaitForTimeout ();
					}

					readysync = state.CompletedSynchronously;
#if TARGET_J2EE		// Finishing execution for End without error
				}catch ([email protected]){
					lasterror = null;
					_app.CompleteRequest ();
#endif
				} catch (ThreadAbortException obj) {
					object o = obj.ExceptionState;
					Type type = (o != null) ? o.GetType () : null;
					if (type == typeof (StepTimeout)) {
						Thread.ResetAbort ();
						lasterror = new HttpException ("The request timed out.");
						_app.CompleteRequest ();
					} else if (type == typeof (StepCompleteRequest)) {
						Thread.ResetAbort ();
						_app.CompleteRequest ();
					}
				} catch (Exception obj) {
#if TARGET_J2EE
					lasterror = HandleJavaException(obj);
#else
					lasterror = obj;
#endif
				}

				return lasterror;
			}