bool CGUIDialogPVRChannelManager::OnClickButtonNewChannel(CGUIMessage &message)
{
  std::vector<long> clients;

  CGUIDialogSelect* pDlgSelect = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
  if (!pDlgSelect)
    return false;

  pDlgSelect->SetHeading(19213); // Select Client
  pDlgSelect->Add(g_localizeStrings.Get(19209));
  clients.push_back(PVR_VIRTUAL_CLIENT_ID);

  PVR_CLIENTMAP clientMap;
  if (g_PVRClients->GetConnectedClients(clientMap) > 0)
  {
    PVR_CLIENTMAP_ITR itr;
    for (itr = clientMap.begin() ; itr != clientMap.end(); itr++)
    {
      clients.push_back((*itr).first);
      pDlgSelect->Add((*itr).second->Name());
    }
  }
  pDlgSelect->DoModal();

  int selection = pDlgSelect->GetSelectedLabel();
  if (selection >= 0 && selection <= (int) clients.size())
  {
    int clientID = clients[selection];
    if (clientID == PVR_VIRTUAL_CLIENT_ID)
    {
      CStdString strURL = "";
      if (CGUIKeyboardFactory::ShowAndGetInput(strURL, g_localizeStrings.Get(19214), false))
      {
        if (!strURL.empty())
        {
          CPVRChannel *newchannel = new CPVRChannel(m_bIsRadio);
          newchannel->SetChannelName(g_localizeStrings.Get(19204));
          newchannel->SetEPGEnabled(false);
          newchannel->SetVirtual(true);
          newchannel->SetStreamURL(strURL);
          newchannel->SetClientID(PVR_VIRTUAL_CLIENT_ID);
          if (g_PVRChannelGroups->CreateChannel(*newchannel))
            g_PVRChannelGroups->GetGroupAll(m_bIsRadio)->Persist();

          CFileItemPtr channel(new CFileItem(*newchannel));
          if (channel)
          {
            channel->SetProperty("ActiveChannel", true);
            channel->SetProperty("Name", g_localizeStrings.Get(19204));
            channel->SetProperty("UseEPG", false);
            channel->SetProperty("Icon", newchannel->IconPath());
            channel->SetProperty("EPGSource", (int)0);
            channel->SetProperty("ClientName", g_localizeStrings.Get(19209));
            channel->SetProperty("ParentalLocked", false);

            m_channelItems->AddFront(channel, m_iSelected);
            m_viewControl.SetItems(*m_channelItems);
            Renumber();
          }
        }
      }
    }
    else
    {
      CGUIDialogOK::ShowAndGetInput(19033,19038,0,0);
    }
  }
  return true;
}