diff --git a/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSClassConfigWidget.java b/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSClassConfigWidget.java
index ab02c68..5a6d7f8 100644
--- a/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSClassConfigWidget.java
+++ b/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSClassConfigWidget.java
@@ -25,6 +25,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
@@ -99,6 +100,9 @@
         useSEIButton.setSelection(useSEI);
         selectSEIButton.setSelection(useSEI);
         selectSEIButton.setEnabled(useSEI);
+        if (!useSEI) {
+            selectSEICombo.deselectAll();
+        }
         enableSelectSEIControls(useSEI);
         extractSEIButton.setSelection(false);
         extractSEIButton.setEnabled(useSEI);
@@ -106,6 +110,7 @@
         seiInterfaceNameText.setText("");
         seiMembersToExtractTableViewer.setAllChecked(false);
         NUMBER_OF_CHECKED_METHODS = 0;
+        validateSEISelection();
     }
 
     @Override
@@ -144,12 +149,6 @@
         gridData.horizontalSpan = 3;
         useSEIButton.setLayoutData(gridData);
         
-//        Label infoLabel = Java2WSWidgetFactory.createInformationLabel(composite, startingPointType);
-//        gridData = new GridData(SWT.FILL, SWT.CENTER, false, false);
-//        gridData.horizontalSpan = 3;
-//        gridData.widthHint = 100;
-//        infoLabel.setLayoutData(gridData);
-
         Label paddingLabel = Java2WSWidgetFactory.createPaddingLabel(composite);
         gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
         gridData.horizontalSpan = 3;
@@ -163,13 +162,12 @@
                 enableSelectSEIControls(selectSEIButton.getSelection());
                 enableExtractSEIControls(!selectSEIButton.getSelection());
                 if (selectSEIButton.getSelection() && selectSEICombo.getText().trim().length() > 0) {
-                    validateSEISelection();
+                    updateSEISelectionStatus();
+                    statusListener.handleEvent(null);
                 }
-                updateSEISelectionStatus();
-                statusListener.handleEvent(null);
             }
-
         });
+        
         selectSEIButton.setSelection(false);
         selectSEIButton.setEnabled(false);
         gridData = new GridData(SWT.FILL, SWT.FILL, false, false);
@@ -179,7 +177,7 @@
         selectSEICombo.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent event) {
-                validateSEISelection();
+                updateSEISelectionStatus();
                 statusListener.handleEvent(null);
             }
         });
@@ -187,7 +185,7 @@
         selectSEICombo.addModifyListener(new ModifyListener() {
 
             public void modifyText(ModifyEvent event) {
-                validateSEISelection();
+                updateSEISelectionStatus();
                 statusListener.handleEvent(null);
             }
         });
@@ -209,7 +207,7 @@
                 ElementTreeSelectionDialog selectionDialog = Java2WSWidgetFactory.createElementTreeSelectionDialog(
                         composite.getShell(), CXFCreationUIMessages.JAVA2WS_SELECT_SEI_DIALOG_TITLE,
                         CXFCreationUIMessages.JAVA2WS_SELECT_SEI_DIALOG_DESCRIPTION,
-                        JDTUtils.getJavaProject(model.getProjectName()), true);
+                        JDTUtils.getJavaProject(model.getProjectName()), IJavaSearchConstants.INTERFACE);
 
                 int returnCode = selectionDialog.open();
                 if (returnCode == Window.OK) {
@@ -380,14 +378,21 @@
         deselectAllButton.setEnabled(false);
 
         if (model.isUseServiceEndpointInterface()) {
-            selectSEICombo.add(model.getServiceEndpointInterfaceName());
+            if (selectSEICombo.indexOf(model.getServiceEndpointInterfaceName()) == -1) {
+                selectSEICombo.add(model.getServiceEndpointInterfaceName());
+            }
             selectSEICombo.setText(model.getServiceEndpointInterfaceName());
+            model.setFullyQualifiedJavaInterfaceName(model.getServiceEndpointInterfaceName());
         }
 
         return this;
     }
     
     private void validateSEISelection() {
+        if (!useSEIButton.getSelection()) {
+            SEI_SELECTION_STATUS = Status.OK_STATUS;
+            return;
+        }
         IType seiType = JDTUtils.getType(model.getProjectName(), selectSEICombo.getText());
         if (seiType != null) {
             try {
@@ -487,7 +492,7 @@
                 SEI_SELECTION_STATUS = new Status(IStatus.ERROR, CXFCreationUIPlugin.PLUGIN_ID,
                         CXFCreationUIMessages.JAVA2WS_SELECT_SEI_MESSAGE);
             } else if (selectSEIButton.getSelection() && selectSEICombo.getText().length() > 0) {
-                SEI_SELECTION_STATUS = Status.OK_STATUS;
+                validateSEISelection();
             }
 
             if (extractSEIButton.getSelection() && seiInterfaceNameText.getText().trim().length() == 0) {
diff --git a/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSInterfaceConfigWidget.java b/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSInterfaceConfigWidget.java
index d8fcebd..7654d1e 100644
--- a/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSInterfaceConfigWidget.java
+++ b/bundles/org.eclipse.jst.ws.cxf.creation.ui/src/org/eclipse/jst/ws/internal/cxf/creation/ui/widgets/Java2WSInterfaceConfigWidget.java
@@ -20,6 +20,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jst.ws.internal.cxf.core.model.Java2WSDataModel;
 import org.eclipse.jst.ws.internal.cxf.creation.ui.CXFCreationUIMessages;
@@ -105,7 +106,7 @@
                 ElementTreeSelectionDialog selectionDialog = Java2WSWidgetFactory.createElementTreeSelectionDialog(
                         composite.getShell(), CXFCreationUIMessages.JAVA2WS_SELECT_IMPL_DIALOG_TITLE,
                         CXFCreationUIMessages.JAVA2WS_SELECT_IMPL_DIALOG_DESCRIPTION,
-                        JDTUtils.getJavaProject(model.getProjectName()), false);
+                        JDTUtils.getJavaProject(model.getProjectName()), IJavaSearchConstants.CLASS);
 
                 int returnCode = selectionDialog.open();
                 if (returnCode == Window.OK) {
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/viewers/JavaViewerFilter.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/viewers/JavaViewerFilter.java
index 8bf6f91..8440008 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/viewers/JavaViewerFilter.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/viewers/JavaViewerFilter.java
@@ -16,6 +16,7 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jst.ws.internal.cxf.ui.CXFUIPlugin;
@@ -27,18 +28,21 @@
 public class JavaViewerFilter extends ViewerFilter {
 
     private IJavaProject javaProject;
-    private  boolean filterClasses;
+    private int elementKinds;
     
     /**
-     * Constructs an instance of <code>JavaViewerFilter</code> given a <code>IJavaProject</code> to filter and a 
-     * boolean value that controls what to filter in the project.
+     * Constructs an instance of <code>JavaViewerFilter</code> given a <code>IJavaProject</code> and an
+     * <code>IJavaSearchConstants</code> element kind to search for. All other elements are filtered.
      * 
      * @param javaProject the java project to filter
-     * @param filterClasses true to filter all classes. false to filter all interfaces 
+     * @param elementKinds a flag defining nature of searched elements; the only valid values are: 
+     *  <code>IJavaSearchConstants.CLASS</code>
+     *  <code>IJavaSearchConstants.INTERFACE</code>
+     *  <code>IJavaSearchConstants.CLASS_AND_INTERFACE</code>
      */
-    public JavaViewerFilter(IJavaProject javaProject, boolean filterClasses) {
+    public JavaViewerFilter(IJavaProject javaProject, int elementKinds) {
         this.javaProject = javaProject;
-        this.filterClasses = filterClasses;
+        this.elementKinds = elementKinds;
         
     }
     
@@ -59,10 +63,13 @@
             if (element instanceof ICompilationUnit) {
                 ICompilationUnit compilationUnit = (ICompilationUnit) element;
                 IType type = compilationUnit.findPrimaryType();
-                if (filterClasses) {
-                    return type.isInterface() && !type.isAnnotation();
-                } else {
+                switch (elementKinds) {
+                case IJavaSearchConstants.CLASS:
                     return type.isClass();
+                case IJavaSearchConstants.INTERFACE:
+                    return type.isInterface() && !type.isAnnotation();
+                case IJavaSearchConstants.CLASS_AND_INTERFACE:
+                    return type.isClass() || (type.isInterface() && !type.isAnnotation());
                 }
 
             }
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/Java2WSWidgetFactory.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/Java2WSWidgetFactory.java
index 77af3dd..b285248 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/Java2WSWidgetFactory.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/Java2WSWidgetFactory.java
@@ -273,7 +273,7 @@
             }
         });
 
-        seiCombo.select(-1);
+        seiCombo.deselectAll();
         return seiCombo;
     }
 
@@ -365,7 +365,7 @@
             }
         });
 
-        selectImplementationCombo.select(-1);
+        selectImplementationCombo.deselectAll();
         return selectImplementationCombo;
     }
     
@@ -377,11 +377,15 @@
      * @param title the dialog title
      * @param message the dialog message
      * @param javaProject the java project that is filtered
-     * @param filterClasses true to filter all classes, false to filter all interfaces
-     * @return
+     * @param elementKinds a flag defining nature of searched elements; the only valid values are: 
+     *  <code>IJavaSearchConstants.CLASS</code>
+     *  <code>IJavaSearchConstants.INTERFACE</code>
+     *  <code>IJavaSearchConstants.CLASS_AND_INTERFACE</code>
+     *  
+     * @return the element tree selection dialog
      */
     public static ElementTreeSelectionDialog createElementTreeSelectionDialog(Shell parent, String title, 
-            String message, IJavaProject javaProject, boolean filterClasses) {
+            String message, IJavaProject javaProject, int elementKinds) {
         ElementTreeSelectionDialog selectionDialog = new ElementTreeSelectionDialog(parent,
                 new JavaElementLabelProvider(), new StandardJavaElementContentProvider());
         selectionDialog.setTitle(title);
@@ -389,7 +393,7 @@
         selectionDialog.setAllowMultiple(false);
         selectionDialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
 
-        selectionDialog.addFilter(new JavaViewerFilter(javaProject, filterClasses));
+        selectionDialog.addFilter(new JavaViewerFilter(javaProject, elementKinds));
 
         selectionDialog.setValidator(new ISelectionStatusValidator() {
 
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/WSDL2JavaWidgetFactory.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/WSDL2JavaWidgetFactory.java
index dfb1cc5..fab1807 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/WSDL2JavaWidgetFactory.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/widgets/WSDL2JavaWidgetFactory.java
@@ -503,7 +503,7 @@
                     QName qName = service.getQName();
                     serviceNameCombo.add(qName.getLocalPart());
                 }
-                serviceNameCombo.select(-1);
+                serviceNameCombo.deselectAll();
             }
         }
     }
