/// <summary>
        /// Add a UPnPDevice to this device
        /// </summary>
        /// <param name="device">Device</param>
        public void AddDevice(UPnPDevice device)
        {
            device.ExpirationTimeout = this.ExpirationTimeout;
            device.parent = this;
            device.IsRoot = false;
            SetInterfaceToHost(device);

            UPnPDevice[] temp = new UPnPDevice[EmbeddedDevices.Length + 1];
            Array.Copy(EmbeddedDevices, 0, temp, 0, EmbeddedDevices.Length);
            temp[EmbeddedDevices.Length] = device;

            Array.Sort(temp, new UPnPDeviceComparer_Type());

            EmbeddedDevices = temp;

            // Special Processing
            if (ControlPointOnly == false)
            {
                device.AddSubVirtualDirectory(device.UniqueDeviceName);
                this.AddVirtualDirectory(device.UniqueDeviceName, new UPnPDevice.VirtualDirectoryHandler(device.HandleParent_Header), new UPnPDevice.VirtualDirectoryHandler(device.HandleParent));
            }
            else
            {
                this.AddVirtualDirectory(device.UniqueDeviceName, null, new UPnPDevice.VirtualDirectoryHandler(device.EventProcesser));
                ProcessDevice_EVENTCALLBACK(this);
            }
        }