+
+    bool bTemp;
+    wxString strHome = wxGetenv(wxT("HOME"));
+
+    // and now the users mailcap
+    wxString strUserMailcap = strHome + wxT("/.mailcap");
+
+    wxMimeTextFile file;
+    if ( wxFile::Exists(strUserMailcap) )
+    {
+        bTemp =  file.Open(strUserMailcap);
+    }
+    else
+    {
+        if (delete_index) return FALSE;
+        bTemp = file.Create(strUserMailcap);
+    }
+    if (bTemp)
+    {
+        // now got a file we can write to ....
+        wxMimeTypeCommands * entries = m_aEntries[index];
+        size_t iOpen;
+        wxString sCmd = entries->GetCommandForVerb(_T("open"), &iOpen);
+        wxString sTmp;
+
+        sTmp = m_aTypes[index];
+        wxString sOld;
+        int nIndex = file.pIndexOf(sTmp);
+        // get rid of all the unwanted entries...
+        if (nIndex == wxNOT_FOUND)
+        {
+            nIndex = (int) file.GetLineCount();
+        }
+        else
+        {
+            sOld = file[nIndex];
+            wxLogTrace(TRACE_MIME, wxT("--- Deleting from mailcap line '%d' ---"), nIndex);
+
+            while ( (sOld.Contains(wxT("\\"))) && (nIndex < (int) file.GetLineCount()) )
+            {
+                file.CommentLine(nIndex);
+                if (nIndex < (int) file.GetLineCount()) sOld = sOld + file[nIndex];
+            }
+            if (nIndex < (int) file.GetLineCount()) file.CommentLine (nIndex);
+        }
+
+        sTmp = sTmp + wxT(";") + sCmd; //includes wxT(" %s ");
+
+        // write it in the format that Netscape uses (default)
+        if (! ( m_mailcapStylesInited & wxMAILCAP_STANDARD  ) )
+        {
+            if (! delete_index) file.InsertLine (sTmp, nIndex);
+            nIndex ++;
+        }
+
+        // write extended format
+        else
+        {
+            // todo FIX this code;
+            // ii) lost entries
+            // sOld holds all the entries, but our data store only has some
+            // eg test= is not stored
+
+            // so far we have written the mimetype and command out
+            wxStringTokenizer sT (sOld, wxT(";\\"));
+            if (sT.CountTokens () > 2)
+            {
+                // first one mimetype; second one command, rest unknown...
+                wxString s;
+                s = sT.GetNextToken();
+                s = sT.GetNextToken();
+
+                // first unknown
+                s = sT.GetNextToken();
+                while ( ! s.empty() )
+                {
+                    bool bKnownToken = FALSE;
+                    if (s.Contains(wxT("description="))) bKnownToken = TRUE;
+                    if (s.Contains(wxT("x11-bitmap="))) bKnownToken = TRUE;
+                    size_t i;
+                    for (i=0; i < entries->GetCount(); i++)
+                    {
+                        if (s.Contains(entries->GetVerb(i))) bKnownToken = TRUE;
+                    }
+                    if (!bKnownToken)
+                    {
+                        sTmp = sTmp + wxT("; \\");
+                        file.InsertLine (sTmp, nIndex);
+                        sTmp = s;
+                    }
+                    s = sT.GetNextToken ();
+                }
+
+            }
+
+            if (! m_aDescriptions[index].empty() )
+            {
+                sTmp = sTmp + wxT("; \\");
+                file.InsertLine (sTmp, nIndex);
+                nIndex ++;
+                sTmp = wxT("       description=\"") + m_aDescriptions[index] + wxT("\"");
+            }
+
+            if (! m_aIcons[index].empty() )
+            {
+                sTmp = sTmp + wxT("; \\");
+                file.InsertLine (sTmp, nIndex);
+                nIndex ++;
+                sTmp = wxT("       x11-bitmap=\"") + m_aIcons[index] + wxT("\"");
+            }
+            if ( entries->GetCount() > 1 )
+
+            {
+                size_t i;
+                for (i=0; i < entries->GetCount(); i++)
+                    if ( i != iOpen )
+                    {
+                        sTmp = sTmp + wxT("; \\");
+                        file.InsertLine (sTmp, nIndex);
+                        nIndex ++;
+                        sTmp = wxT("       ") + entries->GetVerbCmd(i);
+                    }
+            }
+
+            file.InsertLine (sTmp, nIndex);
+            nIndex ++;
+
+        }
+        bTemp = file.Write ();
+        file.Close ();