Applied initial patches for wx2.8 compatibility
[ctsim.git] / initial-wx2.8-mods.diff
diff --git a/initial-wx2.8-mods.diff b/initial-wx2.8-mods.diff
new file mode 100644 (file)
index 0000000..584d874
--- /dev/null
@@ -0,0 +1,4294 @@
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/libctgraphics/sgp.cpp ctsim-wx2.8/libctgraphics/sgp.cpp
+--- ctsim/libctgraphics/sgp.cpp        2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/libctgraphics/sgp.cpp  2008-07-21 10:08:10.840312064 -0600
+@@ -570,9 +570,8 @@
+ {
+ #if HAVE_WXWINDOWS
+   if (m_driver.isWX()) {
+-    wxString sText (szText);
+     wxCoord deviceW, deviceH;
+-    m_driver.idWX()->GetTextExtent (sText, &deviceW, &deviceH);
++    m_driver.idWX()->GetTextExtent (wxConvCurrent->cMB2WC(szText), &deviceW, &deviceH);
+     if (m_dTextAngle == 90 || m_dTextAngle == -90) {
+       wxCoord temp = deviceW;
+       deviceW = deviceH;
+@@ -722,8 +721,7 @@
+ #endif
+ #if HAVE_WXWINDOWS
+   if (m_driver.isWX()) {
+-    wxString str (pszMessage);
+-    m_driver.idWX()->DrawRotatedText (str, m_iCurrentPhysicalX, m_iCurrentPhysicalY, m_dTextAngle);
++    m_driver.idWX()->DrawRotatedText (wxConvCurrent->cMB2WC(pszMessage), m_iCurrentPhysicalX, m_iCurrentPhysicalY, m_dTextAngle);
+   }
+ #endif
+ }
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/libctsupport/syserror.cpp ctsim-wx2.8/libctsupport/syserror.cpp
+--- ctsim/libctsupport/syserror.cpp    2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/libctsupport/syserror.cpp      2008-07-21 10:08:10.852312800 -0600
+@@ -57,15 +57,15 @@
+   if (g_bRunningWXWindows) {
+     if (theApp) {
+       wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-      wxString msg (strOutput.c_str());
++      wxString msg (wxConvCurrent->cMB2WX(strOutput.c_str()));
+       if (msg.length() > 0) {
+-        msg += "\n";
++        msg += wxChar('\n');
+         eventLog.SetString( msg );
+         wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event, thread safe
+       }
+     } else {
+       wxMutexGuiEnter();
+-      wxLog::OnLog (wxLOG_Message, strOutput.c_str(), time(NULL));
++      wxLog::OnLog (wxLOG_Message, wxConvCurrent->cMB2WX(strOutput.c_str()), time(NULL));
+       wxMutexGuiLeave();
+     }
+   }
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/backgroundmgr.cpp ctsim-wx2.8/src/backgroundmgr.cpp
+--- ctsim/src/backgroundmgr.cpp        2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/backgroundmgr.cpp  2008-07-21 10:08:10.864313536 -0600
+@@ -108,7 +108,7 @@
+ BackgroundManager::OnAddTask (wxCommandEvent& event)
+ {
+   int iNumUnits = event.GetInt();
+-  const char* const pszTaskName = event.GetString().c_str();
++  const char* const pszTaskName = event.GetString().mb_str(wxConvUTF8);
+   BackgroundSupervisor* pSupervisor = reinterpret_cast<BackgroundSupervisor*>(event.GetClientData());
+   if (pSupervisor == NULL) {
+     sys_error (ERR_SEVERE, "Received NULL supervisor [BackgroundManager::OnAddTask]");
+@@ -139,7 +139,7 @@
+   wxPoint posLabel (m_sizeBorder.x + m_sizeGauge.x, m_sizeBorder.y + iFirstUnusedPos * m_sizeCell.y);
+   wxPoint posButton (m_sizeBorder.x + m_sizeGauge.x + m_sizeLabel.x, m_sizeBorder.y + iFirstUnusedPos * m_sizeCell.y);
+   wxGauge* pGauge = new wxGauge (m_pCanvas, -1, iNumUnits, posGauge, m_sizeGauge);
+-  wxStaticText* pLabel = new wxStaticText (m_pCanvas, -1, pszTaskName, posLabel, m_sizeLabel);
++  wxStaticText* pLabel = new wxStaticText (m_pCanvas, -1, wxConvUTF8.cMB2WX(pszTaskName), posLabel, m_sizeLabel);
+   wxButton* pButton = new wxButton (m_pCanvas, s_iNextButtonID, _T("Cancel"), posButton, m_sizeButton, wxBU_LEFT);
+   BackgroundManagerTask* pTask = new BackgroundManagerTask (pSupervisor, pszTaskName,
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/backgroundsupr.cpp ctsim-wx2.8/src/backgroundsupr.cpp
+--- ctsim/src/backgroundsupr.cpp       2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/backgroundsupr.cpp 2008-07-29 20:10:53.735726313 -0600
+@@ -57,7 +57,7 @@
+-BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, const char* const pszProcessTitle, int iTotalUnits)
++BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, wxChar const* pszProcessTitle, int iTotalUnits)
+     : wxEvtHandler(), m_pMyThread(pMyThread), m_pParentFrame(pParentFrame), m_pDocument(pDocument), m_strProcessTitle(pszProcessTitle),
+     m_iTotalUnits(iTotalUnits), m_iNumThreads(0), m_bDone(false), m_bFail(false), m_bCancelled(false), m_iRunning(0),
+     m_pTimer(NULL), m_bWorkersDeleted(false), m_bBackgroundManagerAdded(false)
+@@ -120,12 +120,12 @@
+     m_vecpThreads[iThread] = createWorker (iThread, iStartUnit, iNumUnits);
+     if (! m_vecpThreads[iThread]) {
+       m_bFail = true;
+-      m_strFailMessage = "createWorker returned NULL [BackgroundSupervisor]";
++      m_strFailMessage = _T("createWorker returned NULL [BackgroundSupervisor]");
+       break;
+     }
+     if (m_vecpThreads[iThread]->Create () != wxTHREAD_NO_ERROR) {
+       m_bFail = true;
+-      m_strFailMessage = "Thread creation failed [BackgroundSupervisor]";
++      m_strFailMessage = _T("Thread creation failed [BackgroundSupervisor]");
+       break;
+     }
+    m_vecpThreads[iThread]->SetPriority (40);
+@@ -136,13 +136,13 @@
+   m_pTimer = new Timer;
+-  std::string strLabel (m_strProcessTitle);
+-  strLabel += " ";
+-  strLabel += m_pParentFrame->GetTitle();
++  wxString strLabel (m_strProcessTitle);
++  strLabel += _T(" ");
++  strLabel += dynamic_cast<wxFrame*>(m_pParentFrame)->GetTitle();
+ #ifdef USE_BKGMGR
+   wxCommandEvent addTaskEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_ADD);
+-  addTaskEvent.SetString (strLabel.c_str());
++  addTaskEvent.SetString (strLabel);
+   addTaskEvent.SetInt (m_iTotalUnits);
+   addTaskEvent.SetClientData (this);
+   wxPostEvent (theApp->getBackgroundManager(), addTaskEvent);
+@@ -192,7 +192,7 @@
+ #ifdef DEBUG
+   if (theApp->getVerboseLogging()) {
+     wxString msg;
+-    msg.Printf("Background Supervisor: Thread finished. Remaining threads: %d\n", m_iRunning);
++    msg.Printf(_T("Background Supervisor: Thread finished. Remaining threads: %d\n"), m_iRunning);
+     wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+     eventLog.SetString( msg );
+     wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -203,11 +203,11 @@
+ }
+ void
+-BackgroundSupervisor::onWorkerFail (int iThread, std::string strFailMessage)
++BackgroundSupervisor::onWorkerFail (int iThread, const wxString& strFailMessage)
+ {
+   m_iRunning--;
+   wxCommandEvent eventLog( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-  eventLog.SetString( strFailMessage.c_str() );
++  eventLog.SetString( strFailMessage );
+   wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+   onCancel();
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/backgroundsupr.h ctsim-wx2.8/src/backgroundsupr.h
+--- ctsim/src/backgroundsupr.h 2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/backgroundsupr.h   2008-07-29 20:09:41.539253901 -0600
+@@ -57,13 +57,13 @@
+   SupervisorThread* m_pMyThread;
+   wxWindow* m_pParentFrame;
+   BackgroundProcessingDocument* m_pDocument;
+-  const std::string m_strProcessTitle;
++  const wxString m_strProcessTitle;
+   const unsigned int m_iTotalUnits;
+   int m_iNumThreads;
+   volatile bool m_bDone;
+   volatile bool m_bFail;
+-  std::string m_strFailMessage;
++  wxString m_strFailMessage;
+   volatile bool m_bCancelled;
+   volatile int m_iRunning;
+   volatile unsigned int m_iUnitsDone;
+@@ -88,7 +88,7 @@
+     MSG_WORKER_THREAD_FAIL = 7507,   // sent by workers when they fail
+   };
+-  BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, const char* const pszProcessTitle,
++  BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, wxChar const* pszProcessTitle,
+     int iTotalUnits);
+   BackgroundSupervisor ()
+@@ -105,7 +105,7 @@
+   virtual void onCancel();
+-  virtual void onWorkerFail(int iThread, std::string strFailMessage);
++  virtual void onWorkerFail(int iThread, const wxString& strFailMessage);
+   virtual void onWorkerUnitTick();
+   virtual void onWorkerDone(int iThread);
+@@ -116,7 +116,7 @@
+   bool isDone() const {return m_bDone;}
+   void setDone() { m_bDone = true; }
+   bool fail() const {return m_bFail;}
+-  const std::string& getFailMessage() const { return m_strFailMessage; }
++  const wxString& getFailMessage() const { return m_strFailMessage; }
+   bool cancelled() const {return m_bCancelled;}
+   int getNumWorkers() const { return m_iNumThreads; }
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/ctsim.cpp ctsim-wx2.8/src/ctsim.cpp
+--- ctsim/src/ctsim.cpp        2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/ctsim.cpp  2008-07-28 17:18:08.431794408 -0600
+@@ -82,7 +82,8 @@
+ IMPLEMENT_APP(CTSimApp)
+ CTSimApp::CTSimApp()
+-:  m_bAdvancedOptions(false), m_bSetModifyNewDocs(true), m_bVerboseLogging(false), m_bShowStartupTips(true),
++: m_bAdvancedOptions(false), m_bSetModifyNewDocs(true), 
++  m_bVerboseLogging(false), m_bShowStartupTips(true),
+ m_iCurrentTip(0), m_bUseBackgroundTasks(false),
+ m_docManager(NULL), m_pFrame(NULL), m_pConfig(0), m_pLog(0), m_pLogDoc(0)
+ {
+@@ -100,6 +101,8 @@
+ bool
+ CTSimApp::OnInit()
+ {
++  wxApp::OnInit();
++
+ #ifdef HAVE_SETPRIORITY
+   setpriority (PRIO_PROCESS, 0, 15);  // set to low scheduling priority
+ #endif
+@@ -113,7 +116,18 @@
+ #ifdef __WXMAC__
+     int c = -1;
+ #else
+-    int c = getopt_long (argc, argv, "", ctsimOptions, NULL);
++    char** cargv = new char* [argc];
++    for (int i = 0; i < argc; i++) {
++      const char* p = wxConvUTF8.cWX2MB(argv[i]);
++      cargv[i] = new char [strlen(p)+1];
++      strcpy(cargv[i], p);
++    }
++    int c = getopt_long (argc, cargv, "", ctsimOptions, NULL);
++    for (int i = 0; i < argc; i++) {
++      delete cargv[i];
++    }
++    delete cargv;
++    
+ #endif
+     if (c == -1)
+       break;
+@@ -129,26 +143,28 @@
+       exit(0);
+     case O_HELP:
+     case '?':
+-      usage (argv[0]);
++      usage (wxConvCurrent->cWX2MB(argv[0]));
+       exit (0);
+     case O_PRINT:
+       bPrintFiles = true;
+       break;
+     default:
+-      usage (argv[0]);
++      usage (wxConvCurrent->cWX2MB(argv[0]));
+       exit (1);
+     }
+   }
+   m_docManager = new wxDocManager (wxDEFAULT_DOCMAN_FLAGS, true);
+-  m_pDocTemplImage = new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile", "ImageView", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView));
+-  m_pDocTemplProjection = new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile", "ProjectionView", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView));
+-  m_pDocTemplPhantom = new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "PhantomFile", "PhantomView", CLASSINFO(PhantomFileDocument), CLASSINFO(PhantomFileView));
+-  m_pDocTemplPlot = new wxDocTemplate (m_docManager, "PlotFile", "*.plt", "", "plt", "PlotFile", "PlotView", CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView));
+-  m_pDocTemplText = new wxDocTemplate (m_docManager, "TextFile", "*.txt", "", "txt", "TextFile", "TextView", CLASSINFO(TextFileDocument), CLASSINFO(TextFileView), wxTEMPLATE_INVISIBLE);
++  m_pDocTemplImage = new wxDocTemplate (m_docManager, _T("ImageFile"), _T("*.if"), _T(""), _T("if"), _T("ImageFile"), _T("ImageView"), CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView));
++  m_pDocTemplProjection = new wxDocTemplate (m_docManager, _T("ProjectionFile"), _T("*.pj"), _T(""), _T("pj"), _T("ProjectionFile"), _T("ProjectionView"), CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView));
++  m_pDocTemplPhantom = new wxDocTemplate (m_docManager, _T("PhantomFile"), _T("*.phm"), _T(""), _T("phm"), _T("PhantomFile"), _T("PhantomView"), CLASSINFO(PhantomFileDocument), CLASSINFO(PhantomFileView));
++  m_pDocTemplPlot = new wxDocTemplate (m_docManager, _T("PlotFile"), _T("*.plt"), _T(""), _T("plt"), _T("PlotFile"), _T("PlotView"), CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView));
++  m_pDocTemplText = new wxDocTemplate (m_docManager, _T("TextFile"), _T("*.txt"), _T(""), _T("txt"), _T("TextFile"), _T("TextView"), CLASSINFO(TextFileDocument), CLASSINFO(TextFileView), wxTEMPLATE_INVISIBLE);
+ #if wxUSE_GLCANVAS
+-  m_pDocTemplGraph3d = new wxDocTemplate (m_docManager, "Graph3dFile", "*.g3d", "", "g3d", "Graph3dFile", "Graph3dView", CLASSINFO(Graph3dFileDocument), CLASSINFO(Graph3dFileView), wxTEMPLATE_INVISIBLE);
++  m_pDocTemplGraph3d = new wxDocTemplate (m_docManager, _T("Graph3dFile"), _T("*.g3d"), _T(""), _T("g3d"),
++                                          _T("Graph3dFile"), _T("Graph3dView"), CLASSINFO(Graph3dFileDocument), 
++                                          CLASSINFO(Graph3dFileView), wxTEMPLATE_INVISIBLE);
+ #endif
+ #if wxUSE_GIF
+@@ -163,7 +179,7 @@
+   int xDisplay, yDisplay;
+   ::wxDisplaySize (&xDisplay, &yDisplay);
+-  m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0),
++  m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, _T("CTSim"), wxPoint(0, 0),
+ #ifdef CTSIM_MDI
+     wxSize(nearest<int>(xDisplay * .75), nearest<int>(yDisplay * .75)),
+ #else
+@@ -193,29 +209,29 @@
+     m_pLogDoc->getView()->getFrame()->Show (true);
+   } else
+ #else
+-    m_pLog = new wxTextCtrl (m_pFrame, -1, "Log Window\n", wxPoint(0, 0), wxSize(0,0), wxTE_MULTILINE | wxTE_READONLY);
++    m_pLog = new wxTextCtrl (m_pFrame, -1, _T("Log Window\n"), wxPoint(0, 0), wxSize(0,0), wxTE_MULTILINE | wxTE_READONLY);
+ #endif
+   wxLog::SetActiveTarget (new wxLogTextCtrl(m_pLog));
+   wxString helpDir;
+-  if (! m_pConfig->Read("HelpDir", &helpDir))
++  if (! m_pConfig->Read(_T("HelpDir"), &helpDir))
+     helpDir = ::wxGetCwd();
+ #ifdef CTSIM_WINHELP
+-  if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim"))
+-    *m_pLog << "Cannot initialize the Windows Help system" << "\n";
++  if (! m_pFrame->getWinHelpController().Initialize(helpDir + _T("/ctsim")))
++    *m_pLog << _T("Cannot initialize the Windows Help system") << _T("\n");
+ #else
+ #ifdef DATADIR
+-  wxString docDir (DATADIR);
++  wxString docDir (DATADIR, *wxConvCurrent);
+ #else
+   wxString docDir (::wxGetCwd());
+ #endif
+-  wxString docFile = docDir + "ctsim.htb";
++  wxString docFile = docDir + _T("ctsim.htb");
+   if (! m_pFrame->getHtmlHelpController().AddBook(docFile) &&
+-    ! m_pFrame->getHtmlHelpController().AddBook("/usr/share/ctsim/ctsim.htb") &&
+-        ! m_pFrame->getHtmlHelpController().AddBook("/tmp/ctsim.htb"))
+-        *m_pLog << "Cannot initialize the HTML Help system" << "\n";
++      ! m_pFrame->getHtmlHelpController().AddBook(_T("/usr/share/ctsim/ctsim.htb")) &&
++      ! m_pFrame->getHtmlHelpController().AddBook(_T("/tmp/ctsim.htb")))
++    *m_pLog << _T("Cannot initialize the HTML Help system") << _T("\n");
+   else {
+-    if (::wxDirExists ("/tmp"))
++    if (::wxDirExists (_T("/tmp")))
+       m_pFrame->getHtmlHelpController().SetTempDir(_T("/tmp"));
+     m_pFrame->getHtmlHelpController().UseConfig (m_pConfig);
+   }
+@@ -297,40 +313,40 @@
+ CTSimApp::openConfig()
+ {
+ #ifdef MSVC
+-  m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", "", "", wxCONFIG_USE_LOCAL_FILE);
++  m_pConfig = new wxConfig(_T("ctsim"), _T("Kevin Rosenberg"), _T(""), _T(""), wxCONFIG_USE_LOCAL_FILE);
+ #else
+-  m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", ".ctsim", "", wxCONFIG_USE_LOCAL_FILE);
++  m_pConfig = new wxConfig(_T("ctsim"), _T("Kevin Rosenberg"), _T(".ctsim"), _T(""), wxCONFIG_USE_LOCAL_FILE);
+ #endif
+   wxConfigBase::Set(m_pConfig);
+-  m_pConfig->Read ("AdvancedOptions", &m_bAdvancedOptions);
+-  m_pConfig->Read ("SetModifyNewDocs", &m_bSetModifyNewDocs);
+-  m_pConfig->Read ("VerboseLogging", &m_bVerboseLogging);
+-  m_pConfig->Read ("StartupTips", &m_bShowStartupTips);
+-  m_pConfig->Read ("CurrentTip", &m_iCurrentTip);
+-  m_pConfig->Read ("UseBackgroundTasks", &m_bUseBackgroundTasks);
++  m_pConfig->Read (_T("AdvancedOptions"), &m_bAdvancedOptions);
++  m_pConfig->Read (_T("SetModifyNewDocs"), &m_bSetModifyNewDocs);
++  m_pConfig->Read (_T("VerboseLogging"), &m_bVerboseLogging);
++  m_pConfig->Read (_T("StartupTips"), &m_bShowStartupTips);
++  m_pConfig->Read (_T("CurrentTip"), &m_iCurrentTip);
++  m_pConfig->Read (_T("UseBackgroundTasks"), &m_bUseBackgroundTasks);
+ #ifdef HAVE_FFTW
+   wxString strFftwWisdom;
+-  m_pConfig->Read ("FftwWisdom", strFftwWisdom);
++  m_pConfig->Read (_T("FftwWisdom"), strFftwWisdom);
+   if (strFftwWisdom.size() > 0)
+-    fftw_import_wisdom_from_string (strFftwWisdom.c_str());
++    fftw_import_wisdom_from_string (strFftwWisdom.mb_str(wxConvUTF8));
+ #endif
+ }
+ void
+ CTSimApp::closeConfig()
+ {
+-  m_pConfig->Write ("AdvancedOptions", m_bAdvancedOptions);
+-  m_pConfig->Write ("SetModifyNewDocs", m_bSetModifyNewDocs);
+-  m_pConfig->Write ("VerboseLogging", m_bVerboseLogging);
+-  m_pConfig->Write ("StartupTips", m_bShowStartupTips);
+-  m_pConfig->Write ("CurrentTip", m_iCurrentTip);
+-  m_pConfig->Write ("UseBackgroundTasks", m_bUseBackgroundTasks);
++  m_pConfig->Write (_T("AdvancedOptions"), m_bAdvancedOptions);
++  m_pConfig->Write (_T("SetModifyNewDocs"), m_bSetModifyNewDocs);
++  m_pConfig->Write (_T("VerboseLogging"), m_bVerboseLogging);
++  m_pConfig->Write (_T("StartupTips"), m_bShowStartupTips);
++  m_pConfig->Write (_T("CurrentTip"), m_iCurrentTip);
++  m_pConfig->Write (_T("UseBackgroundTasks"), m_bUseBackgroundTasks);
+ #ifdef HAVE_FFTW
+   const char* const pszWisdom = fftw_export_wisdom_to_string();
+-  wxString strFftwWisdom (pszWisdom);
++  wxString strFftwWisdom (pszWisdom, *wxConvCurrent);
+   fftw_free ((void*) pszWisdom);
+-  m_pConfig->Write ("FftwWisdom", strFftwWisdom);
++  m_pConfig->Write (_T("FftwWisdom"), strFftwWisdom);
+ #endif
+   delete m_pConfig;
+@@ -342,7 +358,7 @@
+ {
+   static int untitledNumber = 1;
+-  wxString filename ("Untitled");
++  wxString filename (_T("Untitled"));
+   filename << untitledNumber++;
+   return (filename);
+@@ -421,7 +437,7 @@
+ : wxDocMDIParentFrame(manager, NULL, id, title, pos, size, type, "MainFrame")
+ #else
+ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type)
+-: wxDocParentFrame(manager, frame, id, title, pos, size, type, "MainFrame")
++: wxDocParentFrame(manager, frame, id, title, pos, size, type, _T("MainFrame"))
+ #endif
+ {
+   m_bShuttingDown = false;
+@@ -429,14 +445,14 @@
+   //// Make a menubar
+   wxMenu *file_menu = new wxMenu;
+-  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O");
++  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  file_menu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
+   file_menu->AppendSeparator();
+-  file_menu->Append (MAINMENU_IMPORT, "&Import...\tCtrl-M");
+-  file_menu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  file_menu->Append (MAINMENU_IMPORT, _T("&Import...\tCtrl-M"));
++  file_menu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  file_menu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   //  history of files visited
+   theApp->getDocManager()->FileHistoryAddFilesToMenu(file_menu);
+@@ -448,21 +464,21 @@
+ #endif
+   wxMenu* help_menu = new wxMenu;
+-  help_menu->Append (MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
+-  help_menu->Append (IDH_QUICKSTART, "&Quick Start");
++  help_menu->Append (MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips"));
++  help_menu->Append (IDH_QUICKSTART, _T("&Quick Start"));
+ #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG))
+-  help_menu->Append (MAINMENU_HELP_SECONDARY, "&Secondary Help");
++  help_menu->Append (MAINMENU_HELP_SECONDARY, _T("&Secondary Help"));
+ #endif
+-  help_menu->Append (MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append (MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar* menu_bar = new wxMenuBar;
+-  menu_bar->Append(file_menu, "&File");
++  menu_bar->Append(file_menu, _T("&File"));
+ #ifndef CTSIM_MDI
+-  menu_bar->Append(m_pWindowMenu, "&Window");
++  menu_bar->Append(m_pWindowMenu, _T("&Window"));
+ #endif
+-  menu_bar->Append(help_menu, "&Help");
++  menu_bar->Append(help_menu, _T("&Help"));
+   SetMenuBar(menu_bar);
+@@ -470,7 +486,7 @@
+ #ifndef CTSIM_MDI
+   int i;
+   for (i = 0; i < MAX_WINDOW_MENUITEMS; i++) {
+-    m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, wxString("[EMPTY]"));
++    m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, _T("[EMPTY]"));
+     m_pWindowMenu->Append (m_apWindowMenuItems[i]);
+     m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false);
+   }
+@@ -552,11 +568,11 @@
+   DialogGetPhantom dialogPhantom (this, m_iDefaultPhantomID);
+   int dialogReturn = dialogPhantom.ShowModal();
+   if (dialogReturn == wxID_OK) {
+-    wxString selection (dialogPhantom.getPhantom());
++    wxString selection (dialogPhantom.getPhantom(), *wxConvCurrent);
+     if (theApp->getVerboseLogging())
+-      *theApp->getLog() << "Selected phantom " << selection.c_str() << "\n";
+-    wxString filename = selection + ".phm";
+-    m_iDefaultPhantomID = Phantom::convertNameToPhantomID (selection.c_str());
++      *theApp->getLog() << _T("Selected phantom ") << selection.c_str() << _T("\n");
++    wxString filename = selection + _T(".phm");
++    m_iDefaultPhantomID = Phantom::convertNameToPhantomID (selection.mb_str(wxConvUTF8));
+     theApp->getDocManager()->CreateDocument (filename, wxDOC_SILENT);
+   }
+@@ -568,23 +584,26 @@
+   DialogGetFilterParameters dialogFilter (this, m_iDefaultFilterXSize, m_iDefaultFilterYSize, m_iDefaultFilterID, m_dDefaultFilterParam, m_dDefaultFilterBandwidth, m_iDefaultFilterDomainID, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale);
+   int dialogReturn = dialogFilter.ShowModal();
+   if (dialogReturn == wxID_OK) {
+-    wxString strFilter (dialogFilter.getFilterName());
+-    wxString strDomain (dialogFilter.getDomainName());
+-    m_iDefaultFilterID = SignalFilter::convertFilterNameToID (strFilter.c_str());
+-    m_iDefaultFilterDomainID = SignalFilter::convertDomainNameToID (strDomain.c_str());
++    wxString strFilter (dialogFilter.getFilterName(), *wxConvCurrent);
++    wxString strDomain (dialogFilter.getDomainName(), *wxConvCurrent);
++    m_iDefaultFilterID = SignalFilter::convertFilterNameToID (strFilter.mb_str(wxConvUTF8));
++    m_iDefaultFilterDomainID = SignalFilter::convertDomainNameToID (strDomain.mb_str(wxConvUTF8));
+     m_iDefaultFilterXSize = dialogFilter.getXSize();
+     m_iDefaultFilterYSize = dialogFilter.getYSize();
+     m_dDefaultFilterBandwidth = dialogFilter.getBandwidth();
+     m_dDefaultFilterParam= dialogFilter.getFilterParam();
+     m_dDefaultFilterInputScale = dialogFilter.getInputScale();
+     m_dDefaultFilterOutputScale = dialogFilter.getOutputScale();
+-    std::ostringstream os;
+-    os << "Generate Filter=" << strFilter.c_str()
+-      << ", size=(" << static_cast<int>(m_iDefaultFilterXSize) << "," << static_cast<int>(m_iDefaultFilterYSize)
+-      << "), domain=" << strDomain.c_str() << ", filterParam=" << m_dDefaultFilterParam << ", bandwidth=" << m_dDefaultFilterBandwidth
+-      << ", inputScale=" << m_dDefaultFilterInputScale << ", outputScale=" << m_dDefaultFilterOutputScale;
+-    *theApp->getLog() << os.str().c_str() << "\n";
+-    wxString filename = "untitled.if";
++    wxString os;
++    os << _T("Generate Filter=") << strFilter
++       << _T(", size=(") << static_cast<int>(m_iDefaultFilterXSize) << _T(",")
++       << static_cast<int>(m_iDefaultFilterYSize)
++       << _T("), domain=") << strDomain.c_str() << _T(", filterParam=")
++       << m_dDefaultFilterParam << _T(", bandwidth=") <<
++      m_dDefaultFilterBandwidth
++       << _T(", inputScale=") << m_dDefaultFilterInputScale << _T(", outputScale=") << m_dDefaultFilterOutputScale;
++    *theApp->getLog() << os << _T("\n");
++    wxString filename = _T("untitled.if");
+     ImageFileDocument* pFilterDoc = theApp->newImageDoc();
+     pFilterDoc->setBadFileOpen();
+     if (! pFilterDoc) {
+@@ -593,8 +612,8 @@
+     }
+     ImageFile& rIF = pFilterDoc->getImageFile();
+     rIF.setArraySize (m_iDefaultFilterXSize, m_iDefaultFilterYSize);
+-    rIF.filterResponse (strDomain.c_str(), m_dDefaultFilterBandwidth, strFilter.c_str(), m_dDefaultFilterParam, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale);
+-    rIF.labelAdd (os.str().c_str());
++    rIF.filterResponse (strDomain.mb_str(wxConvUTF8), m_dDefaultFilterBandwidth, strFilter.mb_str(wxConvUTF8), m_dDefaultFilterParam, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale);
++    rIF.labelAdd (os.mb_str(wxConvUTF8));
+     if (theApp->getAskDeleteNewDocs())
+       pFilterDoc->Modify (true);
+     pFilterDoc->UpdateAllViews();
+@@ -693,7 +712,7 @@
+ #ifdef CTSIM_WINHELP
+     m_winHelp.DisplayContents ();
+ #else
+-    m_htmlHelp.Display ("Contents");
++    m_htmlHelp.Display (_T("Contents"));
+ #endif
+     break;
+@@ -724,7 +743,7 @@
+     wxDocument* pDoc = static_cast<wxDocument*>(pNode->GetData());
+     wxString strFilename = pDoc->GetFilename();
+     if (iPos < 10) {
+-      strFilename += "\tCtrl-";
++      strFilename += _T("\tCtrl-");
+       strFilename += static_cast<char>('0' + iPos);
+     }
+     static_cast<wxMenuItemBase*>(m_apWindowMenuItems[iPos])->SetName (strFilename);
+@@ -735,7 +754,7 @@
+   }
+   for (int i = iPos; i < MAX_WINDOW_MENUITEMS; i++) {
+     m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false);
+-    static_cast<wxMenuItemBase*>(m_apWindowMenuItems[i])->SetName (wxString("[EMPTY]"));
++    static_cast<wxMenuItemBase*>(m_apWindowMenuItems[i])->SetName (_T("[EMPTY]"));
+     m_apWindowMenuData[i] = NULL;
+   }
+ #endif
+@@ -830,7 +849,7 @@
+     const wxSize& size = wxDefaultSize,
+     long style = wxSTATIC_BORDER,
+     const wxValidator& validator = wxDefaultValidator,
+-    const wxString& name = "BitmapCtrl");
++                 const wxString& name = _T("BitmapCtrl"));
+   virtual ~BitmapControl();
+@@ -891,14 +910,14 @@
+ };
+ BitmapDialog::BitmapDialog (wxBitmap* pBitmap, char const* pszTitle)
+-: wxDialog(theApp->getMainFrame(), -1, wxString(pszTitle), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE)
++  : wxDialog(theApp->getMainFrame(), -1, wxString(pszTitle,*wxConvCurrent), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE)
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+   pTopSizer->Add (new BitmapControl (pBitmap, this), 0, wxALIGN_CENTER | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Ok");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Ok"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+   pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
+@@ -916,7 +935,7 @@
+ void
+ MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) )
+ {
+-  DialogPreferences dlg (this, "CTSim Preferences", theApp->getAdvancedOptions(),
++  DialogPreferences dlg (this, _T("CTSim Preferences"), theApp->getAdvancedOptions(),
+     theApp->getAskDeleteNewDocs(), theApp->getVerboseLogging(), theApp->getStartupTips(),
+     theApp->getUseBackgroundTasks());
+   if (dlg.ShowModal() == wxID_OK) {
+@@ -935,37 +954,43 @@
+   if (dialogImport.ShowModal() != wxID_OK)
+     return;
+-  wxString strFormatName (dialogImport.getFormatName ());
+-  m_iDefaultImportFormat = ImageFile::convertImportFormatNameToID (strFormatName.c_str());
++  wxString strFormatName (dialogImport.getFormatName (), *wxConvCurrent);
++  m_iDefaultImportFormat = ImageFile::convertImportFormatNameToID (strFormatName.mb_str(wxConvUTF8));
+   wxString strExt;
+   wxString strWildcard;
+   if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PPM) {
+-    strExt = ".ppm";
+-    strWildcard = "PPM Files (*.ppm)|*.ppm|PGM Files (*.pgm)|*.pgm";
++    strExt = _T(".ppm");
++    strWildcard = _T("PPM Files (*.ppm)|*.ppm|PGM Files (*.pgm)|*.pgm");
+   }
+ #ifdef HAVE_PNG
+   else if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PNG) {
+-    strExt = ".png";
+-    strWildcard = "PNG Files (*.png)|*.png";
++    strExt = _T(".png");
++    strWildcard = _T("PNG Files (*.png)|*.png");
+   }
+ #endif
+ #ifdef HAVE_CTN_DICOM
+   else if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_DICOM) {
+-    strExt = "*.*";
+-    strWildcard = "Dicom Files (*.*)|*.*";
++    strExt = _T("*.*");
++    strWildcard = _T("Dicom Files (*.*)|*.*");
+   }
+ #endif
+   else {
+     return;
+   }
+-  wxString strFilename = wxFileSelector (wxString("Import Filename"), wxString(""),
+-    wxString(""), strExt, strWildcard, wxHIDE_READONLY | wxOPEN);
++#if WXWIN_COMPATIBILITY_2_4
++  wxString strFilename = wxFileSelector (wxString(wxConvUTF8.cMB2WX("Import Filename")), wxString(wxConvUTF8.cMB2WX("")),
++                                         wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxHIDE_READONLY | wxOPEN);
++#else
++  wxString strFilename = wxFileSelector (wxString(wxConvUTF8.cMB2WX("Import Filename")), wxString(wxConvUTF8.cMB2WX("")),
++                                         wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxOPEN);
++#endif
++
+   if (! strFilename.IsEmpty()) {
+     if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PPM || m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PNG) {
+       ImageFile* pIF = new ImageFile;
+-      if (pIF->importImage (strFormatName.c_str(), strFilename.c_str())) {
++      if (pIF->importImage (strFormatName.mb_str(wxConvUTF8), strFilename.mb_str(wxConvUTF8))) {
+         ImageFileDocument* pIFDoc = theApp->newImageDoc();
+         pIFDoc->setImageFile(pIF);
+         pIFDoc->getView()->getFrame()->Show(true);
+@@ -982,9 +1007,9 @@
+     }
+ #ifdef HAVE_CTN_DICOM
+     else if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_DICOM) {
+-      DicomImporter dicomImport (strFilename.c_str());
++      DicomImporter dicomImport (strFilename.mb_str(wxConvUTF8));
+       if (dicomImport.fail()) {
+-        ::wxMessageBox (dicomImport.failMessage().c_str(), "Import Error");
++        ::wxMessageBox (wxConvUTF8.cMB2WX(dicomImport.failMessage().c_str()), _T("Import Error"));
+       } else if (dicomImport.testImage()) {
+         ImageFileDocument* pIFDoc = theApp->newImageDoc();
+         ImageFile* pIF = dicomImport.getImageFile();
+@@ -1011,7 +1036,7 @@
+         pProjDoc->getView()->setInitialClientSize();
+         pProjDoc->Activate();
+       } else
+-        ::wxMessageBox ("Unrecognized DICOM file contents", "Import Error");
++        ::wxMessageBox (_T("Unrecognized DICOM file contents"), _T("Import Error"));
+     }
+ #endif
+     else
+@@ -1024,38 +1049,38 @@
+ MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
+ {
+   wxString strOSDesc = ::wxGetOsDescription();
+-  *theApp->getLog() << "Operating System: " << strOSDesc;
+-  *theApp->getLog() << ", wxWindows: " << wxVERSION_STRING;
+-#ifdef __TIMESTAMP__
+-  *theApp->getLog() << ", Build Date: " << __TIMESTAMP__;
++  *theApp->getLog() << _T("Operating System: ") << strOSDesc;
++  *theApp->getLog() << _T(", wxWindows: ") << wxVERSION_STRING;
++#ifdef _TIMESTAMP__
++  *theApp->getLog() << _T(", Build Date: ") << wxConvUTF8.cMB2WX(_TIMESTAMP__);
+ #endif
+ #if defined(DEBUG)
+-  *theApp->getLog() << ", Debug version";
++  *theApp->getLog() << _T(", Debug version");
+ #else
+-  *theApp->getLog() << ", Release version";
++  *theApp->getLog() << _T(", Release version");
+ #endif
+ #ifdef VERSION
+-    *theApp->getLog() << " " <<  VERSION;
++  *theApp->getLog() << _T(" ") <<  wxConvUTF8.cMB2WX(VERSION);
+ #elif defined(CTSIMVERSION)
+-    *theApp->getLog() << " " <<  CTSIMVERSION;
++  *theApp->getLog() << _T(" ") <<  _T(CTSIMVERSION);
+ #endif
+-  *theApp->getLog() << "\n";
++    *theApp->getLog() << _T("\n");
+   wxBitmap bmp (splash);
+   if (bmp.Ok()) {
+     BitmapDialog dlg (&bmp, "About CTSim");
+     dlg.ShowModal();
+   } else {
+-    wxString msg = "CTSim\nThe Open Source Computed Tomography Simulator\n";
++    wxString msg = _T("CTSim\nThe Open Source Computed Tomography Simulator\n");
+ #ifdef VERSION
+-    msg << "Version: " <<  VERSION << "\n\n";
++    msg << _T("Version: ") <<  wxConvUTF8.cMB2WX(VERSION) << _T("\n\n");
+ #elif defined(CTSIMVERSION)
+-    msg << "Version: " <<  CTSIMVERSION << "\n\n";
++    msg << _T("Version: ") <<  wxConvUTF8.cMB2WX(CTSIMVERSION) << _T("\n\n");
+ #endif
+-    msg += "Author: Kevin Rosenberg <kevin@rosenberg.net>\nUsage: ctsim [files-to-open..] [--help]";
++    msg += _T("Author: Kevin Rosenberg <kevin@rosenberg.net>\nUsage: ctsim [files-to-open..] [--help]");
+-    wxMessageBox(msg, "About CTSim", wxOK | wxICON_INFORMATION, this);
+-    *theApp->getLog() << msg << "\n";
++    wxMessageBox(msg, _T("About CTSim"), wxOK | wxICON_INFORMATION, this);
++    *theApp->getLog() << msg << wxConvUTF8.cMB2WX("\n");
+   }
+ }
+@@ -1065,7 +1090,7 @@
+ ProjectionFileDocument*
+ CTSimApp::newProjectionDoc()
+ {
+-  ProjectionFileDocument* newDoc = dynamic_cast<ProjectionFileDocument*>(m_pDocTemplProjection->CreateDocument (""));
++  ProjectionFileDocument* newDoc = dynamic_cast<ProjectionFileDocument*>(m_pDocTemplProjection->CreateDocument (_T("")));
+   if (newDoc) {
+     newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName());
+     newDoc->SetDocumentTemplate (m_pDocTemplProjection);
+@@ -1078,7 +1103,7 @@
+ ImageFileDocument*
+ CTSimApp::newImageDoc()
+ {
+-  ImageFileDocument* newDoc = dynamic_cast<ImageFileDocument*>(m_pDocTemplImage->CreateDocument (""));
++  ImageFileDocument* newDoc = dynamic_cast<ImageFileDocument*>(m_pDocTemplImage->CreateDocument (_T("")));
+   if (newDoc) {
+     newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName());
+     newDoc->SetDocumentTemplate (m_pDocTemplImage);
+@@ -1091,7 +1116,7 @@
+ PlotFileDocument*
+ CTSimApp::newPlotDoc()
+ {
+-  PlotFileDocument* newDoc = dynamic_cast<PlotFileDocument*>(m_pDocTemplPlot->CreateDocument (""));
++  PlotFileDocument* newDoc = dynamic_cast<PlotFileDocument*>(m_pDocTemplPlot->CreateDocument (_T("")));
+   if (newDoc) {
+     newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName());
+     newDoc->SetDocumentTemplate (m_pDocTemplPlot);
+@@ -1106,9 +1131,9 @@
+ CTSimApp::newTextDoc()
+ {
+   wxString strFilename (getUntitledFilename());
+-  strFilename += ".txt";
++  strFilename += wxString(".txt", *wxConvCurrent);
+-  TextFileDocument* newDoc = dynamic_cast<TextFileDocument*>(m_pDocTemplText->CreateDocument (""));
++  TextFileDocument* newDoc = dynamic_cast<TextFileDocument*>(m_pDocTemplText->CreateDocument (_T("")));
+   if (newDoc) {
+     newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName());
+     newDoc->SetDocumentTemplate (m_pDocTemplText);
+@@ -1122,7 +1147,7 @@
+ PhantomFileDocument*
+ CTSimApp::newPhantomDoc()
+ {
+-  PhantomFileDocument* newDoc = dynamic_cast<PhantomFileDocument*>(m_pDocTemplPhantom->CreateDocument (""));
++  PhantomFileDocument* newDoc = dynamic_cast<PhantomFileDocument*>(m_pDocTemplPhantom->CreateDocument (_T("")));
+   if (newDoc) {
+     newDoc->SetDocumentName (m_pDocTemplPhantom->GetDocumentName());
+     newDoc->SetDocumentTemplate (m_pDocTemplPhantom);
+@@ -1137,7 +1162,7 @@
+ Graph3dFileDocument*
+ CTSimApp::newGraph3dDoc()
+ {
+-  Graph3dFileDocument* newDoc = dynamic_cast<Graph3dFileDocument*>(m_pDocTemplGraph3d->CreateDocument (""));
++  Graph3dFileDocument* newDoc = dynamic_cast<Graph3dFileDocument*>(m_pDocTemplGraph3d->CreateDocument (_T("")));
+   if (newDoc) {
+     newDoc->SetDocumentName (m_pDocTemplGraph3d->GetDocumentName());
+     newDoc->SetDocumentTemplate (m_pDocTemplGraph3d);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dialogs.cpp ctsim-wx2.8/src/dialogs.cpp
+--- ctsim/src/dialogs.cpp      2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/dialogs.cpp        2008-07-21 10:08:10.892315253 -0600
+@@ -57,12 +57,14 @@
+ //    StringValueAndTitleListBox
+ ///////////////////////////////////////////////////////////////////////
+-StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* const aszTitle[], const char* const aszValue[])
++StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, 
++                                                        wxChar const* const* asTitle, 
++                                                        char const* const* aszValue)
+ : wxListBox ()
+ {
+   wxString* psTitle = new wxString [nChoices];
+   for (int i = 0; i < nChoices; i++)
+-    psTitle[i] = aszTitle[i];
++    psTitle[i] = asTitle[i];
+   Create (pParent, -1, wxDefaultPosition, wxSize(-1,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
+@@ -76,12 +78,16 @@
+   return m_ppszValues[GetSelection()];
+ }
+-StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent, const wxString& strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[])
++StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent, 
++                                                          wxChar const* strTitle, 
++                                                          int nChoices, 
++                                                          char const* const* aszTitle, 
++                                                          char const* const* aszValue)
+ : wxRadioBox ()
+ {
+   wxString* psTitle = new wxString [nChoices];
+   for (int i = 0; i < nChoices; i++)
+-    psTitle[i] = aszTitle[i];
++    psTitle[i] = wxConvUTF8.cMB2WX(aszTitle[i]);
+   Create (pParent, -1, strTitle, wxDefaultPosition, wxDefaultSize, nChoices, psTitle, 1, wxRA_SPECIFY_COLS);
+@@ -89,6 +95,8 @@
+   delete [] psTitle;
+ };
++
++
+ const char*
+ StringValueAndTitleRadioBox::getSelectionStringValue () const
+ {
+@@ -105,7 +113,7 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Select Phantom"), 0, wxCENTER | wxALL, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Select Phantom")), 0, wxCENTER | wxALL, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+@@ -116,9 +124,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PHANTOM);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -149,11 +157,11 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Select Theta Range"), 0, wxCENTER | wxALL, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Select Theta Range")), 0, wxCENTER | wxALL, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+-  wxString asTitle[] = {"Unconstrained", "Normalized to 2pi", "Fold to pi"};
++  wxString asTitle[] = {_T("Unconstrained"), _T("Normalized to 2pi"), _T("Fold to pi")};
+   m_pRadioBoxThetaRange = new wxRadioBox (this, -1, _T("Theta Range"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
+   if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_UNCONSTRAINED)
+@@ -168,9 +176,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_THETA_RANGE);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -202,12 +210,13 @@
+ //    DialogGetComparisonImage
+ ///////////////////////////////////////////////////////////////////////
+-DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference)
+-: wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF)
++DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, wxChar const* pwszTitle, 
++                                                    const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference)
++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF)
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxALL, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxALL, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
+@@ -226,7 +235,7 @@
+   pTopSizer->Add (m_pListBoxImageChoices, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
+   if (bShowMakeDifference) {
+-    m_pMakeDifferenceImage = new wxCheckBox (this, -1, "Make Difference Image");
++    m_pMakeDifferenceImage = new wxCheckBox (this, -1, _T("Make Difference Image"));
+     m_pMakeDifferenceImage->SetValue (FALSE);
+     pTopSizer->Add (m_pMakeDifferenceImage, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
+   } else
+@@ -235,9 +244,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_COMPARISON);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -271,34 +280,35 @@
+ // CLASS DiaglogPreferences Implementation
+ /////////////////////////////////////////////////////////////////////
+-DialogPreferences::DialogPreferences (wxWindow* pParent, const char* const pszTitle,
+-                   bool bAdvancedOptions, bool bAskDeleteNewDocs, bool bVerboseLogging, bool bStartupTips, bool bUseBackgroundTasks)
+-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
++DialogPreferences::DialogPreferences (wxWindow* pParent, wxChar const* pwszTitle,
++                                      bool bAdvancedOptions, bool bAskDeleteNewDocs, bool bVerboseLogging, bool bStartupTips, 
++                                      bool bUseBackgroundTasks)
++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+-  m_pCBAdvancedOptions = new wxCheckBox (this, -1, "Advanced Options", wxDefaultPosition, wxSize(250, 25), 0);
++  m_pCBAdvancedOptions = new wxCheckBox (this, -1, _T("Advanced Options"), wxDefaultPosition, wxSize(250, 25), 0);
+   m_pCBAdvancedOptions->SetValue (bAdvancedOptions);
+   pTopSizer->Add (m_pCBAdvancedOptions, 0, wxALIGN_CENTER_VERTICAL);
+-  m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, "Ask \"Save New Documents\" Before Closing", wxDefaultPosition, wxSize(250, 25), 0);
++  m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, _T("Ask \"Save New Documents\" Before Closing"), wxDefaultPosition, wxSize(250, 25), 0);
+   m_pCBAskDeleteNewDocs->SetValue (bAskDeleteNewDocs);
+   pTopSizer->Add (m_pCBAskDeleteNewDocs, 0, wxALIGN_CENTER_VERTICAL);
+-  m_pCBVerboseLogging = new wxCheckBox (this, -1, "Verbose Logging", wxDefaultPosition, wxSize(250, 25), 0);
++  m_pCBVerboseLogging = new wxCheckBox (this, -1, _T("Verbose Logging"), wxDefaultPosition, wxSize(250, 25), 0);
+   m_pCBVerboseLogging->SetValue (bVerboseLogging);
+   pTopSizer->Add (m_pCBVerboseLogging, 0, wxALIGN_CENTER_VERTICAL);
+-  m_pCBStartupTips = new wxCheckBox (this, -1, "Show Tips at Start", wxDefaultPosition, wxSize(250, 25), 0);
++  m_pCBStartupTips = new wxCheckBox (this, -1, _T("Show Tips at Start"), wxDefaultPosition, wxSize(250, 25), 0);
+   m_pCBStartupTips->SetValue (bStartupTips);
+   pTopSizer->Add (m_pCBStartupTips, 0, wxALIGN_CENTER_VERTICAL);
+ #if HAVE_WXTHREADS && MSVC
+-  m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, "Put Tasks in Background", wxDefaultPosition, wxSize(250, 25), 0);
++  m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, _T("Put Tasks in Background"), wxDefaultPosition, wxSize(250, 25), 0);
+   m_pCBUseBackgroundTasks->SetValue (bUseBackgroundTasks);
+   pTopSizer->Add (m_pCBUseBackgroundTasks, 0, wxALIGN_CENTER_VERTICAL);
+ #endif
+@@ -306,9 +316,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PREFERENCES);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -365,35 +375,35 @@
+ // CLASS DiaglogGetMinMax Implementation
+ /////////////////////////////////////////////////////////////////////
+-DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin, double dDefaultMax)
+-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
++DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, wxChar const* pwszTitle, double dDefaultMin, double dDefaultMax)
++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+-  std::ostringstream os;
+-  os << dDefaultMin;
+-  m_pTextCtrlMin = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  std::ostringstream osMax;
+-  osMax << dDefaultMax;
+-  m_pTextCtrlMax = new wxTextCtrl (this, -1, osMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
++  wxString sMin;
++  sMin << dDefaultMin;
++  m_pTextCtrlMin = new wxTextCtrl (this, -1, sMin, wxDefaultPosition, wxSize(100, 25), 0);
++  wxString sMax;
++  sMax << dDefaultMax;
++  m_pTextCtrlMax = new wxTextCtrl (this, -1, sMax, wxDefaultPosition, wxSize(100, 25), 0);
+   wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Minimum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Minimum")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Maximum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Maximum")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL);
+   pTopSizer->Add (pGridSizer, 1, wxALL, 10);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_MINMAX);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -443,30 +453,30 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Auto Scale Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Auto Scale Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+-  wxString asTitle[] = {"Mode", "Median", "Mean"};
++  wxString asTitle[] = {_T("Mode"), _T("Median"), _T("Mean")};
+   m_pRadioBoxCenter = new wxRadioBox (this, -1, _T("Center"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
+   m_pRadioBoxCenter->SetSelection (0);
+   pTopSizer->Add (m_pRadioBoxCenter, 0, wxALL | wxALIGN_CENTER);
+   wxGridSizer *pGridSizer = new wxGridSizer (2);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Standard Deviation Factor"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osDefaultFactor;
+-  osDefaultFactor << dDefaultScaleFactor;
+-  m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, osDefaultFactor.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Standard Deviation Factor")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sDefaultFactor;
++  sDefaultFactor << dDefaultScaleFactor;
++  m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, sDefaultFactor, wxDefaultPosition, wxSize(100, 25), 0);
+   pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL);
+   pTopSizer->Add (pGridSizer, 1, wxALL, 10);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_AUTOSCALE);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -493,13 +503,13 @@
+   wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
+   double dValue;
+   if (! sStddevFactor.ToDouble (&dValue)) {
+-    *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
++    *theApp->getLog() << _T("Error: Non-numeric Standard Deviation Factor of ") << sStddevFactor << _T("\n");
+     return false;
+   }
+   double dHalfWidth = dValue * m_dStdDev / 2;
+   *pMin = dCenter - dHalfWidth;
+   *pMax = dCenter + dHalfWidth;
+-  *theApp->getLog() << "Setting minimum to " << *pMin << " and maximum to " << *pMax << "\n";
++  *theApp->getLog() << _T("Setting minimum to ") << *pMin << _T(" and maximum to ") << *pMax << _T("\n");
+   return true;
+ }
+@@ -510,7 +520,7 @@
+   wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
+   double dValue = 1.;
+   if (! sStddevFactor.ToDouble (&dValue)) {
+-    *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
++    *theApp->getLog() << _T("Error: Non-numeric Standard Deviation Factor of ") << sStddevFactor << _T("\n");
+   }
+   return dValue;
+@@ -530,30 +540,30 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Rasterization Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Rasterization Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
+-  std::ostringstream os;
+-  os << iDefaultXSize;
+-  m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sXSize;
++  sXSize << iDefaultXSize;
++  m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osYSize;
+-  osYSize << iDefaultYSize;
+-  m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sYSize;
++  sYSize << iDefaultYSize;
++  m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osViewRatio;
+-  osViewRatio << dDefaultViewRatio;
+-  m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sViewRatio;
++  sViewRatio << dDefaultViewRatio;
++  m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, sViewRatio, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("View Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osNSamples;
+-  osNSamples << iDefaultNSamples;
+-  m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Samples per Pixel"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sNSamples;
++  sNSamples << iDefaultNSamples;
++  m_pTextCtrlNSamples = new wxTextCtrl (this, -1, sNSamples, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Samples per Pixel")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
+   pTopSizer->Add (pGridSizer, 1, wxALL, 10);
+@@ -561,9 +571,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RASTERIZE);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -653,7 +663,7 @@
+   m_iDefaultTrace = iDefaultTrace;
+   m_iDefaultGeometry = iDefaultGeometry;
+-  pTopSizer->Add (new wxStaticText (this, -1, "Projection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Projection Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+@@ -668,58 +678,58 @@
+   pGridSizer->Add (m_pRadioBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
+           wxFlexGridSizer* pText1Sizer = new wxFlexGridSizer(2);
+-  std::ostringstream os;
+-  os << iDefaultNDet;
+-  m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pText1Sizer->Add (new wxStaticText (this, -1, "Detectors"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sNDet;
++  sNDet << iDefaultNDet;
++  m_pTextCtrlNDet = new wxTextCtrl (this, -1, sNDet, wxDefaultPosition, wxSize(100, 25), 0);
++  pText1Sizer->Add (new wxStaticText (this, -1, _T("Detectors")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pText1Sizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osNView;
+-  osNView << iDefaultNView;
+-  m_pTextCtrlNView = new wxTextCtrl (this, -1, osNView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pText1Sizer->Add (new wxStaticText (this, -1, "Views"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sNView;
++  sNView << iDefaultNView;
++  m_pTextCtrlNView = new wxTextCtrl (this, -1, sNView, wxDefaultPosition, wxSize(100, 25), 0);
++  pText1Sizer->Add (new wxStaticText (this, -1, _T("Views")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pText1Sizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osNSamples;
+-  osNSamples << iDefaultNSamples;
+-  m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pText1Sizer->Add (new wxStaticText (this, -1, "Samples per Detector"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sNSamples;
++  sNSamples << iDefaultNSamples;
++  m_pTextCtrlNSamples = new wxTextCtrl (this, -1, sNSamples, wxDefaultPosition, wxSize(100, 25), 0);
++  pText1Sizer->Add (new wxStaticText (this, -1, _T("Samples per Detector")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pText1Sizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (pText1Sizer);
+   wxFlexGridSizer* pText2Sizer = new wxFlexGridSizer(2);
+-  std::ostringstream osViewRatio;
+-  osViewRatio << dDefaultViewRatio;
+-  m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pText2Sizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sViewRatio;
++  sViewRatio << dDefaultViewRatio;
++  m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, sViewRatio, wxDefaultPosition, wxSize(100, 25), 0);
++  pText2Sizer->Add (new wxStaticText (this, -1, _T("View Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pText2Sizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osScanRatio;
+-  osScanRatio << dDefaultScanRatio;
+-  m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, osScanRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pText2Sizer->Add (new wxStaticText (this, -1, "Scan Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sScanRatio;
++  sScanRatio << dDefaultScanRatio;
++  m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, sScanRatio, wxDefaultPosition, wxSize(100, 25), 0);
++  pText2Sizer->Add (new wxStaticText (this, -1, _T("Scan Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pText2Sizer->Add (m_pTextCtrlScanRatio, 0, wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osFocalLength;
+-  osFocalLength << dDefaultFocalLength;
+-  m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, osFocalLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pText2Sizer->Add (new wxStaticText (this, -1, "Focal Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sFocalLength;
++  sFocalLength << dDefaultFocalLength;
++  m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, sFocalLength, wxDefaultPosition, wxSize(100, 25), 0);
++  pText2Sizer->Add (new wxStaticText (this, -1, _T("Focal Length Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pText2Sizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL);
+   if (theApp->getAdvancedOptions()) {
+-    std::ostringstream osCenterDetectorLength;
+-    osCenterDetectorLength << dDefaultCenterDetectorLength;
+-    m_pTextCtrlCenterDetectorLength = new wxTextCtrl (this, -1, osCenterDetectorLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pText2Sizer->Add (new wxStaticText (this, -1, "Center-Detector Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sCenterDetectorLength;
++    sCenterDetectorLength << dDefaultCenterDetectorLength;
++    m_pTextCtrlCenterDetectorLength = new wxTextCtrl (this, -1, sCenterDetectorLength, wxDefaultPosition, wxSize(100, 25), 0);
++    pText2Sizer->Add (new wxStaticText (this, -1, _T("Center-Detector Length Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pText2Sizer->Add (m_pTextCtrlCenterDetectorLength, 0, wxALIGN_CENTER_VERTICAL);
+-    std::ostringstream osRotAngle;
+-    osRotAngle << dDefaultRotAngle;
+-    m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pText2Sizer->Add (new wxStaticText (this, -1, "Rotation Angle (Fraction of circle)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sRotAngle;
++    sRotAngle << dDefaultRotAngle;
++    m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, sRotAngle, wxDefaultPosition, wxSize(100, 25), 0);
++    pText2Sizer->Add (new wxStaticText (this, -1, _T("Rotation Angle (Fraction of circle)")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pText2Sizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL);
+-    std::ostringstream osOffsetView;
+-    osOffsetView << iDefaultOffsetView;
+-    m_pTextCtrlOffsetView = new wxTextCtrl (this, -1, osOffsetView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pText2Sizer->Add (new wxStaticText (this, -1, "Gantry offset in units of 'views' "), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sOffsetView;
++    sOffsetView << iDefaultOffsetView;
++    m_pTextCtrlOffsetView = new wxTextCtrl (this, -1, sOffsetView, wxDefaultPosition, wxSize(100, 25), 0);
++    pText2Sizer->Add (new wxStaticText (this, -1, _T("Gantry offset in units of 'views' ")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pText2Sizer->Add (m_pTextCtrlOffsetView, 0, wxALIGN_CENTER_VERTICAL);
+   }
+@@ -730,9 +740,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PROJECTIONS);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -907,7 +917,7 @@
+   m_dDefaultRoiYMin = pDefaultROI->m_dYMin;
+   m_dDefaultRoiYMax = pDefaultROI->m_dYMax;
+-  pTopSizer->Add (new wxStaticText (this, -1, "Filtered Backprojection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Filtered Backprojection Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxFlexGridSizer* pGridSizer = NULL;
+@@ -966,61 +976,61 @@
+   pGridSizer->Add (m_pRadioBoxTrace);
+   wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
+-  std::ostringstream os;
+-  os << iDefaultXSize;
+-  m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sXSize;
++  sXSize << iDefaultXSize;
++  m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pTextGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osYSize;
+-  osYSize << iDefaultYSize;
+-  m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sYSize;
++  sYSize << iDefaultYSize;
++  m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pTextGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osHammingParam;
+-  osHammingParam << dDefaultHammingParam;
+-  m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osHammingParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pTextGridSizer->Add (new wxStaticText (this, -1, "Hamming Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sHammingParam;
++  sHammingParam << dDefaultHammingParam;
++  m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, sHammingParam, wxDefaultPosition, wxSize(100, 25), 0);
++  pTextGridSizer->Add (new wxStaticText (this, -1, _T("Hamming Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pTextGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+   if (theApp->getAdvancedOptions()) {
+-    std::ostringstream osZeropad;
+-    osZeropad << iDefaultZeropad;
+-    m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sZeropad;
++    sZeropad << iDefaultZeropad;
++    m_pTextCtrlZeropad = new wxTextCtrl (this, -1, sZeropad, wxDefaultPosition, wxSize(100, 25), 0);
++    pTextGridSizer->Add (new wxStaticText (this, -1, _T("Zeropad")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+   }
+   pGridSizer->Add (pTextGridSizer);
+ #if HAVE_FREQ_PREINTERP
+-  std::ostringstream osInterpParam;
+-  osInterpParam << iDefaultInterpParam;
+-  m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, osInterpParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Interpolation Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sInterpParam;
++  sInterpParam << iDefaultInterpParam;
++  m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, sInterpParam, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Interpolation Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+ #endif
+   if (theApp->getAdvancedOptions()) {
+     wxFlexGridSizer* pROIGridSizer = new wxFlexGridSizer (2);
+-    std::ostringstream osRoiXMin;
+-    osRoiXMin << m_dDefaultRoiXMin;
+-    m_pTextCtrlRoiXMin = new wxTextCtrl (this, -1, osRoiXMin.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pROIGridSizer->Add (new wxStaticText (this, -1, "ROI XMin"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sRoiXMin;
++    sRoiXMin << m_dDefaultRoiXMin;
++    m_pTextCtrlRoiXMin = new wxTextCtrl (this, -1, sRoiXMin, wxDefaultPosition, wxSize(100, 25), 0);
++    pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI XMin")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pROIGridSizer->Add (m_pTextCtrlRoiXMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-    std::ostringstream osRoiXMax;
+-    osRoiXMax << m_dDefaultRoiXMax;
+-    m_pTextCtrlRoiXMax = new wxTextCtrl (this, -1, osRoiXMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pROIGridSizer->Add (new wxStaticText (this, -1, "ROI XMax"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sRoiXMax;
++    sRoiXMax << m_dDefaultRoiXMax;
++    m_pTextCtrlRoiXMax = new wxTextCtrl (this, -1, sRoiXMax, wxDefaultPosition, wxSize(100, 25), 0);
++    pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI XMax")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pROIGridSizer->Add (m_pTextCtrlRoiXMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-    std::ostringstream osRoiYMin;
+-    osRoiYMin << m_dDefaultRoiYMin;
+-    m_pTextCtrlRoiYMin = new wxTextCtrl (this, -1, osRoiYMin.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pROIGridSizer->Add (new wxStaticText (this, -1, "ROI YMin"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sRoiYMin;
++    sRoiYMin << m_dDefaultRoiYMin;
++    m_pTextCtrlRoiYMin = new wxTextCtrl (this, -1, sRoiYMin, wxDefaultPosition, wxSize(100, 25), 0);
++    pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI YMin")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pROIGridSizer->Add (m_pTextCtrlRoiYMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-    std::ostringstream osRoiYMax;
+-    osRoiYMax << m_dDefaultRoiYMax;
+-    m_pTextCtrlRoiYMax = new wxTextCtrl (this, -1, osRoiYMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pROIGridSizer->Add (new wxStaticText (this, -1, "ROI YMax"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sRoiYMax;
++    sRoiYMax << m_dDefaultRoiYMax;
++    m_pTextCtrlRoiYMax = new wxTextCtrl (this, -1, sRoiYMax, wxDefaultPosition, wxSize(100, 25), 0);
++    pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI YMax")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pROIGridSizer->Add (m_pTextCtrlRoiYMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+     pGridSizer->Add (pROIGridSizer);
+@@ -1031,9 +1041,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RECONSTRUCTION);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -1211,7 +1221,7 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Filter Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Filter Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
+@@ -1224,40 +1234,40 @@
+   m_pRadioBoxDomain->SetSelection (iDefaultDomainID);
+   pGridSizer->Add (m_pRadioBoxDomain, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
+-  std::ostringstream os;
+-  os << iDefaultXSize;
+-  m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sXSize;
++  sXSize << iDefaultXSize;
++  m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osYSize;
+-  osYSize << iDefaultYSize;
+-  m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sYSize;
++  sYSize << iDefaultYSize;
++  m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osFilterParam;
+-  osFilterParam << dDefaultFilterParam;
+-  m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sFilterParam;
++  sFilterParam << dDefaultFilterParam;
++  m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, sFilterParam, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Filter Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osBandwidth;
+-  osBandwidth << dDefaultBandwidth;
+-  m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, osBandwidth.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Bandwidth"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sBandwidth;
++  sBandwidth << dDefaultBandwidth;
++  m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, sBandwidth, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Bandwidth")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlBandwidth, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osInputScale;
+-  osInputScale << dDefaultInputScale;
+-  m_pTextCtrlInputScale = new wxTextCtrl (this, -1, osInputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Axis (input) Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sInputScale;
++  sInputScale << dDefaultInputScale;
++  m_pTextCtrlInputScale = new wxTextCtrl (this, -1, sInputScale, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Axis (input) Scale")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlInputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osOutputScale;
+-  osOutputScale << dDefaultOutputScale;
+-  m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, osOutputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Filter Output Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sOutputScale;
++  sOutputScale << dDefaultOutputScale;
++  m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, sOutputScale, wxDefaultPosition, wxSize(100, 25), 0);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Filter Output Scale")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlOutputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+   pTopSizer->Add (pGridSizer, 1, wxALL, 3);
+@@ -1265,9 +1275,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_FILTER);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -1376,7 +1386,7 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Select Export Format"), 0, wxALIGN_CENTER | wxALL, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Select Export Format")), 0, wxALIGN_CENTER | wxALL, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
+@@ -1388,9 +1398,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_EXPORT);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -1421,7 +1431,7 @@
+ {
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, "Select Import Format"), 0, wxALIGN_CENTER | wxALL, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, _T("Select Import Format")), 0, wxALIGN_CENTER | wxALL, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
+@@ -1433,9 +1443,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_IMPORT);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+@@ -1460,38 +1470,38 @@
+ // CLASS DiaglogGetXYSize Implementation
+ /////////////////////////////////////////////////////////////////////
+-DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize, int iDefaultYSize)
+-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
++DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize, int iDefaultYSize)
++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
+ {
+   m_iDefaultXSize = iDefaultXSize;
+   m_iDefaultYSize = iDefaultYSize;
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+-  std::ostringstream os;
+-  os << iDefaultXSize;
+-  m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  std::ostringstream osYSize;
+-  osYSize << iDefaultYSize;
+-  m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
++  wxString sXSize;
++  sXSize << iDefaultXSize;
++  m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
++  wxString sYSize;
++  sYSize << iDefaultYSize;
++  m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
+   wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
+-  pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
+-  pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
+   pTopSizer->Add (pGridSizer, 1, wxALL, 10);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
+@@ -1537,9 +1547,9 @@
+ // DialogGetConvertPolarParameters
+ /////////////////////////////////////////////////////////////////////
+-DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle,
++DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, wxChar const * pwszTitle,
+        int iDefaultXSize, int iDefaultYSize, int iDefaultInterpolationID, int iDefaultZeropad, int iHelpID)
+-: wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
++: wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
+ {
+   m_iDefaultXSize = iDefaultXSize;
+   m_iDefaultYSize = iDefaultYSize;
+@@ -1547,7 +1557,7 @@
+   wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+-  pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
++  pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (1);
+@@ -1557,21 +1567,21 @@
+   pGridSizer->Add (m_pRadioBoxInterpolation, 0, wxALL | wxALIGN_CENTER);
+   wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
+-  std::ostringstream os;
+-  os << iDefaultXSize;
+-  m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sXSize;
++  sXSize << iDefaultXSize;
++  m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pTextGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+-  std::ostringstream osYSize;
+-  osYSize << iDefaultYSize;
+-  m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-  pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++  wxString sYSize;
++  sYSize << iDefaultYSize;
++  m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
++  pTextGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+   pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+   if (m_iDefaultZeropad >= 0) {
+-    std::ostringstream osZeropad;
+-    osZeropad << iDefaultZeropad;
+-    m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
+-    pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
++    wxString sZeropad;
++    sZeropad << iDefaultZeropad;
++    m_pTextCtrlZeropad = new wxTextCtrl (this, -1, sZeropad, wxDefaultPosition, wxSize(100, 25), 0);
++    pTextGridSizer->Add (new wxStaticText (this, -1, _T("Zeropad")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+     pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+   }
+@@ -1582,9 +1592,9 @@
+   pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+-  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+   pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, iHelpID);
+   pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dialogs.h ctsim-wx2.8/src/dialogs.h
+--- ctsim/src/dialogs.h        2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/dialogs.h  2008-07-21 10:08:10.892315253 -0600
+@@ -44,7 +44,7 @@
+ {
+ public:
+   CTSimHelpButton (wxWindow* parent, int id)
+-    : wxButton (parent, id, "Help")
++    : wxButton (parent, id, _T("Help"))
+   {}
+ };
+@@ -57,7 +57,12 @@
+ class StringValueAndTitleListBox : public wxListBox
+ {
+  public:
+-  StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* const aszTitle[], const char* const aszValue[]);
++  StringValueAndTitleListBox (wxDialog* pParent, int nChoices, wxChar const* const* asTitle,
++                              char const* const aszValue[]);
++  StringValueAndTitleListBox (wxDialog* pParent, int nChoices, wxChar const* title,
++                              char const* const* aszTitle, char const* const* aszValue);
++  StringValueAndTitleListBox (wxDialog* pParent, int nChoices, wxChar const* title,
++                              wxChar const* const* asTitle, char const* const* aszValue);
+     const char* getSelectionStringValue () const;
+@@ -69,7 +74,7 @@
+ class StringValueAndTitleRadioBox : public wxRadioBox
+ {
+  public:
+-  StringValueAndTitleRadioBox (wxDialog* pParent, const wxString& strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[]);
++  StringValueAndTitleRadioBox (wxDialog* pParent, wxChar const* strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[]);
+   const char* getSelectionStringValue () const;
+@@ -108,7 +113,7 @@
+ class DialogGetComparisonImage : public wxDialog
+ {
+  public:
+-   DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference);
++   DialogGetComparisonImage (wxWindow* pParent, wxChar const * pwszTitle, const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference);
+     virtual ~DialogGetComparisonImage () {}
+     ImageFileDocument* getImageFileDocument ();
+@@ -125,7 +130,7 @@
+ class DialogPreferences : public wxDialog
+ {
+  public:
+-    DialogPreferences (wxWindow* pParent, const char* const pszTitle, bool bAdvanced, bool bAskNewDocs,
++  DialogPreferences (wxWindow* pParent, wxChar const* pszTitle, bool bAdvanced, bool bAskNewDocs,
+       bool bVerboseLogging, bool bStartupTips, bool bUseBackgroundTasks);
+     virtual ~DialogPreferences ();
+@@ -148,7 +153,7 @@
+ class DialogGetMinMax : public wxDialog
+ {
+  public:
+-    DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin = 0., double dDefaultMax = 0.);
++    DialogGetMinMax (wxWindow* pParent, wxChar const* pszTitle, double dDefaultMin = 0., double dDefaultMax = 0.);
+     virtual ~DialogGetMinMax ();
+     double getMinimum ();
+@@ -373,7 +378,7 @@
+ class DialogGetXYSize : public wxDialog
+ {
+  public:
+-    DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize = 1, int iDefaultYSize = 1);
++    DialogGetXYSize (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize = 1, int iDefaultYSize = 1);
+     virtual ~DialogGetXYSize ();
+     unsigned int getXSize ();
+@@ -391,7 +396,7 @@
+ class DialogGetConvertPolarParameters : public wxDialog
+ {
+  public:
+-   DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize = 0,
++   DialogGetConvertPolarParameters (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize = 0,
+      int iDefaultYSize = 0, int iDefaultInterpolationID = Projections::POLAR_INTERP_BILINEAR,
+      int iDefaultZeropad = 3, int iHelpID = IDH_DLG_POLAR);
+    virtual ~DialogGetConvertPolarParameters ();
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgezplot.cpp ctsim-wx2.8/src/dlgezplot.cpp
+--- ctsim/src/dlgezplot.cpp    2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/dlgezplot.cpp      2008-07-21 10:08:10.900315744 -0600
+@@ -104,7 +104,7 @@
+ wxEZPlotDialog::wxEZPlotDialog (wxWindow *parent, bool bCancelButton)
+-: wxDialog((parent ? parent : theApp->getMainFrame()), -1, wxString("EZPlot"), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL),
++: wxDialog((parent ? parent : theApp->getMainFrame()), -1, _T("EZPlot"), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL),
+   m_parentTop(0)
+ {
+   if (! parent)
+@@ -119,10 +119,10 @@
+   pTopSizer->Add (m_pEZPlotCtrl = new EZPlotControl (this), 0, wxALIGN_CENTER | wxALL, 5);
+   wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+-  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Ok");
++  wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Ok"));
+   pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+   if (bCancelButton) {
+-    wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
++    wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
+     pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+   }
+   pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgezplot.h ctsim-wx2.8/src/dlgezplot.h
+--- ctsim/src/dlgezplot.h      2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/dlgezplot.h        2008-07-21 10:08:10.908316235 -0600
+@@ -57,7 +57,7 @@
+                const wxSize& size = wxDefaultSize,
+                long style = wxSTATIC_BORDER,
+                const wxValidator& validator = wxDefaultValidator,
+-               const wxString& name = "EZPlotCtrl");
++                   const wxString& name = _T("EZPlotCtrl"));
+    virtual ~EZPlotControl();
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgprojections.cpp ctsim-wx2.8/src/dlgprojections.cpp
+--- ctsim/src/dlgprojections.cpp       2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/dlgprojections.cpp 2008-07-21 10:08:10.916316725 -0600
+@@ -59,7 +59,7 @@
+   ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, const Phantom& rPhantom, const int iTrace, wxWindow *parent)
+-    : wxDialog(parent, -1, "Collect Projections", wxDefaultPosition), m_rScanner(rScanner), m_rProjections(rProj), m_rPhantom(rPhantom),
++: wxDialog(parent, -1, _T("Collect Projections"), wxDefaultPosition), m_rScanner(rScanner), m_rProjections(rProj), m_rPhantom(rPhantom),
+       m_pSGPDriver(NULL), m_pSGP(NULL), m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0)
+ {
+   m_state = Continue;
+@@ -79,7 +79,7 @@
+   m_btnAbort->SetConstraints(c);
+-  m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause"));
++  m_btnPause = new wxButton (this, ID_BTN_PAUSE, _T("Pause"));
+   wxLayoutConstraints* cPause = new wxLayoutConstraints;
+   cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x);
+   cPause->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
+@@ -87,7 +87,7 @@
+   cPause->height.Absolute(sizeBtn.y);
+   m_btnPause->SetConstraints(cPause);
+-  m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step"));
++  m_btnStep = new wxButton (this, ID_BTN_STEP, _T("Step"));
+   wxLayoutConstraints* cStep = new wxLayoutConstraints;
+   cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2);
+   cStep->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
+@@ -187,7 +187,7 @@
+     showView (iViewNumber);
+     wxYield();        // update the display
+     if (m_iTrace >= Trace::TRACE_PLOT) {
+-      ::wxUsleep(500);
++      ::wxMilliSleep(500);
+     }
+   } else {
+     m_state = Finished;    // so that we return TRUE below and
+@@ -232,12 +232,12 @@
+     m_pSGP->setDC (&m_memoryDC);
+     showView (m_iLastView);
+     m_state = Paused;
+-    m_btnPause->SetLabel (wxString("Resume"));
++    m_btnPause->SetLabel (_T("Resume"));
+     m_pSGP->setDC (m_pDC);
+     m_memoryDC.SelectObject(wxNullBitmap);
+   } else if (m_state == Paused) {
+     m_state = Continue;
+-    m_btnPause->SetLabel (wxString("Pause"));
++    m_btnPause->SetLabel (_T("Pause"));
+   }
+ }
+@@ -252,7 +252,7 @@
+     showView (m_iLastView);
+     // m_rScanner.collectProjections (m_rProjections, m_rPhantom, m_iLastView, 1, true, m_iTrace, m_pSGP);
+     m_state = Paused;
+-    m_btnPause->SetLabel (wxString("Resume"));
++    m_btnPause->SetLabel (_T("Resume"));
+     m_pSGP->setDC (m_pDC);
+     m_memoryDC.SelectObject(wxNullBitmap);
+     Refresh();
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/dlgreconstruct.cpp ctsim-wx2.8/src/dlgreconstruct.cpp
+--- ctsim/src/dlgreconstruct.cpp       2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/dlgreconstruct.cpp 2008-07-21 10:08:10.920316971 -0600
+@@ -67,7 +67,7 @@
+ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Projections& rProj,
+                                       ImageFile& rIF, const int iTrace, wxWindow *parent)
+-: wxDialog(parent, -1, "Reconstruction", wxDefaultPosition), m_rReconstructor(rReconstruct),
++: wxDialog(parent, -1, _T("Reconstruction"), wxDefaultPosition), m_rReconstructor(rReconstruct),
+            m_rProjections(rProj), m_rImageFile(rIF), m_pSGPDriver(NULL), m_pSGP(NULL),
+   m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0)
+ {
+@@ -77,7 +77,7 @@
+     while ( m_parentTop && m_parentTop->GetParent() )
+         m_parentTop = m_parentTop->GetParent();
+-    m_btnAbort = new wxButton(this, wxID_CANCEL, _("Cancel"));
++    m_btnAbort = new wxButton(this, wxID_CANCEL, _T("Cancel"));
+     wxLayoutConstraints* c = new wxLayoutConstraints;
+     c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
+     c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
+@@ -88,7 +88,7 @@
+     m_btnAbort->SetConstraints(c);
+-    m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause"));
++    m_btnPause = new wxButton (this, ID_BTN_PAUSE, _T("Pause"));
+     wxLayoutConstraints* cPause = new wxLayoutConstraints;
+     cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x);
+     cPause->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
+@@ -96,7 +96,7 @@
+     cPause->height.Absolute(sizeBtn.y);
+     m_btnPause->SetConstraints(cPause);
+-    m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step"));
++    m_btnStep = new wxButton (this, ID_BTN_STEP, _T("Step"));
+     wxLayoutConstraints* cStep = new wxLayoutConstraints;
+     cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2);
+     cStep->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
+@@ -223,7 +223,7 @@
+                 showView (iViewNumber, bBackproject);
+                 ::wxYield();        // update the display
+                 if (m_iTrace >= Trace::TRACE_PLOT) {
+-                        ::wxUsleep(250);
++                        ::wxMilliSleep(250);
+                 }
+         } else {
+                 m_state = Finished;    // so that we return TRUE below and
+@@ -267,12 +267,12 @@
+                 m_memoryDC.SetFont (*wxSWISS_FONT);
+                 showView (m_iLastView, false);
+                 m_state = Paused;
+-                m_btnPause->SetLabel (wxString("Resume"));
++                m_btnPause->SetLabel (_T("Resume"));
+                 m_pSGP->setDC (m_pDC);
+                 m_memoryDC.SelectObject(wxNullBitmap);
+         } else if (m_state == Paused) {
+                 m_state = Continue;
+-                m_btnPause->SetLabel (wxString("Pause"));
++                m_btnPause->SetLabel (_T("Pause"));
+         }
+ }
+@@ -288,7 +288,7 @@
+                 m_memoryDC.SetFont (*wxSWISS_FONT);
+                 showView (m_iLastView, false);
+                 m_state = Paused;
+-                m_btnPause->SetLabel (wxString("Resume"));
++                m_btnPause->SetLabel (_T("Resume"));
+                 m_pSGP->setDC (m_pDC);
+                 m_memoryDC.SelectObject(wxNullBitmap);
+                 Refresh();
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/docs.cpp ctsim-wx2.8/src/docs.cpp
+--- ctsim/src/docs.cpp 2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/docs.cpp   2008-07-21 10:08:10.924317216 -0600
+@@ -51,12 +51,12 @@
+ bool ImageFileDocument::OnSaveDocument(const wxString& filename)
+ {
+-  if (! m_pImageFile->fileWrite (filename)) {
+-    *theApp->getLog() << "Unable to write image file " << filename << "\n";
++  if (! m_pImageFile->fileWrite (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to write image file ") << filename << _T("\n");
+     return false;
+   }
+   if (theApp->getVerboseLogging())
+-    *theApp->getLog() << "Wrote image file " << filename << "\n";
++    *theApp->getLog() << _T("Wrote image file ") << filename << _T("\n");
+   Modify(false);
+   return true;
+ }
+@@ -66,14 +66,14 @@
+   if (! OnSaveModified())
+     return false;
+-  if (! m_pImageFile->fileRead (filename.c_str())) {
+-    *theApp->getLog() << "Unable to read image file " << filename << "\n";
++  if (! m_pImageFile->fileRead (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to read image file ") << filename << _T("\n");
+     m_bBadFileOpen = true;
+     return false;
+   }
+-  if (theApp->getVerboseLogging() && filename != "")
+-    *theApp->getLog() << "Read image file " << filename << "\n";
++  if (theApp->getVerboseLogging() && filename != _T(""))
++    *theApp->getLog() << _T("Read image file ") << filename << _T("\n");
+   SetFilename(filename, true);
+   Modify(false);
+@@ -106,13 +106,13 @@
+ ImageFileDocument::Revert ()
+ {
+   if (IsModified()) {
+-    wxString msg ("Revert to saved ");
++    wxString msg (_T("Revert to saved "));
+     msg += GetFilename();
+-    msg += "?";
+-    wxMessageDialog dialog (getView()->getFrame(), msg, "Are you sure?", wxYES_NO | wxNO_DEFAULT);
++    msg += _T("?");
++    wxMessageDialog dialog (getView()->getFrame(), msg, _T("Are you sure?"), wxYES_NO | wxNO_DEFAULT);
+     if (dialog.ShowModal() == wxID_YES) {
+       if (theApp->getVerboseLogging())
+-        *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n";
++        *theApp->getLog() << _T("Reverting to saved ") << GetFilename() << _T("\n");
+       Modify (false);
+       OnOpenDocument (GetFilename());
+     }
+@@ -177,7 +177,7 @@
+   while (m_vecpBackgroundSupervisors.size() > 0) {
+      ::wxYield();
+-     ::wxUsleep(50);
++     ::wxMilliSleep(50);
+   }
+ #endif
+ }
+@@ -190,12 +190,12 @@
+ bool
+ ProjectionFileDocument::OnSaveDocument(const wxString& filename)
+ {
+-  if (! m_pProjectionFile->write (filename.c_str())) {
+-    *theApp->getLog() << "Unable to write projection file " << filename << "\n";
++  if (! m_pProjectionFile->write (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to write projection file ") << filename << _T("\n");
+     return false;
+   }
+   if (theApp->getVerboseLogging())
+-    *theApp->getLog() << "Wrote projection file " << filename << "\n";
++    *theApp->getLog() << _T("Wrote projection file ") << filename << _T("\n");
+   Modify(false);
+   return true;
+ }
+@@ -213,15 +213,15 @@
+   if (! OnSaveModified())
+     return false;
+-  if (! m_pProjectionFile->read (filename.c_str())) {
+-    *theApp->getLog() << "Unable to read projection file " << filename << "\n";
++  if (! m_pProjectionFile->read (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to read projection file ") << filename << _T("\n");
+     m_bBadFileOpen = true;
+     return false;
+   }
+   m_bBadFileOpen = false;
+-  if (theApp->getVerboseLogging() && filename != "")
+-    *theApp->getLog() << "Read projection file " << filename << "\n";
++  if (theApp->getVerboseLogging() && filename != _T(""))
++    *theApp->getLog() << _T("Read projection file ") << filename << _T("\n");
+   SetFilename(filename, true);
+   Modify(false);
+@@ -276,17 +276,17 @@
+   wxString filename (constFilename);
+   if (wxFile::Exists (filename)) {
+-    m_phantom.createFromFile (filename);
++    m_phantom.createFromFile (filename.mb_str(wxConvUTF8));
+     if (theApp->getVerboseLogging())
+-      *theApp->getLog() << "Read phantom file " << filename << "\n";
++      *theApp->getLog() << _T("Read phantom file ") << filename << _T("\n");
+   } else {
+-    filename.Replace (".phm", "");
+-    m_phantom.createFromPhantom (filename);
++    filename.Replace (_T(".phm"), _T(""));
++    m_phantom.createFromPhantom (filename.mb_str(wxConvUTF8));
+   }
+   m_namePhantom = filename;
+   SetFilename (filename, true);
+   if (m_phantom.fail()) {
+-    *theApp->getLog() << "Failure creating phantom " << filename << "\n";
++    *theApp->getLog() << _T("Failure creating phantom ") << filename << _T("\n");
+     m_bBadFileOpen = true;
+     return false;
+   }
+@@ -301,12 +301,12 @@
+ bool
+ PhantomFileDocument::OnSaveDocument(const wxString& filename)
+ {
+-  if (! m_phantom.fileWrite (filename.c_str())) {
+-    *theApp->getLog() << "Unable to write phantom file " << filename << "\n";
++  if (! m_phantom.fileWrite (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to write phantom file ") << filename << _T("\n");
+     return false;
+   }
+   if (theApp->getVerboseLogging())
+-    *theApp->getLog() << "Wrote phantom file " << filename << "\n";
++    *theApp->getLog() << _T("Wrote phantom file ") << filename << _T("\n");
+   Modify(false);
+   return true;
+ }
+@@ -346,12 +346,12 @@
+ PlotFileDocument::OnSaveDocument(const wxString& filename)
+ {
+   m_namePlot = filename.c_str();
+-  if (! m_plot.fileWrite (filename)) {
+-    *theApp->getLog() << "Unable to write plot file " << filename << "\n";
++  if (! m_plot.fileWrite (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to write plot file ") << filename << _T("\n");
+     return false;
+   }
+   if (theApp->getVerboseLogging())
+-    *theApp->getLog() << "Wrote plot file " << filename << "\n";
++    *theApp->getLog() << _T("Wrote plot file ") << filename << _T("\n");
+   Modify(false);
+   return true;
+ }
+@@ -362,15 +362,15 @@
+   if (! OnSaveModified())
+     return false;
+-  if (! m_plot.fileRead (filename.c_str())) {
+-    *theApp->getLog() << "Unable to read plot file " << filename << "\n";
++  if (! m_plot.fileRead (filename.mb_str(wxConvUTF8))) {
++    *theApp->getLog() << _T("Unable to read plot file ") << filename << _T("\n");
+     m_bBadFileOpen = true;
+     return false;
+   }
+   m_bBadFileOpen = false;
+-  if (theApp->getVerboseLogging() && filename != "")
+-    *theApp->getLog() << "Read plot file " << filename << "\n";
++  if (theApp->getVerboseLogging() && filename != _T(""))
++    *theApp->getLog() << _T("Read plot file ") << filename << _T("\n");
+   SetFilename (filename, true);
+   m_namePlot = filename.c_str();
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/graph3dview.cpp ctsim-wx2.8/src/graph3dview.cpp
+--- ctsim/src/graph3dview.cpp  2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/graph3dview.cpp    2008-07-21 10:08:10.932317707 -0600
+@@ -154,7 +154,7 @@
+ Graph3dFileView::~Graph3dFileView()
+ {
+   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+-  GetDocumentManager()->ActivateView(this, false, true);
++  GetDocumentManager()->ActivateView(this, false);
+ }
+ bool
+@@ -166,7 +166,7 @@
+   m_pFrame->SetClientSize (m_pCanvas->GetBestSize());
+   m_pCanvas->SetClientSize (m_pCanvas->GetBestSize());
+-  m_pFrame->SetTitle("Graph3dFileView");
++  m_pFrame->SetTitle(_T("Graph3dFileView"));
+   m_pCanvas->SetCurrent();
+   InitGL();
+@@ -190,7 +190,7 @@
+   Graph3dFileCanvas* pCanvas = new Graph3dFileCanvas (this, parent, wxPoint(-1,-1), wxSize(-1,-1), 0);
+   pCanvas->SetBackgroundColour(*wxWHITE);
+-  pCanvas->Clear();
++  pCanvas->ClearBackground();
+   return pCanvas;
+ }
+@@ -362,10 +362,11 @@
+ void
+ Graph3dFileView::OnProperties (wxCommandEvent& event)
+ {
+-  std::ostringstream os;
+-  *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
+-  wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(),
+-                             "Imagefile Properties", wxOK | wxICON_INFORMATION);
++  wxString os;
++  *theApp->getLog() << _T(">>>>\n") << os << _T("<<<<\n");
++  wxMessageDialog dialogMsg (getFrameForChild(), os,
++                             _T("Imagefile Properties"), 
++                             wxOK | wxICON_INFORMATION);
+   dialogMsg.ShowModal();
+ }
+@@ -409,17 +410,17 @@
+   if (m_pCanvas) {
+     m_pCanvas->SetCurrent();
+ #ifdef DEBUG
+-        *theApp->getLog() << "Drawing 3d surface\n";
++    *theApp->getLog() << _T("Drawing 3d surface\n");
+ #endif
+     Draw();
+     m_pCanvas->SwapBuffers();
+   }
+   if (m_pStatusBar) {
+-    std::ostringstream os;
+-    os << "Xangle=" << m_dXRotate << ", Yangle=" << m_dYRotate
+-       << ", Zangle=" << m_dZRotate;
+-    m_pStatusBar->SetStatusText (os.str().c_str());
++    wxString os;
++    os << _T("Xangle=") << m_dXRotate << _T(", Yangle=") << m_dYRotate
++       << _T(", Zangle=") << m_dZRotate;
++    m_pStatusBar->SetStatusText (os);
+   }
+ }
+@@ -726,7 +727,7 @@
+   if (m_bColorScaleMaxSet)
+     dMax = m_dColorScaleMax;
+-  DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Color Scale Minimum & Maximum", dMin, dMax);
++  DialogGetMinMax dialogMinMax (getFrameForChild(), _T("Set Color Scale Minimum & Maximum"), dMin, dMax);
+   int retVal = dialogMinMax.ShowModal();
+   if (retVal == wxID_OK) {
+     m_bColorScaleMinSet = true;
+@@ -755,9 +756,9 @@
+ Graph3dFileView::CreateChildFrame (wxDocument *doc, wxView *view)
+ {
+ #if CTSIM_MDI
+-  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Graph3dFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Graph3dFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #else
+-  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Graph3dFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Graph3dFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #endif
+   theApp->setIconForFrame (subframe);
+@@ -770,45 +771,45 @@
+   m_pFileMenu = new wxMenu;
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+-  m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
++  m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, "P&roperties");
++  m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, _T("P&roperties"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(wxID_PRINT, "&Print...");
+-  m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+-  m_pFileMenu->Append(wxID_PREVIEW, "Print Preview");
++  m_pFileMenu->Append(wxID_PRINT, _T("&Print..."));
++  m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
++  m_pFileMenu->Append(wxID_PREVIEW, _T("Print Preview"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
+   m_pViewMenu = new wxMenu;
+-  m_pViewMenu->Append(GRAPH3D_VIEW_WIREFRAME, "Wi&reframe\tCtrl-R", "", true);
+-  m_pViewMenu->Append(GRAPH3D_VIEW_SMOOTH, "S&mooth\tCtrl-M", "", true);
+-  m_pViewMenu->Append(GRAPH3D_VIEW_COLOR, "Co&lor\tCtrl-L", "", true);
+-  m_pViewMenu->Append(GRAPH3D_VIEW_LIGHTING, "Li&ghting\tCtrl-G", "", true);
++  m_pViewMenu->Append(GRAPH3D_VIEW_WIREFRAME, _T("Wi&reframe\tCtrl-R"), _T(""), true);
++  m_pViewMenu->Append(GRAPH3D_VIEW_SMOOTH, _T("S&mooth\tCtrl-M"), _T(""), true);
++  m_pViewMenu->Append(GRAPH3D_VIEW_COLOR, _T("Co&lor\tCtrl-L"), _T(""), true);
++  m_pViewMenu->Append(GRAPH3D_VIEW_LIGHTING, _T("Li&ghting\tCtrl-G"), _T(""), true);
+   m_pViewMenu->AppendSeparator();
+-  m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_MINMAX, "Color Scale S&et Min/Max...\tCtrl-E");
+-  m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_AUTO, "Color Scale &Auto...\tCtrl-A");
+-  m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_FULL, "Color F&ull Scale\tCtrl-U");
++  m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_MINMAX, _T("Color Scale S&et Min/Max...\tCtrl-E"));
++  m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_AUTO, _T("Color Scale &Auto...\tCtrl-A"));
++  m_pViewMenu->Append(GRAPH3D_VIEW_SCALE_FULL, _T("Color F&ull Scale\tCtrl-U"));
+   wxMenu *help_menu = new wxMenu;
+-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar *menu_bar = new wxMenuBar;
+-  menu_bar->Append(m_pFileMenu, "&File");
+-  menu_bar->Append(m_pViewMenu, "&View");
+-  menu_bar->Append(help_menu, "&Help");
++  menu_bar->Append(m_pFileMenu, _T("&File"));
++  menu_bar->Append(m_pViewMenu, _T("&View"));
++  menu_bar->Append(help_menu, _T("&Help"));
+   subframe->SetMenuBar(menu_bar);
+@@ -894,7 +895,7 @@
+     return;
+   wxCommandEvent dummyEvent;
+-  switch (event.KeyCode()) {
++  switch (event.GetKeyCode()) {
+   case WXK_LEFT:
+         m_pView->m_dZRotate += 15.0;
+     Refresh (false);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadproj.cpp ctsim-wx2.8/src/threadproj.cpp
+--- ctsim/src/threadproj.cpp   2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/threadproj.cpp     2008-07-21 10:08:10.936317952 -0600
+@@ -56,7 +56,7 @@
+ ProjectorSupervisorThread::ProjectorSupervisorThread (PhantomFileView* pProjView, int iNDet, int iNView, int iOffsetView,
+    const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength,
+-   double dViewRatio, double dScanRatio, const char* const pszLabel)
++   double dViewRatio, double dScanRatio, wxChar const* pszLabel)
+ : SupervisorThread(), m_pPhantomView(pProjView), m_iNDet(iNDet), m_iNView(iNView), m_iOffsetView(iOffsetView), m_strGeometry(pszGeometry),
+   m_iNSample(iNSample), m_dRotation(dRotation), m_dFocalLength(dFocalLength), m_dCenterDetectorLength(dCenterDetectorLength),
+   m_dViewRatio(dViewRatio), m_dScanRatio(dScanRatio), m_strLabel(pszLabel)
+@@ -67,7 +67,7 @@
+ ProjectorSupervisorThread::Entry()
+ {
+   ProjectorSupervisor projSupervisor (this, m_pPhantomView, m_iNDet, m_iNView, m_iOffsetView,
+-   m_strGeometry.c_str(), m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio, m_strLabel.c_str());
++   m_strGeometry.c_str(), m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio, m_strLabel);
+   projSupervisor.start();
+   while (! projSupervisor.workersDone() && ! projSupervisor.fail() && ! projSupervisor.cancelled()) {
+@@ -75,9 +75,9 @@
+   }
+   if (projSupervisor.fail())
+   {
+-    wxString msg ("Error starting Projector supervisor: ");
+-    msg += projSupervisor.getFailMessage().c_str();
+-    msg += "\n";
++    wxString msg (_T("Error starting Projector supervisor: "));
++    msg += projSupervisor.getFailMessage();
++    msg += _T("\n");
+     wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+     eventLog.SetString( msg );
+     wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -104,12 +104,12 @@
+ ProjectorSupervisor::ProjectorSupervisor (SupervisorThread* pThread, PhantomFileView* pPhantomView, int iNDet, int iNView, int iOffsetView,
+    const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength,
+-   double dViewRatio, double dScanRatio, const char* const pszLabel)
+-    : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), "Projecting", iNView),
++   double dViewRatio, double dScanRatio, wxChar const* pszLabel)
++  : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), _T("Projecting"), iNView),
+       m_pPhantomView(pPhantomView), m_pPhantomDoc(pPhantomView->GetDocument()),
+       m_iNDet(iNDet), m_iNView(iNView), m_iOffsetView(iOffsetView), m_pszGeometry(pszGeometry), m_iNSample(iNSample),
+       m_dRotation(dRotation), m_dFocalLength(dFocalLength), m_dCenterDetectorLength(dCenterDetectorLength),
+-      m_dViewRatio(dViewRatio), m_dScanRatio(dScanRatio), m_pszLabel(pszLabel)
++      m_dViewRatio(dViewRatio), m_dScanRatio(dScanRatio), m_strLabel(pszLabel)
+ {
+   m_pScanner = new Scanner (m_pPhantomDoc->getPhantom(), m_pszGeometry, m_iNDet,
+                   m_iNView, m_iOffsetView, m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio);
+@@ -151,12 +151,12 @@
+   wxCriticalSectionLocker critsect (doneSection);
+   Projections* pProjections = getProjections();
+-  pProjections->setRemark (m_pszLabel);
++  pProjections->setRemark (m_strLabel.mb_str(wxConvUTF8));
+   pProjections->setCalcTime (getTimerEnd());
+   wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-  wxString msg (m_pszLabel);
+-  msg += "\n";
++  wxString msg (m_strLabel);
++  msg += _T("\n");
+   eventLog.SetString( msg );
+   wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -218,12 +218,12 @@
+ {
+   const Phantom& rPhantom = m_pPhantomView->GetDocument()->getPhantom();
+   bool bFail = m_pScanner->fail();
+-  std::string failMsg;
++  wxString failMsg;
+   if (bFail) {
+-      failMsg = "Unable to make Projector: ";
+-      failMsg += m_pScanner->failMessage().c_str();
++    failMsg = _T("Unable to make Projector: ");
++    failMsg += wxConvUTF8.cMB2WX(m_pScanner->failMessage().c_str());
+       wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-      event.SetString( failMsg.c_str() );
++    event.SetString( failMsg );
+       wxPostEvent( theApp->getMainFrame(), event );
+   }
+   else
+@@ -234,7 +234,7 @@
+ #ifdef DEBUG
+         if (theApp->getVerboseLogging()) {
+           wxString msg;
+-          msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit);
++          msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit);
+           wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+           event.SetString( msg );
+           wxPostEvent( theApp->getMainFrame(), event );
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadproj.h ctsim-wx2.8/src/threadproj.h
+--- ctsim/src/threadproj.h     2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/threadproj.h       2008-07-21 10:08:10.944318442 -0600
+@@ -56,12 +56,12 @@
+   const double m_dCenterDetectorLength;
+   const double m_dViewRatio;
+   const double m_dScanRatio;
+-  const std::string m_strLabel;
++  const wxString m_strLabel;
+ public:
+   ProjectorSupervisorThread(PhantomFileView* pProjView, int iNDet, int iNView, int iOffsetView,
+    const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength,
+-   double dViewRatio, double dScanRatio, const char* const pszLabel);
++   double dViewRatio, double dScanRatio, wxChar const* strLabel);
+   virtual wxThread::ExitCode Entry();
+@@ -88,13 +88,13 @@
+   const double m_dCenterDetectorLength;
+   const double m_dViewRatio;
+   const double m_dScanRatio;
+-  const char* const m_pszLabel;
++  const wxString m_strLabel;
+ public:
+    ProjectorSupervisor (SupervisorThread* pThread, PhantomFileView* pProjView, int iNDet, int iNView,  int iOffsetView,
+    const char* pszGeometry, int iNSample, double dRotation, double dFocalLength, double dCenterDetectorLength,
+-   double dViewRatio, double dScanRatio, const char* const pszLabel);
++   double dViewRatio, double dScanRatio, wxChar const* pszLabel);
+    virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadraster.cpp ctsim-wx2.8/src/threadraster.cpp
+--- ctsim/src/threadraster.cpp 2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/threadraster.cpp   2008-07-21 10:08:10.948318688 -0600
+@@ -57,7 +57,7 @@
+ /////////////////////////////////////////////////////////////////////
+ RasterizerSupervisorThread::RasterizerSupervisorThread (PhantomFileView* pProjView, int iNX, int iNY,
+-                                                        int iNSample, double dViewRatio, const char* const pszLabel)
++                                                        int iNSample, double dViewRatio, wxChar const* pszLabel)
+                                                         :   SupervisorThread(), m_pPhantomView(pProjView), m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_strLabel(pszLabel)
+ {
+ }
+@@ -65,7 +65,7 @@
+ wxThread::ExitCode
+ RasterizerSupervisorThread::Entry()
+ {
+-  RasterizerSupervisor rasterSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel.c_str());
++  RasterizerSupervisor rasterSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel);
+   rasterSupervisor.start();
+@@ -75,9 +75,9 @@
+   if (rasterSupervisor.fail())
+   {
+-    wxString msg ("Error starting Rasterizer supervisor: ");
+-    msg += rasterSupervisor.getFailMessage().c_str();
+-    msg += "\n";
++    wxString msg (_T("Error starting Rasterizer supervisor: "));
++    msg += rasterSupervisor.getFailMessage();
++    msg += _T("\n");
+     wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+     eventLog.SetString( msg );
+     wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -103,10 +103,10 @@
+ /////////////////////////////////////////////////////////////////////
+ RasterizerSupervisor::RasterizerSupervisor (SupervisorThread* pThread, PhantomFileView* pPhantomView, int iNX, int iNY,
+-                                            int iNSample, double dViewRatio, const char* const pszLabel)
+-                                            : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), "Rasterizing", iNX),
++                                            int iNSample, double dViewRatio, wxChar const* pszLabel)
++  : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), _T("Rasterizing"), iNX),
+                                             m_pPhantomView(pPhantomView), m_pPhantomDoc(pPhantomView->GetDocument()),
+-                                            m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_pszLabel(pszLabel)
++                                            m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_strLabel(pszLabel)
+ {
+   m_vecpChildImageFiles.reserve (getNumWorkers());
+   for (int iThread = 0; iThread < getNumWorkers(); iThread++) {
+@@ -137,11 +137,11 @@
+   wxCriticalSectionLocker critsect (doneSection);
+   ImageFile* pImageFile = getImageFile();
+-  pImageFile->labelAdd (m_pszLabel, getTimerEnd());
++  pImageFile->labelAdd (m_strLabel.mb_str(wxConvUTF8), getTimerEnd());
+   wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-  wxString msg (m_pszLabel);
+-  msg += "\n";
++  wxString msg (m_strLabel);
++  msg += _T("\n");
+   eventLog.SetString( msg );
+   wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -199,7 +199,7 @@
+ #ifdef DEBUG
+       if (theApp->getVerboseLogging()) {
+         wxString msg;
+-        msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit);
++        msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit);
+         wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+         event.SetString( msg );
+         wxPostEvent( theApp->getMainFrame(), event );
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadraster.h ctsim-wx2.8/src/threadraster.h
+--- ctsim/src/threadraster.h   2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/threadraster.h     2008-07-21 10:08:10.956319178 -0600
+@@ -50,10 +50,10 @@
+   const int m_iNY;
+   const int m_iNSample;
+   const double m_dViewRatio;
+-  const std::string m_strLabel;
++  const wxString m_strLabel;
+ public:
+-  RasterizerSupervisorThread(PhantomFileView* pProjView, int iNX, int iNY, int iNSample, double dViewRatio, const char* const pszLabel);
++  RasterizerSupervisorThread(PhantomFileView* pProjView, int iNX, int iNY, int iNSample, double dViewRatio, wxChar const* strLabel);
+   virtual wxThread::ExitCode Entry();
+   virtual void OnExit();
+@@ -72,12 +72,12 @@
+   const int m_iNY;
+   const int m_iNSample;
+   const double m_dViewRatio;
+-  const char* const m_pszLabel;
++  const wxString m_strLabel;
+ public:
+    RasterizerSupervisor (SupervisorThread* pThread, PhantomFileView* pProjView, int iNX, int iNY,
+-   int iNSample, double dViewRatio, const char* const pszLabel);
++   int iNSample, double dViewRatio, wxChar const* pszLabel);
+    virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadrecon.cpp ctsim-wx2.8/src/threadrecon.cpp
+--- ctsim/src/threadrecon.cpp  2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/threadrecon.cpp    2008-07-21 10:08:10.956319178 -0600
+@@ -54,7 +54,7 @@
+ ReconstructorSupervisorThread::ReconstructorSupervisorThread (ProjectionFileView* pProjView, int iNX, int iNY,
+    const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad,
+    const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
+-   const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pROI, bool bRebinToParallel)
++   const char* pszBackprojectName, wxChar const* pszLabel, ReconstructionROI* pROI, bool bRebinToParallel)
+ :   SupervisorThread(), m_pProjView(pProjView), m_iNX(iNX), m_iNY(iNY), m_strFilterName(pszFilterName), m_dFilterParam(dFilterParam),
+   m_strFilterMethod(pszFilterMethod), m_iZeropad(iZeropad), m_strFilterGenerationName(pszFilterGenerationName),
+   m_strInterpName(pszInterpName), m_iInterpParam(iInterpParam), m_strBackprojectName(pszBackprojectName),
+@@ -72,7 +72,7 @@
+   ReconstructorSupervisor reconSupervisor (this, pProj, m_pProjView, m_iNX, m_iNY,
+    m_strFilterName.c_str(), m_dFilterParam, m_strFilterMethod.c_str(), m_iZeropad, m_strFilterGenerationName.c_str(),
+-   m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel.c_str(), &m_reconROI);
++   m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel, &m_reconROI);
+   reconSupervisor.start();
+   while (! reconSupervisor.workersDone() && ! reconSupervisor.fail() && ! reconSupervisor.cancelled()) {
+@@ -80,9 +80,9 @@
+   }
+   if (reconSupervisor.fail())
+   {
+-    wxString msg ("Error starting reconstructor supervisor: ");
+-    msg += reconSupervisor.getFailMessage().c_str();
+-    msg += "\n";
++    wxString msg (_T("Error starting reconstructor supervisor: "));
++    msg += reconSupervisor.getFailMessage();
++    msg += _T("\n");
+     wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+     eventLog.SetString( msg );
+     wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -112,14 +112,16 @@
+ ReconstructorSupervisor::ReconstructorSupervisor (SupervisorThread* pThread, Projections* pProj,
+   ProjectionFileView* pProjView, int iImageNX, int iImageNY, const char* pszFilterName, double dFilterParam,
+   const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName,
+-  const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, const char* const pszLabel,
++  const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, wxChar const* pszLabel,
+   ReconstructionROI* pROI)
+-    : BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(), "Reconstructing", pProjView->GetDocument()->getProjections().nView()),
++    : BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(),
++                            _T("Reconstructing"), 
++                            pProjView->GetDocument()->getProjections().nView()),
+       m_pProj(pProj), m_pProjView(pProjView), m_pProjDoc(pProjView->GetDocument()),
+       m_iImageNX(iImageNX), m_iImageNY(iImageNY),
+       m_pszFilterName(pszFilterName), m_dFilterParam(dFilterParam), m_pszFilterMethod(pszFilterMethod),
+       m_iZeropad(iZeropad), m_pszFilterGenerationName(pszFilterGenerationName), m_pszInterpName(pszInterpName),
+-      m_iInterpParam(iInterpParam), m_pszBackprojectName(pszBackprojectName), m_pszLabel(pszLabel),
++      m_iInterpParam(iInterpParam), m_pszBackprojectName(pszBackprojectName), m_strLabel(pszLabel),
+       m_pReconROI(pROI)
+ {
+   m_vecpChildImageFile.reserve (getNumWorkers());
+@@ -156,11 +158,11 @@
+   ImageFile* pImageFile = getImageFile();
+   pImageFile->labelAdd (m_pProj->getLabel());
+-  pImageFile->labelAdd (m_pszLabel, getTimerEnd());
++  pImageFile->labelAdd (m_strLabel.mb_str(wxConvUTF8), getTimerEnd());
+   wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-  wxString msg (m_pszLabel);
+-  msg += "\n";
++  wxString msg (m_strLabel);
++  msg += _T("\n");
+   eventLog.SetString( msg );
+   wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
+@@ -225,12 +227,12 @@
+     m_iInterpParam, m_pszBackprojectName, Trace::TRACE_NONE, m_pReconROI, false);
+   bool bFail = pReconstructor->fail();
+-  std::string failMsg;
++  wxString failMsg;
+   if (bFail) {
+-      failMsg = "Unable to make reconstructor: ";
+-      failMsg += pReconstructor->failMessage().c_str();
++    failMsg = _T("Unable to make reconstructor: ");
++    failMsg += wxConvUTF8.cMB2WX(pReconstructor->failMessage().c_str());
+       wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+-      event.SetString( failMsg.c_str() );
++    event.SetString( failMsg );
+       wxPostEvent( theApp->getMainFrame(), event );
+   }
+   else
+@@ -241,7 +243,7 @@
+ #ifdef DEBUG
+         if (theApp->getVerboseLogging()) {
+           wxString msg;
+-          msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit);
++          msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit);
+           wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
+           event.SetString( msg );
+           wxPostEvent( theApp->getMainFrame(), event );
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/threadrecon.h ctsim-wx2.8/src/threadrecon.h
+--- ctsim/src/threadrecon.h    2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/threadrecon.h      2008-07-21 10:08:10.956319178 -0600
+@@ -59,14 +59,14 @@
+   const std::string m_strInterpName;
+   const int m_iInterpParam;
+   const std::string m_strBackprojectName;
+-  const std::string m_strLabel;
++  const wxString m_strLabel;
+   ReconstructionROI m_reconROI;
+   const bool m_bRebinToParallel;
+ public:
+   ReconstructorSupervisorThread(ProjectionFileView* pProjView, int iNX, int iNY, const char* pszFilterName,
+    double dFilterParam, const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName,
+-   const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, const char* const pszLabel,
++   const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, wxChar const* pszLabel,
+    ReconstructionROI* pROI, bool bRebinToParallel);
+   virtual wxThread::ExitCode Entry();
+@@ -95,14 +95,14 @@
+   const char* const m_pszInterpName;
+   const int m_iInterpParam;
+   const char* const m_pszBackprojectName;
+-  const char* const m_pszLabel;
++  const wxString m_strLabel;
+   ReconstructionROI* m_pReconROI;
+ public:
+    ReconstructorSupervisor (SupervisorThread* pMyThread, Projections* pProj, ProjectionFileView* pProjView,
+    int iNX, int iNY, const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad,
+    const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
+-   const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pReconROI);
++   const char* pszBackprojectName, wxChar const* pszLabel, ReconstructionROI* pReconROI);
+    virtual BackgroundWorkerThread* createWorker (int iThread, int iStartUnit, int iNumUnits);
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/tips.cpp ctsim-wx2.8/src/tips.cpp
+--- ctsim/src/tips.cpp 2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/tips.cpp   2008-07-21 10:08:10.964319669 -0600
+@@ -83,7 +83,7 @@
+   size_t iThisTip = m_iCurrentTip;
+   ++m_iCurrentTip;
+-  return wxString (s_aszTips[iThisTip]);
++  return wxString (wxConvUTF8.cMB2WX(s_aszTips[iThisTip]));
+ }
+ size_t
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/views.cpp ctsim-wx2.8/src/views.cpp
+--- ctsim/src/views.cpp        2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/views.cpp  2008-07-29 20:38:45.351315859 -0600
+@@ -133,20 +133,21 @@
+   const int yPt = ny - 1 - pt.y;
+   if (event.RightIsDown()) {
+     if (pt.x >= 0 && pt.x < nx && pt.y >= 0 && pt.y < ny) {
+-      std::ostringstream os;
+-      os << "Image value (" << pt.x << "," << yPt << ") = " << v[pt.x][yPt];
++      wxString os;
++      os << _T("Image value (") << pt.x << _T(",") << yPt << _T(") = ")
++         << v[pt.x][yPt];
+       if (rIF.isComplex()) {
+         double dImag = rIF.getImaginaryArray()[pt.x][yPt];
+         if (dImag < 0)
+-          os << " - " << -dImag;
++          os << _T(" - ") << -dImag;
+         else
+-          os << " + " << dImag;
+-        os << "i\n";
++          os << _T(" + ") << dImag;
++        os << _T("i\n");
+       } else
+-        os << "\n";
+-      *theApp->getLog() << os.str().c_str();
++        os << _T("\n");
++      *theApp->getLog() << os;
+     } else
+-      *theApp->getLog() << "Mouse out of image range (" << pt.x << "," << yPt << ")\n";
++      *theApp->getLog() << _T("Mouse out of image range (") << pt.x << _T(",") << yPt << _T(")\n");
+   }
+   else if (event.LeftIsDown() || event.LeftUp() || event.RightUp()) {
+     if (pt.x >= 0 && pt.x < nx && pt.y >= 0 && pt.y < ny) {
+@@ -166,12 +167,12 @@
+         pMenu->Enable (IFMENU_PLOT_FFT_COL, true);
+       }
+     } else
+-      *theApp->getLog() << "Mouse out of image range (" << pt.x << "," << yPt << ")\n";
++      *theApp->getLog() << _T("Mouse out of image range (") << pt.x << _T(",") << yPt << _T(")\n");
+   }
+   if (event.LeftUp()) {
+-    std::ostringstream os;
+-    os << "Selected column " << pt.x << " , row " << yPt << "\n";
+-    *theApp->getLog() << os.str().c_str();
++    wxString os;
++    os << _T("Selected column ") << pt.x << _T(" , row ") << yPt << _T("\n");
++    *theApp->getLog() << os;
+   }
+ }
+@@ -276,7 +277,7 @@
+ ImageFileView::~ImageFileView()
+ {
+   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+-  GetDocumentManager()->ActivateView(this, FALSE, TRUE);
++  GetDocumentManager()->ActivateView(this, FALSE);
+ }
+@@ -285,9 +286,9 @@
+ {
+   const ImageFile& rIF = GetDocument()->getImageFile();
+   if (rIF.nx() == 0 || rIF.ny() == 0)
+-    *theApp->getLog() << "Properties: empty imagefile\n";
++    *theApp->getLog() << _T("Properties: empty imagefile\n");
+   else {
+-    const std::string rFilename = m_pFrame->GetTitle().c_str();
++    const std::string rFilename (m_pFrame->GetTitle().mb_str(wxConvUTF8));
+     std::ostringstream os;
+     double min, max, mean, mode, median, stddev;
+     rIF.statistics (rIF.getArray(), min, max, mean, mode, median, stddev);
+@@ -306,8 +307,8 @@
+     if (rIF.nLabels() > 0) {
+       rIF.printLabelsBrief (os);
+     }
+-    *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
+-    wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Imagefile Properties", wxOK | wxICON_INFORMATION);
++    *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n");
++    wxMessageDialog dialogMsg (getFrameForChild(), wxConvUTF8.cMB2WX(os.str().c_str()), _T("Imagefile Properties"), wxOK | wxICON_INFORMATION);
+     dialogMsg.ShowModal();
+   }
+   GetDocument()->Activate();
+@@ -349,7 +350,7 @@
+   if (m_bMaxSpecified)
+     max = m_dMaxPixel;
+-  DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Image Minimum & Maximum", min, max);
++  DialogGetMinMax dialogMinMax (getFrameForChild(), _T("Set Image Minimum & Maximum"), min, max);
+   int retVal = dialogMinMax.ShowModal();
+   if (retVal == wxID_OK) {
+     m_bMinSpecified = true;
+@@ -381,9 +382,9 @@
+   theApp->getCompatibleImages (GetDocument(), vecIF);
+   if (vecIF.size() == 0) {
+-    wxMessageBox("There are no compatible image files open for comparision", "No comparison images");
++    wxMessageBox(_T("There are no compatible image files open for comparision"), _T("No comparison images"));
+   } else {
+-    DialogGetComparisonImage dialogGetCompare(getFrameForChild(), "Get Comparison Image", vecIF, true);
++    DialogGetComparisonImage dialogGetCompare(getFrameForChild(), _T("Get Comparison Image"), vecIF, true);
+     if (dialogGetCompare.ShowModal() == wxID_OK) {
+       const ImageFile& rIF = GetDocument()->getImageFile();
+@@ -392,19 +393,19 @@
+       std::ostringstream os;
+       double min, max, mean, mode, median, stddev;
+       rIF.statistics (min, max, mean, mode, median, stddev);
+-      os << GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
++      os << m_pFrame->GetTitle().mb_str(wxConvUTF8) << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
+       rCompareIF.statistics (min, max, mean, mode, median, stddev);
+-      os << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
++      os << dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8) << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
+       double d, r, e;
+       rIF.comparativeStatistics (rCompareIF, d, r, e);
+       os << "Comparative Statistics: d=" << d << ", r=" << r << ", e=" << e << "\n";
+-      *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
++      *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n");
+       if (dialogGetCompare.getMakeDifferenceImage()) {
+         ImageFile* pDifferenceImage = new ImageFile;
+         pDifferenceImage->setArraySize (rIF.nx(), rIF.ny());
+         if (! rIF.subtractImages (rCompareIF, *pDifferenceImage)) {
+-          *theApp->getLog() << "Unable to subtract images\n";
++          *theApp->getLog() << _T("Unable to subtract images\n");
+           delete pDifferenceImage;
+           return;
+         }
+@@ -415,13 +416,13 @@
+         }
+         pDifferenceDoc->setImageFile (pDifferenceImage);
+-        wxString s = GetFrame()->GetTitle() + ": ";
+-        pDifferenceImage->labelsCopy (rIF, s.c_str());
+-        s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-        pDifferenceImage->labelsCopy (rCompareIF, s.c_str());
++        wxString s = m_pFrame->GetTitle() + _T(": ");
++        pDifferenceImage->labelsCopy (rIF, s.mb_str(wxConvUTF8));
++        s = dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++        pDifferenceImage->labelsCopy (rCompareIF, s.mb_str(wxConvUTF8));
+         std::ostringstream osLabel;
+-        osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str()
+-          << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "
++        osLabel << "Compare image " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str()
++                << " and " << dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().c_str() << ": "
+           << os.str().c_str();
+         pDifferenceImage->labelAdd (os.str().c_str());
+         if (theApp->getAskDeleteNewDocs())
+@@ -431,7 +432,7 @@
+         pDifferenceDoc->getView()->setInitialClientSize();
+         pDifferenceDoc->Activate();
+       }
+-      wxMessageBox(os.str().c_str(), "Image Comparison");
++      wxMessageBox(wxConvUTF8.cMB2WX(os.str().c_str()), _T("Image Comparison"));
+     }
+   }
+ }
+@@ -508,9 +509,9 @@
+   theApp->getCompatibleImages (GetDocument(), vecIF);
+   if (vecIF.size() == 0) {
+-    wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
++    wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images"));
+   } else {
+-    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Add", vecIF, false);
++    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Add"), vecIF, false);
+     if (dialogGetCompare.ShowModal() == wxID_OK) {
+       ImageFile& rIF = GetDocument()->getImageFile();
+@@ -525,14 +526,14 @@
+       newImage.setArraySize (rIF.nx(), rIF.ny());
+       rIF.addImages (rRHSIF, newImage);
+       std::ostringstream os;
+-      os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+-        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rIF, s.c_str());
+-      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rRHSIF, s.c_str());
++      os << "Add image " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and "
++         << dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str();
++      wxString s = dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8));
++      s = dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8));
+       newImage.labelAdd (os.str().c_str());
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       if (theApp->getAskDeleteNewDocs())
+         pNewDoc->Modify (true);
+       OnUpdate(this, NULL);
+@@ -550,9 +551,9 @@
+   theApp->getCompatibleImages (GetDocument(), vecIF);
+   if (vecIF.size() == 0) {
+-    wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
++    wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images"));
+   } else {
+-    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Subtract", vecIF, false);
++    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Subtract"), vecIF, false);
+     if (dialogGetCompare.ShowModal() == wxID_OK) {
+       ImageFile& rIF = GetDocument()->getImageFile();
+@@ -567,14 +568,14 @@
+       newImage.setArraySize (rIF.nx(), rIF.ny());
+       rIF.subtractImages (rRHSIF, newImage);
+       std::ostringstream os;
+-      os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+-        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rIF, s.c_str());
+-      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rRHSIF, s.c_str());
++      os << "Subtract image " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and "
++         << dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str();
++      wxString s = dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8));
++      s = dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8));
+       newImage.labelAdd (os.str().c_str());
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       if (theApp->getAskDeleteNewDocs())
+         pNewDoc->Modify (true);
+       OnUpdate(this, NULL);
+@@ -592,9 +593,9 @@
+   theApp->getCompatibleImages (GetDocument(), vecIF);
+   if (vecIF.size() == 0) {
+-    wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
++    wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images"));
+   } else {
+-    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Multiply", vecIF, false);
++    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Multiply"), vecIF, false);
+     if (dialogGetCompare.ShowModal() == wxID_OK) {
+       ImageFile& rIF = GetDocument()->getImageFile();
+@@ -609,14 +610,14 @@
+       newImage.setArraySize (rIF.nx(), rIF.ny());
+       rIF.multiplyImages (rRHSIF, newImage);
+       std::ostringstream os;
+-      os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+-        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rIF, s.c_str());
+-      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rRHSIF, s.c_str());
++      os << "Multiply image " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and "
++         << dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str();
++      wxString s = dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8));
++      s = dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8));
+       newImage.labelAdd (os.str().c_str());
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       if (theApp->getAskDeleteNewDocs())
+         pNewDoc->Modify (true);
+       OnUpdate(this, NULL);
+@@ -634,9 +635,9 @@
+   theApp->getCompatibleImages (GetDocument(), vecIF);
+   if (vecIF.size() == 0) {
+-    wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
++    wxMessageBox (_T("There are no compatible image files open for comparision"), _T("No comparison images"));
+   } else {
+-    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Divide", vecIF, false);
++    DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Image to Divide"), vecIF, false);
+     if (dialogGetCompare.ShowModal() == wxID_OK) {
+       ImageFile& rIF = GetDocument()->getImageFile();
+@@ -651,14 +652,14 @@
+       newImage.setArraySize (rIF.nx(), rIF.ny());
+       rIF.divideImages (rRHSIF, newImage);
+       std::ostringstream os;
+-      os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by "
+-        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rIF, s.c_str());
+-      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+-      newImage.labelsCopy (rRHSIF, s.c_str());
++      os << "Divide image " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " by "
++         << dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle().c_str();
++      wxString s = dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rIF, s.mb_str(wxConvUTF8));
++      s = dynamic_cast<wxFrame*>(pRHSDoc->GetFirstView()->GetFrame())->GetTitle() + _T(": ");
++      newImage.labelsCopy (rRHSIF, s.mb_str(wxConvUTF8));
+       newImage.labelAdd (os.str().c_str());
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       if (theApp->getAskDeleteNewDocs())
+         pNewDoc->Modify (true);
+       OnUpdate(this, NULL);
+@@ -766,7 +767,7 @@
+ ImageFileView::OnFourier (wxCommandEvent& event)
+ {
+   ImageFile& rIF = GetDocument()->getImageFile();
+-  wxProgressDialog dlgProgress (wxString("Fourier"), wxString("Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
++  wxProgressDialog dlgProgress (_T("Fourier"), _T("Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+   rIF.fourier (rIF);
+   rIF.labelAdd ("Fourier Image");
+   m_bMinSpecified = false;
+@@ -782,7 +783,7 @@
+ ImageFileView::OnInverseFourier (wxCommandEvent& event)
+ {
+   ImageFile& rIF = GetDocument()->getImageFile();
+-  wxProgressDialog dlgProgress (wxString("Inverse Fourier"), wxString("Inverse Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
++  wxProgressDialog dlgProgress (_T("Inverse Fourier"), _T("Inverse Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+   rIF.inverseFourier (rIF);
+   rIF.labelAdd ("Inverse Fourier Image");
+   m_bMinSpecified = false;
+@@ -897,7 +898,7 @@
+   ImageFileCanvas* pCanvas = new ImageFileCanvas (this, parent, wxPoint(-1,-1),
+                                                   wxSize(-1,-1), 0);
+   pCanvas->SetBackgroundColour(*wxWHITE);
+-  pCanvas->Clear();
++  pCanvas->ClearBackground();
+   return pCanvas;
+ }
+@@ -910,97 +911,97 @@
+ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
+ {
+ #if CTSIM_MDI
+-  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("ImageFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #else
+-  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("ImageFile Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #endif
+   theApp->setIconForFrame (subframe);
+   m_pFileMenu = new wxMenu;
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+-  m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
+-  m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
+-  m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
+-  m_pFileMenu->Append(wxID_REVERT, "Re&vert");
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
++  m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S"));
++  m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As..."));
++  m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W"));
++  m_pFileMenu->Append(wxID_REVERT, _T("Re&vert"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
+-  m_pFileMenu->Append(IFMENU_FILE_EXPORT, "Expor&t...");
++  m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I"));
++  m_pFileMenu->Append(IFMENU_FILE_EXPORT, _T("Expor&t..."));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(wxID_PRINT, "&Print...");
+-  m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+-  m_pFileMenu->Append(wxID_PREVIEW, "Print Preview");
++  m_pFileMenu->Append(wxID_PRINT, _T("&Print..."));
++  m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
++  m_pFileMenu->Append(wxID_PREVIEW, _T("Print Preview"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
++  m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
+   wxMenu* edit_menu = new wxMenu;
+-  edit_menu->Append(IFMENU_EDIT_COPY, "Copy\tCtrl-C");
+-  edit_menu->Append(IFMENU_EDIT_CUT, "Cut\tCtrl-X");
+-  edit_menu->Append(IFMENU_EDIT_PASTE, "Paste\tCtrl-V");
++  edit_menu->Append(IFMENU_EDIT_COPY, _T("Copy\tCtrl-C"));
++  edit_menu->Append(IFMENU_EDIT_CUT, _T("Cut\tCtrl-X"));
++  edit_menu->Append(IFMENU_EDIT_PASTE, _T("Paste\tCtrl-V"));
+   wxMenu *view_menu = new wxMenu;
+-  view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale S&et...\tCtrl-E");
+-  view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A");
+-  view_menu->Append(IFMENU_VIEW_SCALE_FULL, "Display F&ull Scale\tCtrl-U");
++  view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, _T("Display Scale S&et...\tCtrl-E"));
++  view_menu->Append(IFMENU_VIEW_SCALE_AUTO, _T("Display Scale &Auto...\tCtrl-A"));
++  view_menu->Append(IFMENU_VIEW_SCALE_FULL, _T("Display F&ull Scale\tCtrl-U"));
+   m_pFilterMenu = new wxMenu;
+-  m_pFilterMenu->Append (IFMENU_FILTER_INVERTVALUES, "In&vert Values");
+-  m_pFilterMenu->Append (IFMENU_FILTER_SQUARE, "&Square");
+-  m_pFilterMenu->Append (IFMENU_FILTER_SQRT, "Square &Root");
+-  m_pFilterMenu->Append (IFMENU_FILTER_LOG, "&Log");
+-  m_pFilterMenu->Append (IFMENU_FILTER_EXP, "E&xp");
++  m_pFilterMenu->Append (IFMENU_FILTER_INVERTVALUES, _T("In&vert Values"));
++  m_pFilterMenu->Append (IFMENU_FILTER_SQUARE, _T("&Square"));
++  m_pFilterMenu->Append (IFMENU_FILTER_SQRT, _T("Square &Root"));
++  m_pFilterMenu->Append (IFMENU_FILTER_LOG, _T("&Log"));
++  m_pFilterMenu->Append (IFMENU_FILTER_EXP, _T("E&xp"));
+   m_pFilterMenu->AppendSeparator();
+ #ifdef HAVE_FFT
+-  m_pFilterMenu->Append (IFMENU_FILTER_FFT, "2-D &FFT\tCtrl-2");
+-  m_pFilterMenu->Append (IFMENU_FILTER_IFFT, "2-D &IFFT\tAlt-2");
+-  m_pFilterMenu->Append (IFMENU_FILTER_FFT_ROWS, "FFT Rows");
+-  m_pFilterMenu->Append (IFMENU_FILTER_IFFT_ROWS, "IFFT Rows");
+-  m_pFilterMenu->Append (IFMENU_FILTER_FFT_COLS, "FFT Columns");
+-  m_pFilterMenu->Append (IFMENU_FILTER_IFFT_COLS, "IFFT Columns");
+-  m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, "2-D F&ourier");
+-  m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, "2-D Inverse Fo&urier");
++  m_pFilterMenu->Append (IFMENU_FILTER_FFT, _T("2-D &FFT\tCtrl-2"));
++  m_pFilterMenu->Append (IFMENU_FILTER_IFFT, _T("2-D &IFFT\tAlt-2"));
++  m_pFilterMenu->Append (IFMENU_FILTER_FFT_ROWS, _T("FFT Rows"));
++  m_pFilterMenu->Append (IFMENU_FILTER_IFFT_ROWS, _T("IFFT Rows"));
++  m_pFilterMenu->Append (IFMENU_FILTER_FFT_COLS, _T("FFT Columns"));
++  m_pFilterMenu->Append (IFMENU_FILTER_IFFT_COLS, _T("IFFT Columns"));
++  m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, _T("2-D F&ourier"));
++  m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, _T("2-D Inverse Fo&urier"));
+ #else
+-  m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, "&Fourier");
+-  m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, "&Inverse Fourier");
++  m_pFilterMenu->Append (IFMENU_FILTER_FOURIER, _T("&Fourier"));
++  m_pFilterMenu->Append (IFMENU_FILTER_INVERSE_FOURIER, _T("&Inverse Fourier"));
+ #endif
+-  m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER, "Shuffl&e Fourier to Natural Order");
+-  m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER, "Shuffle &Natural to Fourier Order");
++  m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER, _T("Shuffl&e Fourier to Natural Order"));
++  m_pFilterMenu->Append (IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER, _T("Shuffle &Natural to Fourier Order"));
+   m_pFilterMenu->AppendSeparator();
+-  m_pFilterMenu->Append (IFMENU_FILTER_MAGNITUDE, "&Magnitude");
+-  m_pFilterMenu->Append (IFMENU_FILTER_PHASE, "&Phase");
+-  m_pFilterMenu->Append (IFMENU_FILTER_REAL, "Re&al");
+-  m_pFilterMenu->Append (IFMENU_FILTER_IMAGINARY, "Ima&ginary");
++  m_pFilterMenu->Append (IFMENU_FILTER_MAGNITUDE, _T("&Magnitude"));
++  m_pFilterMenu->Append (IFMENU_FILTER_PHASE, _T("&Phase"));
++  m_pFilterMenu->Append (IFMENU_FILTER_REAL, _T("Re&al"));
++  m_pFilterMenu->Append (IFMENU_FILTER_IMAGINARY, _T("Ima&ginary"));
+   wxMenu* image_menu = new wxMenu;
+-  image_menu->Append (IFMENU_IMAGE_ADD, "&Add...");
+-  image_menu->Append (IFMENU_IMAGE_SUBTRACT, "&Subtract...");
+-  image_menu->Append (IFMENU_IMAGE_MULTIPLY, "&Multiply...");
+-  image_menu->Append (IFMENU_IMAGE_DIVIDE, "&Divide...");
++  image_menu->Append (IFMENU_IMAGE_ADD, _T("&Add..."));
++  image_menu->Append (IFMENU_IMAGE_SUBTRACT, _T("&Subtract..."));
++  image_menu->Append (IFMENU_IMAGE_MULTIPLY, _T("&Multiply..."));
++  image_menu->Append (IFMENU_IMAGE_DIVIDE, _T("&Divide..."));
+   image_menu->AppendSeparator();
+-  image_menu->Append (IFMENU_IMAGE_SCALESIZE, "S&cale Size...");
++  image_menu->Append (IFMENU_IMAGE_SCALESIZE, _T("S&cale Size..."));
+ #if wxUSE_GLCANVAS
+-  image_menu->Append (IFMENU_IMAGE_CONVERT3D, "Convert &3-D\tCtrl-3");
++  image_menu->Append (IFMENU_IMAGE_CONVERT3D, _T("Convert &3-D\tCtrl-3"));
+ #endif
+   m_pMenuAnalyze = new wxMenu;
+-  m_pMenuAnalyze->Append (IFMENU_PLOT_ROW, "Plot &Row");
+-  m_pMenuAnalyze->Append (IFMENU_PLOT_COL, "Plot &Column");
+-  m_pMenuAnalyze->Append (IFMENU_PLOT_HISTOGRAM, "Plot &Histogram");
++  m_pMenuAnalyze->Append (IFMENU_PLOT_ROW, _T("Plot &Row"));
++  m_pMenuAnalyze->Append (IFMENU_PLOT_COL, _T("Plot &Column"));
++  m_pMenuAnalyze->Append (IFMENU_PLOT_HISTOGRAM, _T("Plot &Histogram"));
+   m_pMenuAnalyze->AppendSeparator();
+-  m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_ROW, "P&lot FFT Row");
+-  m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_COL, "Plo&t FFT Column");
++  m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_ROW, _T("P&lot FFT Row"));
++  m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_COL, _T("Plo&t FFT Column"));
+   m_pMenuAnalyze->AppendSeparator();
+-  m_pMenuAnalyze->Append (IFMENU_COMPARE_IMAGES, "Compare &Images...");
+-  m_pMenuAnalyze->Append (IFMENU_COMPARE_ROW, "Compare Ro&w");
+-  m_pMenuAnalyze->Append (IFMENU_COMPARE_COL, "Compare Colu&mn");
++  m_pMenuAnalyze->Append (IFMENU_COMPARE_IMAGES, _T("Compare &Images..."));
++  m_pMenuAnalyze->Append (IFMENU_COMPARE_ROW, _T("Compare Ro&w"));
++  m_pMenuAnalyze->Append (IFMENU_COMPARE_COL, _T("Compare Colu&mn"));
+   m_pMenuAnalyze->Enable (IFMENU_PLOT_ROW, false);
+   m_pMenuAnalyze->Enable (IFMENU_PLOT_COL, false);
+   m_pMenuAnalyze->Enable (IFMENU_COMPARE_ROW, false);
+@@ -1009,20 +1010,20 @@
+   m_pMenuAnalyze->Enable (IFMENU_PLOT_FFT_COL, false);
+   wxMenu *help_menu = new wxMenu;
+-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
+-  help_menu->Append (IDH_QUICKSTART, "&Quick Start");
+-  help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips"));
++  help_menu->Append (IDH_QUICKSTART, _T("&Quick Start"));
++  help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar *menu_bar = new wxMenuBar;
+-  menu_bar->Append(m_pFileMenu, "&File");
+-  menu_bar->Append(edit_menu, "&Edit");
+-  menu_bar->Append(view_menu, "&View");
+-  menu_bar->Append(image_menu, "&Image");
+-  menu_bar->Append(m_pFilterMenu, "Fi&lter");
+-  menu_bar->Append(m_pMenuAnalyze, "&Analyze");
+-  menu_bar->Append(help_menu, "&Help");
++  menu_bar->Append(m_pFileMenu, _T("&File"));
++  menu_bar->Append(edit_menu, _T("&Edit"));
++  menu_bar->Append(view_menu, _T("&View"));
++  menu_bar->Append(image_menu, _T("&Image"));
++  menu_bar->Append(m_pFilterMenu, _T("Fi&lter"));
++  menu_bar->Append(m_pMenuAnalyze, _T("&Analyze"));
++  menu_bar->Append(help_menu, _T("&Help"));
+   subframe->SetMenuBar(menu_bar);
+@@ -1064,7 +1065,7 @@
+   m_pCanvas = CreateCanvas (m_pFrame);
+   m_pFrame->SetClientSize (m_pCanvas->GetBestSize());
+   m_pCanvas->SetClientSize (m_pCanvas->GetBestSize());
+-  m_pFrame->SetTitle("ImageFileView");
++  m_pFrame->SetTitle(_T("ImageFileView"));
+   m_pFrame->Show(true);
+   Activate(true);
+@@ -1089,7 +1090,7 @@
+ {
+   if (m_pBitmap && m_pBitmap->Ok()) {
+ #ifdef DEBUG
+-    *theApp->getLog() << "Drawing bitmap\n";
++    *theApp->getLog() << _T("Drawing bitmap\n");
+ #endif
+     dc->DrawBitmap(*m_pBitmap, 0, 0, false);
+   }
+@@ -1147,7 +1148,7 @@
+       m_pBitmap = NULL;
+     }
+ #ifdef DEBUG
+-    *theApp->getLog() << "Making new bitmap\n";
++    *theApp->getLog() << _T("Making new bitmap\n");
+ #endif
+     m_pBitmap = new wxBitmap (image);
+     delete imageData;
+@@ -1281,41 +1282,46 @@
+     DialogExportParameters dialogExport (getFrameForChild(), m_iDefaultExportFormatID);
+     if (dialogExport.ShowModal() == wxID_OK) {
+-      wxString strFormatName (dialogExport.getFormatName ());
+-      m_iDefaultExportFormatID = ImageFile::convertExportFormatNameToID (strFormatName.c_str());
++      wxString strFormatName (dialogExport.getFormatName (), wxConvUTF8);
++      m_iDefaultExportFormatID = ImageFile::convertExportFormatNameToID (strFormatName.mb_str(wxConvUTF8));
+       wxString strExt;
+       wxString strWildcard;
+       if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PGM || m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PGMASCII) {
+-        strExt = ".pgm";
+-        strWildcard = "PGM Files (*.pgm)|*.pgm";
++        strExt = _T(".pgm");
++        strWildcard = _T("PGM Files (*.pgm)|*.pgm");
+       }
+ #ifdef HAVE_PNG
+       else if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PNG || m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PNG16) {
+-        strExt = ".png";
+-        strWildcard = "PNG Files (*.png)|*.png";
++        strExt = _T(".png");
++        strWildcard = _T("PNG Files (*.png)|*.png");
+       }
+ #endif
+ #ifdef HAVE_CTN_DICOM
+       else if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_DICOM) {
+-        strExt = "";
+-        strWildcard = "DICOM Files (*.*)|*.*";
++        strExt = _T("");
++        strWildcard = _T("DICOM Files (*.*)|*.*");
+       }
+ #endif
+       else if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_TEXT) {
+-        strExt = ".txt";
+-        strWildcard = "Text (*.txt)|*.txt";
++        strExt = _T(".txt");
++        strWildcard = _T("Text (*.txt)|*.txt");
+       }
+       else {
+-        strExt = "";
+-        strWildcard = "Miscellaneous (*.*)|*.*";
++        strExt = _T("");
++        strWildcard = _T("Miscellaneous (*.*)|*.*");
+       }
+-      const wxString& strFilename = wxFileSelector (wxString("Export Filename"), wxString(""),
+-        wxString(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxHIDE_READONLY | wxSAVE);
++#if WXWIN_COMPATIBILITY_2_4
++      const wxString& strFilename = wxFileSelector (_T("Export Filename"), _T(""),
++        _T(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxHIDE_READONLY | wxSAVE);
++#else
++      const wxString& strFilename = wxFileSelector (_T("Export Filename"), _T(""),
++        _T(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxSAVE);
++#endif
+       if (strFilename) {
+-        rIF.exportImage (strFormatName.c_str(), strFilename.c_str(), 1, 1, m_dMinPixel, m_dMaxPixel);
+-        *theApp->getLog() << "Exported file " << strFilename << "\n";
++        rIF.exportImage (strFormatName.mb_str(wxConvUTF8), strFilename.mb_str(wxConvUTF8), 1, 1, m_dMinPixel, m_dMaxPixel);
++        *theApp->getLog() << _T("Exported file ") << strFilename << _T("\n");
+       }
+     }
+   }
+@@ -1328,7 +1334,7 @@
+   unsigned int iOldNX = rIF.nx();
+   unsigned int iOldNY = rIF.ny();
+-  DialogGetXYSize dialogGetXYSize (getFrameForChild(), "Set New X & Y Dimensions", iOldNX, iOldNY);
++  DialogGetXYSize dialogGetXYSize (getFrameForChild(), _T("Set New X & Y Dimensions"), iOldNX, iOldNY);
+   if (dialogGetXYSize.ShowModal() == wxID_OK) {
+     unsigned int iNewNX = dialogGetXYSize.getXSize();
+     unsigned int iNewNY = dialogGetXYSize.getYSize();
+@@ -1344,7 +1350,7 @@
+     rScaledIF.labelsCopy (rIF);
+     rScaledIF.labelAdd (os.str().c_str());
+     rIF.scaleImage (rScaledIF);
+-    *theApp->getLog() << os.str().c_str() << "\n";
++    *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+     if (theApp->getAskDeleteNewDocs())
+       pScaledDoc->Modify (true);
+     OnUpdate(this, NULL);
+@@ -1376,7 +1382,7 @@
+ {
+   int xCursor, yCursor;
+   if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
+-    wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");
++    wxMessageBox (_T("No row selected. Please use left mouse button on image to select column"),_T("Error"));
+     return;
+   }
+@@ -1439,8 +1445,8 @@
+       }
+       for (unsigned int iL = 0; iL < rIF.nLabels(); iL++)
+         rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str());
+-      os << " Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      os << " Plot of " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str();
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       rPlotFile.addDescription (os.str().c_str());
+     }
+     delete pX;
+@@ -1462,7 +1468,7 @@
+ {
+   int xCursor, yCursor;
+   if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
+-    wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
++    wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error"));
+     return;
+   }
+@@ -1525,8 +1531,8 @@
+       }
+       for (unsigned int iL = 0; iL < rIF.nLabels(); iL++)
+         rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str());
+-      os << " Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      os << " Plot of " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str();
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       rPlotFile.addDescription (os.str().c_str());
+     }
+     delete pX;
+@@ -1549,7 +1555,7 @@
+ {
+   int xCursor, yCursor;
+   if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
+-    wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");
++    wxMessageBox (_T("No row selected. Please use left mouse button on image to select column"),_T("Error"));
+     return;
+   }
+@@ -1620,8 +1626,8 @@
+       rPlotFile.addColumn (3, pYMag);
+       for (unsigned int iL = 0; iL < rIF.nLabels(); iL++)
+         rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str());
+-      os << " FFT Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      os << " FFT Plot of " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str();
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       rPlotFile.addDescription (os.str().c_str());
+     }
+     delete pX;
+@@ -1643,7 +1649,7 @@
+ {
+   int xCursor, yCursor;
+   if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
+-    wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
++    wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error"));
+     return;
+   }
+@@ -1720,8 +1726,8 @@
+       rPlotFile.addColumn (3, pYMag);
+       for (unsigned int iL = 0; iL < rIF.nLabels(); iL++)
+         rPlotFile.addDescription (rIF.labelGet(iL).getLabelString().c_str());
+-      os << " FFT Plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      os << " FFT Plot of " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str();
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       rPlotFile.addDescription (os.str().c_str());
+     }
+     delete pX;
+@@ -1745,17 +1751,17 @@
+ {
+   int xCursor, yCursor;
+   if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
+-    wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
++    wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error"));
+     return;
+   }
+   std::vector<ImageFileDocument*> vecIFDoc;
+   theApp->getCompatibleImages (GetDocument(), vecIFDoc);
+   if (vecIFDoc.size() == 0) {
+-    wxMessageBox ("No compatible images for Column Comparison", "Error");
++    wxMessageBox (_T("No compatible images for Column Comparison"), _T("Error"));
+     return;
+   }
+-  DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false);
++  DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Comparison Image"), vecIFDoc, false);
+   if (dialogGetCompare.ShowModal() == wxID_OK) {
+     ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();
+@@ -1803,20 +1809,21 @@
+         unsigned int iL;
+         for (iL = 0; iL < rIF.nLabels(); iL++) {
+-          std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-          s += ": ";
+-          s += rIF.labelGet(iL).getLabelString();
+-          rPlotFile.addDescription (s.c_str());
++          std::ostringstream os;
++          os << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8);
++          os << ": " << rIF.labelGet(iL).getLabelString();
++          rPlotFile.addDescription (os.str().c_str());
+         }
+         for (iL = 0; iL < rCompareIF.nLabels(); iL++) {
+-          std::string s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-          s += ": ";
+-          s += rCompareIF.labelGet(iL).getLabelString();
+-          rPlotFile.addDescription (s.c_str());
+-        }
+-        os << " Between " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+-          << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-        *theApp->getLog() << os.str().c_str() << "\n";
++          std::ostringstream os;
++          os << dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8);
++          os << ": ";
++          os << rCompareIF.labelGet(iL).getLabelString();
++          rPlotFile.addDescription (os.str().c_str());
++        }
++        os << " Between " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str() << " and "
++           << dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().c_str();
++        *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+         rPlotFile.addDescription (os.str().c_str());
+       }
+       delete pX;
+@@ -1836,7 +1843,7 @@
+ {
+   int xCursor, yCursor;
+   if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
+-    wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
++    wxMessageBox (_T("No column selected. Please use left mouse button on image to select column"),_T("Error"));
+     return;
+   }
+@@ -1844,11 +1851,11 @@
+   theApp->getCompatibleImages (GetDocument(), vecIFDoc);
+   if (vecIFDoc.size() == 0) {
+-    wxMessageBox ("No compatible images for Row Comparison", "Error");
++    wxMessageBox (_T("No compatible images for Row Comparison"), _T("Error"));
+     return;
+   }
+-  DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false);
++  DialogGetComparisonImage dialogGetCompare (getFrameForChild(), _T("Get Comparison Image"), vecIFDoc, false);
+   if (dialogGetCompare.ShowModal() == wxID_OK) {
+     ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();
+@@ -1895,20 +1902,21 @@
+         rPlotFile.addColumn (2, pY2);
+         unsigned int iL;
+         for (iL = 0; iL < rIF.nLabels(); iL++) {
+-          std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-          s += ": ";
+-          s += rIF.labelGet(iL).getLabelString();
+-          rPlotFile.addDescription (s.c_str());
++          std::ostringstream os;
++          os << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8);
++          os << ": ";
++          os << rIF.labelGet(iL).getLabelString();
++          rPlotFile.addDescription (os.str().c_str());
+         }
+         for (iL = 0; iL < rCompareIF.nLabels(); iL++) {
+-          std::string s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-          s += ": ";
+-          s += rCompareIF.labelGet(iL).getLabelString();
+-          rPlotFile.addDescription (s.c_str());
+-        }
+-        os << " Between " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+-          << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+-        *theApp->getLog() << os.str().c_str() << "\n";
++          std::ostringstream os;
++          os << dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8) << ": "
++             << rCompareIF.labelGet(iL).getLabelString();
++          rPlotFile.addDescription (os.str().c_str());
++        }
++        os << " Between " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8) << " and "
++           << dynamic_cast<wxFrame*>(pCompareDoc->GetFirstView()->GetFrame())->GetTitle().c_str();
++        *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+         rPlotFile.addDescription (os.str().c_str());
+       }
+       delete pX;
+@@ -1971,13 +1979,13 @@
+       rPlotFile.addColumn (0, pX);
+       rPlotFile.addColumn (1, pY);
+       for (unsigned int iL = 0; iL < rIF.nLabels(); iL++) {
+-        std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-        s += ": ";
+-        s += rIF.labelGet(iL).getLabelString();
+-        rPlotFile.addDescription (s.c_str());
++        std::ostringstream os;
++        os << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().mb_str(wxConvUTF8);
++        os << ": " << rIF.labelGet(iL).getLabelString();
++        rPlotFile.addDescription (os.str().c_str());
+       }
+-      os << "  plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-      *theApp->getLog() << os.str().c_str() << "\n";
++      os << "  plot of " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str();
++      *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+       rPlotFile.addDescription (os.str().c_str());
+       delete pX;
+       delete pY;
+@@ -2075,7 +2083,7 @@
+ PhantomFileView::~PhantomFileView()
+ {
+   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+-  GetDocumentManager()->ActivateView(this, FALSE, TRUE);
++  GetDocumentManager()->ActivateView(this, FALSE);
+ }
+ void
+@@ -2090,8 +2098,8 @@
+ #if DEBUG
+   rPhantom.print (os);
+ #endif
+-  *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
+-  wxMessageBox (os.str().c_str(), "Phantom Properties");
++  *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n");
++  wxMessageBox (wxConvUTF8.cMB2WX(os.str().c_str()), _T("Phantom Properties"));
+   GetDocument()->Activate();
+ }
+@@ -2117,22 +2125,22 @@
+   m_dDefaultCenterDetectorLength = dialogProjection.getCenterDetectorLengthRatio();
+   m_dDefaultViewRatio = dialogProjection.getViewRatio();
+   m_dDefaultScanRatio = dialogProjection.getScanRatio();
+-  wxString sGeometry = dialogProjection.getGeometry();
+-  m_iDefaultGeometry = Scanner::convertGeometryNameToID (sGeometry.c_str());
++  wxString sGeometry (dialogProjection.getGeometry(), wxConvUTF8);
++  m_iDefaultGeometry = Scanner::convertGeometryNameToID (sGeometry.mb_str(wxConvUTF8));
+   double dRotationRadians = m_dDefaultRotation;
+   m_dDefaultRotation /= TWOPI;  // convert back to fraction of a circle
+-  if (m_iDefaultNDet <= 0 || m_iDefaultNView <= 0 || sGeometry == "")
++  if (m_iDefaultNDet <= 0 || m_iDefaultNView <= 0 || sGeometry == _T(""))
+     return;
+   const Phantom& rPhantom = GetDocument()->getPhantom();
+-  Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample,
++  Scanner theScanner (rPhantom, sGeometry.mb_str(wxConvUTF8), m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample,
+     dRotationRadians, m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio);
+   if (theScanner.fail()) {
+-    wxString msg = "Failed making scanner\n";
+-    msg += theScanner.failMessage().c_str();
+-    *theApp->getLog() << msg << "\n";
+-    wxMessageBox (msg, "Error");
++    wxString msg = _T("Failed making scanner\n");
++    msg += wxConvUTF8.cMB2WX(theScanner.failMessage().c_str());
++    *theApp->getLog() << msg << _T("\n");
++    wxMessageBox (msg, _T("Error"));
+     return;
+   }
+@@ -2166,15 +2174,17 @@
+       ::wxYield();
+       while (dialogProjections.isPaused()) {
+         ::wxYield();
+-        ::wxUsleep(50);
++        ::wxMilliSleep(50);
+       }
+     }
+   } else {
+ #if HAVE_WXTHREADS
+     if (theApp->getUseBackgroundTasks()) {
+-      ProjectorSupervisorThread* pProjector = new ProjectorSupervisorThread (this, m_iDefaultNDet,
+-        m_iDefaultNView, m_iDefaultOffsetView, sGeometry.c_str(), m_iDefaultNSample, dRotationRadians,
+-        m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio, os.str().c_str());
++      ProjectorSupervisorThread* pProjector = new ProjectorSupervisorThread
++        (this, m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, 
++         sGeometry.mb_str(wxConvUTF8), m_iDefaultNSample, dRotationRadians,
++         m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, 
++         m_dDefaultScanRatio, wxConvUTF8.cMB2WX(os.str().c_str()));
+       if (pProjector->Create() != wxTHREAD_NO_ERROR) {
+         sys_error (ERR_SEVERE, "Error creating projector thread");
+         delete pProjector;
+@@ -2188,7 +2198,7 @@
+     {
+       pProj = new Projections;
+       pProj->initFromScanner (theScanner);
+-      wxProgressDialog dlgProgress (wxString("Projection"), wxString("Projection Progress"), pProj->nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
++      wxProgressDialog dlgProgress (_T("Projection"), _T("Projection Progress"), pProj->nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
+       for (int i = 0; i < pProj->nView(); i++) {
+         //theScanner.collectProjections (*pProj, rPhantom, i, 1, true, m_iDefaultTrace);
+         theScanner.collectProjections (*pProj, rPhantom, i, 1, theScanner.offsetView(), true, m_iDefaultTrace);
+@@ -2201,7 +2211,7 @@
+     }
+   }
+-  *theApp->getLog() << os.str().c_str() << "\n";
++  *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+   pProj->setRemark (os.str());
+   pProj->setCalcTime (timer.timerEnd());
+@@ -2218,8 +2228,6 @@
+   pProjectionDoc->getView()->setInitialClientSize();
+   pProjectionDoc->Activate();
+ }
+-
+-
+ void
+ PhantomFileView::OnRasterize (wxCommandEvent& event)
+ {
+@@ -2248,10 +2256,12 @@
+ #if HAVE_WXTHREADS
+   if (theApp->getUseBackgroundTasks()) {
+-    RasterizerSupervisorThread* pThread = new RasterizerSupervisorThread (this, m_iDefaultRasterNX, m_iDefaultRasterNY,
+-      m_iDefaultRasterNSamples, m_dDefaultRasterViewRatio, os.str().c_str());
++    RasterizerSupervisorThread* pThread = new RasterizerSupervisorThread
++      (this, m_iDefaultRasterNX, m_iDefaultRasterNY,
++       m_iDefaultRasterNSamples, m_dDefaultRasterViewRatio, 
++       wxConvUTF8.cMB2WX(os.str().c_str()));
+     if (pThread->Create() != wxTHREAD_NO_ERROR) {
+-      *theApp->getLog() << "Error creating rasterizer thread\n";
++      *theApp->getLog() << _T("Error creating rasterizer thread\n");
+       return;
+     }
+     pThread->SetPriority (60);
+@@ -2261,8 +2271,8 @@
+   {
+     ImageFile* pImageFile = new ImageFile (m_iDefaultRasterNX, m_iDefaultRasterNY);
+-    wxProgressDialog dlgProgress (wxString("Rasterize"),
+-                                  wxString("Rasterization Progress"),
++    wxProgressDialog dlgProgress (_T("Rasterize"),
++                                  _T("Rasterization Progress"),
+                                   pImageFile->nx() + 1,
+                                   getFrameForChild(),
+                                   wxPD_CAN_ABORT );
+@@ -2286,7 +2296,7 @@
+     pRasterDoc->setImageFile (pImageFile);
+     if (theApp->getAskDeleteNewDocs())
+       pRasterDoc->Modify (true);
+-    *theApp->getLog() << os.str().c_str() << "\n";
++    *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+     pImageFile->labelAdd (os.str().c_str(), timer.timerEnd());
+     pRasterDoc->UpdateAllViews(this);
+@@ -2302,7 +2312,7 @@
+   PhantomCanvas* pCanvas = new PhantomCanvas (this, parent, wxPoint(-1,-1),
+                                               wxSize(-1,-1), 0);
+   pCanvas->SetBackgroundColour(*wxWHITE);
+-  pCanvas->Clear();
++  pCanvas->ClearBackground();
+   return pCanvas;
+ }
+@@ -2315,50 +2325,50 @@
+ PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view)
+ {
+ #if CTSIM_MDI
+-  wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Phantom Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #else
+-  wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Phantom Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #endif
+   theApp->setIconForFrame (subframe);
+   m_pFileMenu = new wxMenu;
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+-  m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
+-  m_pFileMenu->Append(wxID_CLOSE, "&Close");
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
++  m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As..."));
++  m_pFileMenu->Append(wxID_CLOSE, _T("&Close"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(PHMMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
++  m_pFileMenu->Append(PHMMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(wxID_PRINT, "&Print...");
+-  m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+-  m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
++  m_pFileMenu->Append(wxID_PRINT, _T("&Print..."));
++  m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
++  m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
++  m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
+   wxMenu *process_menu = new wxMenu;
+-  process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...\tCtrl-R");
+-  process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, "&Projections...\tCtrl-J");
++  process_menu->Append(PHMMENU_PROCESS_RASTERIZE, _T("&Rasterize...\tCtrl-R"));
++  process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, _T("&Projections...\tCtrl-J"));
+   wxMenu *help_menu = new wxMenu;
+-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
+-  help_menu->Append (IDH_QUICKSTART, "&Quick Start");
+-  help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips"));
++  help_menu->Append (IDH_QUICKSTART, _T("&Quick Start"));
++  help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar *menu_bar = new wxMenuBar;
+-  menu_bar->Append(m_pFileMenu, "&File");
+-  menu_bar->Append(process_menu, "&Process");
+-  menu_bar->Append(help_menu, "&Help");
++  menu_bar->Append(m_pFileMenu, _T("&File"));
++  menu_bar->Append(process_menu, _T("&Process"));
++  menu_bar->Append(help_menu, _T("&Help"));
+   subframe->SetMenuBar(menu_bar);
+   subframe->Centre(wxBOTH);
+@@ -2382,7 +2392,7 @@
+   m_pCanvas = CreateCanvas (m_pFrame);
+   m_pFrame->SetClientSize (m_pCanvas->GetBestSize());
+   m_pCanvas->SetClientSize (m_pCanvas->GetBestSize());
+-  m_pFrame->SetTitle ("PhantomFileView");
++  m_pFrame->SetTitle (_T("PhantomFileView"));
+   m_pFrame->Show(true);
+   Activate(true);
+@@ -2536,7 +2546,7 @@
+ ProjectionFileView::~ProjectionFileView()
+ {
+   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+-  GetDocumentManager()->ActivateView(this, FALSE, TRUE);;
++  GetDocumentManager()->ActivateView(this, FALSE);;
+ }
+ void
+@@ -2545,8 +2555,8 @@
+   const Projections& rProj = GetDocument()->getProjections();
+   std::ostringstream os;
+   rProj.printScanInfo(os);
+-  *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
+-  wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Projection File Properties", wxOK | wxICON_INFORMATION);
++  *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<\n");
++  wxMessageDialog dialogMsg (getFrameForChild(), wxConvUTF8.cMB2WX(os.str().c_str()), _T("Projection File Properties"), wxOK | wxICON_INFORMATION);
+   dialogMsg.ShowModal();
+   GetDocument()->Activate();
+ }
+@@ -2576,8 +2586,8 @@
+   pRectDoc->setImageFile (pIF);
+   pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
+   std::ostringstream os;
+-  os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to rectangular image";
+-  *theApp->getLog() << os.str().c_str() << "\n";
++  os << "Convert projection file " << getFrame()->GetTitle().c_str() << " to rectangular image";
++  *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+   pIF->labelAdd (os.str().c_str());
+   if (theApp->getAskDeleteNewDocs())
+     pRectDoc->Modify (true);
+@@ -2590,19 +2600,19 @@
+ ProjectionFileView::OnConvertPolar (wxCommandEvent& event)
+ {
+   Projections& rProj = GetDocument()->getProjections();
+-  DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Convert Polar", m_iDefaultPolarNX, m_iDefaultPolarNY,
++  DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), _T("Convert Polar"), m_iDefaultPolarNX, m_iDefaultPolarNY,
+     m_iDefaultPolarInterpolation, -1, IDH_DLG_POLAR);
+   if (dialogPolar.ShowModal() == wxID_OK) {
+-    wxProgressDialog dlgProgress (wxString("Convert Polar"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+-    wxString strInterpolation (dialogPolar.getInterpolationName());
++    wxProgressDialog dlgProgress (_T("Convert Polar"), _T("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
++    wxString strInterpolation (dialogPolar.getInterpolationName(), wxConvUTF8);
+     m_iDefaultPolarNX = dialogPolar.getXSize();
+     m_iDefaultPolarNY = dialogPolar.getYSize();
+     ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
+-    m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
++    m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.mb_str(wxConvUTF8));
+     if (! rProj.convertPolar (*pIF, m_iDefaultPolarInterpolation)) {
+       delete pIF;
+-      *theApp->getLog() << "Error converting to Polar\n";
++      *theApp->getLog() << _T("Error converting to Polar\n");
+       return;
+     }
+@@ -2614,10 +2624,10 @@
+     pPolarDoc->setImageFile (pIF);
+     pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
+     std::ostringstream os;
+-    os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to polar image: xSize="
++    os << "Convert projection file " << getFrame()->GetTitle().c_str() << " to polar image: xSize="
+       << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation="
+       << strInterpolation.c_str();
+-    *theApp->getLog() << os.str().c_str() << "\n";
++    *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+     pIF->labelAdd (os.str().c_str());
+     if (theApp->getAskDeleteNewDocs())
+       pPolarDoc->Modify (true);
+@@ -2631,20 +2641,20 @@
+ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event)
+ {
+   Projections& rProj = GetDocument()->getProjections();
+-  DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Convert to FFT Polar", m_iDefaultPolarNX, m_iDefaultPolarNY,
++  DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), _T("Convert to FFT Polar"), m_iDefaultPolarNX, m_iDefaultPolarNY,
+     m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad, IDH_DLG_FFT_POLAR);
+   if (dialogPolar.ShowModal() == wxID_OK) {
+-    wxProgressDialog dlgProgress (wxString("Convert FFT Polar"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+-    wxString strInterpolation (dialogPolar.getInterpolationName());
++    wxProgressDialog dlgProgress (_T("Convert FFT Polar"), _T("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
++    wxString strInterpolation (dialogPolar.getInterpolationName(), wxConvUTF8);
+     m_iDefaultPolarNX = dialogPolar.getXSize();
+     m_iDefaultPolarNY = dialogPolar.getYSize();
+     m_iDefaultPolarZeropad = dialogPolar.getZeropad();
+     ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
+-    m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
++    m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.mb_str(wxConvUTF8));
+     if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) {
+       delete pIF;
+-      *theApp->getLog() << "Error converting to polar\n";
++      *theApp->getLog() << _T("Error converting to polar\n");
+       return;
+     }
+     ImageFileDocument* pPolarDoc = theApp->newImageDoc();
+@@ -2655,10 +2665,10 @@
+     pPolarDoc->setImageFile (pIF);
+     pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
+     std::ostringstream os;
+-    os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to FFT polar image: xSize="
++    os << "Convert projection file " << getFrame()->GetTitle().c_str() << " to FFT polar image: xSize="
+       << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation="
+       << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad;
+-    *theApp->getLog() << os.str().c_str() << "\n";
++    *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+     pIF->labelAdd (os.str().c_str());
+     if (theApp->getAskDeleteNewDocs())
+       pPolarDoc->Modify (true);
+@@ -2771,8 +2781,8 @@
+   rPlotFile.addColumn (0, pX);
+   rPlotFile.addColumn (1, pY);
+   rPlotFile.addDescription (rProj.remark());
+-  os << " plot of " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
+-  *theApp->getLog() << os.str().c_str() << "\n";
++  os << " plot of " << dynamic_cast<wxFrame*>(GetDocument()->GetFirstView()->GetFrame())->GetTitle().c_str();
++  *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+   rPlotFile.addDescription (os.str().c_str());
+   delete pX;
+   delete pY;
+@@ -2789,10 +2799,10 @@
+ {
+   Projections& rProj = GetDocument()->getProjections();
+   if (rProj.geometry() == Scanner::GEOMETRY_PARALLEL) {
+-    wxMessageBox ("Projections are already parallel", "Error");
++    wxMessageBox (_T("Projections are already parallel"), _T("Error"));
+     return;
+   }
+-  wxProgressDialog dlgProgress (wxString("Convert to Parallel"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
++  wxProgressDialog dlgProgress (_T("Convert to Parallel"), _T("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+   Projections* pProjNew = rProj.interpolateToParallel();
+   ProjectionFileDocument* pProjDocNew = theApp->newProjectionDoc();
+   pProjDocNew->setProjections (pProjNew);
+@@ -2806,7 +2816,7 @@
+       pFrame->SetFocus();
+       pFrame->Raise();
+     }
+-    GetDocumentManager()->ActivateView (projView, true, false);
++    GetDocumentManager()->ActivateView (projView, true);
+   }
+   if (theApp->getAskDeleteNewDocs())
+     pProjDocNew-> Modify(true);
+@@ -2819,20 +2829,20 @@
+ ProjectionFileView::OnReconstructFourier (wxCommandEvent& event)
+ {
+   Projections& rProj = GetDocument()->getProjections();
+-  DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Fourier Reconstruction", m_iDefaultPolarNX, m_iDefaultPolarNY,
++  DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), _T("Fourier Reconstruction"), m_iDefaultPolarNX, m_iDefaultPolarNY,
+     m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad, IDH_DLG_RECON_FOURIER);
+   if (dialogPolar.ShowModal() == wxID_OK) {
+-    wxProgressDialog dlgProgress (wxString("Reconstruction Fourier"), wxString("Reconstruction Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+-    wxString strInterpolation (dialogPolar.getInterpolationName());
++    wxProgressDialog dlgProgress (_T("Reconstruction Fourier"), _T("Reconstruction Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
++    wxString strInterpolation (dialogPolar.getInterpolationName(), wxConvUTF8);
+     m_iDefaultPolarNX = dialogPolar.getXSize();
+     m_iDefaultPolarNY = dialogPolar.getYSize();
+     m_iDefaultPolarZeropad = dialogPolar.getZeropad();
+     ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
+-    m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
++    m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.mb_str(wxConvUTF8));
+     if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) {
+       delete pIF;
+-      *theApp->getLog() << "Error converting to polar\n";
++      *theApp->getLog() << _T("Error converting to polar\n");
+       return;
+     }
+ #ifdef HAVE_FFT
+@@ -2849,10 +2859,10 @@
+     pPolarDoc->setImageFile (pIF);
+     pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
+     std::ostringstream os;
+-    os << "Reconstruct Fourier " << GetFrame()->GetTitle().c_str() << ": xSize="
++    os << "Reconstruct Fourier " << getFrame()->GetTitle().mb_str(wxConvUTF8) << ": xSize="
+       << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation="
+-      << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad;
+-    *theApp->getLog() << os.str().c_str() << "\n";
++      << strInterpolation.mb_str(wxConvUTF8) << ", zeropad=" << m_iDefaultPolarZeropad;
++    *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+     pIF->labelAdd (os.str().c_str());
+     if (theApp->getAskDeleteNewDocs())
+       pPolarDoc->Modify (true);
+@@ -2896,19 +2906,19 @@
+   m_iDefaultNX = dialogReconstruction.getXSize();
+   m_iDefaultNY = dialogReconstruction.getYSize();
+-  wxString optFilterName = dialogReconstruction.getFilterName();
+-  m_iDefaultFilter = SignalFilter::convertFilterNameToID (optFilterName.c_str());
++  wxString optFilterName (dialogReconstruction.getFilterName(), wxConvUTF8);
++  m_iDefaultFilter = SignalFilter::convertFilterNameToID (optFilterName.mb_str(wxConvUTF8));
+   m_dDefaultFilterParam = dialogReconstruction.getFilterParam();
+-  wxString optFilterMethodName = dialogReconstruction.getFilterMethodName();
+-  m_iDefaultFilterMethod = ProcessSignal::convertFilterMethodNameToID(optFilterMethodName.c_str());
++  wxString optFilterMethodName (dialogReconstruction.getFilterMethodName(), wxConvUTF8);
++  m_iDefaultFilterMethod = ProcessSignal::convertFilterMethodNameToID(optFilterMethodName.mb_str(wxConvUTF8));
+   m_iDefaultZeropad = dialogReconstruction.getZeropad();
+-  wxString optFilterGenerationName = dialogReconstruction.getFilterGenerationName();
+-  m_iDefaultFilterGeneration = ProcessSignal::convertFilterGenerationNameToID (optFilterGenerationName.c_str());
+-  wxString optInterpName = dialogReconstruction.getInterpName();
+-  m_iDefaultInterpolation = Backprojector::convertInterpNameToID (optInterpName.c_str());
++  wxString optFilterGenerationName (dialogReconstruction.getFilterGenerationName(), wxConvUTF8);
++  m_iDefaultFilterGeneration = ProcessSignal::convertFilterGenerationNameToID (optFilterGenerationName.mb_str(wxConvUTF8));
++  wxString optInterpName (dialogReconstruction.getInterpName(), wxConvUTF8);
++  m_iDefaultInterpolation = Backprojector::convertInterpNameToID (optInterpName.mb_str(wxConvUTF8));
+   m_iDefaultInterpParam = dialogReconstruction.getInterpParam();
+-  wxString optBackprojectName = dialogReconstruction.getBackprojectName();
+-  m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str());
++  wxString optBackprojectName (dialogReconstruction.getBackprojectName(), wxConvUTF8);
++  m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.mb_str(wxConvUTF8));
+   m_iDefaultTrace = dialogReconstruction.getTrace();
+   dialogReconstruction.getROI (&defaultROI);
+@@ -2916,7 +2926,7 @@
+     return;
+   std::ostringstream os;
+-  os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str();
++  os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.mb_str(wxConvUTF8) << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.mb_str(wxConvUTF8) << ", FilterGeneration=" << optFilterGenerationName.mb_str(wxConvUTF8) << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.mb_str(wxConvUTF8) << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.mb_str(wxConvUTF8);
+   if (bRebinToParallel)
+     os << "; Interpolate to Parallel";
+@@ -2924,9 +2934,9 @@
+   ImageFile* pImageFile = NULL;
+   if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
+     pImageFile = new ImageFile (m_iDefaultNX, m_iDefaultNY);
+-    Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
+-      m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+-      optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace,
++    Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.mb_str(wxConvUTF8),
++      m_dDefaultFilterParam, optFilterMethodName.mb_str(wxConvUTF8), m_iDefaultZeropad, optFilterGenerationName.mb_str(wxConvUTF8),
++      optInterpName.mb_str(wxConvUTF8), m_iDefaultInterpParam, optBackprojectName.mb_str(wxConvUTF8), m_iDefaultTrace,
+       &defaultROI, bRebinToParallel);
+     ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild());
+@@ -2941,7 +2951,7 @@
+       ::wxYield();
+       while (pDlgReconstruct->isPaused()) {
+         ::wxYield();
+-        ::wxUsleep(50);
++        ::wxMilliSleep(50);
+       }
+     }
+     pReconstructor->postProcessing();
+@@ -2950,10 +2960,13 @@
+   } else {
+ #if HAVE_WXTHREADS
+     if (theApp->getUseBackgroundTasks()) {
+-      ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread (this, m_iDefaultNX,
+-        m_iDefaultNY, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(),
+-        m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam,
+-        optBackprojectName.c_str(), os.str().c_str(), &defaultROI, bRebinToParallel);
++      ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread
++        (this, m_iDefaultNX, m_iDefaultNY, optFilterName.mb_str(wxConvUTF8), 
++         m_dDefaultFilterParam, optFilterMethodName.mb_str(wxConvUTF8),
++         m_iDefaultZeropad, optFilterGenerationName.mb_str(wxConvUTF8), 
++         optInterpName.mb_str(wxConvUTF8), m_iDefaultInterpParam,
++         optBackprojectName.mb_str(wxConvUTF8), 
++         wxConvUTF8.cMB2WX(os.str().c_str()), &defaultROI, bRebinToParallel);
+       if (pReconstructor->Create() != wxTHREAD_NO_ERROR) {
+         sys_error (ERR_SEVERE, "Error creating reconstructor thread");
+         delete pReconstructor;
+@@ -2966,10 +2979,10 @@
+ #endif
+     {
+       pImageFile = new ImageFile (m_iDefaultNX, m_iDefaultNY);
+-      wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
+-      Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
+-        m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+-        optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace,
++      wxProgressDialog dlgProgress (_T("Reconstruction"), _T("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
++      Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.mb_str(wxConvUTF8),
++        m_dDefaultFilterParam, optFilterMethodName.mb_str(wxConvUTF8), m_iDefaultZeropad, optFilterGenerationName.mb_str(wxConvUTF8),
++        optInterpName.mb_str(wxConvUTF8), m_iDefaultInterpParam, optBackprojectName.mb_str(wxConvUTF8), m_iDefaultTrace,
+         &defaultROI, bRebinToParallel);
+       for (int iView = 0; iView < rProj.nView(); iView++) {
+@@ -2989,7 +3002,7 @@
+     sys_error (ERR_SEVERE, "Unable to create image file");
+     return;
+   }
+-  *theApp->getLog() << os.str().c_str() << "\n";
++  *theApp->getLog() << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("\n");
+   pImageFile->labelAdd (rProj.getLabel());
+   pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
+@@ -3019,7 +3032,7 @@
+   pCanvas->SetScrollbars(20, 20, 50, 50);
+   pCanvas->SetBackgroundColour(*wxWHITE);
+-  pCanvas->Clear();
++  pCanvas->ClearBackground();
+   return pCanvas;
+ }
+@@ -3032,69 +3045,69 @@
+ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
+ {
+ #ifdef CTSIM_MDI
+-  wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Projection Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #else
+-  wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Projection Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #endif
+   theApp->setIconForFrame (subframe);
+   m_pFileMenu = new wxMenu;
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+-  m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
+-  m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
+-  m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
++  m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S"));
++  m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As..."));
++  m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(PJMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
++  m_pFileMenu->Append(PJMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(wxID_PRINT, "&Print...");
+-  m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+-  m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
++  m_pFileMenu->Append(wxID_PRINT, _T("&Print..."));
++  m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
++  m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
++  m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
+   m_pConvertMenu = new wxMenu;
+-  m_pConvertMenu->Append (PJMENU_CONVERT_RECTANGULAR, "&Rectangular Image");
+-  m_pConvertMenu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L");
+-  m_pConvertMenu->Append (PJMENU_CONVERT_FFT_POLAR, "FF&T->Polar Image...\tCtrl-T");
++  m_pConvertMenu->Append (PJMENU_CONVERT_RECTANGULAR, _T("&Rectangular Image"));
++  m_pConvertMenu->Append (PJMENU_CONVERT_POLAR, _T("&Polar Image...\tCtrl-L"));
++  m_pConvertMenu->Append (PJMENU_CONVERT_FFT_POLAR, _T("FF&T->Polar Image...\tCtrl-T"));
+   m_pConvertMenu->AppendSeparator();
+-  m_pConvertMenu->Append (PJMENU_CONVERT_PARALLEL, "&Interpolate to Parallel");
++  m_pConvertMenu->Append (PJMENU_CONVERT_PARALLEL, _T("&Interpolate to Parallel"));
+   //  wxMenu* filter_menu = new wxMenu;
+-  //  filter_menu->Append (PJMENU_ARTIFACT_REDUCTION, "&Artifact Reduction");
++  //  filter_menu->Append (PJMENU_ARTIFACT_REDUCTION, _T("&Artifact Reduction"));
+   wxMenu* analyze_menu = new wxMenu;
+-  analyze_menu->Append (PJMENU_PLOT_HISTOGRAM, "&Plot Histogram");
+-  analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, "Plot T-T&heta Sampling...\tCtrl-H");
++  analyze_menu->Append (PJMENU_PLOT_HISTOGRAM, _T("&Plot Histogram"));
++  analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, _T("Plot T-T&heta Sampling...\tCtrl-H"));
+   m_pReconstructMenu = new wxMenu;
+-  m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection");
+-  m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP_REBIN, "Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B", "Reconstruct image using filtered backprojection");
+-  m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Inverse Fourier...\tCtrl-E", "Direct inverse Fourier");
++  m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP, _T("&Filtered Backprojection...\tCtrl-R"), _T("Reconstruct image using filtered backprojection"));
++  m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP_REBIN, _T("Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B"), _T("Reconstruct image using filtered backprojection"));
++  m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FOURIER, _T("&Inverse Fourier...\tCtrl-E"), _T("Direct inverse Fourier"));
+   wxMenu *help_menu = new wxMenu;
+-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
+-  help_menu->Append (IDH_QUICKSTART, "&Quick Start");
+-  help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips"));
++  help_menu->Append (IDH_QUICKSTART, _T("&Quick Start"));
++  help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar *menu_bar = new wxMenuBar;
+-  menu_bar->Append (m_pFileMenu, "&File");
+-  menu_bar->Append (m_pConvertMenu, "&Convert");
+-  //  menu_bar->Append (filter_menu, "Fi&lter");
+-  menu_bar->Append (analyze_menu, "&Analyze");
+-  menu_bar->Append (m_pReconstructMenu, "&Reconstruct");
+-  menu_bar->Append (help_menu, "&Help");
++  menu_bar->Append (m_pFileMenu, _T("&File"));
++  menu_bar->Append (m_pConvertMenu, _T("&Convert"));
++  //  menu_bar->Append (filter_menu, _T("Fi&lter"));
++  menu_bar->Append (analyze_menu, _T("&Analyze"));
++  menu_bar->Append (m_pReconstructMenu, _T("&Reconstruct"));
++  menu_bar->Append (help_menu, _T("&Help"));
+   subframe->SetMenuBar(menu_bar);
+   subframe->Centre(wxBOTH);
+@@ -3122,7 +3135,7 @@
+   m_pCanvas = CreateCanvas (m_pFrame);
+   m_pFrame->SetClientSize (m_pCanvas->GetBestSize());
+   m_pCanvas->SetClientSize (m_pCanvas->GetBestSize());
+-  m_pFrame->SetTitle ("ProjectionFileView");
++  m_pFrame->SetTitle (_T("ProjectionFileView"));
+   m_pFrame->Show(true);
+   Activate(true);
+@@ -3215,7 +3228,7 @@
+ bool
+ ProjectionFileView::OnClose (bool deleteWindow)
+ {
+-  //GetDocumentManager()->ActivateView (this, false, true);
++  //GetDocumentManager()->ActivateView (this, false);
+   if (! GetDocument() || ! GetDocument()->Close())
+     return false;
+@@ -3290,7 +3303,7 @@
+     delete m_pEZPlot;
+   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+-  GetDocumentManager()->ActivateView(this, FALSE, TRUE);
++  GetDocumentManager()->ActivateView(this, FALSE);
+ }
+ void
+@@ -3300,8 +3313,9 @@
+   std::ostringstream os;
+   os << "Columns: " << rPlot.getNumColumns() << ", Records: " << rPlot.getNumRecords() << "\n";
+   rPlot.printHeadersBrief (os);
+-  *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<<\n";
+-  wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Plot File Properties", wxOK | wxICON_INFORMATION);
++  *theApp->getLog() << _T(">>>>\n") << wxConvUTF8.cMB2WX(os.str().c_str()) << _T("<<<<<\n");
++  wxMessageDialog dialogMsg (getFrameForChild(), wxConvUTF8.cMB2WX(os.str().c_str()), _T("Plot File Properties"), 
++                             wxOK | wxICON_INFORMATION);
+   dialogMsg.ShowModal();
+   GetDocument()->Activate();
+ }
+@@ -3338,7 +3352,7 @@
+   if (! m_bMinSpecified || ! m_bMaxSpecified) {
+     if (! rPlotFile.getMinMax (1, min, max)) {
+-      *theApp->getLog() << "Error: unable to find Min/Max\n";
++      *theApp->getLog() << _T("Error: unable to find Min/Max\n");
+       return;
+     }
+   }
+@@ -3348,7 +3362,7 @@
+   if (m_bMaxSpecified)
+     max = m_dMaxPixel;
+-  DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Y-axis Minimum & Maximum", min, max);
++  DialogGetMinMax dialogMinMax (getFrameForChild(), _T("Set Y-axis Minimum & Maximum"), min, max);
+   int retVal = dialogMinMax.ShowModal();
+   if (retVal == wxID_OK) {
+     m_bMinSpecified = true;
+@@ -3379,7 +3393,7 @@
+   pCanvas = new PlotFileCanvas (this, parent, wxPoint(-1,-1), wxSize(-1,-1), 0);
+   pCanvas->SetBackgroundColour(*wxWHITE);
+-  pCanvas->Clear();
++  pCanvas->ClearBackground();
+   return pCanvas;
+ }
+@@ -3392,52 +3406,52 @@
+ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
+ {
+ #ifdef CTSIM_MDI
+-  wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("Plot Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #else
+-  wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
++  wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, _T("Plot Frame"), wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
+ #endif
+   theApp->setIconForFrame (subframe);
+   m_pFileMenu = new wxMenu;
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+-  m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
+-  m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
+-  m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
++  m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S"));
++  m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As..."));
++  m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(PLOTMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
++  m_pFileMenu->Append(PLOTMENU_FILE_PROPERTIES, _T("P&roperties\tCtrl-I"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(wxID_PRINT, "&Print...");
+-  m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+-  m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
++  m_pFileMenu->Append(wxID_PRINT, _T("&Print..."));
++  m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
++  m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
++  m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
+   wxMenu *view_menu = new wxMenu;
+-  view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...\tCtrl-E");
+-  view_menu->Append(PLOTMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A");
+-  view_menu->Append(PLOTMENU_VIEW_SCALE_FULL, "Display &Full Scale\tCtrl-U");
++  view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, _T("Display Scale &Set...\tCtrl-E"));
++  view_menu->Append(PLOTMENU_VIEW_SCALE_AUTO, _T("Display Scale &Auto...\tCtrl-A"));
++  view_menu->Append(PLOTMENU_VIEW_SCALE_FULL, _T("Display &Full Scale\tCtrl-U"));
+   wxMenu *help_menu = new wxMenu;
+-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
+-  help_menu->Append (IDH_QUICKSTART, "&Quick Start");
+-  help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips"));
++  help_menu->Append (IDH_QUICKSTART, _T("&Quick Start"));
++  help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar *menu_bar = new wxMenuBar;
+-  menu_bar->Append(m_pFileMenu, "&File");
+-  menu_bar->Append(view_menu, "&View");
+-  menu_bar->Append(help_menu, "&Help");
++  menu_bar->Append(m_pFileMenu, _T("&File"));
++  menu_bar->Append(view_menu, _T("&View"));
++  menu_bar->Append(help_menu, _T("&Help"));
+   subframe->SetMenuBar(menu_bar);
+   subframe->Centre(wxBOTH);
+@@ -3466,7 +3480,7 @@
+   m_pCanvas = CreateCanvas (m_pFrame);
+   m_pFrame->SetClientSize (m_pCanvas->GetBestSize());
+   m_pCanvas->SetClientSize (m_pCanvas->GetBestSize());
+-  m_pFrame->SetTitle ("Plot File");
++  m_pFrame->SetTitle (_T("Plot File"));
+   m_pFrame->Show(true);
+   Activate(true);
+@@ -3593,7 +3607,7 @@
+ TextFileView::~TextFileView()
+ {
+   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+-  GetDocumentManager()->ActivateView(this, FALSE, TRUE);;
++  GetDocumentManager()->ActivateView(this, FALSE);;
+ }
+ bool TextFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
+@@ -3603,9 +3617,9 @@
+   int width, height;
+   m_pFrame->GetClientSize(&width, &height);
+-  m_pFrame->SetTitle("TextFile");
++  m_pFrame->SetTitle(_T("TextFile"));
+   m_pCanvas = new TextFileCanvas (this, m_pFrame, wxPoint(-1,-1), wxSize(width, height), wxTE_MULTILINE | wxTE_READONLY);
+-  m_pFrame->SetTitle("Log");
++  m_pFrame->SetTitle(_T("Log"));
+   m_pFrame->Show (true);
+   Activate (true);
+@@ -3629,7 +3643,7 @@
+     return false;
+   Activate(false);
+-  //GetDocumentManager()->ActivateView (this, false, true);
++  //GetDocumentManager()->ActivateView (this, false);
+   if (! GetDocument() || ! GetDocument()->Close())
+     return false;
+@@ -3652,43 +3666,43 @@
+ TextFileView::CreateChildFrame (wxDocument *doc, wxView *view)
+ {
+ #if CTSIM_MDI
+-  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE, "Log");
++  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, _T("TextFile Frame"), wxPoint(-1, -1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE, _T("Log"));
+ #else
+-  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE, "Log");
++  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, _T("TextFile Frame"), wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE, _T("Log"));
+ #endif
+   theApp->setIconForFrame (subframe);
+   m_pFileMenu = new wxMenu;
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+-  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+-  m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+-  m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
+-  m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
+-  //  m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, _T("Cr&eate Phantom...\tCtrl-P"));
++  m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, _T("Create &Filter...\tCtrl-F"));
++  m_pFileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl-O"));
++  m_pFileMenu->Append(wxID_SAVE, _T("&Save\tCtrl-S"));
++  m_pFileMenu->Append(wxID_SAVEAS, _T("Save &As..."));
++  //  m_pFileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl-W"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(wxID_PRINT, "&Print...");
+-  m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+-  m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
++  m_pFileMenu->Append(wxID_PRINT, _T("&Print..."));
++  m_pFileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
++  m_pFileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
++  m_pFileMenu->Append(MAINMENU_IMPORT, _T("&Import...\tCtrl-M"));
+   m_pFileMenu->AppendSeparator();
+-  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
+-  m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
++  m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, _T("Prefere&nces..."));
++  m_pFileMenu->Append(MAINMENU_FILE_EXIT, _T("E&xit"));
+   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
+   wxMenu *help_menu = new wxMenu;
+-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+-  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
+-  help_menu->Append (IDH_QUICKSTART, "&Quick Start");
+-  help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
++  help_menu->Append(MAINMENU_HELP_CONTENTS, _T("&Contents\tF1"));
++  help_menu->Append (MAINMENU_HELP_TIPS, _T("&Tips"));
++  help_menu->Append (IDH_QUICKSTART, _T("&Quick Start"));
++  help_menu->Append(MAINMENU_HELP_ABOUT, _T("&About"));
+   wxMenuBar *menu_bar = new wxMenuBar;
+-  menu_bar->Append(m_pFileMenu, "&File");
+-  menu_bar->Append(help_menu, "&Help");
++  menu_bar->Append(m_pFileMenu, _T("&File"));
++  menu_bar->Append(help_menu, _T("&Help"));
+   subframe->SetMenuBar(menu_bar);
+   subframe->Centre(wxBOTH);
+@@ -3699,7 +3713,7 @@
+ // Define a constructor for my text subwindow
+ TextFileCanvas::TextFileCanvas (TextFileView* v, wxFrame* frame, const wxPoint& pos, const wxSize& size, long style)
+-: wxTextCtrl (frame, -1, "", pos, size, style), m_pView(v)
++  : wxTextCtrl (frame, -1, _T(""), pos, size, style), m_pView(v)
+ {
+ }
+diff -wur --exclude=debian --exclude='configure*' --exclude=aclocal.m4 --exclude='config.*' --exclude=.git --exclude='Makefile*' ctsim/src/views.h ctsim-wx2.8/src/views.h
+--- ctsim/src/views.h  2007-09-04 00:40:08.000000000 -0600
++++ ctsim-wx2.8/src/views.h    2008-07-29 20:22:04.805299915 -0600
+@@ -67,7 +67,7 @@
+   int m_iDefaultExportFormatID;
+-  wxWindow* getFrameForChild()
++  wxFrame* getFrameForChild()
+ #if CTSIM_MDI
+   { return theApp->getMainFrame(); }
+ #else