protected void SaveTextFile(ref string FileName, string title, Entry entry, ManagedArray data)
    {
        TextSaver.Title = title;

        TextSaver.SelectFilename(FileName);

        string directory;

        // Add most recent directory
        if (!string.IsNullOrEmpty(TextSaver.Filename))
        {
            directory = System.IO.Path.GetDirectoryName(TextSaver.Filename);

            if (Directory.Exists(directory))
            {
                TextSaver.SetCurrentFolder(directory);
            }
        }

        if (TextSaver.Run() == (int)ResponseType.Accept)
        {
            if (!string.IsNullOrEmpty(TextSaver.Filename))
            {
                FileName = TextSaver.Filename;

                directory = GetDirectory(FileName);

                var ext = TextSaver.Filter.Name;

                FileName = String.Format("{0}.{1}", GetBaseFileName(FileName), ext);

                if (data != null)
                {
                    var current   = DelimiterBox.Active;
                    var delimiter = current >= 0 && current < Delimiters.Count ? Delimiters[current].Character : '\t';

                    var fullpath = String.Format("{0}/{1}", directory, FileName);

                    try
                    {
                        ManagedFile.Save2D(fullpath, data, delimiter);

                        FileName = fullpath;

                        entry.Text = FileName;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error saving {0}: {1}", FileName, ex.Message);
                    }
                }
            }
        }

        TextSaver.Hide();
    }