public void register(IGUIScreenLayout listener)
    {
        bool inserted = false;

        for (int i = indexFirstEmpty, c = listeners.Length; i < c; ++i)
        {
            if (listeners[i] == null)
            {
                listeners[i]    = listener;
                inserted        = true;
                indexFirstEmpty = i + 1;                 // I guess next cell is empty
                break;
            }
        }
        if (!inserted)
        {
            Debug.LogError("listeners array out of space. Increment size one unit more.");
        }
    }
    public void remove(IGUIScreenLayout listener)
    {
        int id = listener.GetHashCode();

        for (int i = 0, c = listeners.Length; i < c; ++i)
        {
            if (listeners[i] == null)
            {
                continue;
            }
            else if (id == listeners[i].GetHashCode())
            {
                listeners[i] = null;
                if (i < indexFirstEmpty)
                {
                    indexFirstEmpty = i;
                }
                break;
            }
        }
    }