Index: applications/editors/josm/plugins/smed/src/smed/Smed.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/Smed.java	(revision 23324)
+++ applications/editors/josm/plugins/smed/src/smed/Smed.java	(revision 23382)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.plugins.PluginInformation;
 
+import smed.io.SmedFile;
 import smed.plug.SmedPluginApp;
 import smed.plug.ifc.SmedPluggable;
@@ -47,4 +48,5 @@
 
         File[] jars = splugDir.listFiles(new JARFileFilter());
+        SmedFile.init();
 
         // build smed_ifc.jar from smed.jar
@@ -80,4 +82,6 @@
                         inp.close();
                         pfos.close();
+                        
+                        SmedFile.createMF(eName);
                     }
                 }
@@ -130,5 +134,5 @@
             ex.printStackTrace();
         }
-
+        
         SmedTab = new SmedTabAction();
         item = Main.main.menu.toolsMenu.add(SmedTab);
Index: applications/editors/josm/plugins/smed/src/smed/SmedFile.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/SmedFile.java	(revision 23324)
+++ 	(revision )
@@ -1,35 +1,0 @@
-package smed;
-
-import java.io.File;
-
-public class SmedFile extends File{
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    public SmedFile(String pathname) {
-        super(pathname);
-    }
-
-    public boolean needUpdate(File[] jars, String name) {
-        
-        for(File j : jars) {
-            String jName = j.getName();
-            
-            if(jName.length() > 15) { // < 16 isn'nt a SmedFile
-
-                if (jName.substring(16).equals(name.substring(16))) {
-                    if(jName.substring(0, 15).compareTo(name.substring(0, 15)) < 0) { // obsolet
-                        j.delete();
-                        return true;            
-                    } else return false;    // no update needed
-                }
-            }
-        }
-
-        // nothing found -> extract
-        return true;
-    }
-}
Index: applications/editors/josm/plugins/smed/src/smed/io/SmedFile.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/io/SmedFile.java	(revision 23382)
+++ applications/editors/josm/plugins/smed/src/smed/io/SmedFile.java	(revision 23382)
@@ -0,0 +1,247 @@
+package smed.io;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
+
+import smed.plug.ifc.SmedPluggable;
+import smed.plug.util.JARFileFilter;
+
+public class SmedFile extends File{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+    private static File plugDir = null;
+    private static String pathname = null;
+    private static File[] plugJars = null; 
+
+    public SmedFile(String pathname) {
+        super(pathname);
+        this.pathname = pathname;
+        plugDir = new File(pathname);
+        plugJars = plugDir.listFiles(new JARFileFilter());
+    }
+
+    /**
+     * show if plugin need update
+     * 
+     * @param jars
+     * @param name
+     * @return boolean true/false
+     */
+    public boolean needUpdate(File[] jars, String name) {
+        for(File j : jars) {
+            String jName = j.getName();
+            
+            if(jName.length() > 15) { // < 16 isn'nt a SmedFile
+
+                if (jName.substring(16).equals(name.substring(16))) {
+                    if(jName.substring(0, 15).compareTo(name.substring(0, 15)) < 0) { // obsolet
+                        j.delete();
+                        return true;            
+                    } else return false;    // no update needed
+                }
+            }
+        }
+
+        // nothing found -> extract
+        return true;
+    }
+
+    
+    
+    /**
+     * show if plugin is visible
+     * 
+     * @param name
+     * @return boolean true/false
+     */
+	public boolean isVisible(String name) { return getAttributeState("visible", name); }
+	
+	/**
+	 * show if plugin is deleted
+	 * 
+	 * @param name
+	 * @return boolean true/false
+	 */
+	public boolean isDeleted(String name) { return getAttributeState("deleted", name); }
+	
+	public boolean getAttributeState(String attribute, String name) {		
+		File f = getFile(plugJars, name, true);
+		
+		if(f == null) return false;
+		else {
+			String str;
+			JarFile test;
+			try {
+				test = new JarFile(pathname + "/.ini/MF" + f.getName().substring(16));
+				Manifest mf = test.getManifest();
+				str = mf.getMainAttributes().getValue(attribute);
+				
+				if(str == null || !str.equals("yes")) return false;
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			
+			return true;
+		}
+
+	}
+
+	/**
+	 * search file in files
+	 *  
+	 * @param
+	 * @return if found -> File, if not found -> null
+	 */
+	private static File getFile(File[] files, String name, Boolean isSmed) {
+		for(int i = 0; i < files.length; i++) {
+			String fileName = files[i].getName();
+			
+			if(isSmed) {
+				if(fileName.length() > 15) { // < 16 isn'nt a SmedFile
+					if (fileName.substring(16).equals("_" + name)) return files[i];
+				}
+			} else if(fileName.equals(name)) return files[i];
+		}
+		return null;
+	}
+
+	/**
+	 * set the state "visible" of the plugin (name)
+	 * 
+	 * @param name
+	 * @param isVisible
+	 */
+	public void setVisible(String name, boolean isVisible) { setAttr("visible", name, isVisible); }
+	
+	/**
+	 * set the state "deleted" of the plugin (name)
+	 * 
+	 * @param name
+	 * @param isDeleted 
+	 */
+	public void setDeleted(String name, boolean isDeleted) { setAttr("deleted", name, isDeleted); }
+
+
+	private void setAttr(String attribute, String name, boolean b) {		
+		File f = getFile(plugJars,name,true);
+		if(f == null) return;
+		else {
+			try {
+				JarFile file = new JarFile(pathname + "/.ini/MF" + f.getName().substring(16));
+				
+				Manifest mf = file.getManifest();
+				Attributes attr = mf.getMainAttributes();
+				if(b) attr.putValue(attribute,"yes");
+				else attr.putValue(attribute,"no");
+				
+				FileOutputStream fos = new FileOutputStream(pathname + "/.ini/MF" + f.getName().substring(16));
+				JarOutputStream jos = new JarOutputStream(fos,mf);
+				jos.close();
+				fos.flush();
+				fos.close();
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * copies the manifests from the plugin.jar to
+	 * .ini/mf_plugin.jar. Necessary, because you
+	 * can't modified the original jars under windows,
+	 * (because under windows, they are used)
+	 */
+	private static void copyMFs(File[] plugInis) {
+		for(int i = 0; i < plugJars.length; i++) {
+			String source = plugJars[i].getName();
+			String dest;
+			
+			if(source.length() > 15) { // < 16 isn'nt a SmedFile
+				dest = "MF" + source.substring(16);
+
+				if(getFile(plugInis, dest, false) == null) {
+					try {
+						JarFile file = new JarFile(pathname + "/" + source);
+						Manifest mf = file.getManifest();
+						Attributes attr = mf.getMainAttributes();
+						attr.putValue("visible","yes");
+						attr.putValue("deleted","no");
+
+						FileOutputStream fos = new FileOutputStream(pathname + "/.ini/" + dest);
+						JarOutputStream jos = new JarOutputStream(fos,mf);
+						
+						jos.close();
+						fos.flush();
+						fos.close();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}	
+				}
+			
+			}
+		}
+		
+	}
+
+	public static void init() {
+		File splugDirIni = new File(pathname + "/.ini");
+		
+		if(!splugDirIni.exists()) splugDirIni.mkdir();
+		File[] plugInis = splugDirIni.listFiles(new JARFileFilter());
+		
+		copyMFs(plugInis);
+		
+		SmedFile smedDir = new SmedFile(pathname);
+		
+		for(int i = 0; i < plugJars.length; i++) {
+			File file = plugJars[i];
+			
+			if(file.getName().length() > 16) { // < 16 isn'nt a SmedFile
+				String name = file.getName().substring(17);
+				
+				if(smedDir.isDeleted(name)) {
+					File fileMF = new File(pathname + "/.ini/MF_" + name);
+					
+					fileMF.delete();
+					file.delete();
+				}
+			}
+		}
+	}
+
+	public static void createMF(String name) {
+		String dest;
+		if(name.length() > 17) { // < 17 isn'nt a SmedFile
+			dest = "MF_" + name.substring(17);
+			try {
+				JarFile file = new JarFile(pathname + "/" + name);
+				Manifest mf = file.getManifest();
+				Attributes attr = mf.getMainAttributes();
+				attr.putValue("visible","yes");
+				attr.putValue("deleted","no");
+				
+				FileOutputStream fos = new FileOutputStream(pathname + "/.ini/" + dest);
+				JarOutputStream jos = new JarOutputStream(fos,mf);
+				
+				jos.close();
+				fos.flush();
+				fos.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+}
Index: applications/editors/josm/plugins/smed/src/smed/menu/SmedMenuBar.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/menu/SmedMenuBar.java	(revision 23324)
+++ applications/editors/josm/plugins/smed/src/smed/menu/SmedMenuBar.java	(revision 23382)
@@ -38,14 +38,6 @@
 
         menuItem.addActionListener(new java.awt.event.ActionListener() {
-        	
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				DefaultListModel myModel = new DefaultListModel();
-				plugins = SmedTabbedPane.getPlugins();
-
-				for(SmedPluggable p : plugins) myModel.addElement (p.getName());
-				
-				new TabManager(myModel);
-			}
-		});
+			public void actionPerformed(java.awt.event.ActionEvent e) { new TabManager(); } 
+			});
 
 
Index: applications/editors/josm/plugins/smed/src/smed/menu/file/TabManager.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/menu/file/TabManager.java	(revision 23324)
+++ applications/editors/josm/plugins/smed/src/smed/menu/file/TabManager.java	(revision 23382)
@@ -3,6 +3,9 @@
 
 import javax.swing.DefaultListModel;
+import javax.swing.Icon;
+import javax.swing.JComponent;
 import javax.swing.JDialog;
 import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
 
 import javax.swing.JPanel;
@@ -13,4 +16,6 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.IOException;
 import java.util.List;
 
@@ -18,4 +23,7 @@
 import javax.swing.JTextField;
 
+import org.openstreetmap.josm.Main;
+
+import smed.io.SmedFile;
 import smed.jide.swing.CheckBoxList;
 import smed.jide.swing.CheckBoxListSelectionModel;
@@ -33,4 +41,5 @@
 	private CheckBoxListSelectionModel selModel;
 	private List<SmedPluggable> plugins = null;
+	private SmedFile splugDir = null;
 	private int modelSize = 0;
 
@@ -52,11 +61,21 @@
 	private JTextField tabTextFieldRename = null;
 
-	public TabManager(DefaultListModel model) {
-		this.model = model;
+	public TabManager() {
+		model = new DefaultListModel(); //model;
 		plugins = SmedTabbedPane.getPlugins();
+		String pluginDirName = Main.pref.getPluginsDirectory().getAbsolutePath();
+		splugDir = new SmedFile(pluginDirName + "/splug");
+		
+		for(SmedPluggable p : plugins){
+			if(splugDir.isVisible(p.getFileName()) && !splugDir.isDeleted(p.getFileName())) model.addElement (p.getName());
+			else if(splugDir.isDeleted(p.getFileName())) model.addElement("delete - " + p.getName());
+			else model.addElement("invisible - " + p.getName());
+		}
+		
 		modelSize = model.getSize();
 		getTabManagerDialog().setVisible(true);
 	}
 
+	
 	/**
 	 * This method initializes tabManagerDialog	
@@ -200,5 +219,5 @@
 			tabButtonLoad = new JButton();
 			tabButtonLoad.setBounds(new Rectangle(186, 328, 104, 30));
-			tabButtonLoad.setFont(new Font("Dialog", Font.BOLD, 12));
+			tabButtonLoad.setFont(new Font("Dialog", Font.PLAIN, 12));
 			tabButtonLoad.setText("Load");
 			tabButtonLoad.addActionListener(this);
@@ -217,5 +236,5 @@
 			tabButtonSave = new JButton();
 			tabButtonSave.setBounds(new Rectangle(293, 328, 104, 30));
-			tabButtonSave.setFont(new Font("Dialog", Font.BOLD, 12));
+			tabButtonSave.setFont(new Font("Dialog", Font.PLAIN, 12));
 			tabButtonSave.setText("Save");
 			tabButtonSave.addActionListener(this);
@@ -234,4 +253,5 @@
 			tabButtonDelete = new JButton();
 			tabButtonDelete.setBounds(new Rectangle(186, 362, 104, 30));
+			tabButtonDelete.setFont(new Font("Dialog", Font.PLAIN, 12));
 			tabButtonDelete.setText("Delete");
 			tabButtonDelete.addActionListener(this);
@@ -250,4 +270,5 @@
 			tabButtonVisible = new JButton();
 			tabButtonVisible.setBounds(new Rectangle(293, 362, 104, 30));
+			tabButtonVisible.setFont(new Font("Dialog", Font.PLAIN, 12));
 			tabButtonVisible.setText("invisible");
 			tabButtonVisible.addActionListener(this);
@@ -309,4 +330,34 @@
 		
 		if(cmd.equals("ok")) {
+			int i = 0;
+			JTabbedPane tabbedPane = SmedTabbedPane.getTabbedPane();
+			Icon icon = null;
+			
+			for(SmedPluggable p : plugins) {
+				String str = model.get(i).toString();
+
+				if(str.length() > 9 && str.substring(0,9).equals("invisible")) { 
+					splugDir.setVisible(p.getFileName(),false);
+				} else splugDir.setVisible(p.getFileName(),true);
+				
+				if(str.length() > 6 && str.substring(0,6).equals("delete")) {
+					splugDir.setDeleted(p.getFileName(),true);
+				} else splugDir.setDeleted(p.getFileName(),false);
+				
+				i++;
+			}
+			
+			tabbedPane.removeAll();
+ 
+			JComponent panel = null;
+			
+			for(SmedPluggable p : plugins) {
+				if(splugDir.isVisible(p.getFileName()) && !splugDir.isDeleted(p.getFileName())) {
+        			panel = p.getComponent();
+        			
+        			tabbedPane.addTab(p.getName(),icon, panel, p.getInfo());
+        		}
+			}
+
 			System.out.println("Aufraeumarbeiten beginnen");
 			tabManagerDialog.setVisible(false);
@@ -331,23 +382,16 @@
 		}
 		
-		if(cmd.equals("invisible")) {
-			for(int i = 0; i < modelSize ; i++) {
-				if(selModel.isSelectedIndex(i)) model.set(i,"invisible");				
-			}
-		}
-		
-		if(cmd.equals("delete")) {
-			for(int i = 0; i < modelSize ; i++) {
-				if(selModel.isSelectedIndex(i)) model.set(i,"");				
-			}
-		}
-		
-		if(cmd.equals("undo")) {
-			int i = 0;
-			
-			for(SmedPluggable p : plugins) model.set(i++,p.getName());
-			selModel.removeSelectionInterval(0, modelSize - 1);
-		}
-
+		if(cmd.equals("invisible")) cmd("invisible - ");
+		if(cmd.equals("delete")) cmd ("delete - ");
+		if(cmd.equals("undo"))  cmd("");
+	}
+
+	private void cmd(String s) {
+		int i = 0;
+		
+		for(SmedPluggable p : plugins) { 
+			if(selModel.isSelectedIndex(i)) model.set(i,s + p.getName());
+			i++;
+		}
 	}
 
Index: applications/editors/josm/plugins/smed/src/smed/plug/ifc/SmedPluggable.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/plug/ifc/SmedPluggable.java	(revision 23324)
+++ applications/editors/josm/plugins/smed/src/smed/plug/ifc/SmedPluggable.java	(revision 23382)
@@ -9,4 +9,5 @@
     boolean stop();
     String getName();
+    String getFileName();
     String getInfo();
     JComponent getComponent();
Index: applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabAction.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabAction.java	(revision 23324)
+++ applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabAction.java	(revision 23382)
@@ -50,7 +50,7 @@
         JFrame frame = new JFrame("TabbedPaneDemo");
         frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+        frame.setResizable(false);
+        frame.setAlwaysOnTop(true);
 
-        smedMenu.plugins = smedTabs.plugins;
-        
         //Add content to the window.
         frame.setJMenuBar(smedMenu);
Index: applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabbedPane.java
===================================================================
--- applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabbedPane.java	(revision 23324)
+++ applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabbedPane.java	(revision 23382)
@@ -1,4 +1,5 @@
 package smed.tabs;
 
+import java.awt.Dimension;
 import java.awt.GridLayout;
 import java.awt.event.KeyEvent;
@@ -14,4 +15,5 @@
 import org.openstreetmap.josm.Main;
 
+import smed.io.SmedFile;
 import smed.plug.ifc.SmedPluggable;
 import smed.plug.util.SmedPluginLoader;
@@ -25,4 +27,5 @@
 
 	static private List<SmedPluggable> plugins = null;
+	static private JTabbedPane tabbedPane = null;
 	
     public SmedTabbedPane() {
@@ -30,35 +33,42 @@
 
         String pluginDirName = Main.pref.getPluginsDirectory().getAbsolutePath();
+        
 		try {
             plugins = SmedPluginLoader.loadPlugins(new File(pluginDirName + "/splug"));
 
+            if(plugins != null) {
+            	Icon icon = null;
+            	tabbedPane = new JTabbedPane();
+            	
+            	JComponent panel;
+            	int i = 0;
+            	SmedFile splugDir = new SmedFile(pluginDirName + "/splug");
+            
+            	for(SmedPluggable p : plugins) {
+            		if(splugDir.isVisible(p.getFileName())) {
+            			panel = p.getComponent();
+            			
+            			tabbedPane.addTab(p.getName(),icon, panel, p.getInfo());
+            			tabbedPane.setMnemonicAt(i, KeyEvent.VK_1 + i);
+                    	
+            			i++;
+            		} else splugDir.setVisible(p.getFileName(),false);
+            	}
+            	
+            	//Add the tabbed pane to this panel.
+            	add(tabbedPane);
+
+            	tabbedPane.setPreferredSize(new Dimension(400, 400));
+            	
+            	//The following line enables to use scrolling tabs.
+            	tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+        	}
         } catch (IOException e) {
             e.printStackTrace();
-        }
+        } 
 
-        if(plugins != null) {
-            Icon icon = null;
-            JTabbedPane tabbedPane = new JTabbedPane();
-
-            JComponent panel;
-            int i = 0;
-            for(SmedPluggable p : plugins) {
-                panel = p.getComponent();
-                tabbedPane.addTab(p.getName(),icon, panel, p.getInfo());
-                tabbedPane.setMnemonicAt(i, KeyEvent.VK_1 + i);
-
-                i++;
-            }
-
-            //Add the tabbed pane to this panel.
-            add(tabbedPane);
-
-            //The following line enables to use scrolling tabs.
-            tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
-        }
-    }
+    } 
     
-    public static List<SmedPluggable> getPlugins() {
-		return plugins;
-    }
+    public static List<SmedPluggable> getPlugins() { return plugins; }
+    public static JTabbedPane getTabbedPane() { return tabbedPane; }
 }
