Index: src/lib/com/izforge/izpack/installer/PrivilegedRunner.java
===================================================================
--- src/lib/com/izforge/izpack/installer/PrivilegedRunner.java	(revision 1836)
+++ src/lib/com/izforge/izpack/installer/PrivilegedRunner.java	(working copy)
@@ -124,6 +124,19 @@
             return false;
         }
     }
+    
+    public boolean canWriteToPath(String path)
+    {
+        File temp = new File(path);
+        if (temp.canWrite())
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
 
     /**
      * Relaunches the installer with elevated rights.
Index: src/lib/com/izforge/izpack/uninstaller/Uninstaller.java
===================================================================
--- src/lib/com/izforge/izpack/uninstaller/Uninstaller.java	(revision 1836)
+++ src/lib/com/izforge/izpack/uninstaller/Uninstaller.java	(working copy)
@@ -21,6 +21,7 @@
 
 import com.izforge.izpack.util.Housekeeper;
 import com.izforge.izpack.installer.PrivilegedRunner;
+import com.izforge.izpack.installer.UninstallData;
 import com.izforge.izpack.util.OsVersion;
 
 import javax.swing.*;
@@ -121,7 +122,8 @@
     private static boolean elevationShouldBeInvestigated()
     {
         return (Uninstaller.class.getResource("/exec-admin") != null) ||
-                (OsVersion.IS_WINDOWS && !(new PrivilegedRunner().canWriteToProgramFiles()));
+                (OsVersion.IS_WINDOWS && !(new PrivilegedRunner().canWriteToProgramFiles())) || 
+                (OsVersion.IS_LINUX && !(new PrivilegedRunner().canWriteToPath(UninstallerFrame.getInstallPath())));
     }
 
     public static void cmduninstall(String[] args)
Index: src/lib/com/izforge/izpack/uninstaller/SelfModifier.java
===================================================================
--- src/lib/com/izforge/izpack/uninstaller/SelfModifier.java	(revision 1836)
+++ src/lib/com/izforge/izpack/uninstaller/SelfModifier.java	(working copy)
@@ -438,11 +438,16 @@
         {
             args = new String[0];
         }
-        spawn(args, 2);        
-
         // finally, if all went well, the invoking process must exit
         log("Exit");
-        System.exit(0);
+        try
+        {
+            System.exit(spawn(args, 2).waitFor());
+        }
+        catch (InterruptedException e)
+        {
+            System.exit(0);
+        }
     }
 
     /**
Index: src/lib/com/izforge/izpack/uninstaller/UninstallerFrame.java
===================================================================
--- src/lib/com/izforge/izpack/uninstaller/UninstallerFrame.java	(revision 1836)
+++ src/lib/com/izforge/izpack/uninstaller/UninstallerFrame.java	(working copy)
@@ -19,21 +19,45 @@
 
 package com.izforge.izpack.uninstaller;
 
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.GraphicsEnvironment;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseMotionAdapter;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
 import com.izforge.izpack.LocaleDatabase;
 import com.izforge.izpack.gui.ButtonFactory;
 import com.izforge.izpack.gui.IconsDatabase;
 import com.izforge.izpack.util.AbstractUIHandler;
 import com.izforge.izpack.util.Housekeeper;
 
-import javax.swing.*;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-
 /**
  * The uninstaller frame class.
  *
@@ -101,7 +125,7 @@
 
         // Initializations
         langpack = new LocaleDatabase(UninstallerFrame.class.getResourceAsStream("/langpack.xml"));
-        getInstallPath();
+        installPath = getInstallPath();
         icons = new IconsDatabase();
         loadIcons();
         UIManager.put("OptionPane.yesButtonText", langpack.getString("installer.yes"));
@@ -241,13 +265,18 @@
      *
      * @throws Exception Description of the Exception
      */
-    private void getInstallPath() throws Exception
+    protected static String getInstallPath()
     {
-        InputStream in = UninstallerFrame.class.getResourceAsStream("/install.log");
-        InputStreamReader inReader = new InputStreamReader(in);
-        BufferedReader reader = new BufferedReader(inReader);
-        installPath = reader.readLine();
-        reader.close();
+        try {
+            InputStream in = UninstallerFrame.class.getResourceAsStream("/install.log");
+            InputStreamReader inReader = new InputStreamReader(in);
+            BufferedReader reader = new BufferedReader(inReader);
+            String path = reader.readLine();
+            reader.close();
+            return path;
+        }catch (IOException err) {
+            return "";
+        }
     }
 
     /**
