@Override
 public void setTabs(CourseFinderTab... tabs) {
   iTabs = tabs;
   if (iTabs.length == 1) {
     if (iTabs[0].asWidget() instanceof VerticalPanel) {
       VerticalPanel vp = (VerticalPanel) iTabs[0].asWidget();
       while (vp.getWidgetCount() > 0) {
         Widget w = vp.getWidget(0);
         vp.remove(w);
         iDialogPanel.add(w);
       }
     } else {
       iDialogPanel.add(iTabs[0].asWidget());
     }
   } else {
     iTabPanel = new UniTimeTabPanel();
     int tabIndex = 0;
     for (CourseFinderTab tab : iTabs) {
       iTabPanel.add(tab.asWidget(), tab.getName(), true);
       Character ch = UniTimeHeaderPanel.guessAccessKey(tab.getName());
       if (ch != null) iTabAccessKeys.put(ch, tabIndex);
       tabIndex++;
     }
     iTabPanel.selectTab(0);
     iDialogPanel.add(iTabPanel);
   }
   for (final CourseFinderTab tab : iTabs) {
     tab.addValueChangeHandler(
         new ValueChangeHandler<String>() {
           @Override
           public void onValueChange(ValueChangeEvent<String> event) {
             if (event.getSource().equals(tab)) selectTab(tab);
             else tab.setValue(event.getValue());
             iFilter.setValue(event.getValue());
           }
         });
     tab.addSelectionHandler(
         new SelectionHandler<String>() {
           @Override
           public void onSelection(SelectionEvent<String> event) {
             iFilter.setValue(event.getSelectedItem());
             hide();
             SelectionEvent.fire(CourseFinderDialog.this, getValue());
           }
         });
     tab.addResponseHandler(
         new ResponseHandler() {
           @Override
           public void onResponse(ResponseEvent event) {
             if (event.isValid()) {
               CourseFinderTab selected = getSelectedTab();
               if (selected != null && selected.isCourseSelection() && selected.getValue() != null)
                 return;
               selectTab(tab);
             }
           }
         });
   }
 }