Bug 348784 - "Argument not valid" exception when locking project facet using the Project Facets Dialog after it has been opened previously
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/DetailsPanel.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/DetailsPanel.java
index 0de80ee..2446060 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/DetailsPanel.java
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/DetailsPanel.java
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (c) 2010 Oracle
+ * Copyright (c) 2010, 2011 Oracle and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *    Konstantin Komissarchik - initial implementation and ongoing maintenance
+ *    Roberto Sanchez Herrera - [348784] Remove IFacetedProjectListener on dispose
  ******************************************************************************/
 
 package org.eclipse.wst.common.project.facet.ui.internal;
@@ -23,6 +24,8 @@
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
@@ -74,16 +77,25 @@
             }
         );
         
-        this.facetsSelectionPanel.getFacetedProjectWorkingCopy().addListener
-        (
-            new IFacetedProjectListener()
+        final IFacetedProjectListener facetedProjectListener = new IFacetedProjectListener()
+        {
+            public void handleEvent( final IFacetedProjectEvent event ) 
             {
-                public void handleEvent( final IFacetedProjectEvent event ) 
+                refresh();
+            }
+        };
+        
+        this.facetsSelectionPanel.getFacetedProjectWorkingCopy().addListener( facetedProjectListener, IFacetedProjectEvent.Type.FIXED_FACETS_CHANGED );
+        
+        addDisposeListener
+        (
+            new DisposeListener()
+            {
+                public void widgetDisposed( final DisposeEvent e )
                 {
-                    refresh();
-                }
-            }, 
-            IFacetedProjectEvent.Type.FIXED_FACETS_CHANGED
+                	facetsSelectionPanel.getFacetedProjectWorkingCopy().removeListener( facetedProjectListener );
+                }				
+            }
         );
         
         refresh();