Index: src/sas/sasgui/perspectives/file_converter/__init__.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/__init__.py	(revision 77d92cd296d0af12557c509f0c48df88ef5f59e9)
+++ src/sas/sasgui/perspectives/file_converter/__init__.py	(revision 77d92cd296d0af12557c509f0c48df88ef5f59e9)
@@ -0,0 +1,2 @@
+PLUGIN_ID = "File-Converter Plug-In 1.0"
+from file_converter import *
Index: src/sas/sasgui/perspectives/file_converter/converter_panel.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/converter_panel.py	(revision 77d92cd296d0af12557c509f0c48df88ef5f59e9)
+++ src/sas/sasgui/perspectives/file_converter/converter_panel.py	(revision 77d92cd296d0af12557c509f0c48df88ef5f59e9)
@@ -0,0 +1,77 @@
+"""
+This module provides a GUI for the file converter
+"""
+
+import wx
+import sys
+from wx.lib.scrolledpanel import ScrolledPanel
+from sas.sasgui.guiframe.panel_base import PanelBase
+from sas.sasgui.perspectives.calculator import calculator_widgets as widget
+
+# Panel size
+if sys.platform.count("win32") > 0:
+    PANEL_TOP = 0
+    _STATICBOX_WIDTH = 410
+    _BOX_WIDTH = 200
+    PANEL_SIZE = 440
+    FONT_VARIANT = 0
+else:
+    PANEL_TOP = 60
+    _STATICBOX_WIDTH = 430
+    _BOX_WIDTH = 200
+    PANEL_SIZE = 460
+    FONT_VARIANT = 1
+
+class ConverterPanel(ScrolledPanel, PanelBase):
+
+    def __init__(self, parent, base=None, *args, **kwargs):
+        ScrolledPanel.__init__(self, parent, *args, **kwargs)
+        PanelBase.__init__(self)
+
+        self.SetWindowVariant(variant=FONT_VARIANT)
+
+        self.base = base
+        self.parent = parent
+
+        self._do_layout
+        self.SetAutoLayout(True)
+        self.Layout()
+
+    def _do_layout(self):
+        # TODO: Get this working
+        vbox = wx.BoxSizer(wx.VERTICAL)
+
+        inputsection = wx.StaticBox(self, -1, "Input File")
+        inputsection_sizer = wx.StaticBoxSizer(inputsection, wx.VERTICAL)
+
+        input_grid = wx.GridBagSizer(5, 5)
+
+        input_box = wx.TextCtrl(self, -1, size=(_BOX_WIDTH, -1))
+        input_grid.Add(input_box, (0,0), (1,1), wx.LEFT, 5)
+
+        inputsection_sizer.Add(input_grid)
+
+        vbox.Add(input_section, (0,0), (0,1), wx.TOP, 15)
+
+        vbox.Fit(self)
+        self.SetSizer(vbox)
+
+class ConverterWindow(widget.CHILD_FRAME):
+
+    def __init__(self, parent=None, title='File Converter', base=None,
+        manager=None, size=(PANEL_SIZE * 1.05, PANEL_SIZE / 1.55),
+        *args, **kwargs):
+        kwargs['title'] = title
+        kwargs['size'] = size
+        widget.CHILD_FRAME.__init__(self, parent, *args, **kwargs)
+
+        self.manager = manager
+        self.panel = ConverterPanel(self, base=None)
+        self.Bind(wx.EVT_CLOSE, self.on_close)
+        self.SetPosition((wx.LEFT, PANEL_TOP))
+        self.Show(True)
+
+    def on_close(self, event):
+        if self.manager is not None:
+            self.manager.converter_frame = None
+        self.Destroy()
Index: src/sas/sasgui/perspectives/file_converter/file_converter.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/file_converter.py	(revision 77d92cd296d0af12557c509f0c48df88ef5f59e9)
+++ src/sas/sasgui/perspectives/file_converter/file_converter.py	(revision 77d92cd296d0af12557c509f0c48df88ef5f59e9)
@@ -0,0 +1,44 @@
+"""
+File Converter Plugin
+"""
+
+import logging
+from sas.sasgui.guiframe.plugin_base import PluginBase
+from sas.sasgui.perspectives.file_converter.converter_panel import ConverterWindow
+
+class Plugin(PluginBase):
+
+    def __init__(self):
+        PluginBase.__init__(self, name="File Converter")
+        logging.info("File Converter plug-in started")
+        self._sub_menu = "Tool"
+        self.converter_frame = None
+
+    def get_tools(self):
+        """
+        Returns a set of menu entries
+        """
+        help_txt = "Convert single column ASCII data to CanSAS format"
+        return [("File Converter", help_txt, self.on_file_converter)]
+
+    def on_file_converter(self, event):
+        if self.converter_frame is None:
+            frame = ConverterWindow(parent=self.parent, base=self.parent,
+                manager=self)
+            self.put_icon(frame)
+            self.converter_frame = frame
+        else:
+            self.converter_frame.Show(False)
+        self.converter_frame.Show(True)
+
+    def put_icon(self, frame):
+        """
+        Put icon in the frame title bar
+        """
+        if hasattr(frame, "IsIconized"):
+            if not frame.IsIconized():
+                try:
+                    icon = self.parent.GetIcon()
+                    frame.SetIcon(icon)
+                except:
+                    pass
