/// <summary>
        /// Indexer looks up the first IOutput with the specified name or path.<br/>
        /// If several IOutput objects in the list are using the same name, only the first matching IOutput will be returned.<br/>
        /// Instead of a name and path consisting of {OutputControllerName}\\{OutputName} can be supplied. If no item matches the path, null will be returned.
        /// </summary>
        /// <param name="Name">Name of the IOutput to look up.</param>
        /// <returns>IOutput object if a match is found, null otherwise.</returns>
        public IOutput this[string Name]
        {
            get
            {
                string OutputName = "";

                string[] N = Name.Replace("/", "\\").Split('\\');
                if (N.Length == 2)
                {
                    //it is a path
                    if (OutputControllers.Contains(N[0]))
                    {
                        OutputName = N[1];
                    }
                }
                else
                {
                    //just a simple name
                    OutputName = Name;
                }


                string[] NameParts = OutputName.Split('.');
                if (NameParts.Length == 2)
                {
                    int Nr = 0;
                    if (this.OutputControllers.Contains(NameParts[0]) && int.TryParse(NameParts[1], out Nr))
                    {
                        IOutputController OC = this.OutputControllers[NameParts[0]];

                        IOutput O = OC.Outputs.FirstOrDefault(OP => OP.Number == Nr);
                        if (O != null)
                        {
                            return(O);
                        }
                    }
                }


                foreach (IOutputController OC in this.OutputControllers)
                {
                    if (OC.Outputs.Contains(OutputName))
                    {
                        return((IOutput)OC.Outputs[OutputName]);
                    }
                }
                return(null);
            }
        }