--- a/javamorph/CAbout.java
+++ b/javamorph/CAbout.java
@@ -99,10 +99,9 @@
         g.setFont(new Font("Sans Serif", Font.BOLD, 10));
         g.drawString("Home: " + CStrings.HOME, 20, 170);
         g.drawString
-        ("Work: " + "Home" + CStrings.SEP + CStrings.APPDIR, 20, 190);
+        ("Work: " + "$HOME" + CStrings.SEP + CStrings.APPDIR, 20, 190);
         g.drawString
-        ("Hint: Find a tutorial within the help subdir of the workdir."
-                , 20, 210);
+        ("Hint: Find a tutorial in " + CStrings.HELPDIR + "." , 20, 210);
     }
     /**
      * Satisfy the java API.
--- a/javamorph/CPopupMenuDecorator.java
+++ b/javamorph/CPopupMenuDecorator.java
@@ -95,8 +95,10 @@
         new JRadioButtonMenuItem("Edit polygon.");
     /** Edit configuration command. */
     private JMenuItem m_edit_config = new JMenuItem("Edit Config ->");
+    /** Open the help PDF viewer. */
+    private JMenuItem m_help = new JMenuItem("Help?");
     /** Show about box command. */
-    private JMenuItem m_about = new JMenuItem("Help about?");
+    private JMenuItem m_about = new JMenuItem("About?");
     /**
      * Constructor.
      * @param parent The parent JComponent to draw the mouse symbol to.
@@ -113,6 +115,7 @@
         popup_menu.add(this.mesh_menu);
         popup_menu.add(this.polygon_menu);
         popup_menu.addSeparator();
+        popup_menu.add(m_help);
         popup_menu.add(m_about);
         mesh_menu.add(m_add_mesh_points);
         mesh_menu.add(m_sub_mesh_points);
@@ -143,6 +146,7 @@
         m_sub_polygon_points.addActionListener(this);
         m_off_polygon_points.addActionListener(this);
         m_delete_polygon.addActionListener(this);
+        m_help.addActionListener(this);
         m_about.addActionListener(this);
         parent.addMouseListener(this);
     }
@@ -226,10 +230,24 @@
         if(m_edit_config == e.getSource()){
             parent.getParent().showConfigDialog();
         }
+        if(m_help == e.getSource()){
+            try{
+                String cmd = 
+                     System.getProperty("HELPVIEW") + 
+                     ' ' + 
+                     System.getProperty("HELPFILE");
+                System.out.println("Try call " + cmd + ' ');
+                Runtime.getRuntime().exec(cmd);
+            }catch(Exception x){
+                JOptionPane.showMessageDialog
+                (parent, "Helpfile missing. Download \"JavaMorph.pdf!\"");
+                System.out.println(x.getMessage());
+                x.printStackTrace();
+            }
+        }
         if(m_about == e.getSource()){
             parent.getParent().showAboutDialog();
         }
-        
         if(m_add_mesh_points == e.getSource()){
             CConfig.edit_state = CConfig.EDIT_MESH_ADD;
         }
--- a/javamorph/CStrings.java
+++ b/javamorph/CStrings.java
@@ -44,7 +44,7 @@
     /** Dir from which this application has been started. */
     public static final String DIR = System.getProperty("user.dir");
     /** Location of the .jar distribution file. */
-    public static final String JAR = DIR + SEP + "JavaMorph_2009_01_19.jar";
+    public static final String JAR = DIR + SEP + "JavaMorph_2010_02_01.jar";
     /** Program name. */
     public static final String PROG = "JavaMorph";
     /** Program version. */
@@ -54,15 +54,13 @@
     /** License description. */
     public static final String LICENSE = "GPLv2";
     /** Working directory name. */
-    public static final String APPDIR = "Desktop" + SEP + PROG + SEP;
+    public static final String APPDIR = PROG + SEP;
     /** Working directory path. */
     public static final String WORKDIR = HOME + APPDIR;
     /** Input directory path. */
     public static final String INPUTDIR = HOME + APPDIR + "input" + SEP;
     /** Debug directory path. */
     public static final String DEBUGDIR = HOME + APPDIR + "debug" + SEP;
-    /** Help directory path. */
-    public static final String HELPDIR = HOME + APPDIR + "help" + SEP;
     /** Polygon data directory path. */
     public static final String POLYGONDIR = HOME + APPDIR + "polygon" + SEP;
     /** Mesh data directory path. */
@@ -87,10 +85,8 @@
     public static final String LEFT_DEBUG = DEBUGDIR + "left_debug.png";
     /** Right clip matrix file name & path. */
     public static final String RIGHT_DEBUG = DEBUGDIR + "right_debug.png";
-    /** Copyright file name & path. */
-    public static final String COPYING = HELPDIR + "COPYING";
-    /** Help file name & path. */
-    public static final String HELP = HELPDIR + "JavaMorph.pdf";
+    /** Help directory path. */
+    public static final String HELPDIR = System.getProperty("HELPDIR");
     /** File to store the triangulation of the left mesh to. */
     public static final String LEFT_TRI = DEBUGDIR + "t_left_triangles.png";
     /** File to store the triangulation of the right mesh to. */
@@ -167,8 +163,6 @@
      * sub directories of the working directory.
      */
     public static void extractFiles(){
-        copyFile("help/COPYING", COPYING);
-        copyFile("help/JavaMorph.pdf", HELP);
         copyFile("input/left.jpg", LEFT_INPUT);
         copyFile("input/right.jpg", RIGHT_INPUT);
         copyFile("mesh/left.msh", LEFT_MESH);
