} // end of HandleServiceRequestSpecialTreatmentModel

        #endregion

        #region BookImmediateServiceRequestSpecialTreatmentModel

        /// <summary>
        /// Standard method, to be used when special service does nor require special booking
        /// and can be "booked" immidiately. An availability delegate is sent back to
        /// the requesting control unit
        /// </summary>
        /// <param name="del">The original requests</param>
        /// <param name="controlUnit">The control unit that handles the service request</param>
        /// <param name="time">Time the request is filed</param>
        /// <param name="simEngine">SimEngine responsible for simulation execution</param>
        /// <returns>True if request has been handled</returns>
        public static bool BookImmediateServiceRequestSpecialTreatmentModel(IDelegate del,
                                                                            ControlUnit controlUnit,
                                                                            DateTime time,
                                                                            ISimulationEngine simEngine)
        {
            RequestSpecialFacilitiyService serviceRequest = (RequestSpecialFacilitiyService)del;

            ControlUnitSpecialServiceModel specialFacilityControl = (ControlUnitSpecialServiceModel)controlUnit;

            Slot slot = specialFacilityControl.WaitingListSchedule.GetEarliestSlotTime(time,
                                                                                       time,
                                                                                       serviceRequest.Patient,
                                                                                       new Admission(serviceRequest.Patient, serviceRequest.SpecialFacilityAdmissionTypes));

            DelegateAvailabilitiesForRequest availDel = new DelegateAvailabilitiesForRequest(specialFacilityControl, serviceRequest, SpecialServiceBookingTypes.Immediate, Helpers <Slot> .ToList(slot));

            controlUnit.SendDelegateTo(del.OriginControlUnit, availDel);

            return(true);
        } // end of
        } // end of

        #endregion

        #region HandleImmediateSpecialServiceRequest

        /// <summary>
        /// Standard method to handle a "immediate" booking of a special service control.
        /// Sends the patient on a move from the requesting control to the special service control.
        /// </summary>
        /// <param name="del">The availability delegate</param>
        /// <param name="controlUnit">The control unit that filed the original request</param>
        /// <param name="time">Time the request is filed</param>
        /// <param name="simEngine">SimEngine responsible for simulation execution</param>
        /// <returns>True if request has been handled</returns>
        public static bool HandleImmediateSpecialServiceRequest(IDelegate del, ControlUnit controlUnit, DateTime time, ISimulationEngine simEngine)
        {
            #region ServiceRequests

            DelegateAvailabilitiesForRequest availability = (DelegateAvailabilitiesForRequest)del;

            if (availability.BookingType != SpecialServiceBookingTypes.Immediate)
            {
                throw new InvalidOperationException("Only immediate bookings handled");
            }

            if (availability.OriginalServiceRequest is RequestSpecialFacilitiyService)
            {
                RequestSpecialFacilitiyService req = (RequestSpecialFacilitiyService)availability.OriginalServiceRequest;

                ControlUnitManagement jointControl = (ControlUnitManagement)controlUnit.ParentControlUnit.FindSmallestJointControl(availability.ServiceControl);

                ActivityMove movePatientToSpecialTreatment
                    = new ActivityMove(jointControl,
                                       req.Patient,
                                       controlUnit,
                                       availability.ServiceControl,
                                       req,
                                       jointControl.InputData.DurationMove(req.Patient,
                                                                           controlUnit,
                                                                           availability.ServiceControl));

                req.Patient.StopWaitingActivity(time, simEngine);
                movePatientToSpecialTreatment.StartEvent.Trigger(time, simEngine);

                return(true);
            } // end if

            #endregion

            return(false);
        } // end of HandleAvailabilitiesSpecialServiceRequest